From 7d12fcc98cabe6124af43cb973e6e2baf86d982c Mon Sep 17 00:00:00 2001 From: zchengrong <124802516+zchengrong@users.noreply.github.com> Date: Tue, 8 Apr 2025 12:36:44 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=88=E6=96=B0=E5=8A=9F=E8=83=BD?= =?UTF-8?q?=EF=BC=89:=20=20pose=20transform=20=E9=83=A8=E7=BD=B2=20fix?= =?UTF-8?q?=EF=BC=88=E4=BF=AE=E5=A4=8Dbug=EF=BC=89:=20docs=EF=BC=88?= =?UTF-8?q?=E6=96=87=E6=A1=A3=E5=8F=98=E6=9B=B4=EF=BC=89:=20refactor?= =?UTF-8?q?=EF=BC=88=E9=87=8D=E6=9E=84=EF=BC=89:=20test(=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E6=B5=8B=E8=AF=95):?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../utils/pose_transform_upload.py | 57 +++++++----------- requirements.txt | Bin 1938 -> 1942 bytes 2 files changed, 23 insertions(+), 34 deletions(-) diff --git a/app/service/generate_image/utils/pose_transform_upload.py b/app/service/generate_image/utils/pose_transform_upload.py index 5f9f70d..c7fd37b 100644 --- a/app/service/generate_image/utils/pose_transform_upload.py +++ b/app/service/generate_image/utils/pose_transform_upload.py @@ -2,15 +2,14 @@ import io import logging import cv2 -import imageio import numpy as np +import skvideo.io # import boto3 from minio import Minio from app.core.config import * from app.service.utils.new_oss_client import oss_upload_image - # minio 配置 MINIO_URL = "www.minio.aida.com.hk:12024" MINIO_ACCESS = 'vXKFLSJkYeEq2DrSZvkB' @@ -50,18 +49,8 @@ def upload_gif(gif_buffer, user_id, category, file_name): def upload_video(frames, user_id, category, file_name): try: + ndarray_to_video(frames, file_name) object_name = f'{user_id}/{category}/{file_name}' - # 创建视频写入器 - fps = 1 # 帧率 - - fourcc = cv2.VideoWriter.fourcc(*'avc1') - video_writer = cv2.VideoWriter(file_name, fourcc, fps, (512, 768)) - - # 逐帧写入 - for frame in frames: - video_writer.write(cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)) # OpenCV需BGR格式 - video_writer.release() - minio_client.fput_object( "aida-users", object_name, @@ -70,29 +59,29 @@ def upload_video(frames, user_id, category, file_name): ) print(file_name) return f"aida-users/{object_name}" - - # # 生成内存中的视频字节流 - # video_buffer = io.BytesIO() - # with imageio.get_writer(video_buffer, format="mp4", fps=24) as writer: - # for img in frames: - # writer.append_data(img) - # writer.close() - # video_bytes = video_buffer.getvalue() - # - # object_name = f'{user_id}/{category}/{file_name}' - # # 上传视频流到MinIO - # minio_client.put_object( - # bucket_name="aida-users", - # object_name=object_name, - # data=io.BytesIO(video_bytes), - # length=len(video_bytes), - # content_type="video/mp4" - # ) - # return f"aida-users/{object_name}" except Exception as e: logging.warning(f"upload_video runtime exception : {e}") +def ndarray_to_video(images, output_path, frame_size=(512, 768), fps=1): + # 初始化视频写入器 + writer = skvideo.io.FFmpegWriter( + output_path, + inputdict={'-r': str(fps)}, + outputdict={'-r': str(fps), '-vcodec': 'libx264'} + ) + # 逐帧写入 + for frame in images: + # 调整尺寸(可选) + resized_frame = cv2.resize(frame, frame_size) + # 转换颜色通道(若需从 BGR 转 RGB) + rgb_frame = cv2.cvtColor(resized_frame, cv2.COLOR_BGR2RGB) + writer.writeFrame(rgb_frame) + + # 关闭写入器 + writer.close() + + if __name__ == '__main__': - images = np.random.randint(0, 256, size=(10, 768, 512, 3), dtype=np.uint8) - print(upload_video(images, user_id=89, category='test', file_name="1123123.mp4")) + images = np.random.randint(0, 256, size=(4, 768, 512, 3), dtype=np.uint8) + print(upload_video(images, user_id=89, category='pose_transform_video', file_name="1123123.mp4")) diff --git a/requirements.txt b/requirements.txt index 909fb2168e3b601ad8fa54f6433f2598f4a30e16..9a4490feeb6ceade103d002bfdbca7ee7cadc5a4 100644 GIT binary patch delta 16 XcmbQlKaGC_4;ynLL)m6-wsuAUCc6YL delta 12 TcmbQnKZ$<>58Gw|wl+op7|H`#