一套基于模板匹配的语音识别技术 提取语音的特征,并建立模板库 可以将语音识别技术应用于机器人

  1. 视图类,废话少说,看看带注释的源码
  2. #include "stdafx.h"
  3. #include "robot.h"
  4. #include"Label.h"
  5. #include "robotDoc.h"
  6. #include "robotView.h"
  7. #ifdef _DEBUG
  8. #define new DEBUG_NEW
  9. #undef THIS_FILE
  10. static char THIS_FILE[] = __FILE__;
  11. #endif
  12. /////////////////////////////////////////////////////////////////////////////
  13. // CRobotView
  14. IMPLEMENT_DYNCREATE(CRobotView, CFormView)
  15. BEGIN_MESSAGE_MAP(CRobotView, CFormView)
  16. //{{AFX_MSG_MAP(CRobotView)
  17. ON_WM_CTLCOLOR()
  18. ON_WM_TIMER()
  19. //}}AFX_MSG_MAP
  20. ON_MESSAGE(WM_COMMNOTIFY, OnCommNotify)
  21. END_MESSAGE_MAP()
  22. /////////////////////////////////////////////////////////////////////////////
  23. // CRobotView construction/destruction
  24. CRobotView::CRobotView()
  25. : CFormView(CRobotView::IDD)
  26. {
  27. //{{AFX_DATA_INIT(CRobotView)
  28. //}}AFX_DATA_INIT
  29. // TODO: add construction code here
  30. m_ncomand1=10;
  31. m_bflag=0;
  32. m_nsudu=1;
  33. m_ngzq=0;
  34. m_nguanjie;
  35. m_nfangxiang;
  36. m_nmsg[0]=0;
  37. m_njishu=0;
  38. m_nmsg[1]=0;
  39. m_nmsg[2]=0;
  40. m_nmsg[3]=0;
  41. m_nmsg[4]=0;
  42. m_nsum=0;
  43. m_ndelay=0;
  44. nLength=0;
  45. m_recflag=1;
  46. m_failflag=1;
  47. m_brush.CreateSolidBrush(RGB(40,98,122)); // 生成一绿色刷子
  48. }
  49. CRobotView::~CRobotView()
  50. {
  51. }
  52. void CRobotView::DoDataExchange(CDataExchange* pDX)
  53. {
  54. CFormView::DoDataExchange(pDX);
  55. //{{AFX_DATA_MAP(CRobotView)
  56. //DDX_Control(pDX, IDC_EDIT1, m_edit1);
  57. DDX_Control(pDX, IDC_STATIC_LINK, m_link);
  58. DDX_Control(pDX, IDC_STATIC_1, m_ml);
  59. DDX_Control(pDX, IDC_STATIC_4, m_workpart);
  60. DDX_Control(pDX, IDC_STATIC_COMMAND, m_command);
  61. DDX_Control(pDX, IDC_STATIC_STATUS, m_static);
  62. DDX_Control(pDX, IDC_STATIC_BUCHANG, m_buchangshu);
  63. DDX_Control(pDX, IDC_STATIC_5, m_buchang);
  64. DDX_Control(pDX, IDC_STATIC_3, m_sudu);
  65. DDX_Control(pDX, IDC_STATIC_2, m_zhuangtai);
  66. //}}AFX_DATA_MAP
  67. }
  68. BOOL CRobotView::PreCreateWindow(CREATESTRUCT& cs)
  69. {
  70. // TODO: Modify the Window class or styles here by modifying
  71. //  the CREATESTRUCT cs
  72. return CFormView::PreCreateWindow(cs);
  73. }
  74. /////////////////////////////////////////////////////////////////////////////
  75. // CRobotView diagnostics
  76. #ifdef _DEBUG
  77. void CRobotView::AssertValid() const
  78. {
  79. CFormView::AssertValid();
  80. }
  81. void CRobotView::Dump(CDumpContext& dc) const
  82. {
  83. CFormView::Dump(dc);
  84. }
  85. CRobotDoc* CRobotView::GetDocument() // non-debug version is inline
  86. {
  87. ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CRobotDoc)));
  88. return (CRobotDoc*)m_pDocument;
  89. }
  90. #endif //_DEBUG
  91. /////////////////////////////////////////////////////////////////////////////
  92. // CRobotView message handlers
  93. void CRobotView::OnDraw(CDC* pDC)
  94. {
  95. // TODO: Add your specialized code here and/or call the base class
  96. SuduDisplay(m_nsudu);
  97. GzqDisplay(m_ngzq);
  98. }
  99. void CRobotView::OnInitialUpdate()
  100. {
  101. CFormView::OnInitialUpdate();
  102. // TODO: Add your specialized code here and/or call the base class
  103. m_link.SetLink(TRUE)
  104. .SetTextColor(RGB(0,0,255))
  105. .SetFontUnderline(TRUE)
  106. .SetLinkCursor(AfxGetApp()->LoadCursor(IDC_ICON1));
  107. m_command.SetFontSize(24)
  108. .SetFontName("Terminal")
  109. .SetTextColor(RGB(240,240,40));
  110. m_static.SetFontSize(24)
  111. .SetTextColor(RGB(240,240,40));
  112. m_workpart.SetFontSize(24)
  113. .SetFontBold(TRUE)
  114. .SetTextColor(RGB(0,240,0));
  115. m_buchangshu.SetFontSize(24)
  116. .SetTextColor(RGB(240,240,40));
  117. m_buchang.SetFontSize(24)
  118. .SetFontBold(TRUE)
  119. .SetTextColor(RGB(0,240,0));
  120. m_sudu.SetFontSize(24)
  121. .SetFontBold(TRUE)
  122. .SetTextColor(RGB(0,240,0));
  123. m_zhuangtai.SetFontSize(24)
  124. .SetFontBold(TRUE)
  125. .SetTextColor(RGB(0,240,0));
  126. m_ml.SetFontSize(24)
  127. .SetLinkCursor(AfxGetApp()->LoadCursor(IDC_ICON1))
  128. .SetFontBold(TRUE)
  129. .SetTextColor(RGB(0,240,0));
  130. GetParentFrame()->RecalcLayout();
  131. ResizeParentToFit();
  132. }
  133. LRESULT CRobotView::WindowProc(UINT message, WPARAM wParam, LPARAM lParam)
  134. {
  135. // TODO: Add your specialized code here and/or call the base class
  136. if(message == (WM_USER + 1002))
  137. ProcessMessage(wParam, lParam);
  138. else if(message==(WM_USER+1003))
  139. ProcessMyMessage();
  140. return CFormView::WindowProc(message, wParam, lParam);
  141. }
  142. void CRobotView::ProcessMessage(WPARAM wParam, LPARAM lParam)
  143. {
  144. CRobotDoc* pDoc=GetDocument();
  145. char* l[57] = {"零","一","二",///012
  146. "三","四","五","六","七","八","九","执行","各关节归零","大臂正转",///12
  147. "大臂反转","小臂正转","小臂反转","手腕正转","手腕反转","手爪张开","手爪闭合","上升","下降","大臂运行",///13--22
  148. "大臂负运行","小臂运行","小臂负运行","手腕运行","手腕负运行","手爪运行","手爪负运行","升降运行",////23---30
  149. "升降负运行","大臂归零","小臂归零","手腕归零","手爪归零","升降归零","速度加","原点记忆",///31---38
  150. "系统复位","示教盒","","","回原点","速度减","区号加","区号减","单步再现","周期再现",///39---48
  151. "连续再现","返回","继续","数据记忆","读取数据","设置串口","打开串口","关闭串口"};
  152. CString    strcomand;
  153. CString    strstatus;
  154. m_recflag=1;
  155. if(!pDoc->m_bConnected)
  156. {
  157. KillTimer(1);
  158. MessageBox("请先打开串口");
  159. return;
  160. }
  161. if(wParam==100)
  162. {
  163. KillTimer(1);
  164. if(!m_failflag)
  165. {
  166. CWnd* pWnd=GetDlgItem(IDC_STATIC_5);
  167. pWnd->SetWindowText("");
  168. pWnd=GetDlgItem(IDC_STATIC_BUCHANG);
  169. pWnd->SetWindowText("");
  170. pWnd=GetDlgItem(IDC_STATIC_COMMAND);
  171. pWnd->SetWindowText("请输入新的命令");
  172. pWnd=GetDlgItem(IDC_STATIC_STATUS);
  173. pWnd->SetWindowText("执行完毕");
  174. m_ncomand1=0;
  175. }
  176. else
  177. MessageBox("请检查连线是否正确或下位机是否打开","通信失败",MB_ICONWARNING);
  178. }
  179. else if(wParam>=11&&wParam<=56)
  180. {
  181. m_bflag=0;
  182. m_ncomand1=wParam;
  183. strcomand=l[m_ncomand1];
  184. CWnd* pWnd=GetDlgItem(IDC_STATIC_COMMAND);
  185. pWnd->SetWindowText(strcomand);
  186. pWnd=GetDlgItem(IDC_STATIC_STATUS);
  187. pWnd->SetWindowText("");
  188. pWnd=GetDlgItem(IDC_STATIC_5);
  189. pWnd->SetWindowText("");
  190. pWnd=GetDlgItem(IDC_STATIC_BUCHANG);
  191. pWnd->SetWindowText("");
  192. m_nsum=0;
  193. m_njishu=0;
  194. }
  195. else if(wParam>=0&&wParam<=9)
  196. {
  197. if(m_ncomand1>=12&&m_ncomand1<=21)
  198. {
  199. m_bflag=1;
  200. m_nmsg[m_njishu]=wParam;
  201. //pWnd=GetDlgItem(IDC_STATIC_COMMAND);
  202. //pWnd->SetWindowText(strcomand);
  203. CWnd* pWnd=GetDlgItem(IDC_STATIC_5);
  204. pWnd->SetWindowText("步长:");
  205. ++m_njishu;
  206. if(m_njishu==1)
  207. {
  208. CString m_stemp;
  209. m_nsum=m_nmsg[0];
  210. m_stemp.Format("%d",m_nsum);
  211. pWnd=GetDlgItem(IDC_STATIC_BUCHANG);
  212. pWnd->SetWindowText(m_stemp);
  213. }
  214. if(m_njishu==2)
  215. {
  216. CString m_stemp;
  217. m_nsum=m_nmsg[0]*10+m_nmsg[1];
  218. m_stemp.Format("%d",m_nsum);
  219. pWnd=GetDlgItem(IDC_STATIC_BUCHANG);
  220. pWnd->SetWindowText(m_stemp);
  221. }
  222. if(m_njishu==3)
  223. {
  224. CString m_stemp;
  225. m_nsum=m_nmsg[0]*100+m_nmsg[1]*10+m_nmsg[2];
  226. //m_nmsg[0]=0;
  227. //m_nmsg[1]=0
  228. //  m_nmsg[2]=0;
  229. //  m_njishu=0;
  230. m_stemp.Format("%d",m_nsum);
  231. pWnd=GetDlgItem(IDC_STATIC_BUCHANG);
  232. pWnd->SetWindowText(m_stemp);
  233. }
  234. if(m_njishu==4)
  235. {
  236. CString m_stemp;
  237. m_nsum=m_nmsg[0]*1000+m_nmsg[1]*100+m_nmsg[2]*10+m_nmsg[3];
  238. m_stemp.Format("%d",m_nsum);
  239. pWnd=GetDlgItem(IDC_STATIC_BUCHANG);
  240. pWnd->SetWindowText(m_stemp);
  241. }
  242. if(m_njishu>4)
  243. {
  244. m_njishu=1;
  245. m_nmsg[0]=m_nmsg[4];
  246. CString m_stemp;
  247. m_nsum=m_nmsg[0];
  248. m_stemp.Format("%d",m_nsum);
  249. pWnd=GetDlgItem(IDC_STATIC_BUCHANG);
  250. pWnd->SetWindowText(m_stemp);
  251. m_nmsg[1]=0;
  252. m_nmsg[2]=0;
  253. m_nmsg[3]=0;
  254. }
  255. }
  256. else
  257. ;   //MessageBox("清先输入运动步数命令");
  258. }
  259. else if(wParam=10)
  260. {    SetTimer(1,500,NULL);
  261. if(m_ncomand1>=11&&m_ncomand1<=56)
  262. {
  263. if(!m_bflag)
  264. {
  265. strstatus="正在执行命令,请稍后.....";
  266. CWnd* pWnd=GetDlgItem(IDC_STATIC_STATUS);
  267. pWnd->SetWindowText(strstatus);
  268. Execute(m_ncomand1);
  269. }
  270. else //if(m_ncomand1>=12&&m_ncomand1<=21)
  271. {
  272. unsigned char m_uhi,m_ulo;
  273. m_nmsg[0]=0;
  274. m_nmsg[1]=0;
  275. m_nmsg[2]=0;
  276. m_nmsg[3]=0;
  277. m_njishu=0;
  278. /// CWnd* pWnd=GetDlgItem(IDC_STATIC_STATUS);
  279. /// pWnd->SetWindowText("正在执行命令,请稍后.....");
  280. switch(m_ncomand1)
  281. {
  282. case(12):
  283. m_nguanjie=01;
  284. m_nfangxiang=00;
  285. m_uhi=(unsigned char)(m_nsum/256);
  286. m_ulo=(unsigned char)(m_nsum-m_uhi*256);
  287. m_ndelay=(m_nsum+500)/m_nsudu;
  288. Execute_1(m_nguanjie,m_nfangxiang,m_uhi,m_ulo,m_ndelay);
  289. break;
  290. case(13):
  291. m_nguanjie=0x01;
  292. m_nfangxiang=0xff;
  293. m_uhi=(unsigned char)(m_nsum/256);
  294. m_ulo=(unsigned char)(m_nsum-m_uhi*256);
  295. m_ndelay=(m_nsum+500)/m_nsudu;
  296. Execute_1(m_nguanjie,m_nfangxiang,m_uhi,m_ulo,m_ndelay);
  297. break;
  298. case(14):
  299. m_nguanjie=0x02;
  300. m_nfangxiang=0x00;
  301. m_uhi=(unsigned char)(m_nsum/256);
  302. m_ulo=(unsigned char)(m_nsum-m_uhi*256);
  303. m_ndelay=(m_nsum)/(m_nsudu*3);
  304. Execute_1(m_nguanjie,m_nfangxiang,m_uhi,m_ulo,m_ndelay);
  305. break;
  306. case(15):
  307. m_nguanjie=0x02;
  308. m_nfangxiang=0xff;
  309. m_uhi=(unsigned char)(m_nsum/256);
  310. m_ulo=(unsigned char)(m_nsum-m_uhi*256);
  311. m_ndelay=(m_nsum)/(m_nsudu*3);
  312. Execute_1(m_nguanjie,m_nfangxiang,m_uhi,m_ulo,m_ndelay);
  313. break;
  314. case(16):
  315. m_nguanjie=0x04;
  316. m_nfangxiang=0x00;
  317. m_uhi=(unsigned char)(m_nsum/256);
  318. m_ulo=(unsigned char)(m_nsum-m_uhi*256);
  319. m_ndelay=(m_nsum+500)/m_nsudu;
  320. Execute_1(m_nguanjie,m_nfangxiang,m_uhi,m_ulo,m_ndelay);
  321. break;
  322. case(17):
  323. m_nguanjie=0x04;
  324. m_nfangxiang=0xff;
  325. m_uhi=(unsigned char)(m_nsum/256);
  326. m_ulo=(unsigned char)(m_nsum-m_uhi*256);
  327. m_ndelay=(m_nsum+500)/m_nsudu;
  328. Execute_1(m_nguanjie,m_nfangxiang,m_uhi,m_ulo,m_ndelay);
  329. break;
  330. case(18):
  331. m_nguanjie=0x05;
  332. m_nfangxiang=0x00;
  333. m_uhi=(unsigned char)(m_nsum/256);
  334. m_ulo=(unsigned char)(m_nsum-m_uhi*256);
  335. m_ndelay=(m_nsum+500)/m_nsudu;
  336. Execute_1(m_nguanjie,m_nfangxiang,m_uhi,m_ulo,m_ndelay);
  337. break;
  338. case(19):
  339. m_nguanjie=0x05;
  340. m_nfangxiang=0xff;
  341. m_uhi=(unsigned char)(m_nsum/256);
  342. m_ulo=(unsigned char)(m_nsum-m_uhi*256);
  343. m_ndelay=(m_nsum+500)/m_nsudu;
  344. Execute_1(m_nguanjie,m_nfangxiang,m_uhi,m_ulo,m_ndelay);
  345. break;
  346. case(20):
  347. m_nguanjie=0x03;
  348. m_nfangxiang=0x00;
  349. m_uhi=(unsigned char)(m_nsum/256);
  350. m_ulo=(unsigned char)(m_nsum-m_uhi*256);
  351. m_ndelay=(m_nsum+500)/(m_nsudu*2);
  352. Execute_1(m_nguanjie,m_nfangxiang,m_uhi,m_ulo,m_ndelay);
  353. break;
  354. case(21):
  355. m_nguanjie=0x03;
  356. m_nfangxiang=0xff;
  357. m_uhi=(unsigned char)(m_nsum/256);
  358. m_ulo=(unsigned char)(m_nsum-m_uhi*256);
  359. m_ndelay=(m_nsum+500)/(m_nsudu*2);
  360. Execute_1(m_nguanjie,m_nfangxiang,m_uhi,m_ulo,m_ndelay);
  361. break;
  362. }
  363. }
  364. m_failflag=1;}
  365. else
  366. MessageBox("清先输入命令");
  367. }
  368. else
  369. MessageBox("不能识别,请重新输入命令");
  370. }
  371. void CRobotView::ProcessMyMessage()
  372. {
  373. CDC *PDc=GetDC();
  374. m_failflag=0;
  375. switch(m_ncomand1)
  376. {
  377. case(37):
  378. {
  379. m_nsudu++;
  380. if(m_nsudu==6)
  381. m_nsudu=1;
  382. OnDraw(PDc);
  383. }
  384. break;
  385. case(44):
  386. {
  387. m_nsudu--;
  388. if(m_nsudu==0)
  389. m_nsudu=5;
  390. OnDraw(PDc);
  391. }
  392. break;
  393. case(45):
  394. {
  395. m_ngzq++;
  396. if(m_ngzq==8)
  397. m_ngzq=0;
  398. OnDraw(PDc);
  399. }
  400. break;
  401. case(46):
  402. {
  403. m_ngzq--;
  404. if(m_ngzq==-1)
  405. m_ngzq=7;
  406. OnDraw(PDc);
  407. }
  408. break;
  409. }
  410. CWnd* pWnd=GetDlgItem(IDC_STATIC_COMMAND);
  411. pWnd->SetWindowText("请输入新的命令");
  412. pWnd=GetDlgItem(IDC_STATIC_STATUS);
  413. pWnd->SetWindowText("执行完毕");
  414. m_ncomand1=0;
  415. //}
  416. //else
  417. //  MessageBox("请检查连线是否正确或下位机是否打开","通信失败",MB_ICONWARNING);
  418. }
  419. void CRobotView::SuduDisplay(int n)
  420. {
  421. CWnd* pWnd=GetDlgItem(IDC_STATIC_SUDU);
  422. CDC* pControlDC=pWnd->GetDC();
  423. pWnd->Invalidate();
  424. pWnd->UpdateWindow();
  425. pControlDC->SelectStockObject(BLACK_BRUSH);
  426. CBitmap mBit;
  427. CDC MemDC;
  428. MemDC.CreateCompatibleDC(NULL);
  429. switch(n)
  430. {
  431. case 0:
  432. mBit.LoadBitmap(IDB_BMP10);
  433. break;
  434. case 1:
  435. mBit.LoadBitmap(IDB_BMP11);
  436. break;
  437. case 2:
  438. mBit.LoadBitmap(IDB_BMP12);
  439. break;
  440. case 3:
  441. mBit.LoadBitmap(IDB_BMP13);
  442. break;
  443. case 4:
  444. mBit.LoadBitmap(IDB_BMP14);
  445. break;
  446. case 5:
  447. mBit.LoadBitmap(IDB_BMP15);
  448. break;
  449. default:
  450. //mBit.LoadBitmap(IDB_BMP0);
  451. MessageBox("error");
  452. }
  453. CBitmap *pOldBit=MemDC.SelectObject(&mBit);
  454. pControlDC->BitBlt(0,0,900,700,&MemDC,0,0,SRCCOPY);
  455. MemDC.SelectObject(pOldBit);
  456. }
  457. void CRobotView::GzqDisplay(int n)
  458. {
  459. CWnd* pWnd=GetDlgItem(IDC_STATIC_GONGZUOQU);
  460. CDC* pControlDC=pWnd->GetDC();
  461. pWnd->Invalidate();
  462. pWnd->UpdateWindow();
  463. pControlDC->SelectStockObject(BLACK_BRUSH);
  464. CBitmap mBit;
  465. CDC MemDC;
  466. MemDC.CreateCompatibleDC(NULL);
  467. switch(n)
  468. {
  469. case 0:
  470. mBit.LoadBitmap(IDB_BMP10);
  471. break;
  472. case 1:
  473. mBit.LoadBitmap(IDB_BMP11);
  474. break;
  475. case 2:
  476. mBit.LoadBitmap(IDB_BMP12);
  477. break;
  478. case 3:
  479. mBit.LoadBitmap(IDB_BMP13);
  480. break;
  481. case 4:
  482. mBit.LoadBitmap(IDB_BMP14);
  483. break;
  484. case 5:
  485. mBit.LoadBitmap(IDB_BMP15);
  486. break;
  487. case 6:
  488. mBit.LoadBitmap(IDB_BMP16);
  489. break;
  490. case 7:
  491. mBit.LoadBitmap(IDB_BMP17);
  492. break;
  493. default:
  494. //mBit.LoadBitmap(IDB_BMP0);
  495. MessageBox("error");
  496. }
  497. CBitmap *pOldBit=MemDC.SelectObject(&mBit);
  498. pControlDC->BitBlt(0,0,900,700,&MemDC,0,0,SRCCOPY);
  499. MemDC.SelectObject(pOldBit);
  500. }
  501. void CRobotView::Execute(int n)
  502. {
  503. CRobotDoc* pDoc=GetDocument();
  504. unsigned char send1;
  505. switch(n)
  506. {
  507. case(11):
  508. home();
  509. break;
  510. case(12):
  511. {//大臂正传
  512. unsigned char send[6]={0x53,0x01,0x00,0x00,0x07,0x18};
  513. for(int i=0;i<=5;i++)
  514. pDoc->WriteComm(&send[i],1);
  515. Sleep(2000/m_nsudu);
  516. break;
  517. }
  518. case(13):
  519. {
  520. unsigned char send[6]={0x53,0x01,0xff,0x00,0x07,0x18};
  521. for(int i=0;i<=5;i++)
  522. pDoc->WriteComm(&send[i],1);
  523. //  pDoc->ReadComm(&buf,1);
  524. //  if(nLength)
  525. ////    {
  526. //      str.Format("%d",buf);
  527. //      m_edit1.SetSel(-1, 0);
  528. //      m_edit1.ReplaceSel(str); // 向编辑视图中插入收到的字符
  529. //  }
  530. //  else
  531. //  MessageBox("fjdklfjsdklgjsdfkl");
  532. Sleep(2000/m_nsudu);
  533. break;
  534. }
  535. case(14)://xiaobizhengzhuan
  536. {
  537. unsigned char send[6]={0x53,0x02,0x00,0x00,0x0f,0xe3};
  538. for(int i=0;i<=5;i++)
  539. pDoc->WriteComm(&send[i],1);
  540. Sleep(2000/m_nsudu);
  541. break;
  542. }
  543. case(15)://小臂反转
  544. {
  545. unsigned char send[6]={0x53,0x02,0xff,0x00,0x0f,0xe3};
  546. for(int i=0;i<=5;i++)
  547. pDoc->WriteComm(&send[i],1);
  548. Sleep(2000/m_nsudu);
  549. break;
  550. }
  551. case(16)://手腕正转
  552. {
  553. unsigned char send[6]={0x53,0x04,0x00,0x00,0x00,0xff};
  554. for(int i=0;i<=5;i++)
  555. pDoc->WriteComm(&send[i],1);
  556. Sleep(1000/m_nsudu);
  557. break;
  558. }
  559. case(17)://shouwanfanzhuan
  560. {
  561. unsigned char send[6]={0x53,0x04,0xff,0x00,0x00,0xff};
  562. for(int i=0;i<=5;i++)
  563. pDoc->WriteComm(&send[i],1);
  564. Sleep(1000/m_nsudu);
  565. }
  566. break;
  567. case(18)://shouzhuazhangkai
  568. {
  569. unsigned char send[6]={0x53,0x05,0x00,0x00,0x00,0x43};
  570. for(int i=0;i<=5;i++)
  571. pDoc->WriteComm(&send[i],1);
  572. Sleep(2000/m_nsudu);
  573. }
  574. break;
  575. case(19):
  576. {
  577. unsigned char send[6]={0x53,0x05,0xff,0x00,0x00,0xf3};
  578. for(int i=0;i<=5;i++)
  579. pDoc->WriteComm(&send[i],1);
  580. Sleep(2000/m_nsudu);
  581. }
  582. break;
  583. case(20)://shangsheng
  584. {
  585. unsigned char send[6]={0x53,0x03,0x00,0x00,0x02,0xe3};
  586. for(int i=0;i<=5;i++)
  587. pDoc->WriteComm(&send[i],1);
  588. Sleep(1000/m_nsudu);
  589. }
  590. break;
  591. case(21):
  592. {
  593. unsigned char send[6]={0x53,0x03,0xff,0x00,0x02,0xe3};
  594. for(int i=0;i<=5;i++)
  595. pDoc->WriteComm(&send[i],1);
  596. Sleep(1000/m_nsudu);
  597. }
  598. break;
  599. /*  case(22)://dabiyunxing
  600. {
  601. unsigned char send[3]={0x63,0x01,0x00};
  602. for(int i=0;i<=2;i++)
  603. pDoc->WriteComm(&send[i],1);
  604. Sleep(2000);
  605. }
  606. break;
  607. case(23):
  608. {
  609. unsigned char send[3]={0x63,0x01,0xff};
  610. for(int i=0;i<=2;i++)
  611. pDoc->WriteComm(&send[i],1);
  612. Sleep(2000);
  613. }
  614. break;
  615. case(24)://xiaobiyunxing
  616. {
  617. unsigned char send[3]={0x63,0x02,0x00};
  618. for(int i=0;i<=2;i++)
  619. pDoc->WriteComm(&send[i],1);
  620. Sleep(2000);
  621. }
  622. break;
  623. case(25):
  624. {
  625. unsigned char send[3]={0x63,0x02,0xff};
  626. for(int i=0;i<=2;i++)
  627. pDoc->WriteComm(&send[i],1);
  628. Sleep(2000);
  629. }
  630. break;
  631. case(26)://shouwanyunxing
  632. {
  633. unsigned char send[3]={0x63,0x04,0x00};
  634. for(int i=0;i<=2;i++)
  635. pDoc->WriteComm(&send[i],1);
  636. Sleep(2000);
  637. }
  638. break;
  639. case(27):
  640. {
  641. unsigned char send[3]={0x63,0x04,0xff};
  642. for(int i=0;i<=2;i++)
  643. pDoc->WriteComm(&send[i],1);
  644. Sleep(2000);
  645. }
  646. break;
  647. case(28)://shouzhuayunxing
  648. {
  649. unsigned char send[3]={0x63,0x05,0x00};
  650. for(int i=0;i<=2;i++)
  651. pDoc->WriteComm(&send[i],1);
  652. Sleep(2000);
  653. }
  654. break;
  655. case(29):
  656. {
  657. unsigned char send[3]={0x63,0x05,0xff};
  658. for(int i=0;i<=2;i++)
  659. pDoc->WriteComm(&send[i],1);
  660. Sleep(2000);
  661. }
  662. break;
  663. case(30)://shengjiangyunxing
  664. {
  665. unsigned char send[3]={0x63,0x03,0x00};
  666. for(int i=0;i<=2;i++)
  667. pDoc->WriteComm(&send[i],1);
  668. Sleep(2000);
  669. }
  670. break;
  671. case(31):
  672. {
  673. unsigned char send[3]={0x63,0x05,0xff};
  674. for(int i=0;i<=2;i++)
  675. pDoc->WriteComm(&send[i],1);
  676. Sleep(2000);
  677. }
  678. break;
  679. */
  680. case(32)://dabiguiling
  681. {
  682. unsigned char send[2]={0xa3,0x01};
  683. for(int i=0;i<=1;i++)
  684. pDoc->WriteComm(&send[i],1);
  685. Sleep(18000);
  686. }
  687. break再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://www.cnblogs.com/captainbed

原文地址:https://www.cnblogs.com/wicnwicnwh/p/10164766.html

时间: 2024-08-29 11:42:40

一套基于模板匹配的语音识别技术 提取语音的特征,并建立模板库 可以将语音识别技术应用于机器人的相关文章

图像相似度测量与模板匹配总结

摘要 本文主要总结了进行目标跟踪.检测中经常使用到的图像相似度测量和模板匹配方法,并给出了具体的基于OpenCV的代码实现. 引言 模板匹配是一种在源图像中寻找与图像patch最相似的技术,常常用来进行目标的识别.跟踪与检测.其中最相似肯定是基于某种相似度准则来讲的,也就是需要进行相似度的测量.另外,寻找就需要在图像上进行逐行.逐列的patch窗口扫描,当然也不一定需要逐行逐列的扫描,当几个像素的误差比计算速度来的不重要时就可以设置扫描的行列步进值,以加快扫描和计算的时间消耗.下面就对相似度测量

opencv笔记(二十二)——模板匹配 template matching

模板匹配就是在给定一幅图像和一幅模板(一般模板比图像的尺寸小很多)的情况下,找到这个图像中最最相似于模板的位置,比如 第一幅是给定的图片,第二幅是模板,第三幅就是搜索到的匹配的位置. 这个搜索的过程,我没有在源码中求索,但是根据tutorial,应该是采用sliding window的方法,利用滑动的窗口,逐像素进行匹配.这个逐像素的意思,就是锚定某个像素之后,在这个像素的右边和下方,以template的宽度和高度的距离的范围内,进行模板与图像的相似度计算. 这种方法和行人检测中常用的方法类似.

Windows Azure Online Backup是一套基于云技术的在线备份

Windows Azure Online Backup是一套基于云技术的在线备份解决方案.你可以通过它将文件备份到云端的数据中心,在本地文件出现损坏或丢失时,他将给你提供更为安全可靠的文件恢复.微软将它作为本地备份解决方案的替代产品.它提供块级存储的增量备份(就是说备份系统仅仅更改数据块的信息,这样就能降低存储和带宽浪费).数据压缩.数据加密和流量限制,以及云端数据完整性验证等功能. 在过去您可以利用Windows Server Backup功能来将您的Windows Server备份到外接式硬

图像处理之基于NCC模板匹配识别

一:基本原理 NCC是一种基于统计学计算两组样本数据相关性的算法,其取值范围为[-1, 1]之间,而对图像来说,每个像素点都可以看出是RGB数值,这样整幅图像就可以看成是一个样本数据的集合,如果它有一个子集与另外一个样本数据相互匹配则它的ncc值为1,表示相关性很高,如果是-1则表示完全不相关,基于这个原理,实现图像基于模板匹配识别算法,其中第一步就是要归一化数据,数学公式如下: 二:实现步骤 (1)      获取模板像素并计算均值与标准方差.像素与均值diff数据样本 (2)      根据

AutoSharedLibrary -- 基于模板元编程技术的跨平台C++动态链接加载库

基于模板元编程技术的跨平台C++动态链接加载库.通过模板技术,使用者仅需通过简单的宏,即可使编译器在编译期自动生成加载动态链接库导出符号的代码,无任何额外的运行时开销. ASL_LIBRARY_BEGIN(TestLib) ASL_SYMBOL(Proc_test1, test1, false) ASL_SYMBOL(Proc_test2, test2, true) ASL_LIBRARY_END() TestLib theLib; try { theLib.Load("./1.so"

基于HALCON的模板匹配方法总结 (转)

很早就想总结一下前段时间学习HALCON的心得,但由于其他的事情总是抽不出时间.去年有过一段时间的集中学习,做了许多的练习和实验,并对基于HDevelop的形状匹配算法的参数优化进行了研究,写了一篇<基于HDevelop的形状匹配算法参数的优化研究>文章,总结了在形状匹配过程中哪些参数影响到模板的搜索和匹配,又如何来协调这些参数来加快匹配过程,提高匹配的精度,这篇paper放到了中国论文在线了,需要可以去下载. 德国MVTec公司开发的HALCON机器视觉开发软件,提供了许多的功能,在这里我主

基于边界的模板匹配的原理及算法实现

最近被Halcon中的基于边缘的模板匹配算法吸引到了,故找到了一点点学习资料,供同行参阅,水平有限,大家多包含.本文算法很初级,做入门了解用.原文是英文,所以把原文copy 过来了,另加了一些中文.算法运行效果如下: [效果还行,只是原理性示意,不要要求太高了哦] Introduction Template matching is an image processing problem to find the location of an object using a template imag

基于opencv的视频流 模板匹配 (灰度化 二值化 )

#include <cv.h> #include <highgui.h> #include <windows.h> // 获取直方图 // 1. pImageData 图像数据 // 2. nWidth 图像宽度 // 3. nHeight 图像高度 // 4. nWidthStep 图像行大小 // 5. pHistogram 直方图 BOOL GetHistogram(unsigned char *pImageData, int nWidth, int nHeigh

字符识别OCR研究一(模板匹配&amp;amp;BP神经网络训练)

摘 要 在MATLAB环境下利用USB摄像头採集字符图像.读取一帧保存为图像.然后对读取保存的字符图像,灰度化.二值化,在此基础上做倾斜矫正.对矫正的图像进行滤波平滑处理,然后对字符区域进行提取切割出单个字符.识别方法一是採用模板匹配的方法逐个对字符与预先制作好的字符模板比較,假设结果小于某一阈值则结果就是模板上的字符:二是採用BP神经网络训练.通过训练好的net对待识别字符进行识别.最然后将识别结果通过MATLAB下的串口工具输出51单片机上用液晶显示出来. keyword: 倾斜矫正.字符切