使用ffmpeg或Python从视频中删除随机背景

使用ffmpeg或Python从视频中删除随机背景,python,opencv,machine-learning,ffmpeg,computer-vision,Python,Opencv,Machine Learning,Ffmpeg,Computer Vision,我想使用ffmpeg或Python从一个人的视频中删除背景。如果我在任何地方录制视频,请检测视频中的人,然后删除除此人以外的任何内容。不要求绿色或单色背景,因为这可以通过chromakey完成,我不寻求这一点 我尝试过这个()方法,但它给了我矩形框的输出。它提供了足够的信息,因为要探索的区域已经足够狭窄,但仍然需要删除全部背景。 我也尝试过grabcut,但这需要用户交互,否则效果不太好。 我还尝试使用ffmpeg并找到了这个示例(),但它需要静态图像,所以我尝试在与人录制视频之前拍摄背景图片,

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

我尝试过这个()方法,但它给了我矩形框的输出。它提供了足够的信息,因为要探索的区域已经足够狭窄,但仍然需要删除全部背景。 我也尝试过grabcut,但这需要用户交互,否则效果不太好。 我还尝试使用
ffmpeg
并找到了这个示例(),但它需要静态图像,所以我尝试在与人录制视频之前拍摄背景图片,但需要在背景图像和视频帧之间拍摄差异

对于
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
有经过训练的数据,但这是给人的盒子,不是确切的人,所以我可以删除。如果您有任何帮助或指导来消除背景,我们将不胜感激。

您可以尝试一种基于深度学习的方法。以下是回购的一个例子:

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

这将为任意背景的人提供一个面具。只需使用opencv加载图像,并通过网络发送即可。

非常好。我想这可以给我我想要的。一旦我从中得到正确的结果,我肯定会这么做。上面提到的数据集现在给出了404。所以试着从某个地方找到数据集,这样我就可以测试它。我不能下载数据集,因为它在
百度上,需要在上面创建帐户,我不能,因为我不是中国人。