首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >通过OpenCV发送到pyvirtualcam的摄像头输入会导致帧速率慢(Mac)。

通过OpenCV发送到pyvirtualcam的摄像头输入会导致帧速率慢(Mac)。
EN

Stack Overflow用户
提问于 2021-12-07 23:47:01
回答 1查看 499关注 0票数 0

你好,这个星球的聪明人。

我正在操纵我的网络摄像头(MacBook)的实时视频,用OpenCV做一些人脸检测,然后使用pyvirtualcam将其导出到虚拟摄像头。通过这样做,我可以在Google、Zoom等会议期间打开被操纵的实时视频。

到目前为止,我已经设法使所有的工作,但它是较慢的,虽然我将框架设置为20 2fps,它更像是2fps。

有没有人知道我如何优化这个以获得一个平滑的视频?

这是我的代码(它检测人脸并在其周围放置一个红色矩形):

代码语言:javascript
运行
复制
import cv2
import pyvirtualcam
import face_recognition

captr = cv2.VideoCapture(1)
fmt = pyvirtualcam.PixelFormat.BGR
face_locations = []
with pyvirtualcam.Camera(width=1280, height=720, fps=20, fmt=fmt) as cam:
    while True:
        ret_val, frame = captr.read()
        face_locations = face_recognition.face_locations(frame)
        
        for top, right, bottom, left in face_locations:
            cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)

        frame = cv2.resize(frame, (1280, 720), interpolation=cv2.BORDER_DEFAULT)

        # cv2.imshow('my webcam', frame)
        cam.send(frame)
        cam.sleep_until_next_frame()
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break  # esc to quit
    cv2.destroyAllWindows() 
EN

回答 1

Stack Overflow用户

发布于 2021-12-09 15:44:21

谢谢你对此的想法。

我记得不久前我遇到了一个OpenCV face-detection tutorial,考虑到框架,它的工作没有问题。

因此,我使用了教程中的代码,并将其与pyvirtualcam结合使用,其结果非常适合我所希望的。

我在这方面还是很新的,我想知道为什么我的代码现在工作得很快,而我的旧的慢代码。

这是我的新代码:

代码语言:javascript
运行
复制
import cv2
import pyvirtualcam
import numpy as np

faceCascade = cv2.CascadeClassifier('Cascades/haarcascade_frontalface_default.xml')
video_capture = cv2.VideoCapture(1)
video_capture.set(3,1280)
video_capture.set(4,720)
fmt = pyvirtualcam.PixelFormat.BGR
with pyvirtualcam.Camera(width=1280, height=720, fps=25, fmt=fmt) as cam:
    while True:
        ret, frame = video_capture.read()
        frame = cv2.flip(frame, 1)
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        faces = faceCascade.detectMultiScale(
        gray,
        scaleFactor=1.2,
        minNeighbors=5,     
        minSize=(20, 20)
    )
        for (x,y,w,h) in faces:
            cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0),2)
            roi_gray = gray[y:y+h, x:x+w]
            roi_color = frame[y:y+h, x:x+w]

            frame = cv2.resize(frame, (1280, 720), interpolation=cv2.BORDER_DEFAULT)

        # cv2.imshow('my webcam', frame)
        cam.send(frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break  # esc to quit
    video_capture.release()
    cv2.destroyAllWindows()

我猜是因为我在改变计算方法?

还是我完全错了?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70268304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档