human/render/video_render.py
2024-11-24 15:19:40 +08:00

57 lines
1.8 KiB
Python

#encoding = utf8
import copy
import time
from queue import Empty
from enum import Enum
import cv2
import numpy as np
from .base_render import BaseRender
def img_warp_back_inv_m(img, img_to, inv_m):
h_up, w_up, c = img_to.shape
mask = np.ones_like(img).astype(np.float32)
inv_mask = cv2.warpAffine(mask, inv_m, (w_up, h_up))
inv_img = cv2.warpAffine(img, inv_m, (w_up, h_up))
img_to[inv_mask == 1] = inv_img[inv_mask == 1]
return img_to
class VideoRender(BaseRender):
def __init__(self, play_clock, context, human_render):
super().__init__(play_clock, context, 'Video')
self._human_render = human_render
self.index = 0
def render(self, frame, ps):
res_frame, idx, type_ = frame
if type_ == 0:
combine_frame = self._context.frame_list_cycle[idx]
else:
bbox = self._context.coord_list_cycle[idx]
combine_frame = copy.deepcopy(self._context.frame_list_cycle[idx])
af = copy.deepcopy(self._context.align_frames[idx])
inv_m = self._context.inv_m_frames[idx]
y1, y2, x1, x2 = bbox
try:
res_frame = cv2.resize(res_frame.astype(np.uint8), (x2 - x1, y2 - y1))
af[y1:y2, x1:x2] = res_frame
combine_frame = img_warp_back_inv_m(af, combine_frame, inv_m)
except Exception as e:
print('resize error', e)
return
# cv2.imwrite(f'./images/res_frame_{ self.index }.png', res_frame)
# combine_frame[y1:y2, x1:x2] = res_frame
# cv2.imwrite(f'/combine_frame_{self.index}.png', combine_frame)
# self.index = self.index + 1
image = combine_frame
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
if self._human_render is not None:
self._human_render.put_image(image)