【问题标题】:Remove random background from video using ffmpeg or Python使用 ffmpeg 或 Python 从视频中删除随机背景
【发布时间】:2019-09-18 21:09:51
【问题描述】:

我想使用 ffmpegPython 从某人的视频中删除背景。如果我在任何地方录制视频,请检测视频中的人,然后删除除此人之外的任何内容。不要求绿色或单色背景,因为这可以通过 chromakey 完成,我不是在寻找那个。

我已经尝试过这种 (https://tryolabs.com/blog/2018/04/17/announcing-luminoth-0-1/) 方法,但它给了我矩形框的输出。它提供了足够的信息,因为要探索的区域足够缩小,但仍需要删除总背景。 我也尝试过grabcut (https://docs.opencv.org/4.1.0/d8/d83/tutorial_py_grabcut.html) 但需要用户交互否则结果不太好。 我也尝试使用ffmpeg 并找到了这个示例(http://oioiiooixiii.blogspot.com/2016/09/ffmpeg-extract-foreground-moving.html),但它需要静止图像,所以我尝试在与人录制视频之前拍摄背景图片,但需要做很多事情来区分背景图像和视频帧。

对于opencv 方法,我已经尝试过了。

img = cv.imread('pic.png')
mask = np.zeros(img.shape[:2], np.uint8)
bgdModel = np.zeros((1, 65), np.float64)
fgdModel = np.zeros((1, 65), np.float64)
rect = (39, 355, 1977, 2638)
cv.grabCut(img, mask, rect, bgdModel, fgdModel, 5, cv.GC_INIT_WITH_RECT)
mask2 = np.where((mask==2)|(mask==0), 0, 1).astype('uint8')
img = img*mask2[:, :, np.newaxis]
plt.imshow(img), plt.colorbar(), plt.show()

但它也删除了一些人的部分。 也尝试了ffmpeg的方式,但效果不佳。

ffmpeg -report -y -i "img.jpg" -i "vid.mov" -filter_complex "[1:v]format=yuva444p,lut=c3=128[video2withAlpha],[0:v][video2withAlpha]blend=all_mode=difference[out]" -map "[out]" "output.mp4"

我所需要的只是一个人在任何正常背景下拍摄的图像/视频,而不需要像区域选择或任何其他类似的用户交互。 Luminoth 有训练过的数据,但那是给一盒人而不是确切的人,以便我可以删除。任何有关删除背景的帮助或指导将不胜感激。

【问题讨论】:

    标签: python opencv machine-learning ffmpeg computer-vision


    【解决方案1】:

    您可以尝试基于深度学习的方法。这是一个示例仓库:

    https://github.com/TianzhongSong/Person-Segmentation-Keras
    

    这将为您提供任意背景的人的面具。只需使用 opencv 加载图像并将它们通过网络。

    【讨论】:

    • 优秀。我认为这可以给我我正在寻找的东西。
    • 一旦我得到正确的结果,我肯定会这样做。提到的数据集现在给出 404。所以试图从某个地方找到那个数据集,以便我可以测试它。
    • 我无法下载数据集,因为它在baidu 上,需要在其上创建帐户,但我不能,因为我不是中国的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 2021-11-29
    • 2022-06-17
    • 1970-01-01
    • 2021-11-04
    • 1970-01-01
    相关资源
    最近更新 更多