簡體   English   中英

我如何編寫代碼以忽略未檢測到的面部並將檢測到的面部幀保存在新文件中?

[英]How i can write code for ignoring undetected faces and save frames with detected faces in a new file?

你們好嗎? 我正在做一個與人臉檢測相關的項目。 我正在使用 dlib 模型進行人臉檢測。 我已經在視頻剪輯上應用了 dlib 人臉檢測模型,它工作得非常好。 從視頻剪輯中檢測到人臉后,我將每一幀都保存在一個新文件夾中。 然后現在我正在嘗試將每一幀與臉部對齊。 我面臨的問題是很少有 dlib 沒有檢測到人臉的幀,因為我收到了這個錯誤(文件“align_images.py”,第 22 行,在 images = dlib.get_face_chips(img, faces, size =180) RuntimeError: 在 faces 數組中沒有指定人臉。 )

我檢查了檢測器的輸出,它沒有檢測到框架中的任何人臉。 我想知道如何忽略未檢測到的幀並將其余幀保存在新文件夾中。 這是我對齊面的代碼。

import cv2 as cv
import numpy as np
from PIL import Image
import dlib
import sys
import tkinter

detector = dlib.get_frontal_face_detector()
sp = dlib.shape_predictor("shape_predictor_5_face_landmarks.dat")

# img = [cv2.imread(file) for file in glob.glob(".frames_copy/*.jpg")]
img = cv.imread("./frames_copy/0054.jpg")

dets = detector(img, 1)

faces = dlib.full_object_detections()
for detection in dets:
    faces.append(sp(img, detection))

window = dlib.image_window()

images = dlib.get_face_chips(img, faces, size=180)

for image in images:
    window.set_image(image)
    dlib.hit_enter_to_continue()
import cv2 as cv
import numpy as np
from PIL import Image
import dlib
import sys
import tkinter
import glob
from tqdm import tqdm
import os

detector = dlib.get_frontal_face_detector()
sp = dlib.shape_predictor("shape_predictor_5_face_landmarks.dat")

for f in glob.glob("face_align_samples/*"):
    os.remove(f)

# img = [cv2.imread(file) for file in glob.glob(".frames_copy/*.jpg")]
# img = cv.imread("./frames_copy/0054.jpg")

aligned_faces = 0
missed_faces = 0

for index, fname in enumerate(tqdm(os.listdir('frames_copy'))):
    img = cv.imread(os.path.join("frames_copy", fname))

    dets = detector(img, 1)

    faces = dlib.full_object_detections()
    for detection in dets:
        faces.append(sp(img, detection))

    # window = dlib.image_window()

        images = dlib.get_face_chips(img, faces, size=180)
        for image in images:
            aligned_faces += 1
            cv.imwrite(os.path.join('face_align_samples', f'aligned_{str(index).zfill(5)}.png'), image)

        missed_faces += 1
        print(f'No faces were specified in the faces array for image: {fname}')
        continue

print(f'Faces aligned: {aligned_faces}\nFaces missed: {missed_faces}')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM