美文网首页
基于 pyvirtualcam 使用 OBS 虚拟摄像头

基于 pyvirtualcam 使用 OBS 虚拟摄像头

作者: 狄仁杰666 | 来源:发表于2021-12-15 00:10 被阅读0次

前言

来啦老铁!

好久不见,甚是想念~

最近公司大神在某些测试场景中提到“虚拟摄像头”的概念,虽然只是工具,但我觉得还是蛮新颖的,值得学习记录一下,他就是:

  • OBS 中的虚拟摄像头;
  • python 体系下调用 OBS 的虚拟摄像头:pyvirtualcam;

毕竟没玩过,咱们一起来学习下吧~

简单认识 OBS

OBS 是一款广泛应用的视频直播录制软件。OBS 软件包含了一个虚拟摄像头功能。

简单认识 pyvirtualcam

pyvirtualcam 是 Python 体系下的一个发送帧到虚拟摄像头的第三方包,Python 中央仓库中的介绍:

整体步骤

  1. 安装 macOS: OBS;
  2. 使用 OBS 虚拟摄像头;
  3. 新建 python 项目并安装 pyvirtualcam 模块;
  4. 使用官方案例进行简单 demo;
  5. 演示发送图片、视频;

1. 安装 macOS: OBS

  • 安装地址;
    https://obsproject.com/

  • 下载安装包并安装;
    选择操作系统,点击后自动下载安装包,然后点击安装包安装即可。

  • 安装完成后打开 OBS 软件,软件样子如下:

打开OBS

如果是 windows 机器,则可能需要涉及到安装虚拟摄像头插件,笔者没有 windows 机器,请笔者自行百度~

2. 使用 OBS 虚拟摄像头;

  • 点击 OBS 软件中的 “+” 号,添加素材,例如我们选择视频,即:Media Source;
选择 sources Media Source 选择视频素材 修改布局 - 非必选 Start Virtual Camera 虚拟摄像头效果

使用了我女儿的一个视频,这爹也是没谁了😂

(我使用我们公司的产品进行视频通话,并选择在视频时选择虚拟摄像头,如下图:)


选择虚拟摄像头

以上为手工操作 OBS 使用虚拟摄像头的过程,下面我们来探索用代码来使用虚拟摄像头。

3. 新建 python 项目并安装 pyvirtualcam 模块;

  • 简单新建 python 项目,如:
python 项目
  • 安装 pyvirtualcam 模块:
pip3 install pyvirtualcam

4. 使用官方案例进行简单 demo;

import pyvirtualcam
import numpy as np


def test():
    with pyvirtualcam.Camera(width=1280, height=720, fps=20) as cam:
        print(f'Using virtual camera: {cam.device}')
        frame = np.zeros((cam.height, cam.width, 3), np.uint8)  # RGB
        while True:
            frame[:] = cam.frames_sent % 255  # grayscale animation
            cam.send(frame)
            cam.sleep_until_next_frame()


if __name__ == '__main__':
    test()

简单解读一下代码:

代码中创建了一个虚拟摄像头,模拟采集 1280*720,帧率为 20 的视频,模拟摄像头采集到了的内容为模拟的渐变灰度动画(RGB类型的图片组成的动画)

  • 定制颜色

a. 如果要改为渐变的其他颜色动画,则可以将 frame[:] = cam.frames_sent % 255 改为:

红色渐变动画:frame[:, :, 0] = cam.frames_sent % 255
绿色渐变动画:frame[:, :, 1] = cam.frames_sent % 255
蓝色渐变动画:frame[:, :, 2] = cam.frames_sent % 255

b. 如果要改为固定颜色动画,则可以将 frame[:] = cam.frames_sent % 255 改为:
固定红色:frame[:, :, 0] = 120,120 为颜色成分值,取值范围为 0 ~ 255;

c. 如果要改为任意颜色,如黄色,则可以将 frame[:] = cam.frames_sent % 255 改为:

固定黄色:
frame[:, :, 0] = 255
frame[:, :, 1] = 255
frame[:, :, 2] = 0

黄色

以上数值 255,255,0 这三个值则需要查看 RGB 颜色对照表,RGB 颜色对照表可参考:
https://tool.oschina.net/commons?type=3

明白了这个原理,我们也可以做出任意颜色组成的动画,此处不多做介绍,笔者有兴趣可以自行探索~

  • 执行 main.py;

必须先确保 OBS 软件已关闭虚拟摄像头,否则运行报错。

python3 main.py
执行 main.py
  • 查看虚拟摄像头的效果;
    (我使用我们公司的产品进行视频通话,在视频通话的时候,要选择虚拟摄像头,如下图的 OBS Virtual Camera)
选择虚拟摄像头 渐变 1 渐变 2 渐变 3

我们可以很清楚的看到看到,视频通话的发起者和对方,画面都是由渐变色的帧组成的,不再是使用真实硬件采集的画面,demo 成功~

5. 演示发送图片、视频;

视频是由一帧一帧的图片组成的,因此我们只需要掌握了图片的发送方式,视频自然不再话下,时间有限,因此笔者仅探索演示发送图片的过程;

  • 首先安装 opencv-python;
pip3 install opencv-python
  • 添加任意图片到项目,如 doggie.png:
doggie.png 文件 doggie.png
  • 修改 main.py 中的代码为:
import pyvirtualcam
import cv2


def test():
    image_file = 'doggie.png'
    image = cv2.imread(image_file)
    # 转换为RGB:由于 cv2 读出来的图片默认是 BGR,因此需要转换成 RGB
    image = image[:, :, [2, 1, 0]]
    with pyvirtualcam.Camera(width=794, height=978, fps=20) as cam:
        print(f'Using virtual camera: {cam.device}')
        while True:
            cam.send(image)
            cam.sleep_until_next_frame()


if __name__ == '__main__':
    test()

  • 重新执行 main.py 文件;
发送图片

基于上述的功能,我们可以包装出一些有意思的“玩具”,读者朋友可自行脑补~

好了,今天的 OBS + pyvirtualcam 的学习就要告一段落了,OBS 还有其他功能,我们有机会再一起学习~

如果本文对您有帮助,麻烦动动手指点点赞?

非常感谢!

相关文章

网友评论

      本文标题:基于 pyvirtualcam 使用 OBS 虚拟摄像头

      本文链接:https://www.haomeiwen.com/subject/tmbwxrtx.html