我正在研究手部检测项目。网络上有很多不错的项目可以做到这一点,但我需要的是特定的手部姿势检测。它需要一个完全张开的手掌,并且整个手掌朝外,如下图所示:
第一只手面向内,因此不会被检测到,而右手则面向外,它将被检测到。现在,我可以使用OpenCV检测到手了。但是如何知道手的方向呢?
答案 0 :(得分:1)
与正手匹配的问题属于纹理分类,这是一个经典的模式识别问题。我建议您尝试以下方法之一:
Haralick Texture:我已经读到,当一组要素量化整个图像(全局要素描述符)时,它可以完美工作。它不是在opencv中实现的,但是易于实现,请检查此useful tutorial
训练模型:我已经建议将SVM分类器与一些描述符结合使用,可以很好地工作。 Opencv有一个有趣的FaceRecognizer类用于人脸识别,用它代替手掌的人脸图像可能是一个有趣的主意(进行大小调整和旋转以获得手掌的唯一姿势),该类有三种使用方法,其中之一是“本地二进制图案直方图”,建议用于纹理识别。以及为什么不尝试其他模型(Eigenfaces和Fisherfaces),请检查此tutorial
答案 1 :(得分:0)
看看跳蛙对oculus裂谷做了什么。我不确定他们在内部使用什么来分割手势,但是还有另一篇论文可以有效地生成手势。如果您有立体相机设置,则可以使用本文的方法:https://arxiv.org/pdf/1610.07214.pdf。
我在大型数据集上看到的单机摄像机训练的唯一有前途的解决方案。
答案 2 :(得分:0)
好吧,如果您采用MacGyver方式,您会注意到左手的骨头向某个方向伸出,而右手的所有手指线和手掌中的几根线。
这些行始终是相同的,因此您可以尝试使用opencv边缘检测或粗线来检测它们。由于线条颜色较深,您甚至可以将它们限制在其中。然后从这些线中收集信息,例如角度,回归,查看可以收集和训练简单决策树的功能。
那是假设您没有足够的数据,如果您有然后进行深度学习,则只需采用基本的inceptionV3模型并重新训练最后一个密集层,以使用softmax在两个类之间进行分类,或者预测概率乙状结肠。选中this link,Tensorflow会帮助您接受这一已经完全可以执行的纯代码的培训。
有问题吗?问走
答案 3 :(得分:0)
使用 Haar-Cascade 分类器, 您可以获取分类器模型文件,然后在此处使用它。 只需在 Google 中搜索“Haarcascade 检测 Palm”或使用以下代码。
import cv2
cam=cv2.VideoCapture(0)
ccfr2=cv2.CascadeClassifier('haar-cascade-files-master/palm.xml')
while True:
retval,image=cam.read()
grey=cv2.cvtColor(image,cv2.COLOR_BGR2GRAY)
palm=ccfr2.detectMultiScale(grey,scaleFactor=1.05,minNeighbors=3)
for x,y,w,h in palm:
image=cv2.rectangle(image,(x,y),(x+w,y+h),(256,256,256),2)
cv2.imshow("Window",image)
if cv2.waitKey(1) & 0xFF==ord('q'):
cv2.destroyAllWindows()
break
del(cam)
祝您使用 HaarCascade 的体验好运。