Удалить случайный фон из видео, используя ffmpeg или Python - PullRequest
0 голосов
/ 30 апреля 2019

Я хочу удалить фон из видео человека, используя ffmpeg или Python.Если я записываю видео в любом месте, определите человека на видео и затем удалите все, кроме этого человека.Не запрашивать зеленый или одноцветный фон, как это можно сделать с помощью кеинга, и я не ищу этого.

Я пробовал этот подход (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 имеет обученные данные, но это дает ящик человека, а не человека, чтобы я мог удалить.Будем благодарны за любую помощь или руководство по удалению фона.

1 Ответ

1 голос
/ 30 апреля 2019

Вы можете попробовать подход, основанный на глубоком обучении.Вот пример репо:

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

Это даст вам маску для человека на произвольном фоне.Просто загрузите изображения с помощью opencv и поместите их через сеть.

...