首页 > 解决方案 > 带有面部跟踪器的 python 运动面具

问题描述

我想做一个工作:当网络摄像头检测到人脸时,人脸跟踪器方块之外的空间都是黑色的。面部跟踪器的方块变成了人脸的运动蒙版。我有更好的方法来完成这段代码吗?

这是我的代码的屏幕截图:

在此处输入图像描述

这是我对最终工作的期望:

在此处输入图像描述

这是我到目前为止写的代码:

import cv2
import numpy as np
import serial
import time
import sys

cap = cv2.VideoCapture(0)
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml' )

if not cap.isOpened():
    print("Cannot open camera")
    exit()

while(True):

    ret, frame = cap.read()
    mask = np.zeros(frame.shape[:2], dtype=np.uint8)
    for(x) in mask:
        x = 325
    for(y) in mask:
        y = 155
    for(r) in mask:
        r = 300
    mask = cv2.circle(mask, (x, y), r, (255, 255, 255), -1)
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
    faces = face_cascade.detectMultiScale(gray, 1.3, 5)
    frame = cv2.add(frame, np.zeros(np.shape(frame), dtype=np.uint8), mask=mask)

    for(x,y,w,h) in faces:
        cv2.rectangle(frame, (x,y),(x+w,y+h), (255,255,0), 2)
        roi_gray = gray[y:y+h , x:x+w]
        roi_color = frame[y:y+h , x:x+w]

        xx = int(x+(x+h)/2)
        yy = int(y+(y+w)/2)
        center = (xx,yy)

    cv2.imshow('frame', frame)

    if not ret:
        print("Can't receive frame (strqeam end?). Exiting ...")
        break

    if cv2.waitKey(1) == ord('q'):
        break

cv2.waitKey()
cap.release()
cv2.destroyAllWindows() 

标签: pythonmaskmotionfacetracker

解决方案


推荐阅读