用Python编写一个模拟usb摄像头的程序

Source

昨天有个朋友找我要刷点政府的再就业的视频课,说是就是用浏览器打开固定的网站,然后用身份证号码登录,然后播放里面的视频,不定时的网页会通过usb摄像头拍照做人脸识别,就是这么一个简单的要求,叫我给想想办法,我就想用自动化来处理这个问题,说是每刷满一个人的学时就可以给我100元,我一想这个事可以啊!所以就着急忙慌的开始找办法解决这个问题,最终把虚拟摄像头的问题给解决了,操作浏览器的自动化还没有搞定,但是这个事估计黄了,昨天找完我,今天就没有在问过我了,感觉人家就是说了一下,我就开始搞了。这是我大意了,不过也没有关系,毕竟也是经验,以后没准还有其他的人,需要相同的功能呢?特此记录一下。

直接把程序贴出来吧,我测试过了可以正常的模拟出摄像头出来:

# -*-coding:utf-8-*-
# 2024/7/10

import cv2
import os
import random
import pyvirtualcam

v_path = './video/'
'''本程序直接运行就行,上面导入的4个库要有,v_path指的是在本程序的目录中有一个video的文件夹,
里面放一个模拟摄像头需要播放的视频文件,这个视频文件的画面长宽和程序中的长宽要一致,不然会报错,程序运行后
需要在此电脑右键-》管理-》设备管理器-》照相机-》右键把本来的usb摄像机禁用了
然后运行本程序,就能模拟出来一个正在播放video文件夹中视频的摄像头出来。当然OBS软件也要安装好了。'''

class FakeCamera:
    def __init__(self, video_file, root_path):

        self.number = len(video_file)
        self.root = root_path

        self.video_file = video_file

        self.video = cv2.VideoCapture(self.root + self.video_file[random.randint(0, self.number - 1)])

    def read(self):
        ret, frame = self.video.read()
        if ret:
            return ret, frame
        else:
            # is video is done, select a new video file randomly
            self.video = cv2.VideoCapture(self.root + self.video_file[random.randint(0, self.number - 1)])
            # is video is done, restart the video
            self.video.set(cv2.CAP_PROP_POS_FRAMES, 0)

            return self.video.read()

    def release(self):
        self.video.release()


# main funciton
def play_fake_camera():
    video_file = os.listdir(v_path)  # video path
    root_path = v_path
    fake_camera = FakeCamera(video_file, root_path)
    print('Running fake camera')

    w = 1280
    h = 720

    # create virtual camera
    with pyvirtualcam.Camera(width=w, height=h, fps=29) as cam:
        while True:
            ret, frame = fake_camera.read()
            if not ret:
                break
            # turn frame to BGR
            img = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)

            # send frame to virtual camera
            cam.send(img)
            # camera wait for next frame
            cam.sleep_until_next_frame()
    fake_camera.release()
    cv2.destroyAllWindows()


# run the code
play_fake_camera()

本程序可以正常使用,我是测试了的,可以看看我的截图:如果有需要的朋友可以找我付费开发的:我的win10系统不知道怎么调摄像头,知道孩子玩的scratch可以打开,所以就用来测试了。

结果证明还挺好用的,直接就能打开摄像头了,就是我放的视频文件。