昨天有个朋友找我要刷点政府的再就业的视频课,说是就是用浏览器打开固定的网站,然后用身份证号码登录,然后播放里面的视频,不定时的网页会通过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可以打开,所以就用来测试了。
结果证明还挺好用的,直接就能打开摄像头了,就是我放的视频文件。