使用边界框从图像中裁剪脸部

这是输入帧:

http://img4.mukewang.com/64b65e2b000105be17041295.jpg

我曾经RetinaFace从中检测所有面孔和一般 csv 文件。这是我的 csv 文件:


,bbox,score,landmarks

0,"[1811, 850, 1948, 1013]",0.999666452407836,"[[1828, 911], [1887, 913], [1841, 942], [1832, 974], [1876, 976]]"

1,"[346, 1285, 503, 1468]",0.9996420145034791,"[[365, 1361], [424, 1348], [385, 1395], [390, 1426], [439, 1416]]"

2,"[1543, 1418, 1702, 1618]",0.9995224475860591,"[[1578, 1514], [1647, 1498], [1619, 1554], [1610, 1585], [1658, 1572]]"

(上面仅显示了部分行)。


只是为了显示我的输出图像,其中 RetinaFace 检测到所有面部:


http://img3.mukewang.com/64b65e43000155bb17021294.jpg

但是我无法单独获取面部:


frame = cv2.imread('input.jpg')

x,y,w,h = [1811, 850, 1948, 1013] # one of the bounding boxes

plt.imshow(frame[y:y+h, x:x+w])

它没有给出正确的面部位置。我得到的输出是:

http://img1.mukewang.com/64b65e540001662702100248.jpg

互换的青春
浏览 141回答 2
2回答

墨色风雨

我参考了retinaface代码,发现边界框是这样提取的:链接x_min, y_min, x_max, y_max = annotation["bbox"]使用与上述索引类似的索引对我来说效果非常好。x,y,w,h = label plt.imshow(frame[y:h, x:w])

森林海

您尝试过它的张量流重新实现吗?其提取人脸功能直接返回检测到的人脸。此外,它还可以根据地标坐标来对齐检测到的人脸。#!pip install retina-facefrom retinaface import RetinaFaceimport matplotlib.pyplot as pltfaces = RetinaFace.extract_faces("img.jpg", align = True)for face in faces:   plt.imshow(face)   plt.show()
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python