Как преобразовать фрейм данных (массив np) в тензор pytorchPython

Программы на Python
Ответить
Anonymous
 Как преобразовать фрейм данных (массив np) в тензор pytorch

Сообщение Anonymous »

Мне нужно преобразовать кадр видео (который представляет собой nparray) в тензор pytorch, выполнить с ним некоторые определенные действия и преобразовать его обратно, но у меня возникли проблемыИтак, у меня есть кадр, возвращенный из video_capture.read(), и, как я понял, это массив np. сначала конвертирую в тензор и проверяю, правильно ли выглядит (извините, почему-то не могу добавить фото)
затем анализирую (без ошибок), пытаюсь повернуть и вот проблема.
  • frame.show() показывает тензор разными цветами, выглядит очень неправильно
  • self.check_tensor(rotated_tensor) после поворота показывает просто черный экран
может кто-нибудь, пожалуйста, помогите мне это исправить, я так устал, чатгпт сбивает меня с толку еще больше и я ничего не понимаю... думаю, проблема с цветами связана о том, как я конвертирую тензор в изображение pil, но я попробовал несколько изменений (строки с комментариями), и ничего не помогло.
также есть ли способ избежать преобразования тензора в изображение 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»