使用opencv检测面部时,我无法获得完美的准确性。
这是我的代码:
import cv2
#create a cascadeclassifier object
face_cascade = cv2.CascadeClassifier("C:/Users/yash/AppData/Local/Programs/Python/Python35/Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml")
#create a cascade classifier.it will contain the features of the face
#reading the image as it is
img = cv2.imread("profile.JPG")
#reading the image as gray_scale image
gray_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #converting colored image to gray scale
#search the co-ordinates of the image
faces = face_cascade.detectMultiScale(gray_img,scaleFactor = 1.05,minNeighbors=5)
#scaleFactor = decreases the shape value by 5%,until the face is found .smaller this value , the greater is the accuracy.
#detectMultiScale = method to search for the face rectangle co-ordinates
#print(type(faces))
#print(faces)
for x,y,w,h in faces:
img = cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),3)
resized_img = cv2.resize(img,(int(img.shape[1]/2) , int(img.shape[0]/2)))
cv2.imshow("face detection",resized_img)
cv2.waitKey(0)
cv2.destroyAllWindows()
这里有image,我想以此来获得完美的准确性。
答案 0 :(得分:2)
对于一张脸,使用标志CV_HAAR_FIND_BIGGEST_OBJECT作为detectMultiScale中的最后一个参数。
但是Haar级联现在不是人脸检测的最佳选择。在OpenCV 4.0中,开发人员删除用于Haar级联训练的代码-他们建议使用DNN。 For example here。
第二点:OpenCV开发人员创建了一个用于DNN推理的开源框架-OpenVINO和很多pretrained models(也用于面部检测)。如果要在CPU上拥有最快的面部检测器,而不是使用OpenVINO。
答案 1 :(得分:0)
除了@Nuzhny的建议之外,您还应该使用非最大抑制算法来解决多次检测的问题。
Pyimagesearch上有一篇非常不错的文章以及与此主题相关的代码,将为您提供帮助。