opencv - 人脸检测:一次只显示一张脸

标签 opencv face-detection robot

我一直在开发与ROS集成的人脸检测应用程序,以与DRONES(准确地说是bebop鹦鹉)一起使用。该代码本身可以在google上找到,它的作用基本上是显示屏幕上出现的每个面孔。我的问题是:我希望无人机跟随我的脸(并且只有我的),但是正如我之前所说,代码可以一次检测到多个脸。
这是代码:

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
# some people can just use the haarcascade_frontalface_default.xml without specifying the path
test = face_cascade.load('../../../../opencv/data/haarcascades/haarcascade_frontalface_default.xml')

# start the video capture
video_capture = cv2.VideoCapture(0)

# while-loop to detect face on webcam until you press 'q'.
while not rospy.is_shutdown():
    # Capture frame-by-frame
    ret, frame = video_capture.read()
    frame = imutils.resize(frame, width=600)

    #convert the frame (of the webcam) to gray)
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    mask = cv2.erode(gray, None, iterations=2)
    mask = cv2.dilate(mask, None, iterations=2)

    # detecting the faces
    faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30), flags=cv2.CASCADE_SCALE_IMAGE)

    # Draw a rectangle around the faces
    for (x, y, w, h) in faces:
        cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
        x_imagem = x + (w/2)
        y_imagem = y + (h/2)
        cv2.circle(frame, (x+(w/2), y+(h/2)), 5, (0,0,255), -1)
        #600 x 450;
        if(x_imagem > 200 and x_imagem < 400):
            rospy.loginfo("CENTRO")
        elif(x_imagem < 200): #ROSTO PRA ESQUERDA, ENTAO VAI PARA DIREITA
            rospy.loginfo("ROSTO NA ESQUERDA")
            pub_face.publish("esq")
        elif(x_imagem > 400): #ROSTO PRA DIREITA, ENTAO VAI PARA ESQUERDA
            rospy.loginfo("ROSTO NA DIREITA")
            pub_face.publish("dir")

    # Display the resulting frame
    cv2.imshow('Video', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        rospy.loginfo("FIM DO PROGRAMA DE DETECCAO DE ROSTOS")
        break

# When everything is done, release the capture
video_capture.release()
cv2.destroyAllWindows()

如您所见,我们在以下位置有一系列FACES:
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30), flags=cv2.CASCADE_SCALE_IMAGE)

该代码将在人脸所在的位置绘制一个矩形,有没有办法让我只显示最大的矩形(在这种情况下,我的脸)?
希望我能说清楚!

最佳答案

Is there a way that I can make it show only the biggest rectangle (in that case, my face)?



反复考虑“面孔”列表,并计算每个感兴趣区域(ROI)的面积,并获取最大的面积。

关于opencv - 人脸检测:一次只显示一张脸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49888318/

相关文章:

python - 如何保存OpenCV检测到的面部

java - 如何使用 Java 在 CascadeClassifier 中设置裁剪大小

javascript - 如何禁止爬虫、机器人、假用户并仅允许特定浏览器?

c++ - RobotC - 电梯编程

c++ - 在 C++ 中计算相似图像的偏移/倾斜/旋转

c# - 2张图像之间的运动/差异检测

ios - CIDetector 和 UIImagePickerController

c# - 防止所有机器人访问页面

opencv - 在谷歌colab上以视频形式显示帧

python - 在opencv中调整图片大小?