原文:
www.kdnuggets.com/2020/12/change-background-video-5-lines-code.html
评论
由 Ayoola Olafenwa,独立 AI 研究员
作者提供的照片
1. Google 网络安全证书 - 快速进入网络安全职业道路。
2. Google 数据分析专业证书 - 提升您的数据分析技能
3. Google IT 支持专业证书 - 支持您的组织的 IT
PixelLib 是一个库,旨在实现对象分割的简单实现。PixelLib 支持图像调优,即能够更改任何图像的背景。PixelLib 现在还支持视频调优,即能够更改视频和相机的背景。PixelLib 采用对象分割技术,进行出色的前景和背景分离。PixelLib 使用经过 pascalvoc 数据集训练的 deeplabv3+ 模型,该数据集支持 20 种对象类别。
person,bus,car,aeroplane, bicycle, ,motorbike,bird, boat, bottle, cat, chair, cow, dinningtable, dog, horse pottedplant, sheep, sofa, train, tv
背景效果支持如下:
1 使用图片更改图像的背景
2 为图像和视频的背景分配独特的颜色。
3 模糊图像和视频的背景。
4 将图像和视频的背景转为灰度。
5 为视频创建虚拟背景。
安装 PixelLib 及其依赖项:
使用以下命令安装 Tensorflow:(PixelLib 支持 Tensorflow 2.0 及以上版本)
- pip3 install tensorflow
安装 PixelLib 使用
- pip3 install pixellib
如果已安装,请使用以下命令升级到最新版本:
- pip3 install pixellib — 升级
在某些应用中,您可能希望检测图像或视频中的特定对象。deeplab 模型默认检测图像或视频中所有支持的对象。现在可以过滤掉未使用的检测,专注于图像或视频中的特定对象。
示例图像
来源:Unsplash.com 由 Strvnge Films 提供
我们打算模糊上图的背景。
模糊图像背景的代码。
输出图像
我们的目标是完全模糊图像中人物的背景,但对于其他对象的存在感到不满意。因此,需要修改代码以检测目标对象。
代码仍然相同,只是我们在blur_bg函数中引入了一个额外的参数detect。
change_bg.blur_bg("sample.jpg", extreme = True, output_image_name="output_img.jpg", detect = "person")
detect: 这是确定要检测的目标对象的参数。detect 的值设置为person**。这意味着模型将仅检测图像中的人。
这是仅显示我们目标对象的新图像。
如果我们打算仅显示图像中存在的汽车,只需将detect的值从person更改为car。
change_bg.blur_bg("sample.jpg", extreme = True, output_image_name="output_img.jpg", detect = "car")
我们将目标对象设置为car,并且图像中存在的其他对象都与背景一起被模糊。
目标对象的彩色背景
可以通过颜色效果进行目标检测。
change_bg.color_bg("sample.jpg", colors = (0,128,0), output_image_name="output_img.jpg", detect = "person")
用新图片更改目标对象的背景
背景图像
来源:Unsplash.com by Dawid Zawila
change_bg.change_bg_img("sample.jpg", "background.jpg", output_image_name="output_img.jpg", detect = "person")
将目标对象的背景转换为灰度
change_bg.gray_bg("sample.jpg", output_image_name="output_img.jpg", detect = "person")
阅读这篇文章可以全面了解如何使用 PixelLib 编辑图像背景。
视频调节是改变任何视频背景的能力。
模糊视频背景
PixelLib 使得只需五行代码即可方便地模糊任何视频的背景。
sample_video
模糊视频文件背景的代码
import pixellib
from pixellib.tune_bg import alter_bg
change_bg = alter_bg(model_type = "pb")
change_bg.load_pascalvoc_model("xception_pascalvoc.pb")
我们导入了 pixellib,并从 pixellib 中导入了alter_bg类。创建了该类的实例,并在类内添加了一个参数model_type并将其设置为pb。最后,我们调用了函数来加载模型。
注意: PixelLib 支持两种类型的 deeplabv3+模型,keras 和 tensorflow 模型。keras 模型是从 tensorflow 模型的检查点提取的。tensorflow 模型的性能优于从检查点提取的 keras 模型。我们将使用 tensorflow 模型。从这里下载 tensorflow 模型。
有三个参数决定背景的模糊程度。
low: 当设置为 true 时,背景会被轻微模糊。
moderate: 当设置为 true 时,背景会被中等程度地模糊。
extreme: 当设置为 true 时,背景会被深度模糊。
change_bg.blur_video("sample_video.mp4", extreme = True, frames_per_second=10, output_video_name="blur_video.mp4", detect = "person")
这是模糊视频背景的代码行。这个函数接受五个参数:
video_path: 这是要模糊其背景的视频文件的路径。
extreme: 设置为 true 时,视频背景将被极度模糊。
frames_per_second: 这是设置输出视频文件每秒帧数的参数。在这种情况下,它设置为 10,即保存的视频文件将每秒有 10 帧。
output_video_name: 这是保存的视频。输出视频将保存在当前工作目录中。
detect: 这是选择视频中目标对象的参数。它设置为 person。
输出视频
模糊相机画面的背景
import cv2capture = cv2.VideoCapture(0)
我们导入了 cv2 并包含了捕获相机画面的代码。
change_bg.blur_camera(capture, extreme = True, frames_per_second= 5, output_video_name=”output_video.mp4", show_frames= True,frame_name= “frame”, detect = "person")
在模糊相机画面的代码中,我们将视频的文件路径替换为捕获,即我们将处理相机画面的流而不是视频文件。我们添加了额外的参数来显示相机画面:
show_frames: 这是处理显示模糊相机画面的参数。
frame_name: 这是显示的相机画面的名称。
输出视频
哇!PixelLib 成功模糊了视频中的背景。
PixelLib 使为任何视频创建虚拟背景变得非常简单,你可以使用任何图像为视频创建虚拟背景。
示例视频
用作视频背景的图像
来源: Unsplash.com 由 Handy Holmes
change_bg.change_video_bg(“sample_video.mp4”, “bg.jpg”, frames_per_second = 10, output_video_name=”output_video.mp4", detect = “person”)
代码仍然相同,只是我们调用了函数 change_video_bg 来为视频创建虚拟背景。该函数接受我们想用作视频背景的图像路径。
输出视频
漂亮的演示!我们成功地为视频创建了虚拟空间背景。
为相机画面创建虚拟背景
change_bg.change_camera_bg(cap, “space.jpg”, frames_per_second = 5, show_frames=True, frame_name=”frame”, output_video_name=”output_video.mp4", detect = “person”)
这与我们用于模糊相机画面的代码类似。唯一的区别是我们调用了函数 change_camera_bg。我们执行了相同的例程,替换了视频的文件路径为捕获,并添加了相同的参数。
输出视频
哇!PixelLib 成功为我的视频创建了虚拟背景。
视频背景着色
PixelLib 使为视频背景分配任意颜色成为可能。
给视频文件背景着色的代码
change_bg.color_video("sample_video.mp4", colors = (0, 128, 0), frames_per_second=15, output_video_name="output_video.mp4", detect = "person")
代码还是相同的,只是我们调用了函数 color_video 给视频背景上色。函数 color_bg 采用参数 colors,而颜色的 RGB 值设置为绿色。绿色的 RGB 值是 (0, 128, 0)。
输出视频
change_bg.color_video("sample_video.mp4", colors = (0, 128, 0), frames_per_second=15, output_video_name="output_video.mp4", detect = "person")
同样的视频,背景为白色
为相机的画面着色背景
change_bg.color_camera(capture, frames_per_second=10,colors = (0, 128, 0), show_frames = True, frame_name = “frame”, output_video_name=”output_video.mp4", detect = "person")
这与我们用于创建相机画面虚拟背景的代码类似。唯一的不同是我们调用了函数 color_camera。我们进行了相同的操作,将视频的文件路径替换为捕捉,并添加了相同的参数。
输出视频
漂亮的演示!我的背景成功地用 PixelLib 变成了绿色。
灰度视频背景
将视频文件的背景转换为灰度代码
change_bg.gray_video("sample_video.mp4", frames_per_second=10, output_video_name="output_video.mp4", detect = "person")
输出视频
注意: 视频的背景将被改变,对象保持其原始质量。
灰度化相机的画面背景
这与我们用来为相机画面上色的代码类似。唯一的不同是我们调用了函数 gray_camera。我们进行了相同的操作,将视频文件路径替换为捕捉,并添加了相同的参数。
通过以下方式联系我:
电子邮件: [email protected]
LinkedIn: Ayoola Olafenwa
推特: @AyoolaOlafenwa
Facebook: Ayoola Olafenwa
查看这些文章,了解如何使用 PixelLib 对图像和视频中的对象进行语义和实例分割。
使用 PixelLib 进行语义和实例分割。
视频的语义和实例分割。
使用 PixelLib 对 150 类对象进行语义分割
使用 7 行代码训练数据集,实现实例分割和目标检测。
简介: Ayoola Olafenwa 是一位独立的人工智能研究员,专注于计算机视觉领域。
原文。已获授权转载。
相关:
-
用 5 行代码更改任何图像的背景
-
计算机视觉路线图
-
使用深度学习自动旋转图像