自学内容网 自学内容网

MTCNN的用法

print('get frame faces....')
    detector = MTCNN()
    save_path = [ './processed/validate/Northwind/']
    paths = ['./img/validate/Northwind/']
    for index, path in enumerate(paths):
        dirs = get_dirs(path)
        loader = tqdm(dirs)
        for d in loader:
            os.makedirs(save_path[index] + d.split('/')[-1], exist_ok=True)
            files = get_files(d)
            for file in files:
                img_path = d + '/' + file
                s_path = save_path[index] + d.split('/')[-1] + '/' + file
                img = cv2.cvtColor(cv2.imread(img_path), cv2.COLOR_BGR2RGB)
                info = detector.detect_faces(img)       #这里的 info是什么意思
                if (len(info) > 0):
                    x, y, width, height = info[0]['box']
                    confidence = info[0]['confidence']
                    b, g, r = cv2.split(img)
                    img = cv2.merge([r, g, b])
                    img = img[y:y + height, x:x + width, :]
                    cv2.imwrite(s_path, img, [int(cv2.IMWRITE_JPEG_QUALITY), 100])
                    loader.set_description('confidence:{:4f} img:{}'.format(confidence, img_path))

info = detector.detect_faces(img)
这里的 info是什么意思?
如果检测到了人脸:
info 是一个包含多个字典的列表,每个字典对应一张检测到的人脸。
每个字典的常见字段包括:
‘box’:人脸的边界框,格式为 [x, y, width, height]。
‘confidence’:检测到人脸的置信度(0 到 1 的值)。
‘keypoints’:关键点的位置,包括眼睛、鼻子和嘴巴的坐标,格式为:

{
    'left_eye': (x1, y1),
    'right_eye': (x2, y2),
    'nose': (x3, y3),
    'mouth_left': (x4, y4),
    'mouth_right': (x5, y5)
}

如果 info 的内容如下:


info = [
    {
        'box': [100, 50, 200, 200],  # 人脸的边界框,左上角坐标和宽高
        'confidence': 0.98,         # 检测的置信度
        'keypoints': {
            'left_eye': (150, 100),
            'right_eye': (250, 100),
            'nose': (200, 150),
            'mouth_left': (150, 220),
            'mouth_right': (250, 220)
        }
    }
]

info[0][‘box’]: 表示人脸的边界框,值为 [100, 50, 200, 200],对应 (x=100, y=50, width=200, height=200)。
info[0][‘confidence’]: 表示检测到人脸的置信度,为 0.98。
info[0][‘keypoints’]: 包含五个关键点的位置,分别是左右眼、鼻子和嘴角。
4. 在代码中的使用
代码片段中的操作:

info = detector.detect_faces(img)
if len(info) > 0:
    x, y, width, height = info[0]['box']
    confidence = info[0]['confidence']

含义:
检测人脸后,如果有检测结果(len(info) > 0),则取出第一个人脸的信息(info[0])。
提取边界框(box)的坐标和尺寸。
提取检测置信度(confidence)。
作用:
将检测到的人脸区域裁剪出来(img[y:y + height, x:x + width, :])。
保存为裁剪后的图片。

img = img[y:y + height, x:x + width, :]
cv2.imwrite(s_path, img, [int(cv2.IMWRITE_JPEG_QUALITY), 100])

原文地址:https://blog.csdn.net/weixin_44194001/article/details/143814811

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!