【发布时间】:2021-04-26 13:03:47
【问题描述】:
我开发了一个脚本,使用dlib 和cv2 在该图像中有一张脸的图像上绘制面部标志。这是脚本;
import cv2
import dlib
img_path = 'landmarks.png'
detector = dlib.get_frontal_face_detector()
shape_predictor = 'shape_predictor_68_face_landmarks.dat'
predictor = dlib.shape_predictor(shape_predictor)
count = 1
ready = True
while ready:
frame = cv2.imread("demo.jpg")
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = detector(gray)
for face in faces:
x1 = face.left()
y1 = face.top()
x2 = face.right()
y2 = face.bottom()
cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 3)
landmarks = predictor(gray, face)
for n in range(0, 68):
x = landmarks.part(n).x
y = landmarks.part(n).y
cv2.circle(frame, (x, y), 4, (255, 0, 0), -1)
cv2.imshow("Frame", frame)
cv2.waitKey(0)
ready = False
现在,这让我发疯了。当我尝试从谷歌下载任何图像(带或不带掩码)来测试它时,这个脚本工作正常。同样,您可以看到这些结果,例如,
但是当我尝试以下这些图像时,它什么也没做。
我在互联网上进行了几次搜索,但没有找到任何符合当前目的的东西。
甚至,我已经尝试过组合
cv2.CascadeClassifier("haarcascade_frontalface_default.xml")eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')m_cascade = cv2.CascadeClassifier('haarcascade_mcs_mouth.xml')
我还查看了以下有用的链接;
但它也不适用于这些图像。 CV2 detector 通过脚本调试时显示一个空列表,例如:
我只想使用上面的图像绘制基准地标。我可以通过什么最好的解决方案?也许,我在cv2 和Dlib 中遗漏了一些东西,但无法获得所需的结果。
我还使用 Stack Overflow 极客 推荐的实现找到了 dlib 的 置信度得分,例如;
import dlib
detector = dlib.get_frontal_face_detector()
img = dlib.load_rgb_image('demo.jpg')
dets, scores, idx = detector.run(img, 1, -1)
for i, d in enumerate(dets):
print("Detection {}, score: {}, face_type:{}".format(
d, scores[i], idx[i]))
这是上述第二行图像中第一张图像的置信度得分结果;
期待从任何优秀的人那里获得更好的研究。谢谢
【问题讨论】:
-
尝试使用 dlib 正面人脸检测器。它更健壮。pyimagesearch.com/2017/04/03/…
-
@AmitayNachmani 感谢您的友好回复。先生,这是我为此目的而遵循的第一个教程,但这也不起作用。如果你能看到
detector = dlib.get_frontal_face_detector(),我现在也在我当前的脚本中使用它。
标签: python-3.x computer-vision cv2 dlib