需要进行哪些更改才能使此代码检测多个人脸而不是仅一个人脸

Posted

技术标签:

【中文标题】需要进行哪些更改才能使此代码检测多个人脸而不是仅一个人脸【英文标题】:what change is necessary to make this code detect multiple faces rather than only one 【发布时间】:2018-08-11 12:36:27 【问题描述】:

我是 openCV 和 dlib 模块的新手。我试图让这段代码检测多张脸,但只检测到第一张脸。

  import numpy as np
  import argparse
  import imutils
  import dlib
  import cv2
  from matplotlib import pyplot as plt

  def rect_to_bb(rect):
      x = rect.left()
      y = rect.top()
      w = rect.right() - x
      h = rect.bottom() - y
     return (x, y, w, h)

 image = cv2.imread("image.jpg")
 image = imutils.resize(image, width=500)
 gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

 detector = dlib.get_frontal_face_detector()

 rects = detector(image, 1)

 fname = "image.jpg".split('/')[-1]
 name, ext = fname.split('.')
 new_ext="png"

 for (i, rect) in enumerate(rects):
       (x, y, w, h) = rect_to_bb(rect)

       fname = '_.'.format(name, i, new_ext)
       clone = image.copy()
       cv2.rectangle(clone, (x, y), (x + w , y + h), (0, 255, 0), 1)
       startX = x
       startY = y - 15 if y - 15 > 15 else y + 15
       cv2.putText(clone, str(i), (startX, startY),
            cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2)
       roi = image[y:y + h, x:x + w]
       cv2.imshow("Seprate Faces", roi)
       cv2.imwrite(fname, roi)
       cv2.imshow("Detected Faces", clone)
       cv2.waitKey(0)

感谢您的回复! !谢谢

【问题讨论】:

您是否单独获取了每张脸,但又希望将所有脸都放在一张图像中?将 clone = image.copy() 移出循环(之前)并将 imshow 和 waitKey 移出循环(之后)。 @Micka,它有点工作。它现在检测到两张脸,但无法保存两张脸。它仍然只保存一张脸 伙计,谢谢。它保存了两张脸,但在跑步时只显示一张脸,但它有所帮助。谢谢大佬 【参考方案1】:

我认为您想将灰度提交给检测器:

rects = detector(gray, 1)

【讨论】:

这没有帮助

以上是关于需要进行哪些更改才能使此代码检测多个人脸而不是仅一个人脸的主要内容,如果未能解决你的问题,请参考以下文章

如何更改此 C++ (OpenCV) 代码以获取图像而不是视频?

利用机器学习进行人脸468点的3D坐标检测,并生成3D模型

在进行注释之前是不是需要人脸检测 - 图像处理

我需要进行哪些更改才能执行上界的反转?

使用 OpenCV 和 Keras 进行人脸比较(不是识别或检测)?

无法一次检测多个人脸