一、准备
下载hand.xml haarcascades---各种分类器xml文件下载地址
使用非最大抑制代码可以参考https://blog.csdn.net/Barry_J/article/details/101522653
二、代码
hand_detect.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import cv2
from face_detect.nms import non_max_suppression_slow
hand_model = 'hand.xml'
out_file = "output.avi"
def faceDetect(img, handCascade):
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# faces = face_cascade.detectMultiScale(gray, 1.3, 5)
#hand
hand = handCascade.detectMultiScale(
gray,
scaleFactor=1.1,
minNeighbors=2,
minSize=(40, 40)
)
print(hand)
pick = non_max_suppression_slow(hand, 0.3)
for (hx,hy,hw,hh) in pick:
cv2.rectangle(img, (hx,hy), (hx+hw,hy+hh), (230, 20, 232), 3)
return img
def main():
cap = cv2.VideoCapture(0)
# width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH) + 0.5)
# height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT) + 0.5)
# face_cascade = cv2.CascadeClassifier(face_model)
# eyeCascade = cv2.CascadeClassifier(eyes_model)
# mouth_detector = cv2.CascadeClassifier(mouth_model)
handcascade = cv2.CascadeClassifier(hand_model)
# fourcc = cv2.VideoWriter_fourcc(*'flv1') # 'F', 'L', 'V', '1'
# video = cv2.VideoWriter(out_file, fourcc, 20.0, (width, height))
while(True):
ret, frame = cap.read()
if ret == True:
# frame = faceDetect(frame, face_cascade,eyeCascade,mouth_detector,handcascade)
frame = faceDetect(frame, handcascade)
cv2.imshow("pose", frame)
# video.write(frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# video.release()
cap.release()
cv2.destroyAllWindows()
main()