微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 基于Dragoboard 410c开发板的简单手型识别方案

基于Dragoboard 410c开发板的简单手型识别方案

时间:02-10 来源:互联网 点击:

手势交互是未来人机交互领域发展的一个重要方向,本文将参考使用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,用该代码运行就可以进行手型检测,效果如下图所示,虽然不准确,但是基本上可以检测出三种不同的手型:

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top