gpt4 book ai didi

python - 如何在python中进行并发执行?

转载 作者:行者123 更新时间:2023-12-05 04:31:31 26 4
gpt4 key购买 nike

描述

我有一个文件“FaceDetection.py”,它使用“opencv”从网络摄像头镜头中检测人脸,然后将帧写入“输出”对象,将其转换为视频。如果面部出现在帧中,则调用函数 sendImg() ,然后从另一个导入的文件调用函数 faceRec() 。最后,如果面部已知或打印“未知”,则此方法打印面部名称。

我遇到的问题

人脸识别过程非常昂贵,这就是为什么我认为从不同的文件和线程运行会创建一个后台进程,并且 output.write() 函数在做人脸时不会被中断认出。但是,当 sendImg() 函数被调用时,output.write() 函数被中断,导致保存的视频中出现跳帧。

我正在寻求解决方案

我想在不中断 output.write() 函数的情况下进行人脸识别。因此,生成的视频会很流畅,不会跳帧。

这是FaceDetection.py

import threading
from datetime import datetime
import cv2
from FaceRecognition import FaceRecognition

face_cascade = cv2.CascadeClassifier('face_cascade.xml')
fr = FaceRecognition()
img = ""

cap = cv2.VideoCapture(0)
path = 'C:/Users/-- Kanbhaa --/Documents/Recorded/'

vid_name = str("recording_"+datetime.now().strftime("%b-%d-%Y_%H:%M").replace(":","_")+".avi")
vid_cod = cv2.VideoWriter_fourcc(*'MPEG')
output = cv2.VideoWriter( str(path+vid_name) , vid_cod, 20.0 ,(640,480))

def sendImage(imgI):
fr.faceRec(imgI)

while True:
t,img = cap.read()
output.write(img)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray,2,4)

for _ in faces:
t1 = threading.Thread(target=sendImage,args=(img,))
t1.start()

cv2.imshow('img',img)
if cv2.waitKey(1) & 0XFF == ord('x'):
break

cap.release()
output.release()

这是FaceRecognition.py

from simple_facerec import SimpleFacerec


class FaceRecognition:
def __init__(self):
global sfr
# Encode faces from a folder
sfr = SimpleFacerec()
sfr.load_encoding_images("C:/Users/UserName/Documents/FaceRecognitionSystem/images/")

def faceRec(self,frame):
global sfr
# Detect Faces
face_locations, face_names = sfr.detect_known_faces(frame)
for face_loc, name in zip(face_locations, face_names):
if name != "Unknown":
print("known Person detected :) => " + name)
else:
print("Unknown Person detected :( => Frame captured...")

上面代码中导入的文件SimpleFacerec来自youtube。所以,我没有编码。它可以在下面找到。

SimpleFacerec.py

最佳答案

你写错了。应该是

t1 = threading.Thread(target=sendImage, args=(img,))

关于python - 如何在python中进行并发执行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71837705/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com