如何基于Dragoboard 410c开发板设计简单手型识别方案?
扫描二维码
随时随地手机看文章
手势交互是未来人机交互领域发展的一个重要方向,本文将参考使用Opencv实现静态手势识别玩转石头剪刀布一文,教大家如何在Dragoboard 410c开发板上使用Python脚本语言实现简单的手型识别,通过从USB摄像头获取手型图像,然后识别出石头-剪刀-布三个手型。
具体实现步骤如下:
1)获取USB摄像头图像:
这里主要是通过Opencv提供的Python接口cv2,具体可以参考410c板获取USB摄像头图像一文,里面详细介绍了在dragonboard 410c上使用USB摄像头获取图像。
2)设置手势区域
在视频区域内设置一个手势区域,只有将手放入到该区域,系统才可以正确的识别手型,其他区域的系统不做处理,具体代码如下:
#设置手型区域
cv2.rectangle(img,(426,0),(640,250),(170,170,0))
#获取手型区域图像并保存
img = img[0:210,426:640]
cv2.imwrite(“wif.jpg”,img)
3)对检测区域进行图像处理,其核心代码如下:
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_length<110):
#print ’rock‘;
return 1;
else:
#print ’paper‘;
return 2;
到这里我们就完成了整个手型识别的核心部分,具体的代码较长,直接附件http://pan.baidu.com/s/1kUKSxoV,用该代码运行就可以进行手型检测,效果如下图所示,虽然不准确,但是基本上可以检测出三种不同的手型: