PortraitTransfer / live_demo.py
befozg's picture
fixed convertion issues
43b8fbc
raw
history blame
1.88 kB
import gradio as gr
from tools import Inference, Matting, log, extract_matte, harmonize, css, live_matting_step
from omegaconf import OmegaConf
import os
import sys
import numpy as np
import torchvision.transforms.functional as tf
from PIL import Image
import cv2 as cv
import time
import asyncio
args = OmegaConf.load(os.path.join(f"./config/test.yaml"))
log("Model loading")
phnet = Inference(**args)
stylematte = Matting(**args)
log("Model loaded")
async def show(queue):
while True:
log("SHOW FRAME")
frame = queue.get()
cv.imshow('Video', frame)
await asyncio.sleep(0.01)
async def main(queue):
video = cv.VideoCapture(0)
fps = 10
counter = 0
frame_count = 0
if not video.isOpened():
raise Exception('Video is not opened!')
begin = time.time()
for i in range(300):
counter += 1
frame_count += 1
ret, frame = video.read() # Capture frame-by-frame
inp = np.array(frame)
back = np.zeros_like(frame)
queue.put(inp)
# res = asyncio.ensure_future(
# live_matting_step(inp, back, stylematte))
# res = await live_matting_step(inp, back, stylematte)
log(f"{i} await")
end = time.time()
log(f"frames: {frame_count}, time: {end - begin}, fps: {frame_count/(end - begin) }")
if cv.waitKey(1) & 0xFF == ord('q'):
break
end = time.time()
log(f"OVERALL TIME CONSUMED: {end - begin}, frames: {frame_count}, fps: {frame_count/(end - begin) }")
# release the capture
video.release()
cv.destroyAllWindows()
if __name__ == "__main__":
queue = asyncio.Queue()
loop = asyncio.get_event_loop()
# asyncio.ensure_future(show(frame)) # Display the resulting frame
loop.run_until_complete(main(queue))
loop.run_until_complete(show(queue))
loop.run_forever()