如何基于Dragoboard 410c開發(fā)板設(shè)計(jì)簡(jiǎn)單手型識(shí)別方案?
手勢(shì)交互是未來(lái)人機(jī)交互領(lǐng)域發(fā)展的一個(gè)重要方向,本文將參考使用Opencv實(shí)現(xiàn)靜態(tài)手勢(shì)識(shí)別玩轉(zhuǎn)石頭剪刀布一文,教大家如何在Dragoboard 410c開發(fā)板上使用Python腳本語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的手型識(shí)別,通過(guò)從USB攝像頭獲取手型圖像,然后識(shí)別出石頭-剪刀-布三個(gè)手型。
本文引用地址:http://2s4d.com/article/201808/385318.htm具體實(shí)現(xiàn)步驟如下:
1)獲取USB攝像頭圖像:
這里主要是通過(guò)Opencv提供的Python接口cv2,具體可以參考410c板獲取USB攝像頭圖像一文,里面詳細(xì)介紹了在dragonboard 410c上使用USB攝像頭獲取圖像。
2)設(shè)置手勢(shì)區(qū)域
在視頻區(qū)域內(nèi)設(shè)置一個(gè)手勢(shì)區(qū)域,只有將手放入到該區(qū)域,系統(tǒng)才可以正確的識(shí)別手型,其他區(qū)域的系統(tǒng)不做處理,具體代碼如下:
#設(shè)置手型區(qū)域
cv2.rectangle(img,(426,0),(640,250),(170,170,0))
#獲取手型區(qū)域圖像并保存
img = img[0:210,426:640]
cv2.imwrite(“wif.jpg”,img)
3)對(duì)檢測(cè)區(qū)域進(jìn)行圖像處理,其核心代碼如下:
img = cv2.imread(“wif.jpg”,0)
element = cv2.getStructuringElement(cv2.MORPH_RECT,(11,11))
dilate = cv2.dilate(img, element)
erode = cv2.erode(img, element)
result = cv2.absdiff(dilate,erode);
retval, result = cv2.threshold(result, 40, 255, cv2.THRESH_BINARY);
result = cv2.bitwise_not(result);
result =cv2.medianBlur(result,23)
4)判斷手型,其中部分核心代碼如下:
if width[i]=20 or width[i]>=40:
width_jiandao= False
width_length += width[i]
if width_jiandao==True and count==2:
return 1;
if(area 8500):
#print ‘stone;
return 0;
print “width_leng”,width_length
......
if(area>14000 or count>=3):
#print ’paper‘;
return 2;
if(width_length110):
#print ’rock‘;
return 1;
else:
#print ’paper‘;
return 2;
到這里我們就完成了整個(gè)手型識(shí)別的核心部分,具體的代碼較長(zhǎng),直接附件http://pan.baidu.com/s/1kUKSxoV,用該代碼運(yùn)行就可以進(jìn)行手型檢測(cè),效果如下圖所示,雖然不準(zhǔn)確,但是基本上可以檢測(cè)出三種不同的手型:
評(píng)論