Реверсор фона видеоконференции

#python #video #background #conference

Вопрос:

Задача: Я хотел бы разработать программу, которая восстанавливает «реальный» фон участника видеоконференции, когда он использует виртуальный фон. Виртуальные фоны в Teams/Zoom и Co. тем временем довольно хорошо распознают контуры человека. По краям человека есть только небольшие области (см. Красные стрелки ниже), где виден реальный фон.

Изображение с красными стрелками

Поскольку человек на видеоконференции всегда немного перемещается, эти области также перемещаются внутри изображения. Разрабатываемая программа должна «собрать» эти области в течение видеоконференции, чтобы по крупицам дополнить истинный фон. Программа должна быть выполнена в Windows 10 и написана на python.

Идея У меня нет подхода к тому, как реализовать этот проект. Моя мысль состояла в том, чтобы удалить виртуальный фон, отделить области с «реальным» фоном и объединить с ранее сохраненным изображением. Наконец, изображение отображается в качестве фона в командах/масштабировании.

В настоящее время у меня есть следующий код. Там виртуальный фон удаляется, и любое изображение может быть установлено в качестве фона. (До сих пор у меня нет опыта работы с Python.)

 import cv2
import cvzone
from cvzone.SelfiSegmentationModule import SelfiSegmentation

cap = cv2.VideoCapture(0)
cap.set(3, 640)
cap.set(4, 480)
cap.set(cv2.CAP_PROP_FPS, 60)
segmentor = SelfiSegmentation()
fpsReader = cvzone.FPS()
imgBg = cv2.imread('backgrounds/1.png')

while True:
    success, img = cap.read()
    imgOut = segmentor.removeBG(img, imgBg, threshold=0.42)

    imgStacked = cvzone.stackImages([img, imgOut], 2, 1)
    fps, imgStacked = fpsReader.update(imgStacked)

    cv2.imshow("image", imgStacked)
    cv2.waitKey(1)
 

Вопрос
Я не знаю, как отфильтровать «реальные» части фона и соединить их вместе. У кого-нибудь есть подход?

Если у вас есть какие-либо вопросы или вам нужна дополнительная информация, просто дайте мне знать. Большое спасибо. 🙂