我正在尝试从图像中检测不同的身体部位。它类似于openCV中提供的面部检测分类器。我尝试训练和制作自己的分类器来检测人的手,腿,躯干等。他们提供了很多误报。有人创建了身体部位分类器吗?如果有人可以分享,我将非常感激。
答案 0 :(得分:1)
我不确定HAAR是最好的方法。我会尝试以某种方式在潜伏的svm探测器中使用“人”模型的滤波器或更好 - 使用潜伏的svm探测器来检测整个身体,然后检查不同身体的滤波器的位置。
潜-SVM http://docs.opencv.org/modules/objdetect/doc/latent_svm.html
答案 1 :(得分:0)
我使用“ haarcascade_frontalface_default.xml”进行面部检测。 尝试编写的Torso图像分类器代码(在Python中)可用于其他人体部位图像分类器。
主要#
import cv2
import numpy as np
from body import torso
face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
cap = cv2.VideoCapture(0)
while True:
ret, img = cap.read()
scale_percent = 79 # percent of original size
width = int(img.shape[1] * scale_percent / 100)
height = int(img.shape[0] * scale_percent / 100)
dim = (width, height)
resized = cv2.resize(img, dim, interpolation = cv2.INTER_AREA)
gray = cv2.cvtColor(resized,cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, 1.3,5)
for (x,y,w,h) in faces:
#rectangle face
cv2.rectangle(resized,(x,y),(x+w, y+h), (255,0,0), 2)
face_start = (x,y)
face_end = (x+w, y+h)
#rectangle torso
torso_xy = torso(face_start,face_end)
# cv2.rectangle(resized,((x-30, y+h)),(face_end[0]+30, face_end[1]+100), (0,122,0), 2)
cv2.rectangle(resized,torso_xy[0],torso_xy[1], (0,122,0), 2)
cv2.imshow('img',resized)
k = cv2.waitKey(30) & 0xff
if k == 27:
break
cap.release()
cv2.destroyAllWindows()
body.py
import os
def torso(face_start,face_end):
mid_face_x = int((face_start[0] + face_end[0]) / 2)
mid_face_y = int((face_start[1] + face_end[1]) / 2)
face_width_x= face_end[0] - face_start[0]
face_height_y= face_end[1] - face_start[1]
start_torso = (
(mid_face_x-face_width_x), (face_end[1]+int(face_end[1]*0.05))
)
end_torso = (
(mid_face_x+face_width_x), (face_end[1]+int(face_height_y*3))
)
return ((start_torso,end_torso))