затем анализирую (без ошибок), пытаюсь повернуть и вот проблема.
- frame.show() показывает тензор разными цветами, выглядит очень неправильно
- self.check_tensor(rotated_tensor) после поворота показывает просто черный экран
также есть ли способ избежать преобразования тензора в изображение pil перед вращением? нельзя ли просто повернуть тензор?
def tensor_to_image(tensor):
tensor = (tensor * 255).byte()
tensor = tensor.squeeze(0)
tensor = tensor.permute(1, 2, 0)
image = Image.fromarray(np.array(tensor).astype(np.uint8))
image = cv2.cvtColor(np.asarray(image), cv2.COLOR_BGR2RGB)
image = Image.fromarray(np.asarray(image))
return image
def rotate_tensor(frame_tensor, landmarks):
roll = calc_face_angle(landmarks)
frame = tf.to_pil_image(frame_tensor.squeeze(0))
#frame = tensor_to_image(frame_tensor)
frame.show()
if not np.isnan(roll):
rotated_frame = frame.rotate(roll, resample=Image.BICUBIC, expand=True)
else:
print("Failed to calculate face angle for rotation")
return frame_tensor
#rotated_tensor = tf.to_tensor(rotated_frame).unsqueeze(0)
transform = transforms.ToTensor() # Используем torchvision для преобразования в тензор
rotated_tensor = transform(rotated_frame).unsqueeze(0)
return rotated_tensor
def check_tensor(self, frame_tensor):
frame_numpy = frame_tensor.squeeze(0).permute(1, 2, 0).byte().numpy()
#frame_numpy = cv2.cvtColor(frame_numpy, cv2.COLOR_RGB2BGR)
cv2.imshow("Frame", frame_numpy)
cv2.waitKey(0)
cv2.destroyAllWindows()
def analyze_video(self, video_path):
video_capture = cv2.VideoCapture(video_path)
for i in range(1):
ret, frame = video_capture.read()
if not ret:
break
# преобразуем фрейм в тензор
frame_tensor = torch.from_numpy(frame).float()
frame_tensor = frame_tensor.permute(2, 0, 1).unsqueeze(0)
#frame_tensor = frame_tensor[:, [2, 1, 0], :, :]
self.check_tensor(frame_tensor)
orig_prediction = self.analyze_frame(frame_tensor)
rotated_tensor = im.rotate_tensor(frame_tensor, orig_prediction.head())
self.check_tensor(rotated_tensor)
Подробнее здесь: https://stackoverflow.com/questions/792 ... rch-tensor
Мобильная версия