From 8a468f3dc6421e5577861f476ac8672c27592719 Mon Sep 17 00:00:00 2001 From: gooishin Date: Fri, 29 Nov 2024 16:10:01 +0800 Subject: [PATCH] 245 user story add digital avatar use case (#246) --- usecases/ai/digital-avatar/.gitignore | 12 + usecases/ai/digital-avatar/README.md | 118 + .../backend/liveportrait/Dockerfile | 77 + .../liveportrait/liveportrait/.gitignore | 34 + .../backend/liveportrait/liveportrait/LICENSE | 30 + .../backend/liveportrait/liveportrait/app.py | 493 + .../liveportrait/liveportrait/app_animals.py | 248 + .../liveportrait/intel_xpu/attention.py | 175 + .../liveportrait/intel_xpu/xpu_override.py | 319 + .../liveportrait/pretrained_weights/.gitkeep | 0 .../liveportrait/liveportrait/readme.md | 296 + .../liveportrait/liveportrait/readme_zh_cn.md | 309 + .../liveportrait/liveportrait/speed.py | 195 + .../liveportrait/src/config/__init__.py | 0 .../src/config/argument_config.py | 59 + .../liveportrait/src/config/base_config.py | 29 + .../liveportrait/src/config/crop_config.py | 35 + .../src/config/inference_config.py | 69 + .../liveportrait/src/config/models.yaml | 43 + .../liveportrait/src/gradio_pipeline.py | 665 ++ .../src/live_portrait_pipeline.py | 471 + .../src/live_portrait_pipeline_animal.py | 237 + .../liveportrait/src/live_portrait_wrapper.py | 384 + .../liveportrait/src/modules/__init__.py | 0 .../modules/appearance_feature_extractor.py | 48 + .../liveportrait/src/modules/convnextv2.py | 149 + .../liveportrait/src/modules/dense_motion.py | 104 + .../src/modules/motion_extractor.py | 35 + .../src/modules/spade_generator.py | 59 + .../modules/stitching_retargeting_network.py | 38 + .../liveportrait/src/modules/util.py | 452 + .../src/modules/warping_network.py | 77 + .../liveportrait/src/utils/__init__.py | 0 .../src/utils/animal_landmark_runner.py | 138 + .../liveportrait/src/utils/camera.py | 73 + .../src/utils/check_windows_port.py | 18 + .../liveportrait/src/utils/crop.py | 423 + .../liveportrait/src/utils/cropper.py | 313 + .../XPose/config_model/UniPose_SwinT.py | 125 + .../XPose/config_model/coco_transformer.py | 8 + .../XPose/models/UniPose/__init__.py | 10 + .../XPose/models/UniPose/attention.py | 373 + .../XPose/models/UniPose/backbone.py | 211 + .../models/UniPose/deformable_transformer.py | 1230 +++ .../XPose/models/UniPose/fuse_modules.py | 274 + .../XPose/models/UniPose/mask_generate.py | 56 + .../models/UniPose/ops/functions/__init__.py | 10 + .../ops/functions/ms_deform_attn_func.py | 61 + .../models/UniPose/ops/modules/__init__.py | 9 + .../UniPose/ops/modules/ms_deform_attn.py | 142 + .../ops/modules/ms_deform_attn_key_aware.py | 130 + .../XPose/models/UniPose/ops/setup.py | 73 + .../ops/src/cpu/ms_deform_attn_cpu.cpp | 41 + .../UniPose/ops/src/cpu/ms_deform_attn_cpu.h | 33 + .../ops/src/cuda/ms_deform_attn_cuda.cu | 153 + .../ops/src/cuda/ms_deform_attn_cuda.h | 30 + .../ops/src/cuda/ms_deform_im2col_cuda.cuh | 1327 +++ .../models/UniPose/ops/src/ms_deform_attn.h | 62 + .../XPose/models/UniPose/ops/src/vision.cpp | 16 + .../XPose/models/UniPose/ops/test.py | 89 + .../XPose/models/UniPose/position_encoding.py | 157 + .../XPose/models/UniPose/swin_transformer.py | 701 ++ .../models/UniPose/transformer_deformable.py | 595 ++ .../models/UniPose/transformer_vanilla.py | 102 + .../XPose/models/UniPose/unipose.py | 621 ++ .../XPose/models/UniPose/utils.py | 348 + .../dependencies/XPose/models/__init__.py | 16 + .../dependencies/XPose/models/registry.py | 58 + .../XPose/predefined_keypoints.py | 56 + .../utils/dependencies/XPose/transforms.py | 394 + .../utils/dependencies/XPose/util/addict.py | 159 + .../utils/dependencies/XPose/util/box_ops.py | 139 + .../utils/dependencies/XPose/util/config.py | 428 + .../dependencies/XPose/util/keypoint_ops.py | 29 + .../src/utils/dependencies/XPose/util/misc.py | 701 ++ .../dependencies/insightface/__init__.py | 20 + .../dependencies/insightface/app/__init__.py | 1 + .../dependencies/insightface/app/common.py | 49 + .../insightface/app/face_analysis.py | 110 + .../dependencies/insightface/data/__init__.py | 2 + .../dependencies/insightface/data/image.py | 27 + .../data/images/Tom_Hanks_54745.png | Bin 0 -> 12123 bytes .../insightface/data/images/mask_black.jpg | Bin 0 -> 21308 bytes .../insightface/data/images/mask_blue.jpg | Bin 0 -> 44728 bytes .../insightface/data/images/mask_green.jpg | Bin 0 -> 6116 bytes .../insightface/data/images/mask_white.jpg | Bin 0 -> 78905 bytes .../insightface/data/images/t1.jpg | Bin 0 -> 128824 bytes .../insightface/data/objects/meanshape_68.pkl | Bin 0 -> 974 bytes .../insightface/data/pickle_object.py | 17 + .../insightface/data/rec_builder.py | 71 + .../insightface/model_zoo/__init__.py | 6 + .../insightface/model_zoo/arcface_onnx.py | 92 + .../insightface/model_zoo/attribute.py | 94 + .../insightface/model_zoo/inswapper.py | 114 + .../insightface/model_zoo/landmark.py | 114 + .../insightface/model_zoo/model_store.py | 103 + .../insightface/model_zoo/model_zoo.py | 97 + .../insightface/model_zoo/retinaface.py | 301 + .../insightface/model_zoo/scrfd.py | 348 + .../insightface/utils/__init__.py | 6 + .../insightface/utils/constant.py | 3 + .../insightface/utils/download.py | 67 + .../insightface/utils/face_align.py | 103 + .../insightface/utils/filesystem.py | 157 + .../dependencies/insightface/utils/storage.py | 52 + .../insightface/utils/transform.py | 116 + .../src/utils/face_analysis_diy.py | 79 + .../liveportrait/src/utils/filter.py | 19 + .../liveportrait/src/utils/helper.py | 199 + .../src/utils/human_landmark_runner.py | 95 + .../liveportrait/liveportrait/src/utils/io.py | 117 + .../src/utils/resources/clip_embedding_68.pkl | Bin 0 -> 71352 bytes .../src/utils/resources/clip_embedding_9.pkl | Bin 0 -> 10923 bytes .../src/utils/resources/lip_array.pkl | Bin 0 -> 658 bytes .../src/utils/resources/mask_template.png | Bin 0 -> 3470 bytes .../src/utils/retargeting_utils.py | 24 + .../liveportrait/src/utils/rprint.py | 16 + .../liveportrait/src/utils/timer.py | 29 + .../liveportrait/src/utils/video.py | 218 + .../liveportrait/src/utils/viz.py | 19 + .../backend/liveportrait/main.py | 92 + .../backend/liveportrait/requirements.txt | 21 + .../backend/wav2lip/.dockerignore | 4 + .../digital-avatar/backend/wav2lip/Dockerfile | 77 + .../ai/digital-avatar/backend/wav2lip/main.py | 84 + .../backend/wav2lip/requirements.txt | 8 + .../backend/wav2lip/setup/download_model.py | 70 + .../backend/wav2lip/setup/wav2lip_gan.pth | 0 .../backend/wav2lip/wav2lip/README.md | 188 + .../backend/wav2lip/wav2lip/__init__.py | 0 .../backend/wav2lip/wav2lip/audio.py | 138 + .../backend/wav2lip/wav2lip/bbox.py | 129 + .../wav2lip/wav2lip/color_syncnet_train.py | 279 + .../wav2lip/wav2lip/export_openvino.py | 82 + .../wav2lip/wav2lip/face_detection/README.md | 1 + .../wav2lip/face_detection/__init__.py | 7 + .../wav2lip/wav2lip/face_detection/api.py | 79 + .../face_detection/detection/__init__.py | 1 + .../wav2lip/face_detection/detection/core.py | 130 + .../face_detection/detection/sfd/__init__.py | 1 + .../face_detection/detection/sfd/bbox.py | 129 + .../face_detection/detection/sfd/detect.py | 112 + .../face_detection/detection/sfd/net_s3fd.py | 129 + .../detection/sfd/sfd_detector.py | 59 + .../wav2lip/wav2lip/face_detection/models.py | 261 + .../wav2lip/wav2lip/face_detection/utils.py | 313 + .../wav2lip/wav2lip/filelists/README.md | 1 + .../backend/wav2lip/wav2lip/hparams.py | 101 + .../wav2lip/wav2lip/hq_wav2lip_train.py | 443 + .../wav2lip/wav2lip/models/__init__.py | 2 + .../backend/wav2lip/wav2lip/models/conv.py | 44 + .../backend/wav2lip/wav2lip/models/syncnet.py | 66 + .../backend/wav2lip/wav2lip/models/wav2lip.py | 184 + .../backend/wav2lip/wav2lip/ov_wav2lip.py | 707 ++ .../backend/wav2lip/wav2lip/preprocess.py | 113 + .../backend/wav2lip/wav2lip/wav2lip_train.py | 374 + usecases/ai/digital-avatar/docker-compose.yml | 168 + .../ai/digital-avatar/docs/architecture.png | Bin 0 -> 532394 bytes usecases/ai/digital-avatar/docs/demo.gif | Bin 0 -> 1550336 bytes usecases/ai/digital-avatar/env.template | 1 + .../ai/digital-avatar/frontend/.eslintrc.json | 51 + .../ai/digital-avatar/frontend/.gitignore | 36 + .../ai/digital-avatar/frontend/Dockerfile | 58 + usecases/ai/digital-avatar/frontend/README.md | 36 + .../frontend/app/api/chat/route.ts | 44 + .../frontend/app/fonts/GeistMonoVF.woff | Bin 0 -> 67864 bytes .../frontend/app/fonts/GeistVF.woff | Bin 0 -> 66268 bytes .../digital-avatar/frontend/app/globals.css | 78 + .../ai/digital-avatar/frontend/app/layout.tsx | 40 + .../ai/digital-avatar/frontend/app/page.tsx | 20 + .../digital-avatar/frontend/components.json | 20 + .../frontend/components/avatar/index.tsx | 171 + .../frontend/components/chat/Markdown.tsx | 19 + .../frontend/components/chat/index.tsx | 166 + .../frontend/components/ui/button.tsx | 57 + .../frontend/components/ui/input.tsx | 25 + .../frontend/components/ui/scroll-area.tsx | 48 + .../frontend/context/VideoQueueContext.tsx | 49 + .../frontend/hooks/useAudioRecorder.tsx | 220 + .../frontend/hooks/useLipsync.tsx | 19 + .../digital-avatar/frontend/hooks/useSTT.tsx | 22 + .../digital-avatar/frontend/hooks/useTTS.tsx | 19 + .../frontend/hooks/useVideoQueue.tsx | 8 + .../ai/digital-avatar/frontend/lib/api.ts | 97 + .../ai/digital-avatar/frontend/lib/utils.ts | 6 + .../digital-avatar/frontend/next.config.mjs | 6 + .../digital-avatar/frontend/package-lock.json | 9095 +++++++++++++++++ .../ai/digital-avatar/frontend/package.json | 50 + .../frontend/postcss.config.mjs | 8 + .../frontend/providers/index.tsx | 19 + .../frontend/tailwind.config.ts | 63 + .../ai/digital-avatar/frontend/tsconfig.json | 26 + .../ai/digital-avatar/frontend/types/api.ts | 10 + usecases/ai/microservices/ollama/Dockerfile | 8 +- .../ai/microservices/ollama/healthcheck.sh | 37 + usecases/ai/microservices/ollama/run.sh | 32 + .../microservices/speech-to-text/Dockerfile | 8 +- .../ai/microservices/speech-to-text/main.py | 11 +- .../microservices/text-to-speech/Dockerfile | 2 +- .../ai/microservices/text-to-speech/main.py | 13 +- 200 files changed, 33361 insertions(+), 11 deletions(-) create mode 100644 usecases/ai/digital-avatar/.gitignore create mode 100644 usecases/ai/digital-avatar/README.md create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/Dockerfile create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/.gitignore create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/LICENSE create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/app.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/app_animals.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/intel_xpu/attention.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/intel_xpu/xpu_override.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/pretrained_weights/.gitkeep create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/readme.md create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/readme_zh_cn.md create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/speed.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/config/__init__.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/config/argument_config.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/config/base_config.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/config/crop_config.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/config/inference_config.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/config/models.yaml create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/gradio_pipeline.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/live_portrait_pipeline.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/live_portrait_pipeline_animal.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/live_portrait_wrapper.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/modules/__init__.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/modules/appearance_feature_extractor.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/modules/convnextv2.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/modules/dense_motion.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/modules/motion_extractor.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/modules/spade_generator.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/modules/stitching_retargeting_network.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/modules/util.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/modules/warping_network.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/__init__.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/animal_landmark_runner.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/camera.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/check_windows_port.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/crop.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/cropper.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/config_model/UniPose_SwinT.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/config_model/coco_transformer.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/__init__.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/attention.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/backbone.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/deformable_transformer.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/fuse_modules.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/mask_generate.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/functions/__init__.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/functions/ms_deform_attn_func.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/modules/__init__.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/modules/ms_deform_attn.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/modules/ms_deform_attn_key_aware.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/setup.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/src/cpu/ms_deform_attn_cpu.cpp create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/src/cpu/ms_deform_attn_cpu.h create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/src/cuda/ms_deform_attn_cuda.cu create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/src/cuda/ms_deform_attn_cuda.h create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/src/cuda/ms_deform_im2col_cuda.cuh create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/src/ms_deform_attn.h create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/src/vision.cpp create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/test.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/position_encoding.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/swin_transformer.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/transformer_deformable.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/transformer_vanilla.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/unipose.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/utils.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/__init__.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/registry.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/predefined_keypoints.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/transforms.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/util/addict.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/util/box_ops.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/util/config.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/util/keypoint_ops.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/util/misc.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/__init__.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/app/__init__.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/app/common.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/app/face_analysis.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/data/__init__.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/data/image.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/data/images/Tom_Hanks_54745.png create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/data/images/mask_black.jpg create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/data/images/mask_blue.jpg create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/data/images/mask_green.jpg create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/data/images/mask_white.jpg create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/data/images/t1.jpg create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/data/objects/meanshape_68.pkl create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/data/pickle_object.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/data/rec_builder.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/model_zoo/__init__.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/model_zoo/arcface_onnx.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/model_zoo/attribute.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/model_zoo/inswapper.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/model_zoo/landmark.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/model_zoo/model_store.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/model_zoo/model_zoo.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/model_zoo/retinaface.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/model_zoo/scrfd.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/utils/__init__.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/utils/constant.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/utils/download.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/utils/face_align.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/utils/filesystem.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/utils/storage.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/utils/transform.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/face_analysis_diy.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/filter.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/helper.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/human_landmark_runner.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/io.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/resources/clip_embedding_68.pkl create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/resources/clip_embedding_9.pkl create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/resources/lip_array.pkl create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/resources/mask_template.png create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/retargeting_utils.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/rprint.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/timer.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/video.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/viz.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/main.py create mode 100644 usecases/ai/digital-avatar/backend/liveportrait/requirements.txt create mode 100644 usecases/ai/digital-avatar/backend/wav2lip/.dockerignore create mode 100644 usecases/ai/digital-avatar/backend/wav2lip/Dockerfile create mode 100644 usecases/ai/digital-avatar/backend/wav2lip/main.py create mode 100644 usecases/ai/digital-avatar/backend/wav2lip/requirements.txt create mode 100644 usecases/ai/digital-avatar/backend/wav2lip/setup/download_model.py create mode 100644 usecases/ai/digital-avatar/backend/wav2lip/setup/wav2lip_gan.pth create mode 100644 usecases/ai/digital-avatar/backend/wav2lip/wav2lip/README.md create mode 100644 usecases/ai/digital-avatar/backend/wav2lip/wav2lip/__init__.py create mode 100644 usecases/ai/digital-avatar/backend/wav2lip/wav2lip/audio.py create mode 100644 usecases/ai/digital-avatar/backend/wav2lip/wav2lip/bbox.py create mode 100644 usecases/ai/digital-avatar/backend/wav2lip/wav2lip/color_syncnet_train.py create mode 100644 usecases/ai/digital-avatar/backend/wav2lip/wav2lip/export_openvino.py create mode 100644 usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/README.md create mode 100644 usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/__init__.py create mode 100644 usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/api.py create mode 100644 usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/detection/__init__.py create mode 100644 usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/detection/core.py create mode 100644 usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/detection/sfd/__init__.py create mode 100644 usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/detection/sfd/bbox.py create mode 100644 usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/detection/sfd/detect.py create mode 100644 usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/detection/sfd/net_s3fd.py create mode 100644 usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/detection/sfd/sfd_detector.py create mode 100644 usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/models.py create mode 100644 usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/utils.py create mode 100644 usecases/ai/digital-avatar/backend/wav2lip/wav2lip/filelists/README.md create mode 100644 usecases/ai/digital-avatar/backend/wav2lip/wav2lip/hparams.py create mode 100644 usecases/ai/digital-avatar/backend/wav2lip/wav2lip/hq_wav2lip_train.py create mode 100644 usecases/ai/digital-avatar/backend/wav2lip/wav2lip/models/__init__.py create mode 100644 usecases/ai/digital-avatar/backend/wav2lip/wav2lip/models/conv.py create mode 100644 usecases/ai/digital-avatar/backend/wav2lip/wav2lip/models/syncnet.py create mode 100644 usecases/ai/digital-avatar/backend/wav2lip/wav2lip/models/wav2lip.py create mode 100644 usecases/ai/digital-avatar/backend/wav2lip/wav2lip/ov_wav2lip.py create mode 100644 usecases/ai/digital-avatar/backend/wav2lip/wav2lip/preprocess.py create mode 100644 usecases/ai/digital-avatar/backend/wav2lip/wav2lip/wav2lip_train.py create mode 100644 usecases/ai/digital-avatar/docker-compose.yml create mode 100644 usecases/ai/digital-avatar/docs/architecture.png create mode 100644 usecases/ai/digital-avatar/docs/demo.gif create mode 100644 usecases/ai/digital-avatar/env.template create mode 100644 usecases/ai/digital-avatar/frontend/.eslintrc.json create mode 100644 usecases/ai/digital-avatar/frontend/.gitignore create mode 100644 usecases/ai/digital-avatar/frontend/Dockerfile create mode 100644 usecases/ai/digital-avatar/frontend/README.md create mode 100644 usecases/ai/digital-avatar/frontend/app/api/chat/route.ts create mode 100644 usecases/ai/digital-avatar/frontend/app/fonts/GeistMonoVF.woff create mode 100644 usecases/ai/digital-avatar/frontend/app/fonts/GeistVF.woff create mode 100644 usecases/ai/digital-avatar/frontend/app/globals.css create mode 100644 usecases/ai/digital-avatar/frontend/app/layout.tsx create mode 100644 usecases/ai/digital-avatar/frontend/app/page.tsx create mode 100644 usecases/ai/digital-avatar/frontend/components.json create mode 100644 usecases/ai/digital-avatar/frontend/components/avatar/index.tsx create mode 100644 usecases/ai/digital-avatar/frontend/components/chat/Markdown.tsx create mode 100644 usecases/ai/digital-avatar/frontend/components/chat/index.tsx create mode 100644 usecases/ai/digital-avatar/frontend/components/ui/button.tsx create mode 100644 usecases/ai/digital-avatar/frontend/components/ui/input.tsx create mode 100644 usecases/ai/digital-avatar/frontend/components/ui/scroll-area.tsx create mode 100644 usecases/ai/digital-avatar/frontend/context/VideoQueueContext.tsx create mode 100644 usecases/ai/digital-avatar/frontend/hooks/useAudioRecorder.tsx create mode 100644 usecases/ai/digital-avatar/frontend/hooks/useLipsync.tsx create mode 100644 usecases/ai/digital-avatar/frontend/hooks/useSTT.tsx create mode 100644 usecases/ai/digital-avatar/frontend/hooks/useTTS.tsx create mode 100644 usecases/ai/digital-avatar/frontend/hooks/useVideoQueue.tsx create mode 100644 usecases/ai/digital-avatar/frontend/lib/api.ts create mode 100644 usecases/ai/digital-avatar/frontend/lib/utils.ts create mode 100644 usecases/ai/digital-avatar/frontend/next.config.mjs create mode 100644 usecases/ai/digital-avatar/frontend/package-lock.json create mode 100644 usecases/ai/digital-avatar/frontend/package.json create mode 100644 usecases/ai/digital-avatar/frontend/postcss.config.mjs create mode 100644 usecases/ai/digital-avatar/frontend/providers/index.tsx create mode 100644 usecases/ai/digital-avatar/frontend/tailwind.config.ts create mode 100644 usecases/ai/digital-avatar/frontend/tsconfig.json create mode 100644 usecases/ai/digital-avatar/frontend/types/api.ts create mode 100755 usecases/ai/microservices/ollama/healthcheck.sh create mode 100755 usecases/ai/microservices/ollama/run.sh diff --git a/usecases/ai/digital-avatar/.gitignore b/usecases/ai/digital-avatar/.gitignore new file mode 100644 index 0000000..2cf6285 --- /dev/null +++ b/usecases/ai/digital-avatar/.gitignore @@ -0,0 +1,12 @@ +__pycache__ +.env + +ffmpeg*/ +checkpoints +cache/ +backend/musetalk/models +backend/musetalk/data/avatars +backend/wav2lip/wav2lip/results +backend/wav2lip/wav2lip/temp +weights/* +backend/liveportrait/templates \ No newline at end of file diff --git a/usecases/ai/digital-avatar/README.md b/usecases/ai/digital-avatar/README.md new file mode 100644 index 0000000..4964c7f --- /dev/null +++ b/usecases/ai/digital-avatar/README.md @@ -0,0 +1,118 @@ +# Digital Avatar + +A digital avatar that utilizes Image to Video, Text To Speech, Speech To Text, and LLM to create an interactive avatar. + +![Demo](./docs/demo.gif) + + +## Table of Contents +- [Architecture Diagram](#requirements) +- [Requirements](#requirements) + - [Minimum](#minimum) + - [Recommended](#recommended) +- [Application Ports](#application-ports) +- [Setup](#setup) + - [Prerequisite](#prerequisite) + - [Setup ENV](#setup-env) + - [Build Docker Container](#build-docker-container) + - [Start Docker Container](#start-docker-container) + - [Access the App](#access-the-app) +- [FAQ](#faq) + +## Architecture DIagram +![Archictecture Diagram](./docs/architecture.png) + +## Requirements + +### Minimum +- CPU: 13th generations of Intel Core i5 and above +- GPU: Intelยฎ Arcโ„ข A770 graphics (16GB) +- RAM: 32GB +- DISK: 128GB + +## Application Ports +Please ensure that you have these ports available before running the applications. + +| Apps | Port | +|--------------|------| +| Lipsync | 8011 | +| LivePortrait | 8012 | +| TTS | 8013 | +| STT | 8014 | +| OLLAMA | 8015 | +| Frontend | 80 | + +## Setup + +### Prerequisite +1. **OS**: Ubuntu (Validated on 22.04) + + ***Note***: If you are using different Ubuntu version, please [update the RENDER_GROUP_ID](#1-how-to-check-render-group-id) + +1. **Docker and Docker Compose**: Ensure Docker and Docker Compose are installed. Refer to [Docker installation guide](https://docs.docker.com/engine/install/). +1. **Intel GPU Drivers**: + 1. Refer to [here](../../../README.md#gpu) to install Intel GPU Drivers +1. **Download Wav2Lip Model**: Download the [Wav2Lip model](https://iiitaphyd-my.sharepoint.com/:u:/g/personal/radrabha_m_research_iiit_ac_in/EdjI7bZlgApMqsVoEUUXpLsBxqXbn5z8VTmoxp55YNDcIA?e=n9ljGW) and place the file in the `weights` folder. +1. **Create Avatar**: + 1. Place an `image.png` file containing an image of a person (preferably showing at least the upper half of the body) in the assets folder. + 2. Place an `idle.mp4` file of a person with some movement such as eye blinking (to be used as a reference) in the assets folder. + +### Setup ENV +1. Create a `.env` file and copy the contents from `.env.template`: + ```bash + cp .env.template .env + ``` +2. Modify the `LLM_MODEL` in the `.env` file. Refer to [Ollama library](https://ollama.com/library) for available models. (Default is `QWEN2.5`). + +### Build Docker Container +```bash +docker compose build +``` + +### Start Docker container +```bash +docker compose up -d +``` + +### Access the App +- Navigate to http://localhost + +## Notes +### Device Workload Configurations +You can offload model inference to specific device by modifying the environment variable setting in the docker-compose.yml file. + +| Workload | Environment Variable |Supported Device | +|----------------------|----------------------|-------------------------| +| LLM | - | GPU | +| STT - Encoded Device | STT_ENCODED_DEVICE | CPU,GPU,NPU | +| STT - Decided Device | STT_DECODED_DEVICE | CPU,GPU | +| TTS | TTS_DEVICE | CPU | +| Lipsync (Wav2lip) | DEVICE | CPU, GPU | + +Example Configuration: + +* To offload the STT encoded workload to `NPU`, you can use the following configuration. + +``` +wav2lip: + ... + environment: + ... + DEVICE=CPU + ... +``` + +## FAQ +### 1. Update Render Group ID +1. Ensure the [Intel GPU driver](#prerequisite) is installed. +2. Check the group ID from `/etc/group`: + ```bash + grep render /etc/group + ``` +3. The output will be something like: + ``` + render:x:110:user + ``` +4. The group ID is the number in the third field (e.g., `110` in the example above). +5. Ensure the `RENDER_GROUP_ID` in the [docker-compose.yml](./docker-compose.yml) file matches the render group ID. + diff --git a/usecases/ai/digital-avatar/backend/liveportrait/Dockerfile b/usecases/ai/digital-avatar/backend/liveportrait/Dockerfile new file mode 100644 index 0000000..3397feb --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/Dockerfile @@ -0,0 +1,77 @@ +FROM debian:12-slim + +ARG DEBIAN_FRONTEND=noninteractive +ARG RENDER_GROUP_ID +RUN apt-get update \ + && apt-get upgrade -y \ + && apt-get install --no-install-recommends -y \ + sudo \ + wget \ + ca-certificates \ + ffmpeg \ + libsm6 \ + libxext6 \ + curl \ + git \ + build-essential \ + libssl-dev \ + zlib1g-dev \ + libbz2-dev \ + libreadline-dev \ + libsqlite3-dev \ + llvm \ + libncursesw5-dev \ + xz-utils \ + tk-dev \ + libxml2-dev \ + libxmlsec1-dev \ + libffi-dev \ + liblzma-dev \ + && addgroup --system intel --gid 1000 \ + && adduser --system --ingroup intel --uid 1000 --home /home/intel intel \ + && echo "intel ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers.d/intel \ + && groupadd -g ${RENDER_GROUP_ID} render \ + && usermod -aG render intel \ + && rm -rf /var/lib/apt/lists/* \ + && mkdir -p /usr/src \ + && chown -R intel:intel /usr/src + +# Intel GPU Driver +RUN apt-get update && apt-get install -y gnupg + +RUN wget -qO - https://repositories.intel.com/gpu/intel-graphics.key | \ + gpg --yes --dearmor --output /usr/share/keyrings/intel-graphics.gpg && \ + echo "deb [arch=amd64,i386 signed-by=/usr/share/keyrings/intel-graphics.gpg] https://repositories.intel.com/gpu/ubuntu jammy client" | \ + tee /etc/apt/sources.list.d/intel-gpu-jammy.list && \ + apt update && \ + apt-get install -y --no-install-recommends libze1 intel-level-zero-gpu intel-opencl-icd clinfo libze-dev intel-ocloc + +USER intel +WORKDIR /usr/src/app + +# Set environment variables for pyenv +ENV PYENV_ROOT="/usr/src/app/.pyenv" +ENV PATH="$PYENV_ROOT/bin:$PYENV_ROOT/shims:$PATH" + +# Install pyenv +RUN curl https://pyenv.run | bash \ + && echo 'export PYENV_ROOT="$PYENV_ROOT"' >> ~/.bashrc \ + && echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc \ + && echo 'eval "$(pyenv init --path)"' >> ~/.bashrc \ + && echo 'eval "$(pyenv init -)"' >> ~/.bashrc \ + && . ~/.bashrc \ + && pyenv install 3.10.15 \ + && pyenv global 3.10.15 + +RUN python3 -m pip install --upgrade pip \ + && python3 -m pip install virtualenv + +RUN python3 -m venv /usr/src/.venv +ENV PATH="/usr/src/.venv/bin:$PATH" + +COPY --chown=intel ./backend/liveportrait . +RUN python3 -m pip install -r requirements.txt \ + && huggingface-cli download KwaiVGI/LivePortrait --local-dir liveportrait/pretrained_weights --exclude "*.git*" "README.md" "docs" + +HEALTHCHECK --interval=30s --timeout=180s --start-period=60s --retries=3 \ + CMD sh -c 'PORT=${SERVER_PORT:-8012} && wget --no-verbose -O /dev/null --tries=1 http://localhost:$PORT/healthcheck || exit 1' \ No newline at end of file diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/.gitignore b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/.gitignore new file mode 100644 index 0000000..7e9e638 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/.gitignore @@ -0,0 +1,34 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +**/__pycache__/ +*.py[cod] +**/*.py[cod] +*$py.class + +# Model weights +**/*.pth +**/*.onnx + +pretrained_weights/*.md +pretrained_weights/docs +pretrained_weights/liveportrait +pretrained_weights/liveportrait_animals + +# Ipython notebook +*.ipynb + +# Temporary files or benchmark resources +animations/* +tmp/* +.vscode/launch.json +**/*.DS_Store +gradio_temp/** + +# Windows dependencies +ffmpeg/ +LivePortrait_env/ + +# XPose build files +src/utils/dependencies/XPose/models/UniPose/ops/build +src/utils/dependencies/XPose/models/UniPose/ops/dist +src/utils/dependencies/XPose/models/UniPose/ops/MultiScaleDeformableAttention.egg-info diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/LICENSE b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/LICENSE new file mode 100644 index 0000000..8450f81 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/LICENSE @@ -0,0 +1,30 @@ +MIT License + +Copyright (c) 2024 Kuaishou Visual Generation and Interaction Center + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +--- + +The code of InsightFace is released under the MIT License. +The models of InsightFace are for non-commercial research purposes only. + +If you want to use the LivePortrait project for commercial purposes, you +should remove and replace InsightFaceโ€™s detection models to fully comply with +the MIT license. diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/app.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/app.py new file mode 100644 index 0000000..37c40e4 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/app.py @@ -0,0 +1,493 @@ +# coding: utf-8 + +""" +The entrance of the gradio for human +""" + +import os +import tyro +import subprocess +import gradio as gr +import os.path as osp +from src.utils.helper import load_description +from src.gradio_pipeline import GradioPipeline +from src.config.crop_config import CropConfig +from src.config.argument_config import ArgumentConfig +from src.config.inference_config import InferenceConfig + + +def partial_fields(target_class, kwargs): + return target_class(**{k: v for k, v in kwargs.items() if hasattr(target_class, k)}) + + +def fast_check_ffmpeg(): + try: + subprocess.run(["ffmpeg", "-version"], capture_output=True, check=True) + return True + except: + return False + + +# set tyro theme +tyro.extras.set_accent_color("bright_cyan") +args = tyro.cli(ArgumentConfig) + +ffmpeg_dir = os.path.join(os.getcwd(), "ffmpeg") +if osp.exists(ffmpeg_dir): + os.environ["PATH"] += (os.pathsep + ffmpeg_dir) + +if not fast_check_ffmpeg(): + raise ImportError( + "FFmpeg is not installed. Please install FFmpeg (including ffmpeg and ffprobe) before running this script. https://ffmpeg.org/download.html" + ) +# specify configs for inference +inference_cfg = partial_fields(InferenceConfig, args.__dict__) # use attribute of args to initial InferenceConfig +crop_cfg = partial_fields(CropConfig, args.__dict__) # use attribute of args to initial CropConfig +# global_tab_selection = None + +gradio_pipeline = GradioPipeline( + inference_cfg=inference_cfg, + crop_cfg=crop_cfg, + args=args +) + +if args.gradio_temp_dir not in (None, ''): + os.environ["GRADIO_TEMP_DIR"] = args.gradio_temp_dir + os.makedirs(args.gradio_temp_dir, exist_ok=True) + + +def gpu_wrapped_execute_video(*args, **kwargs): + return gradio_pipeline.execute_video(*args, **kwargs) + + +def gpu_wrapped_execute_image_retargeting(*args, **kwargs): + return gradio_pipeline.execute_image_retargeting(*args, **kwargs) + + +def gpu_wrapped_execute_video_retargeting(*args, **kwargs): + return gradio_pipeline.execute_video_retargeting(*args, **kwargs) + + +def reset_sliders(*args, **kwargs): + return 0.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 2.5, True, True + + +# assets +title_md = "assets/gradio/gradio_title.md" +example_portrait_dir = "assets/examples/source" +example_video_dir = "assets/examples/driving" +data_examples_i2v = [ + [osp.join(example_portrait_dir, "s9.jpg"), osp.join(example_video_dir, "d0.mp4"), True, True, True, False], + [osp.join(example_portrait_dir, "s6.jpg"), osp.join(example_video_dir, "d0.mp4"), True, True, True, False], + [osp.join(example_portrait_dir, "s10.jpg"), osp.join(example_video_dir, "d0.mp4"), True, True, True, False], + [osp.join(example_portrait_dir, "s5.jpg"), osp.join(example_video_dir, "d18.mp4"), True, True, True, False], + [osp.join(example_portrait_dir, "s7.jpg"), osp.join(example_video_dir, "d19.mp4"), True, True, True, False], + [osp.join(example_portrait_dir, "s2.jpg"), osp.join(example_video_dir, "d13.mp4"), True, True, True, True], +] +data_examples_v2v = [ + [osp.join(example_portrait_dir, "s13.mp4"), osp.join(example_video_dir, "d0.mp4"), True, True, True, False, 3e-7], + # [osp.join(example_portrait_dir, "s14.mp4"), osp.join(example_video_dir, "d18.mp4"), True, True, True, False, False, 3e-7], + # [osp.join(example_portrait_dir, "s15.mp4"), osp.join(example_video_dir, "d19.mp4"), True, True, True, False, False, 3e-7], + [osp.join(example_portrait_dir, "s18.mp4"), osp.join(example_video_dir, "d6.mp4"), True, True, True, False, 3e-7], + # [osp.join(example_portrait_dir, "s19.mp4"), osp.join(example_video_dir, "d6.mp4"), True, True, True, False, False, 3e-7], + [osp.join(example_portrait_dir, "s20.mp4"), osp.join(example_video_dir, "d0.mp4"), True, True, True, False, 3e-7], +] +#################### interface logic #################### + +# Define components first +retargeting_source_scale = gr.Number(minimum=1.8, maximum=3.2, value=2.5, step=0.05, label="crop scale") +video_retargeting_source_scale = gr.Number(minimum=1.8, maximum=3.2, value=2.3, step=0.05, label="crop scale") +driving_smooth_observation_variance_retargeting = gr.Number(value=3e-6, label="motion smooth strength", minimum=1e-11, maximum=1e-2, step=1e-8) +video_retargeting_silence = gr.Checkbox(value=False, label="keeping the lip silent") +eye_retargeting_slider = gr.Slider(minimum=0, maximum=0.8, step=0.01, label="target eyes-open ratio") +lip_retargeting_slider = gr.Slider(minimum=0, maximum=0.8, step=0.01, label="target lip-open ratio") +video_lip_retargeting_slider = gr.Slider(minimum=0, maximum=0.8, step=0.01, label="target lip-open ratio") +head_pitch_slider = gr.Slider(minimum=-15.0, maximum=15.0, value=0, step=1, label="relative pitch") +head_yaw_slider = gr.Slider(minimum=-25, maximum=25, value=0, step=1, label="relative yaw") +head_roll_slider = gr.Slider(minimum=-15.0, maximum=15.0, value=0, step=1, label="relative roll") +mov_x = gr.Slider(minimum=-0.19, maximum=0.19, value=0.0, step=0.01, label="x-axis movement") +mov_y = gr.Slider(minimum=-0.19, maximum=0.19, value=0.0, step=0.01, label="y-axis movement") +mov_z = gr.Slider(minimum=0.9, maximum=1.2, value=1.0, step=0.01, label="z-axis movement") +lip_variation_zero = gr.Slider(minimum=-0.09, maximum=0.09, value=0, step=0.01, label="pouting") +lip_variation_one = gr.Slider(minimum=-20.0, maximum=15.0, value=0, step=0.01, label="pursing ๐Ÿ˜") +lip_variation_two = gr.Slider(minimum=0.0, maximum=15.0, value=0, step=0.01, label="grin ๐Ÿ˜") +lip_variation_three = gr.Slider(minimum=-90.0, maximum=120.0, value=0, step=1.0, label="lip close <-> open") +smile = gr.Slider(minimum=-0.3, maximum=1.3, value=0, step=0.01, label="smile ๐Ÿ˜„") +wink = gr.Slider(minimum=0, maximum=39, value=0, step=0.01, label="wink ๐Ÿ˜‰") +eyebrow = gr.Slider(minimum=-30, maximum=30, value=0, step=0.01, label="eyebrow ๐Ÿคจ") +eyeball_direction_x = gr.Slider(minimum=-30.0, maximum=30.0, value=0, step=0.01, label="eye gaze (horizontal) ๐Ÿ‘€") +eyeball_direction_y = gr.Slider(minimum=-63.0, maximum=63.0, value=0, step=0.01, label="eye gaze (vertical) ๐Ÿ™„") +retargeting_input_image = gr.Image(type="filepath") +retargeting_input_video = gr.Video() +output_image = gr.Image(type="numpy") +output_image_paste_back = gr.Image(type="numpy") +retargeting_output_image = gr.Image(type="numpy") +retargeting_output_image_paste_back = gr.Image(type="numpy") +output_video = gr.Video(autoplay=False) +output_video_paste_back = gr.Video(autoplay=False) + +with gr.Blocks(theme=gr.themes.Soft(font=[gr.themes.GoogleFont("Plus Jakarta Sans")])) as demo: + gr.HTML(load_description(title_md)) + + gr.Markdown(load_description("assets/gradio/gradio_description_upload.md")) + with gr.Row(): + with gr.Column(): + with gr.Tabs(): + with gr.TabItem("๐Ÿ–ผ๏ธ Source Image") as tab_image: + with gr.Accordion(open=True, label="Source Image"): + source_image_input = gr.Image(type="filepath") + gr.Examples( + examples=[ + [osp.join(example_portrait_dir, "s9.jpg")], + [osp.join(example_portrait_dir, "s6.jpg")], + [osp.join(example_portrait_dir, "s10.jpg")], + [osp.join(example_portrait_dir, "s5.jpg")], + [osp.join(example_portrait_dir, "s7.jpg")], + [osp.join(example_portrait_dir, "s12.jpg")], + [osp.join(example_portrait_dir, "s22.jpg")], + [osp.join(example_portrait_dir, "s23.jpg")], + ], + inputs=[source_image_input], + cache_examples=False, + ) + + with gr.TabItem("๐ŸŽž๏ธ Source Video") as tab_video: + with gr.Accordion(open=True, label="Source Video"): + source_video_input = gr.Video() + gr.Examples( + examples=[ + [osp.join(example_portrait_dir, "s13.mp4")], + # [osp.join(example_portrait_dir, "s14.mp4")], + # [osp.join(example_portrait_dir, "s15.mp4")], + [osp.join(example_portrait_dir, "s18.mp4")], + # [osp.join(example_portrait_dir, "s19.mp4")], + [osp.join(example_portrait_dir, "s20.mp4")], + ], + inputs=[source_video_input], + cache_examples=False, + ) + + tab_selection = gr.Textbox(visible=False) + tab_image.select(lambda: "Image", None, tab_selection) + tab_video.select(lambda: "Video", None, tab_selection) + with gr.Accordion(open=True, label="Cropping Options for Source Image or Video"): + with gr.Row(): + flag_do_crop_input = gr.Checkbox(value=True, label="do crop (source)") + scale = gr.Number(value=2.3, label="source crop scale", minimum=1.8, maximum=3.2, step=0.05) + vx_ratio = gr.Number(value=0.0, label="source crop x", minimum=-0.5, maximum=0.5, step=0.01) + vy_ratio = gr.Number(value=-0.125, label="source crop y", minimum=-0.5, maximum=0.5, step=0.01) + + with gr.Column(): + with gr.Tabs(): + with gr.TabItem("๐ŸŽž๏ธ Driving Video") as v_tab_video: + with gr.Accordion(open=True, label="Driving Video"): + driving_video_input = gr.Video() + gr.Examples( + examples=[ + [osp.join(example_video_dir, "d0.mp4")], + [osp.join(example_video_dir, "d18.mp4")], + [osp.join(example_video_dir, "d19.mp4")], + [osp.join(example_video_dir, "d14.mp4")], + [osp.join(example_video_dir, "d6.mp4")], + [osp.join(example_video_dir, "d20.mp4")], + ], + inputs=[driving_video_input], + cache_examples=False, + ) + with gr.TabItem("๐Ÿ–ผ๏ธ Driving Image") as v_tab_image: + with gr.Accordion(open=True, label="Driving Image"): + driving_image_input = gr.Image(type="filepath") + gr.Examples( + examples=[ + [osp.join(example_video_dir, "d30.jpg")], + [osp.join(example_video_dir, "d9.jpg")], + [osp.join(example_video_dir, "d19.jpg")], + [osp.join(example_video_dir, "d8.jpg")], + [osp.join(example_video_dir, "d12.jpg")], + [osp.join(example_video_dir, "d38.jpg")], + ], + inputs=[driving_image_input], + cache_examples=False, + ) + + with gr.TabItem("๐Ÿ“ Driving Pickle") as v_tab_pickle: + with gr.Accordion(open=True, label="Driving Pickle"): + driving_video_pickle_input = gr.File(type="filepath", file_types=[".pkl"]) + gr.Examples( + examples=[ + [osp.join(example_video_dir, "d1.pkl")], + [osp.join(example_video_dir, "d2.pkl")], + [osp.join(example_video_dir, "d5.pkl")], + [osp.join(example_video_dir, "d7.pkl")], + [osp.join(example_video_dir, "d8.pkl")], + ], + inputs=[driving_video_pickle_input], + cache_examples=False, + ) + + v_tab_selection = gr.Textbox(visible=False) + v_tab_video.select(lambda: "Video", None, v_tab_selection) + v_tab_image.select(lambda: "Image", None, v_tab_selection) + v_tab_pickle.select(lambda: "Pickle", None, v_tab_selection) + # with gr.Accordion(open=False, label="Animation Instructions"): + # gr.Markdown(load_description("assets/gradio/gradio_description_animation.md")) + with gr.Accordion(open=True, label="Cropping Options for Driving Video"): + with gr.Row(): + flag_crop_driving_video_input = gr.Checkbox(value=False, label="do crop (driving)") + scale_crop_driving_video = gr.Number(value=2.2, label="driving crop scale", minimum=1.8, maximum=3.2, step=0.05) + vx_ratio_crop_driving_video = gr.Number(value=0.0, label="driving crop x", minimum=-0.5, maximum=0.5, step=0.01) + vy_ratio_crop_driving_video = gr.Number(value=-0.1, label="driving crop y", minimum=-0.5, maximum=0.5, step=0.01) + + with gr.Row(): + with gr.Accordion(open=True, label="Animation Options"): + with gr.Row(): + flag_normalize_lip = gr.Checkbox(value=False, label="normalize lip") + flag_relative_input = gr.Checkbox(value=True, label="relative motion") + flag_remap_input = gr.Checkbox(value=True, label="paste-back") + flag_stitching_input = gr.Checkbox(value=True, label="stitching") + animation_region = gr.Radio(["exp", "pose", "lip", "eyes", "all"], value="all", label="animation region") + driving_option_input = gr.Radio(['expression-friendly', 'pose-friendly'], value="expression-friendly", label="driving option (i2v)") + driving_multiplier = gr.Number(value=1.0, label="driving multiplier (i2v)", minimum=0.0, maximum=2.0, step=0.02) + driving_smooth_observation_variance = gr.Number(value=3e-7, label="motion smooth strength (v2v)", minimum=1e-11, maximum=1e-2, step=1e-8) + + gr.Markdown(load_description("assets/gradio/gradio_description_animate_clear.md")) + with gr.Row(): + process_button_animation = gr.Button("๐Ÿš€ Animate", variant="primary") + with gr.Row(): + with gr.Column(): + output_video_i2v = gr.Video(autoplay=False, label="The animated video in the original image space") + with gr.Column(): + output_video_concat_i2v = gr.Video(autoplay=False, label="The animated video") + with gr.Row(): + with gr.Column(): + output_image_i2i = gr.Image(type="numpy", label="The animated image in the original image space", visible=False) + with gr.Column(): + output_image_concat_i2i = gr.Image(type="numpy", label="The animated image", visible=False) + with gr.Row(): + process_button_reset = gr.ClearButton([source_image_input, source_video_input, driving_video_pickle_input, driving_video_input, driving_image_input, output_video_i2v, output_video_concat_i2v, output_image_i2i, output_image_concat_i2i], value="๐Ÿงน Clear") + + with gr.Row(): + # Examples + gr.Markdown("## You could also choose the examples below by one click โฌ‡๏ธ") + with gr.Row(): + with gr.Tabs(): + with gr.TabItem("๐Ÿ–ผ๏ธ Portrait Animation"): + gr.Examples( + examples=data_examples_i2v, + fn=gpu_wrapped_execute_video, + inputs=[ + source_image_input, + driving_video_input, + flag_relative_input, + flag_do_crop_input, + flag_remap_input, + flag_crop_driving_video_input, + ], + outputs=[output_image, output_image_paste_back], + examples_per_page=len(data_examples_i2v), + cache_examples=False, + ) + with gr.TabItem("๐ŸŽž๏ธ Portrait Video Editing"): + gr.Examples( + examples=data_examples_v2v, + fn=gpu_wrapped_execute_video, + inputs=[ + source_video_input, + driving_video_input, + flag_relative_input, + flag_do_crop_input, + flag_remap_input, + flag_crop_driving_video_input, + driving_smooth_observation_variance, + ], + outputs=[output_image, output_image_paste_back], + examples_per_page=len(data_examples_v2v), + cache_examples=False, + ) + + # Retargeting Image + gr.Markdown(load_description("assets/gradio/gradio_description_retargeting.md"), visible=True) + with gr.Row(visible=True): + flag_do_crop_input_retargeting_image = gr.Checkbox(value=True, label="do crop (source)") + flag_stitching_retargeting_input = gr.Checkbox(value=True, label="stitching") + retargeting_source_scale.render() + eye_retargeting_slider.render() + lip_retargeting_slider.render() + with gr.Row(visible=True): + with gr.Column(): + with gr.Accordion(open=True, label="Facial movement sliders"): + with gr.Row(visible=True): + head_pitch_slider.render() + head_yaw_slider.render() + head_roll_slider.render() + with gr.Row(visible=True): + mov_x.render() + mov_y.render() + mov_z.render() + with gr.Column(): + with gr.Accordion(open=True, label="Facial expression sliders"): + with gr.Row(visible=True): + lip_variation_zero.render() + lip_variation_one.render() + lip_variation_two.render() + with gr.Row(visible=True): + lip_variation_three.render() + smile.render() + wink.render() + with gr.Row(visible=True): + eyebrow.render() + eyeball_direction_x.render() + eyeball_direction_y.render() + with gr.Row(visible=True): + reset_button = gr.Button("๐Ÿ”„ Reset") + reset_button.click( + fn=reset_sliders, + inputs=None, + outputs=[ + head_pitch_slider, head_yaw_slider, head_roll_slider, mov_x, mov_y, mov_z, + lip_variation_zero, lip_variation_one, lip_variation_two, lip_variation_three, smile, wink, eyebrow, eyeball_direction_x, eyeball_direction_y, + retargeting_source_scale, flag_stitching_retargeting_input, flag_do_crop_input_retargeting_image + ] + ) + with gr.Row(visible=True): + with gr.Column(): + with gr.Accordion(open=True, label="Retargeting Image Input"): + retargeting_input_image.render() + gr.Examples( + examples=[ + [osp.join(example_portrait_dir, "s9.jpg")], + [osp.join(example_portrait_dir, "s6.jpg")], + [osp.join(example_portrait_dir, "s10.jpg")], + [osp.join(example_portrait_dir, "s5.jpg")], + [osp.join(example_portrait_dir, "s7.jpg")], + [osp.join(example_portrait_dir, "s12.jpg")], + [osp.join(example_portrait_dir, "s22.jpg")], + # [osp.join(example_portrait_dir, "s23.jpg")], + [osp.join(example_portrait_dir, "s42.jpg")], + ], + inputs=[retargeting_input_image], + cache_examples=False, + ) + with gr.Column(): + with gr.Accordion(open=True, label="Retargeting Result"): + retargeting_output_image.render() + with gr.Column(): + with gr.Accordion(open=True, label="Paste-back Result"): + retargeting_output_image_paste_back.render() + with gr.Row(visible=True): + process_button_reset_retargeting = gr.ClearButton( + [ + retargeting_input_image, + retargeting_output_image, + retargeting_output_image_paste_back, + ], + value="๐Ÿงน Clear" + ) + + # Retargeting Video + gr.Markdown(load_description("assets/gradio/gradio_description_retargeting_video.md"), visible=True) + with gr.Row(visible=True): + flag_do_crop_input_retargeting_video = gr.Checkbox(value=True, label="do crop (source)") + video_retargeting_source_scale.render() + video_lip_retargeting_slider.render() + driving_smooth_observation_variance_retargeting.render() + video_retargeting_silence.render() + with gr.Row(visible=True): + process_button_retargeting_video = gr.Button("๐Ÿš— Retargeting Video", variant="primary") + with gr.Row(visible=True): + with gr.Column(): + with gr.Accordion(open=True, label="Retargeting Video Input"): + retargeting_input_video.render() + gr.Examples( + examples=[ + [osp.join(example_portrait_dir, "s13.mp4")], + # [osp.join(example_portrait_dir, "s18.mp4")], + # [osp.join(example_portrait_dir, "s20.mp4")], + [osp.join(example_portrait_dir, "s29.mp4")], + [osp.join(example_portrait_dir, "s32.mp4")], + [osp.join(example_video_dir, "d3.mp4")], + ], + inputs=[retargeting_input_video], + cache_examples=False, + ) + with gr.Column(): + with gr.Accordion(open=True, label="Retargeting Result"): + output_video.render() + with gr.Column(): + with gr.Accordion(open=True, label="Paste-back Result"): + output_video_paste_back.render() + with gr.Row(visible=True): + process_button_reset_retargeting = gr.ClearButton( + [ + video_lip_retargeting_slider, + retargeting_input_video, + output_video, + output_video_paste_back + ], + value="๐Ÿงน Clear" + ) + + # binding functions for buttons + process_button_animation.click( + fn=gpu_wrapped_execute_video, + inputs=[ + source_image_input, + source_video_input, + driving_video_input, + driving_image_input, + driving_video_pickle_input, + flag_normalize_lip, + flag_relative_input, + flag_do_crop_input, + flag_remap_input, + flag_stitching_input, + animation_region, + driving_option_input, + driving_multiplier, + flag_crop_driving_video_input, + scale, + vx_ratio, + vy_ratio, + scale_crop_driving_video, + vx_ratio_crop_driving_video, + vy_ratio_crop_driving_video, + driving_smooth_observation_variance, + tab_selection, + v_tab_selection, + ], + outputs=[output_video_i2v, output_video_i2v, output_video_concat_i2v, output_video_concat_i2v, output_image_i2i, output_image_i2i, output_image_concat_i2i, output_image_concat_i2i], + show_progress=True + ) + + + retargeting_input_image.change( + fn=gradio_pipeline.init_retargeting_image, + inputs=[retargeting_source_scale, eye_retargeting_slider, lip_retargeting_slider, retargeting_input_image], + outputs=[eye_retargeting_slider, lip_retargeting_slider] + ) + + sliders = [eye_retargeting_slider, lip_retargeting_slider, head_pitch_slider, head_yaw_slider, head_roll_slider, mov_x, mov_y, mov_z, lip_variation_zero, lip_variation_one, lip_variation_two, lip_variation_three, smile, wink, eyebrow, eyeball_direction_x, eyeball_direction_y] + for slider in sliders: + # NOTE: gradio >= 4.0.0 may cause slow response + slider.change( + fn=gpu_wrapped_execute_image_retargeting, + inputs=[ + eye_retargeting_slider, lip_retargeting_slider, head_pitch_slider, head_yaw_slider, head_roll_slider, mov_x, mov_y, mov_z, + lip_variation_zero, lip_variation_one, lip_variation_two, lip_variation_three, smile, wink, eyebrow, eyeball_direction_x, eyeball_direction_y, + retargeting_input_image, retargeting_source_scale, flag_stitching_retargeting_input, flag_do_crop_input_retargeting_image + ], + outputs=[retargeting_output_image, retargeting_output_image_paste_back], + ) + + process_button_retargeting_video.click( + fn=gpu_wrapped_execute_video_retargeting, + inputs=[video_lip_retargeting_slider, retargeting_input_video, video_retargeting_source_scale, driving_smooth_observation_variance_retargeting, video_retargeting_silence, flag_do_crop_input_retargeting_video], + outputs=[output_video, output_video_paste_back], + show_progress=True + ) + +demo.launch( + server_port=args.server_port, + share=args.share, + server_name=args.server_name +) diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/app_animals.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/app_animals.py new file mode 100644 index 0000000..361044a --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/app_animals.py @@ -0,0 +1,248 @@ +# coding: utf-8 + +""" +The entrance of the gradio for animal +""" + +import os +import tyro +import subprocess +import gradio as gr +import os.path as osp +from src.utils.helper import load_description +from src.gradio_pipeline import GradioPipelineAnimal +from src.config.crop_config import CropConfig +from src.config.argument_config import ArgumentConfig +from src.config.inference_config import InferenceConfig + + +def partial_fields(target_class, kwargs): + return target_class(**{k: v for k, v in kwargs.items() if hasattr(target_class, k)}) + + +def fast_check_ffmpeg(): + try: + subprocess.run(["ffmpeg", "-version"], capture_output=True, check=True) + return True + except: + return False + + +# set tyro theme +tyro.extras.set_accent_color("bright_cyan") +args = tyro.cli(ArgumentConfig) + +ffmpeg_dir = os.path.join(os.getcwd(), "ffmpeg") +if osp.exists(ffmpeg_dir): + os.environ["PATH"] += (os.pathsep + ffmpeg_dir) + +if not fast_check_ffmpeg(): + raise ImportError( + "FFmpeg is not installed. Please install FFmpeg (including ffmpeg and ffprobe) before running this script. https://ffmpeg.org/download.html" + ) +# specify configs for inference +inference_cfg = partial_fields(InferenceConfig, args.__dict__) # use attribute of args to initial InferenceConfig +crop_cfg = partial_fields(CropConfig, args.__dict__) # use attribute of args to initial CropConfig + +gradio_pipeline_animal: GradioPipelineAnimal = GradioPipelineAnimal( + inference_cfg=inference_cfg, + crop_cfg=crop_cfg, + args=args +) + +if args.gradio_temp_dir not in (None, ''): + os.environ["GRADIO_TEMP_DIR"] = args.gradio_temp_dir + os.makedirs(args.gradio_temp_dir, exist_ok=True) + +def gpu_wrapped_execute_video(*args, **kwargs): + return gradio_pipeline_animal.execute_video(*args, **kwargs) + + +# assets +title_md = "assets/gradio/gradio_title.md" +example_portrait_dir = "assets/examples/source" +example_video_dir = "assets/examples/driving" +data_examples_i2v = [ + [osp.join(example_portrait_dir, "s41.jpg"), osp.join(example_video_dir, "d3.mp4"), True, False, False, False], + [osp.join(example_portrait_dir, "s40.jpg"), osp.join(example_video_dir, "d6.mp4"), True, False, False, False], + [osp.join(example_portrait_dir, "s25.jpg"), osp.join(example_video_dir, "d19.mp4"), True, False, False, False], +] +data_examples_i2v_pickle = [ + [osp.join(example_portrait_dir, "s25.jpg"), osp.join(example_video_dir, "wink.pkl"), True, False, False, False], + [osp.join(example_portrait_dir, "s40.jpg"), osp.join(example_video_dir, "talking.pkl"), True, False, False, False], + [osp.join(example_portrait_dir, "s41.jpg"), osp.join(example_video_dir, "aggrieved.pkl"), True, False, False, False], +] +#################### interface logic #################### + +# Define components first +output_image = gr.Image(type="numpy") +output_image_paste_back = gr.Image(type="numpy") +output_video_i2v = gr.Video(autoplay=False) +output_video_concat_i2v = gr.Video(autoplay=False) +output_video_i2v_gif = gr.Image(type="numpy") + + +with gr.Blocks(theme=gr.themes.Soft(font=[gr.themes.GoogleFont("Plus Jakarta Sans")])) as demo: + gr.HTML(load_description(title_md)) + + gr.Markdown(load_description("assets/gradio/gradio_description_upload_animal.md")) + with gr.Row(): + with gr.Column(): + with gr.Accordion(open=True, label="๐Ÿฑ Source Animal Image"): + source_image_input = gr.Image(type="filepath") + gr.Examples( + examples=[ + [osp.join(example_portrait_dir, "s25.jpg")], + [osp.join(example_portrait_dir, "s30.jpg")], + [osp.join(example_portrait_dir, "s31.jpg")], + [osp.join(example_portrait_dir, "s32.jpg")], + [osp.join(example_portrait_dir, "s39.jpg")], + [osp.join(example_portrait_dir, "s40.jpg")], + [osp.join(example_portrait_dir, "s41.jpg")], + [osp.join(example_portrait_dir, "s38.jpg")], + [osp.join(example_portrait_dir, "s36.jpg")], + ], + inputs=[source_image_input], + cache_examples=False, + ) + + with gr.Accordion(open=True, label="Cropping Options for Source Image"): + with gr.Row(): + flag_do_crop_input = gr.Checkbox(value=True, label="do crop (source)") + scale = gr.Number(value=2.3, label="source crop scale", minimum=1.8, maximum=3.2, step=0.05) + vx_ratio = gr.Number(value=0.0, label="source crop x", minimum=-0.5, maximum=0.5, step=0.01) + vy_ratio = gr.Number(value=-0.125, label="source crop y", minimum=-0.5, maximum=0.5, step=0.01) + + with gr.Column(): + with gr.Tabs(): + with gr.TabItem("๐Ÿ“ Driving Pickle") as tab_pickle: + with gr.Accordion(open=True, label="Driving Pickle"): + driving_video_pickle_input = gr.File() + gr.Examples( + examples=[ + [osp.join(example_video_dir, "wink.pkl")], + [osp.join(example_video_dir, "shy.pkl")], + [osp.join(example_video_dir, "aggrieved.pkl")], + [osp.join(example_video_dir, "open_lip.pkl")], + [osp.join(example_video_dir, "laugh.pkl")], + [osp.join(example_video_dir, "talking.pkl")], + [osp.join(example_video_dir, "shake_face.pkl")], + ], + inputs=[driving_video_pickle_input], + cache_examples=False, + ) + with gr.TabItem("๐ŸŽž๏ธ Driving Video") as tab_video: + with gr.Accordion(open=True, label="Driving Video"): + driving_video_input = gr.Video() + gr.Examples( + examples=[ + # [osp.join(example_video_dir, "d0.mp4")], + # [osp.join(example_video_dir, "d18.mp4")], + [osp.join(example_video_dir, "d19.mp4")], + [osp.join(example_video_dir, "d14.mp4")], + [osp.join(example_video_dir, "d6.mp4")], + [osp.join(example_video_dir, "d3.mp4")], + ], + inputs=[driving_video_input], + cache_examples=False, + ) + + tab_selection = gr.Textbox(visible=False) + tab_pickle.select(lambda: "Pickle", None, tab_selection) + tab_video.select(lambda: "Video", None, tab_selection) + with gr.Accordion(open=True, label="Cropping Options for Driving Video"): + with gr.Row(): + flag_crop_driving_video_input = gr.Checkbox(value=False, label="do crop (driving)") + scale_crop_driving_video = gr.Number(value=2.2, label="driving crop scale", minimum=1.8, maximum=3.2, step=0.05) + vx_ratio_crop_driving_video = gr.Number(value=0.0, label="driving crop x", minimum=-0.5, maximum=0.5, step=0.01) + vy_ratio_crop_driving_video = gr.Number(value=-0.1, label="driving crop y", minimum=-0.5, maximum=0.5, step=0.01) + + with gr.Row(): + with gr.Accordion(open=False, label="Animation Options"): + with gr.Row(): + flag_stitching = gr.Checkbox(value=False, label="stitching (not recommended)") + flag_remap_input = gr.Checkbox(value=False, label="paste-back (not recommended)") + driving_multiplier = gr.Number(value=1.0, label="driving multiplier", minimum=0.0, maximum=2.0, step=0.02) + + gr.Markdown(load_description("assets/gradio/gradio_description_animate_clear.md")) + with gr.Row(): + process_button_animation = gr.Button("๐Ÿš€ Animate", variant="primary") + with gr.Row(): + with gr.Column(): + with gr.Accordion(open=True, label="The animated video in the cropped image space"): + output_video_i2v.render() + with gr.Column(): + with gr.Accordion(open=True, label="The animated gif in the cropped image space"): + output_video_i2v_gif.render() + with gr.Column(): + with gr.Accordion(open=True, label="The animated video"): + output_video_concat_i2v.render() + with gr.Row(): + process_button_reset = gr.ClearButton([source_image_input, driving_video_input, output_video_i2v, output_video_concat_i2v, output_video_i2v_gif], value="๐Ÿงน Clear") + + with gr.Row(): + # Examples + gr.Markdown("## You could also choose the examples below by one click โฌ‡๏ธ") + with gr.Row(): + with gr.Tabs(): + with gr.TabItem("๐Ÿ“ Driving Pickle") as tab_video: + gr.Examples( + examples=data_examples_i2v_pickle, + fn=gpu_wrapped_execute_video, + inputs=[ + source_image_input, + driving_video_pickle_input, + flag_do_crop_input, + flag_stitching, + flag_remap_input, + flag_crop_driving_video_input, + ], + outputs=[output_image, output_image_paste_back, output_video_i2v_gif], + examples_per_page=len(data_examples_i2v_pickle), + cache_examples=False, + ) + with gr.TabItem("๐ŸŽž๏ธ Driving Video") as tab_video: + gr.Examples( + examples=data_examples_i2v, + fn=gpu_wrapped_execute_video, + inputs=[ + source_image_input, + driving_video_input, + flag_do_crop_input, + flag_stitching, + flag_remap_input, + flag_crop_driving_video_input, + ], + outputs=[output_image, output_image_paste_back, output_video_i2v_gif], + examples_per_page=len(data_examples_i2v), + cache_examples=False, + ) + + process_button_animation.click( + fn=gpu_wrapped_execute_video, + inputs=[ + source_image_input, + driving_video_input, + driving_video_pickle_input, + flag_do_crop_input, + flag_remap_input, + driving_multiplier, + flag_stitching, + flag_crop_driving_video_input, + scale, + vx_ratio, + vy_ratio, + scale_crop_driving_video, + vx_ratio_crop_driving_video, + vy_ratio_crop_driving_video, + tab_selection, + ], + outputs=[output_video_i2v, output_video_concat_i2v, output_video_i2v_gif], + show_progress=True + ) + +demo.launch( + server_port=args.server_port, + share=args.share, + server_name=args.server_name +) diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/intel_xpu/attention.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/intel_xpu/attention.py new file mode 100644 index 0000000..dca9804 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/intel_xpu/attention.py @@ -0,0 +1,175 @@ +import os +import torch +from functools import cache + +# pylint: disable=protected-access, missing-function-docstring, line-too-long + +# ARC GPUs can't allocate more than 4GB to a single block so we slice the attetion layers + +sdpa_slice_trigger_rate = float(os.environ.get('IPEX_SDPA_SLICE_TRIGGER_RATE', 6)) +attention_slice_rate = float(os.environ.get('IPEX_ATTENTION_SLICE_RATE', 4)) + +# Find something divisible with the input_tokens +@cache +def find_slice_size(slice_size, slice_block_size): + while (slice_size * slice_block_size) > attention_slice_rate: + slice_size = slice_size // 2 + if slice_size <= 1: + slice_size = 1 + break + return slice_size + +# Find slice sizes for SDPA +@cache +def find_sdpa_slice_sizes(query_shape, query_element_size): + if len(query_shape) == 3: + batch_size_attention, query_tokens, shape_three = query_shape + shape_four = 1 + else: + batch_size_attention, query_tokens, shape_three, shape_four = query_shape + + slice_block_size = query_tokens * shape_three * shape_four / 1024 / 1024 * query_element_size + block_size = batch_size_attention * slice_block_size + + split_slice_size = batch_size_attention + split_2_slice_size = query_tokens + split_3_slice_size = shape_three + + do_split = False + do_split_2 = False + do_split_3 = False + + if block_size > sdpa_slice_trigger_rate: + do_split = True + split_slice_size = find_slice_size(split_slice_size, slice_block_size) + if split_slice_size * slice_block_size > attention_slice_rate: + slice_2_block_size = split_slice_size * shape_three * shape_four / 1024 / 1024 * query_element_size + do_split_2 = True + split_2_slice_size = find_slice_size(split_2_slice_size, slice_2_block_size) + if split_2_slice_size * slice_2_block_size > attention_slice_rate: + slice_3_block_size = split_slice_size * split_2_slice_size * shape_four / 1024 / 1024 * query_element_size + do_split_3 = True + split_3_slice_size = find_slice_size(split_3_slice_size, slice_3_block_size) + + return do_split, do_split_2, do_split_3, split_slice_size, split_2_slice_size, split_3_slice_size + +# Find slice sizes for BMM +@cache +def find_bmm_slice_sizes(input_shape, input_element_size, mat2_shape): + batch_size_attention, input_tokens, mat2_atten_shape = input_shape[0], input_shape[1], mat2_shape[2] + slice_block_size = input_tokens * mat2_atten_shape / 1024 / 1024 * input_element_size + block_size = batch_size_attention * slice_block_size + + split_slice_size = batch_size_attention + split_2_slice_size = input_tokens + split_3_slice_size = mat2_atten_shape + + do_split = False + do_split_2 = False + do_split_3 = False + + if block_size > attention_slice_rate: + do_split = True + split_slice_size = find_slice_size(split_slice_size, slice_block_size) + if split_slice_size * slice_block_size > attention_slice_rate: + slice_2_block_size = split_slice_size * mat2_atten_shape / 1024 / 1024 * input_element_size + do_split_2 = True + split_2_slice_size = find_slice_size(split_2_slice_size, slice_2_block_size) + if split_2_slice_size * slice_2_block_size > attention_slice_rate: + slice_3_block_size = split_slice_size * split_2_slice_size / 1024 / 1024 * input_element_size + do_split_3 = True + split_3_slice_size = find_slice_size(split_3_slice_size, slice_3_block_size) + + return do_split, do_split_2, do_split_3, split_slice_size, split_2_slice_size, split_3_slice_size + +original_torch_bmm = torch.bmm +def torch_bmm_32_bit(input, mat2, *, out=None): + if input.device.type != "xpu": + return original_torch_bmm(input, mat2, out=out) + do_split, do_split_2, do_split_3, split_slice_size, split_2_slice_size, split_3_slice_size = find_bmm_slice_sizes(input.shape, input.element_size(), mat2.shape) + + # Slice BMM + if do_split: + batch_size_attention, input_tokens, mat2_atten_shape = input.shape[0], input.shape[1], mat2.shape[2] + hidden_states = torch.zeros(input.shape[0], input.shape[1], mat2.shape[2], device=input.device, dtype=input.dtype) + for i in range(batch_size_attention // split_slice_size): + start_idx = i * split_slice_size + end_idx = (i + 1) * split_slice_size + if do_split_2: + for i2 in range(input_tokens // split_2_slice_size): # pylint: disable=invalid-name + start_idx_2 = i2 * split_2_slice_size + end_idx_2 = (i2 + 1) * split_2_slice_size + if do_split_3: + for i3 in range(mat2_atten_shape // split_3_slice_size): # pylint: disable=invalid-name + start_idx_3 = i3 * split_3_slice_size + end_idx_3 = (i3 + 1) * split_3_slice_size + hidden_states[start_idx:end_idx, start_idx_2:end_idx_2, start_idx_3:end_idx_3] = original_torch_bmm( + input[start_idx:end_idx, start_idx_2:end_idx_2, start_idx_3:end_idx_3], + mat2[start_idx:end_idx, start_idx_2:end_idx_2, start_idx_3:end_idx_3], + out=out + ) + else: + hidden_states[start_idx:end_idx, start_idx_2:end_idx_2] = original_torch_bmm( + input[start_idx:end_idx, start_idx_2:end_idx_2], + mat2[start_idx:end_idx, start_idx_2:end_idx_2], + out=out + ) + else: + hidden_states[start_idx:end_idx] = original_torch_bmm( + input[start_idx:end_idx], + mat2[start_idx:end_idx], + out=out + ) + torch.xpu.synchronize(input.device) + else: + return original_torch_bmm(input, mat2, out=out) + return hidden_states + +original_scaled_dot_product_attention = torch.nn.functional.scaled_dot_product_attention +def scaled_dot_product_attention_32_bit(query, key, value, attn_mask=None, dropout_p=0.0, is_causal=False, **kwargs): + if query.device.type != "xpu": + return original_scaled_dot_product_attention(query, key, value, attn_mask=attn_mask, dropout_p=dropout_p, is_causal=is_causal, **kwargs) + do_split, do_split_2, do_split_3, split_slice_size, split_2_slice_size, split_3_slice_size = find_sdpa_slice_sizes(query.shape, query.element_size()) + + # Slice SDPA + if do_split: + batch_size_attention, query_tokens, shape_three = query.shape[0], query.shape[1], query.shape[2] + hidden_states = torch.zeros(query.shape, device=query.device, dtype=query.dtype) + for i in range(batch_size_attention // split_slice_size): + start_idx = i * split_slice_size + end_idx = (i + 1) * split_slice_size + if do_split_2: + for i2 in range(query_tokens // split_2_slice_size): # pylint: disable=invalid-name + start_idx_2 = i2 * split_2_slice_size + end_idx_2 = (i2 + 1) * split_2_slice_size + if do_split_3: + for i3 in range(shape_three // split_3_slice_size): # pylint: disable=invalid-name + start_idx_3 = i3 * split_3_slice_size + end_idx_3 = (i3 + 1) * split_3_slice_size + hidden_states[start_idx:end_idx, start_idx_2:end_idx_2, start_idx_3:end_idx_3] = original_scaled_dot_product_attention( + query[start_idx:end_idx, start_idx_2:end_idx_2, start_idx_3:end_idx_3], + key[start_idx:end_idx, start_idx_2:end_idx_2, start_idx_3:end_idx_3], + value[start_idx:end_idx, start_idx_2:end_idx_2, start_idx_3:end_idx_3], + attn_mask=attn_mask[start_idx:end_idx, start_idx_2:end_idx_2, start_idx_3:end_idx_3] if attn_mask is not None else attn_mask, + dropout_p=dropout_p, is_causal=is_causal, **kwargs + ) + else: + hidden_states[start_idx:end_idx, start_idx_2:end_idx_2] = original_scaled_dot_product_attention( + query[start_idx:end_idx, start_idx_2:end_idx_2], + key[start_idx:end_idx, start_idx_2:end_idx_2], + value[start_idx:end_idx, start_idx_2:end_idx_2], + attn_mask=attn_mask[start_idx:end_idx, start_idx_2:end_idx_2] if attn_mask is not None else attn_mask, + dropout_p=dropout_p, is_causal=is_causal, **kwargs + ) + else: + hidden_states[start_idx:end_idx] = original_scaled_dot_product_attention( + query[start_idx:end_idx], + key[start_idx:end_idx], + value[start_idx:end_idx], + attn_mask=attn_mask[start_idx:end_idx] if attn_mask is not None else attn_mask, + dropout_p=dropout_p, is_causal=is_causal, **kwargs + ) + torch.xpu.synchronize(query.device) + else: + return original_scaled_dot_product_attention(query, key, value, attn_mask=attn_mask, dropout_p=dropout_p, is_causal=is_causal, **kwargs) + return hidden_states diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/intel_xpu/xpu_override.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/intel_xpu/xpu_override.py new file mode 100644 index 0000000..be1efea --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/intel_xpu/xpu_override.py @@ -0,0 +1,319 @@ +import sys +import os +# os.add_dll_directory(os.path.join(sys.base_exec_prefix)) + +from functools import wraps +from contextlib import nullcontext +import torch +import numpy as np +from .attention import scaled_dot_product_attention_32_bit + +devices = { "device": "xpu" } + +device_supports_fp64 = torch.xpu.has_fp64_dtype() if hasattr(torch.xpu, "has_fp64_dtype") else torch.xpu.get_device_properties("xpu").has_fp64 + +class DummyDataParallel(torch.nn.Module): # pylint: disable=missing-class-docstring, unused-argument, too-few-public-methods + def __new__(cls, module, device_ids=None, output_device=None, dim=0): # pylint: disable=unused-argument + if isinstance(device_ids, list) and len(device_ids) > 1: + # errors.log.error("IPEX backend doesn't support DataParallel on multiple XPU devices") + print("IPEX error") + return module.to(devices.device) + +def return_null_context(*args, **kwargs): # pylint: disable=unused-argument + return nullcontext() + +@property +def is_cuda(self): + return self.device.type == 'xpu' or self.device.type == 'cuda' + +def check_device(device): + return bool((isinstance(device, torch.device) and device.type == "cuda") or (isinstance(device, str) and "cuda" in device) or isinstance(device, int)) + +def return_xpu(device): + return "xpu" + # return f"xpu:{device.split(':')[-1]}" if isinstance(device, str) and ":" in device else f"xpu:{device}" if isinstance(device, int) else torch.device(devices.device) if isinstance(device, torch.device) else devices.device + +# Autocast +original_autocast_init = torch.amp.autocast_mode.autocast.__init__ +@wraps(torch.amp.autocast_mode.autocast.__init__) +def autocast_init(self, device_type, dtype=None, enabled=True, cache_enabled=None): + if device_type == "cuda" or device_type == "xpu": + if dtype is None: + dtype = devices.dtype + return original_autocast_init(self, device_type="xpu", dtype=dtype, enabled=enabled, cache_enabled=cache_enabled) + else: + return original_autocast_init(self, device_type=device_type, dtype=dtype, enabled=enabled, cache_enabled=cache_enabled) + +# Latent Antialias CPU Offload: +original_interpolate = torch.nn.functional.interpolate +@wraps(torch.nn.functional.interpolate) +def interpolate(tensor, size=None, scale_factor=None, mode='nearest', align_corners=None, recompute_scale_factor=None, antialias=False): # pylint: disable=too-many-arguments + if mode in {'bicubic', 'bilinear'}: + return_device = tensor.device + return_dtype = tensor.dtype + return original_interpolate(tensor.to("cpu", dtype=torch.float32), size=size, scale_factor=scale_factor, mode=mode, + align_corners=align_corners, recompute_scale_factor=recompute_scale_factor, antialias=antialias).to(return_device, dtype=return_dtype) + else: + return original_interpolate(tensor, size=size, scale_factor=scale_factor, mode=mode, + align_corners=align_corners, recompute_scale_factor=recompute_scale_factor, antialias=antialias) + + +# Diffusers Float64 (Alchemist GPUs doesn't support 64 bit): +original_from_numpy = torch.from_numpy + +@wraps(torch.from_numpy) +def from_numpy(ndarray): + if ndarray.dtype == float: + return original_from_numpy(ndarray.astype('float32')) + else: + return original_from_numpy(ndarray) + +original_as_tensor = torch.as_tensor +@wraps(torch.as_tensor) +def as_tensor(data, dtype=None, device=None): + if check_device(device): + device = return_xpu(device) + if isinstance(data, np.ndarray) and data.dtype == float and not ( + (isinstance(device, torch.device) and device.type == "cpu") or (isinstance(device, str) and "cpu" in device)): + return original_as_tensor(data, dtype=torch.float32, device=device) + else: + return original_as_tensor(data, dtype=dtype, device=device) + +if device_supports_fp64 and os.environ.get('IPEX_FORCE_ATTENTION_SLICE', None) is None: + print("Device Supports FP64, will use default SDPA from Torch") + original_torch_bmm = torch.bmm + original_scaled_dot_product_attention = torch.nn.functional.scaled_dot_product_attention +else: + # 32 bit attention workarounds for Alchemist: + try: + from attention import torch_bmm_32_bit as original_torch_bmm + from attention import scaled_dot_product_attention_32_bit as original_scaled_dot_product_attention + except Exception: # pylint: disable=broad-exception-caught + print("Error when import sdpa") + original_torch_bmm = torch.bmm + original_scaled_dot_product_attention = torch.nn.functional.scaled_dot_product_attention + +# Data Type Errors: +@wraps(torch.bmm) +def torch_bmm(input, mat2, *, out=None): + if input.dtype != mat2.dtype: + mat2 = mat2.to(input.dtype) + return original_torch_bmm(input, mat2, out=out) + +@wraps(torch.nn.functional.scaled_dot_product_attention) +def scaled_dot_product_attention(query, key, value, attn_mask=None, dropout_p=0.0, is_causal=False, **kwargs): + if query.dtype != key.dtype: + key = key.to(dtype=query.dtype) + if query.dtype != value.dtype: + value = value.to(dtype=query.dtype) + if attn_mask is not None and query.dtype != attn_mask.dtype: + attn_mask = attn_mask.to(dtype=query.dtype) + return scaled_dot_product_attention_32_bit(query, key, value, attn_mask=attn_mask, dropout_p=dropout_p, is_causal=is_causal, **kwargs) + +# A1111 FP16 +original_functional_group_norm = torch.nn.functional.group_norm +@wraps(torch.nn.functional.group_norm) +def functional_group_norm(input, num_groups, weight=None, bias=None, eps=1e-05): + if weight is not None and input.dtype != weight.data.dtype: + input = input.to(dtype=weight.data.dtype) + if bias is not None and weight is not None and bias.data.dtype != weight.data.dtype: + bias.data = bias.data.to(dtype=weight.data.dtype) + return original_functional_group_norm(input, num_groups, weight=weight, bias=bias, eps=eps) + +# A1111 BF16 +original_functional_layer_norm = torch.nn.functional.layer_norm +@wraps(torch.nn.functional.layer_norm) +def functional_layer_norm(input, normalized_shape, weight=None, bias=None, eps=1e-05): + if weight is not None and input.dtype != weight.data.dtype: + input = input.to(dtype=weight.data.dtype) + if bias is not None and weight is not None and bias.data.dtype != weight.data.dtype: + bias.data = bias.data.to(dtype=weight.data.dtype) + return original_functional_layer_norm(input, normalized_shape, weight=weight, bias=bias, eps=eps) + +# Training +original_functional_linear = torch.nn.functional.linear +@wraps(torch.nn.functional.linear) +def functional_linear(input, weight, bias=None): + if input.dtype != weight.data.dtype: + input = input.to(dtype=weight.data.dtype) + if bias is not None and bias.data.dtype != weight.data.dtype: + bias.data = bias.data.to(dtype=weight.data.dtype) + return original_functional_linear(input, weight, bias=bias) + +original_functional_conv2d = torch.nn.functional.conv2d +@wraps(torch.nn.functional.conv2d) +def functional_conv2d(input, weight, bias=None, stride=1, padding=0, dilation=1, groups=1): + if input.dtype != weight.data.dtype: + input = input.to(dtype=weight.data.dtype) + if bias is not None and bias.data.dtype != weight.data.dtype: + bias.data = bias.data.to(dtype=weight.data.dtype) + return original_functional_conv2d(input, weight, bias=bias, stride=stride, padding=padding, dilation=dilation, groups=groups) + +# SwinIR BF16: +original_functional_pad = torch.nn.functional.pad +@wraps(torch.nn.functional.pad) +def functional_pad(input, pad, mode='constant', value=None): + if mode == 'reflect' and input.dtype == torch.bfloat16: + return original_functional_pad(input.to(torch.float32), pad, mode=mode, value=value).to(dtype=torch.bfloat16) + else: + return original_functional_pad(input, pad, mode=mode, value=value) + + +original_torch_tensor = torch.tensor +@wraps(torch.tensor) +def torch_tensor(data, *args, dtype=None, device=None, **kwargs): + if check_device(device): + device = return_xpu(device) + if not device_supports_fp64: + if (isinstance(device, torch.device) and device.type == "xpu") or (isinstance(device, str) and "xpu" in device): + if dtype == torch.float64: + dtype = torch.float32 + elif dtype is None and (hasattr(data, "dtype") and (data.dtype == torch.float64 or data.dtype == float)): + dtype = torch.float32 + return original_torch_tensor(data, *args, dtype=dtype, device=device, **kwargs) + +original_Tensor_to = torch.Tensor.to +@wraps(torch.Tensor.to) +def Tensor_to(self, device=None, *args, **kwargs): + if check_device(device): + return original_Tensor_to(self, return_xpu(device), *args, **kwargs) + else: + return original_Tensor_to(self, device, *args, **kwargs) + +original_Tensor_cuda = torch.Tensor.cuda +@wraps(torch.Tensor.cuda) +def Tensor_cuda(self, device=None, *args, **kwargs): + if check_device(device): + return original_Tensor_cuda(self, return_xpu(device), *args, **kwargs) + else: + return original_Tensor_cuda(self, device, *args, **kwargs) + +original_Tensor_pin_memory = torch.Tensor.pin_memory +@wraps(torch.Tensor.pin_memory) +def Tensor_pin_memory(self, device=None, *args, **kwargs): + if device is None: + device = "xpu" + if check_device(device): + return original_Tensor_pin_memory(self, return_xpu(device), *args, **kwargs) + else: + return original_Tensor_pin_memory(self, device, *args, **kwargs) + +original_UntypedStorage_init = torch.UntypedStorage.__init__ +@wraps(torch.UntypedStorage.__init__) +def UntypedStorage_init(*args, device=None, **kwargs): + if check_device(device): + return original_UntypedStorage_init(*args, device=return_xpu(device), **kwargs) + else: + return original_UntypedStorage_init(*args, device=device, **kwargs) + +original_UntypedStorage_cuda = torch.UntypedStorage.cuda +@wraps(torch.UntypedStorage.cuda) +def UntypedStorage_cuda(self, device=None, *args, **kwargs): + if check_device(device): + return original_UntypedStorage_cuda(self, return_xpu(device), *args, **kwargs) + else: + return original_UntypedStorage_cuda(self, device, *args, **kwargs) + +original_torch_empty = torch.empty +@wraps(torch.empty) +def torch_empty(*args, device=None, **kwargs): + if check_device(device): + return original_torch_empty(*args, device=return_xpu(device), **kwargs) + else: + return original_torch_empty(*args, device=device, **kwargs) + +original_torch_randn = torch.randn +@wraps(torch.randn) +def torch_randn(*args, device=None, dtype=None, **kwargs): + if dtype == bytes: + dtype = None + if check_device(device): + return original_torch_randn(*args, device=return_xpu(device), **kwargs) + else: + return original_torch_randn(*args, device=device, **kwargs) + +original_torch_ones = torch.ones +@wraps(torch.ones) +def torch_ones(*args, device=None, **kwargs): + if check_device(device): + return original_torch_ones(*args, device=return_xpu(device), **kwargs) + else: + return original_torch_ones(*args, device=device, **kwargs) + +original_torch_zeros = torch.zeros +@wraps(torch.zeros) +def torch_zeros(*args, device=None, **kwargs): + if check_device(device): + return original_torch_zeros(*args, device=return_xpu(device), **kwargs) + else: + return original_torch_zeros(*args, device=device, **kwargs) + +original_torch_full = torch.full +@wraps(torch.full) +def torch_full(*args, device=None, **kwargs): + if check_device(device): + return original_torch_full(*args, device=return_xpu(device), **kwargs) + else: + return original_torch_full(*args, device=device, **kwargs) + +original_torch_linspace = torch.linspace +@wraps(torch.linspace) +def torch_linspace(*args, device=None, **kwargs): + if check_device(device): + return original_torch_linspace(*args, device=return_xpu(device), **kwargs) + else: + return original_torch_linspace(*args, device=device, **kwargs) + +original_torch_Generator = torch.Generator +@wraps(torch.Generator) +def torch_Generator(device=None): + if check_device(device): + return original_torch_Generator(return_xpu(device)) + else: + return original_torch_Generator(device) + +original_torch_load = torch.load +@wraps(torch.load) +def torch_load(f, map_location=None, *args, **kwargs): + if map_location is None: + map_location = "xpu" + if check_device(map_location): + return original_torch_load(f, *args, map_location=return_xpu(map_location), **kwargs) + else: + return original_torch_load(f, *args, map_location=map_location, **kwargs) + + +# Hijack Functions: +def xpu_override(): + torch.tensor = torch_tensor + torch.Tensor.to = Tensor_to + torch.Tensor.cuda = Tensor_cuda + torch.Tensor.pin_memory = Tensor_pin_memory + torch.UntypedStorage.__init__ = UntypedStorage_init + torch.UntypedStorage.cuda = UntypedStorage_cuda + torch.empty = torch_empty + torch.randn = torch_randn + torch.ones = torch_ones + torch.zeros = torch_zeros + torch.full = torch_full + torch.linspace = torch_linspace + torch.Generator = torch_Generator + torch.load = torch_load + + torch.backends.cuda.sdp_kernel = return_null_context + torch.nn.DataParallel = DummyDataParallel + torch.UntypedStorage.is_cuda = is_cuda + torch.amp.autocast_mode.autocast.__init__ = autocast_init + + torch.nn.functional.scaled_dot_product_attention = scaled_dot_product_attention + torch.nn.functional.group_norm = functional_group_norm + torch.nn.functional.layer_norm = functional_layer_norm + torch.nn.functional.linear = functional_linear + torch.nn.functional.conv2d = functional_conv2d + torch.nn.functional.interpolate = interpolate + torch.nn.functional.pad = functional_pad + + torch.bmm = torch_bmm + if not device_supports_fp64: + torch.from_numpy = from_numpy + torch.as_tensor = as_tensor diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/pretrained_weights/.gitkeep b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/pretrained_weights/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/readme.md b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/readme.md new file mode 100644 index 0000000..b7775db --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/readme.md @@ -0,0 +1,296 @@ +

LivePortrait: Efficient Portrait Animation with Stitching and Retargeting Control

+ +
+ Jianzhu Guo 1โ€   + Dingyun Zhang 1,2  + Xiaoqiang Liu 1  + Zhizhou Zhong 1,3  + Yuan Zhang 1  +
+ +
+ Pengfei Wan 1  + Di Zhang 1  +
+ +
+ 1 Kuaishou Technology  2 University of Science and Technology of China  3 Fudan University  +
+
+ โ€  Corresponding author +
+
+ +
+ + + + + +
+ English | ็ฎ€ไฝ“ไธญๆ–‡ +
+
+ + +

+ showcase +
+ ๐Ÿ”ฅ For more results, visit our homepage ๐Ÿ”ฅ +

+ + +## ๐Ÿ”ฅ Updates +- **`2024/10/18`**: โ— We have updated the versions of the `transformers` and `gradio` libraries to avoid security vulnerabilities. Details [here](https://github.com/KwaiVGI/LivePortrait/pull/421/files). +- **`2024/08/29`**: ๐Ÿ“ฆ We update the Windows [one-click installer](https://huggingface.co/cleardusk/LivePortrait-Windows/blob/main/LivePortrait-Windows-v20240829.zip) and support auto-updates, see [changelog](https://huggingface.co/cleardusk/LivePortrait-Windows#20240829). +- **`2024/08/19`**: ๐Ÿ–ผ๏ธ We support **image driven mode** and **regional control**. For details, see [**here**](./assets/docs/changelog/2024-08-19.md). +- **`2024/08/06`**: ๐ŸŽจ We support **precise portrait editing** in the Gradio interface, inspired by [ComfyUI-AdvancedLivePortrait](https://github.com/PowerHouseMan/ComfyUI-AdvancedLivePortrait). See [**here**](./assets/docs/changelog/2024-08-06.md). +- **`2024/08/05`**: ๐Ÿ“ฆ Windows users can now download the [one-click installer](https://huggingface.co/cleardusk/LivePortrait-Windows/blob/main/LivePortrait-Windows-v20240806.zip) for Humans mode and **Animals mode** now! For details, see [**here**](./assets/docs/changelog/2024-08-05.md). +- **`2024/08/02`**: ๐Ÿ˜ธ We released a version of the **Animals model**, along with several other updates and improvements. Check out the details [**here**](./assets/docs/changelog/2024-08-02.md)! +- **`2024/07/25`**: ๐Ÿ“ฆ Windows users can now download the package from [HuggingFace](https://huggingface.co/cleardusk/LivePortrait-Windows/tree/main). Simply unzip and double-click `run_windows.bat` to enjoy! +- **`2024/07/24`**: ๐ŸŽจ We support pose editing for source portraits in the Gradio interface. Weโ€™ve also lowered the default detection threshold to increase recall. [Have fun](assets/docs/changelog/2024-07-24.md)! +- **`2024/07/19`**: โœจ We support ๐ŸŽž๏ธ **portrait video editing (aka v2v)**! More to see [here](assets/docs/changelog/2024-07-19.md). +- **`2024/07/17`**: ๐ŸŽ We support macOS with Apple Silicon, modified from [jeethu](https://github.com/jeethu)'s PR [#143](https://github.com/KwaiVGI/LivePortrait/pull/143). +- **`2024/07/10`**: ๐Ÿ’ช We support audio and video concatenating, driving video auto-cropping, and template making to protect privacy. More to see [here](assets/docs/changelog/2024-07-10.md). +- **`2024/07/09`**: ๐Ÿค— We released the [HuggingFace Space](https://huggingface.co/spaces/KwaiVGI/liveportrait), thanks to the HF team and [Gradio](https://github.com/gradio-app/gradio)! +- **`2024/07/04`**: ๐Ÿ˜Š We released the initial version of the inference code and models. Continuous updates, stay tuned! +- **`2024/07/04`**: ๐Ÿ”ฅ We released the [homepage](https://liveportrait.github.io) and technical report on [arXiv](https://arxiv.org/pdf/2407.03168). + + + +## Introduction ๐Ÿ“– +This repo, named **LivePortrait**, contains the official PyTorch implementation of our paper [LivePortrait: Efficient Portrait Animation with Stitching and Retargeting Control](https://arxiv.org/pdf/2407.03168). +We are actively updating and improving this repository. If you find any bugs or have suggestions, welcome to raise issues or submit pull requests (PR) ๐Ÿ’–. + +## Getting Started ๐Ÿ +### 1. Clone the code and prepare the environment ๐Ÿ› ๏ธ + +> [!Note] +> Make sure your system has [`git`](https://git-scm.com/), [`conda`](https://anaconda.org/anaconda/conda), and [`FFmpeg`](https://ffmpeg.org/download.html) installed. For details on FFmpeg installation, see [**how to install FFmpeg**](assets/docs/how-to-install-ffmpeg.md). + +```bash +git clone https://github.com/KwaiVGI/LivePortrait +cd LivePortrait + +# create env using conda +conda create -n LivePortrait python=3.10 +conda activate LivePortrait +``` + +#### For Linux or Windows Users +[X-Pose](https://github.com/IDEA-Research/X-Pose) requires your `torch` version to be compatible with the CUDA version. + +Firstly, check your current CUDA version by: +```bash +nvcc -V # example versions: 11.1, 11.8, 12.1, etc. +``` + +Then, install the corresponding torch version. Here are examples for different CUDA versions. Visit the [PyTorch Official Website](https://pytorch.org/get-started/previous-versions) for installation commands if your CUDA version is not listed: +```bash +# for CUDA 11.1 +pip install torch==1.10.1+cu111 torchvision==0.11.2 torchaudio==0.10.1 -f https://download.pytorch.org/whl/cu111/torch_stable.html +# for CUDA 11.8 +pip install torch==2.3.0 torchvision==0.18.0 torchaudio==2.3.0 --index-url https://download.pytorch.org/whl/cu118 +# for CUDA 12.1 +pip install torch==2.3.0 torchvision==0.18.0 torchaudio==2.3.0 --index-url https://download.pytorch.org/whl/cu121 +# ... +``` + +**Note**: On Windows systems, some higher versions of CUDA (such as 12.4, 12.6, etc.) may lead to unknown issues. You may consider downgrading CUDA to version 11.8 for stability. See the [downgrade guide](https://github.com/dimitribarbot/sd-webui-live-portrait/blob/main/assets/docs/how-to-install-xpose.md#cuda-toolkit-118) by [@dimitribarbot](https://github.com/dimitribarbot). + +Finally, install the remaining dependencies: +```bash +pip install -r requirements.txt +``` + +#### For macOS with Apple Silicon Users +The [X-Pose](https://github.com/IDEA-Research/X-Pose) dependency does not support macOS, so you can skip its installation. While Humans mode works as usual, Animals mode is not supported. Use the provided requirements file for macOS with Apple Silicon: +```bash +# for macOS with Apple Silicon users +pip install -r requirements_macOS.txt +``` + +### 2. Download pretrained weights ๐Ÿ“ฅ + +The easiest way to download the pretrained weights is from HuggingFace: +```bash +# !pip install -U "huggingface_hub[cli]" +huggingface-cli download KwaiVGI/LivePortrait --local-dir pretrained_weights --exclude "*.git*" "README.md" "docs" +``` + +If you cannot access to Huggingface, you can use [hf-mirror](https://hf-mirror.com/) to download: +```bash +# !pip install -U "huggingface_hub[cli]" +export HF_ENDPOINT=https://hf-mirror.com +huggingface-cli download KwaiVGI/LivePortrait --local-dir pretrained_weights --exclude "*.git*" "README.md" "docs" +``` + +Alternatively, you can download all pretrained weights from [Google Drive](https://drive.google.com/drive/folders/1UtKgzKjFAOmZkhNK-OYT0caJ_w2XAnib) or [Baidu Yun](https://pan.baidu.com/s/1MGctWmNla_vZxDbEp2Dtzw?pwd=z5cn). Unzip and place them in `./pretrained_weights`. + +Ensuring the directory structure is as or contains [**this**](assets/docs/directory-structure.md). + +### 3. Inference ๐Ÿš€ + +#### Fast hands-on (humans) ๐Ÿ‘ค +```bash +# For Linux and Windows users +python inference.py + +# For macOS users with Apple Silicon (Intel is not tested). NOTE: this maybe 20x slower than RTX 4090 +PYTORCH_ENABLE_MPS_FALLBACK=1 python inference.py +``` + +If the script runs successfully, you will get an output mp4 file named `animations/s6--d0_concat.mp4`. This file includes the following results: driving video, input image or video, and generated result. + +

+ image +

+ +Or, you can change the input by specifying the `-s` and `-d` arguments: + +```bash +# source input is an image +python inference.py -s assets/examples/source/s9.jpg -d assets/examples/driving/d0.mp4 + +# source input is a video โœจ +python inference.py -s assets/examples/source/s13.mp4 -d assets/examples/driving/d0.mp4 + +# more options to see +python inference.py -h +``` + +#### Fast hands-on (animals) ๐Ÿฑ๐Ÿถ +Animals mode is ONLY tested on Linux and Windows with NVIDIA GPU. + +You need to build an OP named `MultiScaleDeformableAttention` first, which is used by [X-Pose](https://github.com/IDEA-Research/X-Pose), a general keypoint detection framework. +```bash +cd src/utils/dependencies/XPose/models/UniPose/ops +python setup.py build install +cd - # equal to cd ../../../../../../../ +``` + +Then +```bash +python inference_animals.py -s assets/examples/source/s39.jpg -d assets/examples/driving/wink.pkl --driving_multiplier 1.75 --no_flag_stitching +``` +If the script runs successfully, you will get an output mp4 file named `animations/s39--wink_concat.mp4`. +

+ image +

+ +#### Driving video auto-cropping ๐Ÿ“ข๐Ÿ“ข๐Ÿ“ข +> [!IMPORTANT] +> To use your own driving video, we **recommend**: โฌ‡๏ธ +> - Crop it to a **1:1** aspect ratio (e.g., 512x512 or 256x256 pixels), or enable auto-cropping by `--flag_crop_driving_video`. +> - Focus on the head area, similar to the example videos. +> - Minimize shoulder movement. +> - Make sure the first frame of driving video is a frontal face with **neutral expression**. + +Below is an auto-cropping case by `--flag_crop_driving_video`: +```bash +python inference.py -s assets/examples/source/s9.jpg -d assets/examples/driving/d13.mp4 --flag_crop_driving_video +``` + +If you find the results of auto-cropping is not well, you can modify the `--scale_crop_driving_video`, `--vy_ratio_crop_driving_video` options to adjust the scale and offset, or do it manually. + +#### Motion template making +You can also use the auto-generated motion template files ending with `.pkl` to speed up inference, and **protect privacy**, such as: +```bash +python inference.py -s assets/examples/source/s9.jpg -d assets/examples/driving/d5.pkl # portrait animation +python inference.py -s assets/examples/source/s13.mp4 -d assets/examples/driving/d5.pkl # portrait video editing +``` + +### 4. Gradio interface ๐Ÿค— + +We also provide a Gradio interface for a better experience, just run by: + +```bash +# For Linux and Windows users (and macOS with Intel??) +python app.py # humans mode + +# For macOS with Apple Silicon users, Intel not supported, this maybe 20x slower than RTX 4090 +PYTORCH_ENABLE_MPS_FALLBACK=1 python app.py # humans mode +``` + +We also provide a Gradio interface of animals mode, which is only tested on Linux with NVIDIA GPU: +```bash +python app_animals.py # animals mode ๐Ÿฑ๐Ÿถ +``` + +You can specify the `--server_port`, `--share`, `--server_name` arguments to satisfy your needs! + +๐Ÿš€ We also provide an acceleration option `--flag_do_torch_compile`. The first-time inference triggers an optimization process (about one minute), making subsequent inferences 20-30% faster. Performance gains may vary with different CUDA versions. +```bash +# enable torch.compile for faster inference +python app.py --flag_do_torch_compile +``` +**Note**: This method is not supported on Windows and macOS. + +**Or, try it out effortlessly on [HuggingFace](https://huggingface.co/spaces/KwaiVGI/LivePortrait) ๐Ÿค—** + +### 5. Inference speed evaluation ๐Ÿš€๐Ÿš€๐Ÿš€ +We have also provided a script to evaluate the inference speed of each module: + +```bash +# For NVIDIA GPU +python speed.py +``` + +The results are [**here**](./assets/docs/speed.md). + +## Community Resources ๐Ÿค— + +Discover the invaluable resources contributed by our community to enhance your LivePortrait experience. + + +### Community-developed Projects + +| Repo (sorted by created timestamp) | Description | Author | +|------|------|--------| +| [**FacePoke**](https://github.com/jbilcke-hf/FacePoke) | A real-time head transformation app, controlled by your mouse! | [@jbilcke-hf](https://github.com/jbilcke-hf) | +| [**FaceFusion**](https://github.com/facefusion/facefusion) | FaceFusion 3.0 integregates LivePortrait as `expression_restorer` and `face_editor` processors. | [@henryruhs](https://github.com/henryruhs) | +| [**sd-webui-live-portrait**](https://github.com/dimitribarbot/sd-webui-live-portrait) | WebUI extension of LivePortrait, adding atab to the original Stable Diffusion WebUI to benefit from LivePortrait features. | [@dimitribarbot](https://github.com/dimitribarbot) | +| [**ComfyUI-LivePortraitKJ**](https://github.com/kijai/ComfyUI-LivePortraitKJ) | A ComfyUI node to use LivePortrait, with MediaPipe as as an alternative to Insightface. | [@kijai](https://github.com/kijai) | +| [**ComfyUI-AdvancedLivePortrait**](https://github.com/PowerHouseMan/ComfyUI-AdvancedLivePortrait) | A faster ComfyUI node with real-time preview that has inspired many other community-developed tools and projects. | [@PowerHouseMan](https://github.com/PowerHouseMan) | +| [**comfyui-liveportrait**](https://github.com/shadowcz007/comfyui-liveportrait) | A ComfyUI node to use LivePortrait, supporting multi-faces, expression interpolation etc, with a [tutorial](https://www.bilibili.com/video/BV1JW421R7sP). | [@shadowcz007](https://github.com/shadowcz007) | + +### Playgrounds, ๐Ÿค— HuggingFace Spaces and Others +- [FacePoke Space](https://huggingface.co/spaces/jbilcke-hf/FacePoke) +- [Expression Editor Space](https://huggingface.co/spaces/fffiloni/expression-editor) +- [Expression Editor Replicate](https://replicate.com/fofr/expression-editor) +- [Face Control Realtime Demo](https://fal.ai/demos/face-control) on FAL +- [Replicate Playground](https://replicate.com/fofr/live-portrait) +- Nuke can use LivePortrait through CompyUI node, details [here](https://x.com/bilawalsidhu/status/1837349806475276338) +- LivePortrait lives on [Poe](https://poe.com/LivePortrait) + +### Video Tutorials +- [Workflow of LivePortrait Video to Video](https://youtu.be/xfzK_6cTs58?si=aYjgypeJBkhc46VL) by [@curiousrefuge](https://www.youtube.com/@curiousrefuge) +- [Google Colab tutorial](https://youtu.be/59Y9ePAXTp0?si=KzEWhklBlporW7D8) by [@Planet Ai](https://www.youtube.com/@planetai217) +- [Paper reading](https://youtu.be/fD0P6UWSu8I?si=Vn5wxUa8qSu1jv4l) by [@TwoMinutePapers](https://www.youtube.com/@TwoMinutePapers) +- [ComfyUI Advanced LivePortrait](https://youtu.be/q0Vf-ZZsbzI?si=nbs3npleH-dVCt28) by [TutoView](https://www.youtube.com/@TutoView) +- [LivePortarit exploration](https://www.youtube.com/watch?v=vsvlbTEqgXQ) and [A deep dive into LivePortrait](https://youtu.be/cucaEEDYmsw?si=AtPaDWc5G-a4E8dD) by [TheoreticallyMedia](https://www.youtube.com/@TheoreticallyMedia) +- [LivePortrait hands-on tutorial](https://www.youtube.com/watch?v=uyjSTAOY7yI) by [@AI Search](https://www.youtube.com/@theAIsearch) +- [ComfyUI tutorial](https://www.youtube.com/watch?v=8-IcDDmiUMM) by [@Sebastian Kamph](https://www.youtube.com/@sebastiankamph) +- A [tutorial](https://www.bilibili.com/video/BV1cf421i7Ly) on BiliBili + +And so MANY amazing contributions from our community, too many to list them all ๐Ÿ’– + +## Acknowledgements ๐Ÿ’ +We would like to thank the contributors of [FOMM](https://github.com/AliaksandrSiarohin/first-order-model), [Open Facevid2vid](https://github.com/zhanglonghao1992/One-Shot_Free-View_Neural_Talking_Head_Synthesis), [SPADE](https://github.com/NVlabs/SPADE), [InsightFace](https://github.com/deepinsight/insightface) and [X-Pose](https://github.com/IDEA-Research/X-Pose) repositories, for their open research and contributions. + +## Ethics Considerations ๐Ÿ›ก๏ธ +Portrait animation technologies come with social risks, particularly the potential for misuse in creating deepfakes. To mitigate these risks, itโ€™s crucial to follow ethical guidelines and adopt responsible usage practices. At present, the synthesized results contain visual artifacts that may help in detecting deepfakes. Please note that we do not assume any legal responsibility for the use of the results generated by this project. + +## Citation ๐Ÿ’– +If you find LivePortrait useful for your research, welcome to ๐ŸŒŸ this repo and cite our work using the following BibTeX: +```bibtex +@article{guo2024liveportrait, + title = {LivePortrait: Efficient Portrait Animation with Stitching and Retargeting Control}, + author = {Guo, Jianzhu and Zhang, Dingyun and Liu, Xiaoqiang and Zhong, Zhizhou and Zhang, Yuan and Wan, Pengfei and Zhang, Di}, + journal = {arXiv preprint arXiv:2407.03168}, + year = {2024} +} +``` + +## Contact ๐Ÿ“ง +[**Jianzhu Guo (้ƒญๅปบ็ )**](https://guojianzhu.com); **guojianzhu1994@gmail.com** diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/readme_zh_cn.md b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/readme_zh_cn.md new file mode 100644 index 0000000..d5f2501 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/readme_zh_cn.md @@ -0,0 +1,309 @@ +

LivePortrait: Efficient Portrait Animation with Stitching and Retargeting Control

+ +
+ ้ƒญๅปบ็  1โ€   + ๅผ ไธ่Šธ 1,2  + ๅˆ˜ๆ™“ๅผบ 1  + ้’Ÿๆ™บ่ˆŸ 1,3  + ๅผ ๆธŠ 1  + ไธ‡้น้ฃž 1  + ๅผ ่ฟช 1  +
+ +
+ 1 ๅฟซๆ‰‹็ง‘ๆŠ€  2 ไธญๅ›ฝ็ง‘ๅญฆๆŠ€ๆœฏๅคงๅญฆ  3 ๅคๆ—ฆๅคงๅญฆ  +
+
+ โ€  ้€š่ฎฏไฝœ่€…๏ผˆProject Lead๏ผ‰ +
+ +
+
+ + + + + +
+ English | ็ฎ€ไฝ“ไธญๆ–‡ +
+ +
+ + +

+ showcase +
+ ๐Ÿ”ฅ ๆ›ดๅคšๆ•ˆๆžœ๏ผŒ่ฏทๆŸฅ็œ‹ๆˆ‘ไปฌ็š„ ไธป้กต ๐Ÿ”ฅ +

+ + + +## ๐Ÿ”ฅ ๆ›ดๆ–ฐๆ—ฅๅฟ— +- **`2024/10/18`**๏ผšโ— ๆˆ‘ไปฌๆ›ดๆ–ฐไบ†`transformers`๏ผŒ`gradio`ๅบ“็š„็‰ˆๆœฌ้ฟๅ…ๅฎ‰ๅ…จๆผๆดž๏ผŒๅ…ทไฝ“ๆŸฅ็œ‹[่ฟ™้‡Œ](https://github.com/KwaiVGI/LivePortrait/pull/421/files). +- **`2024/08/29`**๏ผš๐Ÿ“ฆ ๆˆ‘ไปฌๆ›ดๆ–ฐไบ†Windows[ไธ€้”ฎๅฎ‰่ฃ…็จ‹ๅบ](https://huggingface.co/cleardusk/LivePortrait-Windows/blob/main/LivePortrait-Windows-v20240829.zip)ๅนถๆ”ฏๆŒ่‡ชๅŠจๆ›ดๆ–ฐ, ่ฏฆๆƒ…ๅปบ[่ฟ™้‡Œ](https://huggingface.co/cleardusk/LivePortrait-Windows#20240829)ใ€‚ +- **`2024/08/19`**๏ผš๐Ÿ–ผ๏ธ ๆˆ‘ไปฌๆ”ฏๆŒไบ†**ๅ›พๅƒ้ฉฑๅŠจๆจกๅผ**ๅ’Œ**ๅŒบๅŸŸๆŽงๅˆถ**ใ€‚่ฏฆๆƒ…่ฏท่ง[**่ฟ™้‡Œ**](./assets/docs/changelog/2024-08-19.md)ใ€‚ +- **`2024/08/06`**๏ผš๐ŸŽจ ๆˆ‘ไปฌๅœจGradio็•Œ้ขๆ”ฏๆŒ**็ฒพ็กฎ็š„ไบบๅƒ็ผ–่พ‘**, ๅ—ๅˆฐ[ComfyUI-AdvancedLivePortrait](https://github.com/PowerHouseMan/ComfyUI-AdvancedLivePortrait)ๅฏๅ‘ใ€‚่ฏฆ่ง[**่ฟ™้‡Œ**](./assets/docs/changelog/2024-08-06.md)ใ€‚ +- **`2024/08/05`**๏ผš๐Ÿ“ฆ Windows็”จๆˆท็Žฐๅœจๅฏไปฅไธ‹่ฝฝ[ไธ€้”ฎๅฎ‰่ฃ…็จ‹ๅบ](https://huggingface.co/cleardusk/LivePortrait-Windows/blob/main/LivePortrait-Windows-v20240806.zip)๏ผŒๆ”ฏๆŒ**ไบบ็ฑปๆจกๅผ**ๅ’Œ**ๅŠจ็‰ฉๆจกๅผ**๏ผ่ฏฆๆƒ…่ง[**่ฟ™้‡Œ**](./assets/docs/changelog/2024-08-05.md)ใ€‚ +- **`2024/08/02`**๏ผš๐Ÿ˜ธ ๆˆ‘ไปฌๅ‘ๅธƒไบ†**ๅŠจ็‰ฉๆจกๅž‹**็‰ˆๆœฌ๏ผŒไปฅๅŠๅ…ถไป–ไธ€ไบ›ๆ›ดๆ–ฐๅ’Œๆ”น่ฟ›ใ€‚ๆŸฅ็œ‹่ฏฆๆƒ…[**่ฟ™้‡Œ**](./assets/docs/changelog/2024-08-02.md)๏ผ +- **`2024/07/25`**๏ผš๐Ÿ“ฆ Windows็”จๆˆท็ŽฐๅœจๅฏไปฅไปŽ [HuggingFace](https://huggingface.co/cleardusk/LivePortrait-Windows/tree/main) ๆˆ– [็™พๅบฆไบ‘](https://pan.baidu.com/s/1FWsWqKe0eNfXrwjEhhCqlw?pwd=86q2) ไธ‹่ฝฝ่ฝฏไปถๅŒ…ใ€‚่งฃๅŽ‹ๅนถๅŒๅ‡ป`run_windows.bat`ๅณๅฏไบซๅ—๏ผ +- **`2024/07/24`**๏ผš๐ŸŽจ ๆˆ‘ไปฌๅœจGradio็•Œ้ขๆ”ฏๆŒๆบไบบๅƒ็š„ๅงฟๅŠฟ็ผ–่พ‘ใ€‚ๆˆ‘ไปฌ่ฟ˜้™ไฝŽไบ†้ป˜่ฎคๆฃ€ๆต‹้˜ˆๅ€ผไปฅๅขžๅŠ ๅฌๅ›ž็Ž‡ใ€‚[็Žฉๅพ—ๅผ€ๅฟƒ](assets/docs/changelog/2024-07-24.md)๏ผ +- **`2024/07/19`**๏ผšโœจ ๆˆ‘ไปฌๆ”ฏๆŒ๐ŸŽž๏ธ **ไบบๅƒ่ง†้ข‘็ผ–่พ‘๏ผˆaka v2v๏ผ‰**๏ผๆ›ดๅคšไฟกๆฏ่ง[**่ฟ™้‡Œ**](assets/docs/changelog/2024-07-19.md)ใ€‚ +- **`2024/07/17`**๏ผš๐ŸŽ ๆˆ‘ไปฌๆ”ฏๆŒmacOSๆญ่ฝฝApple Silicon๏ผŒไฟฎๆ”นๆฅ่‡ช [jeethu](https://github.com/jeethu) ็š„PR [#143](https://github.com/KwaiVGI/LivePortrait/pull/143) ใ€‚ +- **`2024/07/10`**๏ผš๐Ÿ’ชๆˆ‘ไปฌๆ”ฏๆŒ้Ÿณ้ข‘ๅ’Œ่ง†้ข‘ๆ‹ผๆŽฅใ€้ฉฑๅŠจ่ง†้ข‘่‡ชๅŠจ่ฃๅ‰ชไปฅๅŠๅˆถไฝœๆจกๆฟไปฅไฟๆŠค้š็งใ€‚ๆ›ดๅคšไฟกๆฏ่ง[่ฟ™้‡Œ](assets/docs/changelog/2024-07-10.md)ใ€‚ +- **`2024/07/09`**๏ผš๐Ÿค— ๆˆ‘ไปฌๅ‘ๅธƒไบ†[HuggingFace Space](https://huggingface.co/spaces/KwaiVGI/liveportrait)๏ผŒๆ„Ÿ่ฐขHFๅ›ข้˜Ÿๅ’Œ[Gradio](https://github.com/gradio-app/gradio)๏ผ +- **`2024/07/04`**๏ผš๐Ÿ˜Š ๆˆ‘ไปฌๅ‘ๅธƒไบ†ๅˆๅง‹็‰ˆๆœฌ็š„ๆŽจ็†ไปฃ็ ๅ’Œๆจกๅž‹ใ€‚ๆŒ็ปญๆ›ดๆ–ฐ๏ผŒๆ•ฌ่ฏทๅ…ณๆณจ๏ผ +- **`2024/07/04`**๏ผš๐Ÿ”ฅ ๆˆ‘ไปฌๅ‘ๅธƒไบ†[ไธป้กต](https://liveportrait.github.io)ๅ’Œๅœจ[arXiv](https://arxiv.org/pdf/2407.03168)ไธŠ็š„ๆŠ€ๆœฏๆŠฅๅ‘Šใ€‚ + + + +## ไป‹็ป ๐Ÿ“– +ๆญคไป“ๅบ“ๅไธบ**LivePortrait**๏ผŒๅŒ…ๅซๆˆ‘ไปฌ่ฎบๆ–‡๏ผˆ[LivePortrait: Efficient Portrait Animation with Stitching and Retargeting Control](https://arxiv.org/pdf/2407.03168)๏ผ‰็š„ๅฎ˜ๆ–นPyTorchๅฎž็Žฐใ€‚ ๆˆ‘ไปฌๆญฃๅœจ็งฏๆžๆ›ดๆ–ฐๅ’Œๆ”น่ฟ›ๆญคไป“ๅบ“ใ€‚ๅฆ‚ๆžœๆ‚จๅ‘็Žฐไปปไฝ•้”™่ฏฏๆˆ–ๆœ‰ๅปบ่ฎฎ๏ผŒๆฌข่ฟŽๆๅ‡บ้—ฎ้ข˜ๆˆ–ๆไบคๅˆๅนถ่ฏทๆฑ‚๐Ÿ’–ใ€‚ + +## ไธŠๆ‰‹ๆŒ‡ๅ— ๐Ÿ +### 1. ๅ…‹้š†ไปฃ็ ๅ’Œๅฎ‰่ฃ…่ฟ่กŒ็Žฏๅขƒ ๐Ÿ› ๏ธ + +> [!Note] +> ็กฎไฟๆ‚จ็š„็ณป็ปŸๅทฒๅฎ‰่ฃ…[`git`](https://git-scm.com/)ใ€[`conda`](https://anaconda.org/anaconda/conda)ๅ’Œ[`FFmpeg`](https://ffmpeg.org/download.html)ใ€‚ๆœ‰ๅ…ณFFmpegๅฎ‰่ฃ…็š„่ฏฆ็ป†ไฟกๆฏ๏ผŒ่ง[**ๅฆ‚ไฝ•ๅฎ‰่ฃ…FFmpeg**](assets/docs/how-to-install-ffmpeg.md)ใ€‚ + +```bash +git clone https://github.com/KwaiVGI/LivePortrait +cd LivePortrait + +# ไฝฟ็”จcondaๅˆ›ๅปบ็Žฏๅขƒ +conda create -n LivePortrait python=3.10 +conda activate LivePortrait +``` + +#### ๅฏนไบŽLinuxๆˆ–Windows็”จๆˆท + +[X-Pose](https://github.com/IDEA-Research/X-Pose)้œ€่ฆๆ‚จ็š„`torch`็‰ˆๆœฌไธŽCUDA็‰ˆๆœฌๅ…ผๅฎนใ€‚ + +้ฆ–ๅ…ˆ๏ผŒ้€š่ฟ‡ไปฅไธ‹ๅ‘ฝไปคๆฃ€ๆŸฅๆ‚จๅฝ“ๅ‰็š„CUDA็‰ˆๆœฌ๏ผš + +```bash +nvcc -V # example versions: 11.1, 11.8, 12.1, etc. +``` + +็„ถๅŽ๏ผŒๅฎ‰่ฃ…็›ธๅบ”็‰ˆๆœฌ็š„torchใ€‚ไปฅไธ‹ๆ˜ฏไธๅŒCUDA็‰ˆๆœฌ็š„็คบไพ‹ใ€‚ๅฆ‚ๆžœๆ‚จ็š„CUDA็‰ˆๆœฌๆœชๅˆ—ๅ‡บ๏ผŒ่ฏท่ฎฟ้—ฎ[PyTorchๅฎ˜ๆ–น็ฝ‘็ซ™](https://pytorch.org/get-started/previous-versions)่Žทๅ–ๅฎ‰่ฃ…ๅ‘ฝไปค๏ผš +```bash +# for CUDA 11.1 +pip install torch==1.10.1+cu111 torchvision==0.11.2 torchaudio==0.10.1 -f https://download.pytorch.org/whl/cu111/torch_stable.html +# for CUDA 11.8 +pip install torch==2.3.0 torchvision==0.18.0 torchaudio==2.3.0 --index-url https://download.pytorch.org/whl/cu118 +# for CUDA 12.1 +pip install torch==2.3.0 torchvision==0.18.0 torchaudio==2.3.0 --index-url https://download.pytorch.org/whl/cu121 +# ... +``` + +**ๆณจๆ„**๏ผšๅœจWindows็ณป็ปŸไธŠ๏ผŒไธ€ไบ›่ฟ‡้ซ˜็‰ˆๆœฌ็š„CUDA(12.4ใ€12.6็ญ‰)ๅฏ่ƒฝไผšๅฏผ่‡ดๆœช็Ÿฅ็š„้—ฎ้ข˜๏ผŒๆ‚จๅฏไปฅ่€ƒ่™‘้™ไฝŽๆ‚จ็š„CUDA็‰ˆๆœฌๅˆฐ11.8๏ผŒ่ฟ™ๆ˜ฏๆˆ‘ไปฌๆต‹่ฏ•็š„ไธ€ไธช่พƒไธบ็จณๅฎš็š„็‰ˆๆœฌใ€‚้™็บงๆ–นๆณ•ๅฏไปฅๅ‚่€ƒ [@dimitribarbot](https://github.com/dimitribarbot) +ๆไพ›็š„[ๆ–‡ๆกฃ](https://github.com/dimitribarbot/sd-webui-live-portrait/blob/main/assets/docs/how-to-install-xpose.md#cuda-toolkit-118). + +ๆœ€ๅŽ๏ผŒๅฎ‰่ฃ…ๅ…ถไฝ™ไพ่ต–้กน๏ผš + +```bash +pip install -r requirements.txt +``` + +#### ๅฏนไบŽๆญ่ฝฝApple Silicon็š„macOS็”จๆˆท + +[X-Pose](https://github.com/IDEA-Research/X-Pose)ไพ่ต–้กนไธๆ”ฏๆŒmacOS๏ผŒๅ› ๆญคๆ‚จๅฏไปฅ่ทณ่ฟ‡ๅ…ถๅฎ‰่ฃ…ใ€‚ไบบ็ฑปๆจกๅผ็…งๅธธๅทฅไฝœ๏ผŒไฝ†ไธๆ”ฏๆŒๅŠจ็‰ฉๆจกๅผใ€‚ไฝฟ็”จไธบๆญ่ฝฝApple Silicon็š„macOSๆไพ›็š„requirementsๆ–‡ไปถ๏ผš + +```bash +# ๅฏนไบŽๆญ่ฝฝApple Silicon็š„macOS็”จๆˆท +pip install -r requirements_macOS.txt +``` + +### 2. ไธ‹่ฝฝ้ข„่ฎญ็ปƒๆƒ้‡(Pretrained weights) ๐Ÿ“ฅ + +ไปŽHuggingFaceไธ‹่ฝฝ้ข„่ฎญ็ปƒๆƒ้‡็š„ๆœ€็ฎ€ๅ•ๆ–นๆณ•ๆ˜ฏ๏ผš +```bash +# !pip install -U "huggingface_hub[cli]" +huggingface-cli download KwaiVGI/LivePortrait --local-dir pretrained_weights --exclude "*.git*" "README.md" "docs" +``` + +่‹ฅๆ‚จไธ่ƒฝ่ฎฟ้—ฎHuggingFaceๅนณๅฐ๏ผŒไฝ ๅฏไปฅ่ฎฟ้—ฎๅ…ถ้•œๅƒ็ฝ‘็ซ™[hf-mirror](https://hf-mirror.com/)่ฟ›่กŒไธ‹่ฝฝๆ“ไฝœ๏ผš + +```bash +# !pip install -U "huggingface_hub[cli]" +export HF_ENDPOINT=https://hf-mirror.com +huggingface-cli download KwaiVGI/LivePortrait --local-dir pretrained_weights --exclude "*.git*" "README.md" "docs" +``` + +ๆˆ–่€…๏ผŒๆ‚จๅฏไปฅไปŽ[Google Drive](https://drive.google.com/drive/folders/1UtKgzKjFAOmZkhNK-OYT0caJ_w2XAnib)ๆˆ–[็™พๅบฆไบ‘](https://pan.baidu.com/s/1MGctWmNla_vZxDbEp2Dtzw?pwd=z5cn)๏ผˆ่ฟ›่กŒไธญ๏ผ‰ไธ‹่ฝฝๆ‰€ๆœ‰้ข„่ฎญ็ปƒๆƒ้‡ใ€‚่งฃๅŽ‹ๅนถๅฐ†ๅฎƒไปฌๆ”พ็ฝฎๅœจ`./pretrained_weights`็›ฎๅฝ•ไธ‹ใ€‚ + +็กฎไฟ็›ฎๅฝ•็ป“ๆž„ๅฆ‚ๆ‰€็คบๅŒ…ๅซ[**ๆœฌไป“ๅบ“่ฏฅ่ทฏๅพ„**](assets/docs/directory-structure.md)ๅ…ถไธญๅฑ•็คบ็š„ๅ†…ๅฎนใ€‚ + +### 3. ๆŽจ็† ๐Ÿš€ + +#### ๅฟซ้€ŸไธŠๆ‰‹๏ผˆไบบ็ฑปๆจกๅž‹๏ผ‰๐Ÿ‘ค + +```bash +# ๅฏนไบŽLinuxๅ’ŒWindows็”จๆˆท +python inference.py + +# ๅฏนไบŽๆญ่ฝฝApple Silicon็š„macOS็”จๆˆท๏ผˆIntelๆœชๆต‹่ฏ•๏ผ‰ใ€‚ๆณจๆ„๏ผš่ฟ™ๅฏ่ƒฝๆฏ”RTX 4090ๆ…ข20ๅ€ +PYTORCH_ENABLE_MPS_FALLBACK=1 python inference.py +``` + +ๅฆ‚ๆžœ่„šๆœฌๆˆๅŠŸ่ฟ่กŒ๏ผŒๆ‚จๅฐ†ๅพ—ๅˆฐไธ€ไธชๅไธบ`animations/s6--d0_concat.mp4`็š„่พ“ๅ‡บmp4ๆ–‡ไปถใ€‚ๆญคๆ–‡ไปถๅŒ…ๅซไปฅไธ‹็ป“ๆžœ๏ผš้ฉฑๅŠจ่ง†้ข‘ใ€่พ“ๅ…ฅๅ›พๅƒๆˆ–่ง†้ข‘ไปฅๅŠ็”Ÿๆˆ็ป“ๆžœใ€‚ + +

+ image +

+ๆˆ–่€…๏ผŒๆ‚จๅฏไปฅ้€š่ฟ‡ๆŒ‡ๅฎš`-s`ๅ’Œ`-d`ๅ‚ๆ•ฐๆฅๆ›ดๆ”น่พ“ๅ…ฅ๏ผš + +```bash +# ๆบ่พ“ๅ…ฅๆ˜ฏๅ›พๅƒ +python inference.py -s assets/examples/source/s9.jpg -d assets/examples/driving/d0.mp4 + +# ๆบ่พ“ๅ…ฅๆ˜ฏ่ง†้ข‘ โœจ +python inference.py -s assets/examples/source/s13.mp4 -d assets/examples/driving/d0.mp4 + +# ๆ›ดๅคš้€‰้กน่ฏท่ง +python inference.py -h +``` + +#### ๅฟซ้€ŸไธŠๆ‰‹๏ผˆๅŠจ็‰ฉๆจกๅž‹๏ผ‰ ๐Ÿฑ๐Ÿถ + +ๅŠจ็‰ฉๆจกๅผไป…ๅœจLinuxๅ’ŒWindowsไธŠ็ป่ฟ‡ๆต‹่ฏ•๏ผŒๅนถไธ”้œ€่ฆNVIDIA GPUใ€‚ + +ๆ‚จ้œ€่ฆ้ฆ–ๅ…ˆๆž„ๅปบไธ€ไธชๅไธบ`MultiScaleDeformableAttention`็š„OP๏ผŒ่ฏฅOP็”ฑ[X-Pose](https://github.com/IDEA-Research/X-Pose)ไฝฟ็”จ๏ผŒ่ฟ™ๆ˜ฏไธ€ไธช้€š็”จ็š„ๅ…ณ้”ฎ็‚นๆฃ€ๆต‹ๆก†ๆžถใ€‚ + +```bash +cd src/utils/dependencies/XPose/models/UniPose/ops +python setup.py build install +cd - # ็ญ‰ๅŒไบŽ cd ../../../../../../../ +``` + +็„ถๅŽๆ‰ง่กŒ +```bash +python inference_animals.py -s assets/examples/source/s39.jpg -d assets/examples/driving/wink.pkl --driving_multiplier 1.75 --no_flag_stitching +``` +ๅฆ‚ๆžœ่„šๆœฌๆˆๅŠŸ่ฟ่กŒ๏ผŒๆ‚จๅฐ†ๅพ—ๅˆฐไธ€ไธชๅไธบ`animations/s39--wink_concat.mp4`็š„่พ“ๅ‡บmp4ๆ–‡ไปถใ€‚ +

+ image +

+ +#### ้ฉฑๅŠจ่ง†้ข‘่‡ชๅŠจ่ฃๅ‰ช ๐Ÿ“ข๐Ÿ“ข๐Ÿ“ข + +> [!IMPORTANT] +> ไฝฟ็”จๆ‚จ่‡ชๅทฑ็š„้ฉฑๅŠจ่ง†้ข‘ๆ—ถ๏ผŒๆˆ‘ไปฌ**ๆŽจ่**๏ผš โฌ‡๏ธ +> +> - ๅฐ†ๅ…ถ่ฃๅ‰ชไธบ**1:1**็š„ๅฎฝ้ซ˜ๆฏ”๏ผˆไพ‹ๅฆ‚๏ผŒ512x512ๆˆ–256x256ๅƒ็ด ๏ผ‰๏ผŒๆˆ–้€š่ฟ‡`--flag_crop_driving_video`ๅฏ็”จ่‡ชๅŠจ่ฃๅ‰ชใ€‚ +> - ไธ“ๆณจไบŽๅคด้ƒจๅŒบๅŸŸ๏ผŒ็ฑปไผผไบŽ็คบไพ‹่ง†้ข‘ใ€‚ +> - ๆœ€ๅฐๅŒ–่‚ฉ้ƒจ่ฟๅŠจใ€‚ +> - ็กฎไฟ้ฉฑๅŠจ่ง†้ข‘็š„็ฌฌไธ€ๅธงๆ˜ฏๅ…ทๆœ‰**ไธญๆ€ง่กจๆƒ…**็š„ๆญฃ้ข้ข้ƒจใ€‚ + +ไปฅไธ‹ๆ˜ฏ้€š่ฟ‡`--flag_crop_driving_video`่‡ชๅŠจ่ฃๅ‰ช็š„็คบไพ‹๏ผš + +```bash +python inference.py -s assets/examples/source/s9.jpg -d assets/examples/driving/d13.mp4 --flag_crop_driving_video +``` + +ๅฆ‚ๆžœ่‡ชๅŠจ่ฃๅ‰ช็š„็ป“ๆžœไธ็†ๆƒณ๏ผŒๆ‚จๅฏไปฅไฟฎๆ”น`--scale_crop_driving_video`ใ€`--vy_ratio_crop_driving_video`้€‰้กนๆฅ่ฐƒๆ•ดๆฏ”ไพ‹ๅ’Œๅ็งป๏ผŒๆˆ–่€…ๆ‰‹ๅŠจ่ฟ›่กŒ่ฐƒๆ•ดใ€‚ + +#### ๅŠจไฝœๆจกๆฟๅˆถไฝœ + +ๆ‚จไนŸๅฏไปฅไฝฟ็”จไปฅ`.pkl`็ป“ๅฐพ็š„่‡ชๅŠจ็”Ÿๆˆ็š„ๅŠจไฝœๆจกๆฟๆ–‡ไปถๆฅๅŠ ๅฟซๆŽจ็†้€Ÿๅบฆ๏ผŒๅนถ**ไฟๆŠค้š็ง**๏ผŒไพ‹ๅฆ‚๏ผš +```bash +python inference.py -s assets/examples/source/s9.jpg -d assets/examples/driving/d5.pkl # ไบบๅƒๅŠจ็”ป +python inference.py -s assets/examples/source/s13.mp4 -d assets/examples/driving/d5.pkl # ไบบๅƒ่ง†้ข‘็ผ–่พ‘ +``` + +### 4. Gradio ็•Œ้ข ๐Ÿค— + +ๆˆ‘ไปฌ่ฟ˜ๆไพ›ไบ†Gradio็•Œ้ข ๏ผŒไปฅ่Žทๅพ—ๆ›ดๅฅฝ็š„ไฝ“้ชŒ๏ผŒๅช้œ€่ฟ่กŒ๏ผš + +```bash +# ๅฏนไบŽLinuxๅ’ŒWindows็”จๆˆท๏ผˆไปฅๅŠๆญ่ฝฝIntel็š„macOS๏ผŸ๏ผŸ๏ผ‰ +python app.py # ไบบ็ฑปๆจกๅž‹ๆจกๅผ + +# ๅฏนไบŽๆญ่ฝฝApple Silicon็š„macOS็”จๆˆท๏ผŒไธๆ”ฏๆŒIntel๏ผŒ่ฟ™ๅฏ่ƒฝๆฏ”RTX 4090ๆ…ข20ๅ€ +PYTORCH_ENABLE_MPS_FALLBACK=1 python app.py # ไบบ็ฑปๆจกๅž‹ๆจกๅผ +``` + +ๆˆ‘ไปฌ่ฟ˜ไธบๅŠจ็‰ฉๆจกๅผๆไพ›ไบ†Gradio็•Œ้ข๏ผŒ่ฟ™ไป…ๅœจLinuxไธŠ็ป่ฟ‡NVIDIA GPUๆต‹่ฏ•๏ผš +```bash +python app_animals.py # animals mode ๐Ÿฑ๐Ÿถ +``` + +ๆ‚จๅฏไปฅๆŒ‡ๅฎš`--server_port`ใ€`--share`ใ€`--server_name`ๅ‚ๆ•ฐไปฅๆปก่ถณๆ‚จ็š„้œ€ๆฑ‚๏ผ + +๐Ÿš€ๆˆ‘ไปฌ่ฟ˜ๆไพ›ไบ†ไธ€ไธชๅŠ ้€Ÿ้€‰้กน`--flag_do_torch_compile`ใ€‚็ฌฌไธ€ๆฌกๆŽจ็†่งฆๅ‘ไผ˜ๅŒ–่ฟ‡็จ‹๏ผˆ็บฆไธ€ๅˆ†้’Ÿ๏ผ‰๏ผŒไฝฟๅŽ็ปญๆŽจ็†้€Ÿๅบฆๆ้ซ˜20-30%ใ€‚ไธๅŒCUDA็‰ˆๆœฌ็š„ๆ€ง่ƒฝๆๅ‡ๅฏ่ƒฝๆœ‰ๆ‰€ไธๅŒใ€‚ + +```bash +# ๅฏ็”จtorch.compileไปฅ่ฟ›่กŒๆ›ดๅฟซ็š„ๆŽจ็† +python app.py --flag_do_torch_compile +``` +**ๆณจๆ„**๏ผšๆญคๆ–นๆณ•ๅœจWindowsๅ’ŒmacOSไธŠไธๅ—ๆ”ฏๆŒใ€‚ + +**ๆˆ–่€…๏ผŒๅœจ[HuggingFace](https://huggingface.co/spaces/KwaiVGI/LivePortrait)ไธŠ่ฝปๆพๅฐ่ฏ•**๐Ÿค—ใ€‚ + +### 5. ๆŽจ็†้€Ÿๅบฆ้ข„ไผฐ ๐Ÿš€๐Ÿš€๐Ÿš€ +ๆˆ‘ไปฌ่ฟ˜ๆไพ›ไบ†ไธ€ไธช่„šๆœฌๆฅ่ฏ„ไผฐๆฏไธชๆจกๅ—็š„ๆŽจ็†้€Ÿๅบฆ๏ผš + +```bash +# ๅฏนไบŽNVIDIA GPU +python speed.py +``` + +็ป“ๆžœๅœจ[**ๆœฌไป“ๅบ“่ฏฅๆ–‡ไปถๅฑ•็คบ**](./assets/docs/speed.md). + +## ็คพๅŒบ่ต„ๆบ ๐Ÿค— + +### ็คพๅŒบ้กน็›ฎ + +| ไป“ๅบ“ (ๆŒ‰ๆ—ถ้—ดๆŽ’ๅบ) | ๆ่ฟฐ | ไฝœ่€… | +|------|------|--------| +| [**FacePoke**](https://github.com/jbilcke-hf/FacePoke) | ไธ€ไธชๅฎžๆ—ถ็š„ๅคด้ƒจๅงฟๆ€่กจๆƒ…ๆŽงๅˆถๅบ”็”จ๏ผŒ้€š่ฟ‡้ผ ๆ ‡ๆŽงๅˆถ๏ผ | [@jbilcke-hf](https://github.com/jbilcke-hf) | +| [**FaceFusion**](https://github.com/facefusion/facefusion) | FaceFusion 3.0 ้›†ๆˆไบ† LivePortrait ไฝœไธบ `expression_restorer` ๅ’Œ `face_editor` ๅค„็†ๅ™จใ€‚ | [@henryruhs](https://github.com/henryruhs) | +| [**sd-webui-live-portrait**](https://github.com/dimitribarbot/sd-webui-live-portrait) | LivePortrait ็š„ WebUI ๆ‰ฉๅฑ•๏ผŒๅœจๅŽŸ็‰ˆ Stable Diffusion WebUI ไธญๆทปๅŠ ไบ†ไธ€ไธชๆ ‡็ญพไปฅไฝฟ็”จ LivePortrait ็š„ๅŠŸ่ƒฝใ€‚ | [@dimitribarbot](https://github.com/dimitribarbot) | +| [**ComfyUI-LivePortraitKJ**](https://github.com/kijai/ComfyUI-LivePortraitKJ) | ไธ€ไธช็”จไบŽ LivePortrait ็š„ ComfyUI ่Š‚็‚น๏ผŒไฝฟ็”จ MediaPipe ไฝœไธบ Insightface ็š„ๆ›ฟไปฃๆ–นๆกˆใ€‚ | [@kijai](https://github.com/kijai) | +| [**ComfyUI-AdvancedLivePortrait**](https://github.com/PowerHouseMan/ComfyUI-AdvancedLivePortrait) | ไธ€ไธชๆ›ดๅฟซ็š„ ComfyUI ่Š‚็‚น๏ผŒๅ…ทๆœ‰ๅฎžๆ—ถ้ข„่งˆๅŠŸ่ƒฝ๏ผŒๅฏๅ‘ไบ†่ฎธๅคš็คพๅŒบๅผ€ๅ‘็š„ๅทฅๅ…ทๅ’Œ้กน็›ฎใ€‚ | [@PowerHouseMan](https://github.com/PowerHouseMan) | +| [**comfyui-liveportrait**](https://github.com/shadowcz007/comfyui-liveportrait) | ไธ€ไธช็”จไบŽ LivePortrait ็š„ ComfyUI ่Š‚็‚น๏ผŒๆ”ฏๆŒๅคš้ข้ƒจใ€่กจๆƒ…ๆ’ๅ€ผ็ญ‰ๅŠŸ่ƒฝ๏ผŒๅนถๆœ‰[ๆ•™็จ‹](https://www.bilibili.com/video/BV1JW421R7sP)ใ€‚ | [@shadowcz007](https://github.com/shadowcz007) | + +### Playgrounds, ๐Ÿค— HuggingFace Spaces ไปฅๅŠๅ…ถๅฎƒ +- [FacePoke Space](https://huggingface.co/spaces/jbilcke-hf/FacePoke) +- [Expression Editor Space](https://huggingface.co/spaces/fffiloni/expression-editor) +- [Expression Editor Replicate](https://replicate.com/fofr/expression-editor) +- [Face Control Realtime Demo](https://fal.ai/demos/face-control) on FAL +- [Replicate Playground](https://replicate.com/fofr/live-portrait) +- Nuke ๅฏไปฅ้€š่ฟ‡ CompyUI ่Š‚็‚นไฝฟ็”จ LivePortrait๏ผŒ่ฏฆๆƒ…่ง[่ฟ™้‡Œ](https://x.com/bilawalsidhu/status/1837349806475276338) +- LivePortrait ๅœจ [Poe](https://poe.com/LivePortrait) ไธŠ่ฟ่กŒ + +### ่ง†้ข‘ๆ•™็จ‹ +- [LivePortrait ่ง†้ข‘่ฝฌ่ง†้ข‘็š„ๅทฅไฝœๆต็จ‹](https://youtu.be/xfzK_6cTs58?si=aYjgypeJBkhc46VL) ็”ฑ [@curiousrefuge](https://www.youtube.com/@curiousrefuge) ๅˆถไฝœ +- [Google Colab ๆ•™็จ‹](https://youtu.be/59Y9ePAXTp0?si=KzEWhklBlporW7D8) ็”ฑ [@Planet Ai](https://www.youtube.com/@planetai217) ๅˆถไฝœ +- [่ฎบๆ–‡่งฃ่ฏป](https://youtu.be/fD0P6UWSu8I?si=Vn5wxUa8qSu1jv4l) ็”ฑ [@TwoMinutePapers](https://www.youtube.com/@TwoMinutePapers) ๅˆถไฝœ +- [ComfyUI ้ซ˜็บง LivePortrait ๆ•™็จ‹](https://youtu.be/q0Vf-ZZsbzI?si=nbs3npleH-dVCt28) ็”ฑ [TutoView](https://www.youtube.com/@TutoView) ๅˆถไฝœ +- [LivePortrait ๆŽข็ดข](https://www.youtube.com/watch?v=vsvlbTEqgXQ) ๅ’Œ [LivePortrait ๆทฑๅ…ฅๆŽข่ฎจ](https://youtu.be/cucaEEDYmsw?si=AtPaDWc5G-a4E8dD) ็”ฑ [TheoreticallyMedia](https://www.youtube.com/@TheoreticallyMedia) ๅˆถไฝœ +- [LivePortrait ๅฎžๆˆ˜ๆ•™็จ‹](https://www.youtube.com/watch?v=uyjSTAOY7yI) ็”ฑ [@AI Search](https://www.youtube.com/@theAIsearch) ๅˆถไฝœ +- [ComfyUI ๆ•™็จ‹](https://www.youtube.com/watch?v=8-IcDDmiUMM) ็”ฑ [@Sebastian Kamph](https://www.youtube.com/@sebastiankamph) ๅˆถไฝœ +- B ็ซ™ไธŠ็š„[ๆ•™็จ‹](https://www.bilibili.com/video/BV1cf421i7Ly) + +่ฟ˜ๆœ‰ๆฅ่‡ช็คพๅŒบ็š„ๆ— ๆ•ฐไปคไบบๆƒŠๅน็š„่ดก็Œฎ๏ผŒๆœช่ƒฝไธ€ไธ€ๅˆ—ไธพ ๐Ÿ’– + +## ่‡ด่ฐข ๐Ÿ’ + +ๆˆ‘ไปฌ่ฆๆ„Ÿ่ฐข[FOMM](https://github.com/AliaksandrSiarohin/first-order-model)ใ€[Open Facevid2vid](https://github.com/zhanglonghao1992/One-Shot_Free-View_Neural_Talking_Head_Synthesis)ใ€[SPADE](https://github.com/NVlabs/SPADE)ใ€[InsightFace](https://github.com/deepinsight/insightface)ๅ’Œ[X-Pose](https://github.com/IDEA-Research/X-Pose)ไป“ๅบ“็š„็š„่ดก็Œฎ่€…๏ผŒๆ„Ÿ่ฐขไป–ไปฌ็š„ๅผ€ๆ”พ็ ”็ฉถๅ’Œ่ดก็Œฎใ€‚ + +## ้“ๅพท่€ƒ้‡ ๐Ÿ›ก๏ธ +่‚–ๅƒๅŠจ็”ปๆŠ€ๆœฏไผด้š็€็คพไผš้ฃŽ้™ฉ๏ผŒ็‰นๅˆซๆ˜ฏๅœจๅˆ›ๅปบๆทฑๅบฆไผช้€ ๏ผˆdeepfakes๏ผ‰ๆ—ถๅฏ่ƒฝ่ขซๆปฅ็”จใ€‚ไธบไบ†ๅ‡่ฝป่ฟ™ไบ›้ฃŽ้™ฉ๏ผŒ้ตๅพช้“ๅพทๆŒ‡ๅ—ๅนถ้‡‡ๅ–่ดŸ่ดฃไปป็š„ไฝฟ็”จๅฎž่ทต่‡ณๅ…ณ้‡่ฆใ€‚็›ฎๅ‰๏ผŒ็”Ÿๆˆ็š„็ป“ๆžœๅŒ…ๅซไธ€ไบ›่ง†่ง‰ไผชๅฝฑ๏ผŒ่ฟ™ไบ›ไผชๅฝฑๅฏ่ƒฝๆœ‰ๅŠฉไบŽๆฃ€ๆต‹ๆทฑๅบฆไผช้€ ใ€‚่ฏทๆณจๆ„๏ผŒๆˆ‘ไปฌไธๅฏนๆœฌ้กน็›ฎ็”Ÿๆˆ็š„็ป“ๆžœ็š„ไฝฟ็”จๆ‰ฟๆ‹…ไปปไฝ•ๆณ•ๅพ‹่ดฃไปปใ€‚ + +## ๅผ•็”จ ๐Ÿ’– + +ๅฆ‚ๆžœๆ‚จๅ‘็ŽฐLivePortraitๅฏนๆ‚จ็š„็ ”็ฉถๆœ‰็”จ๏ผŒๆฌข่ฟŽๅผ•็”จๆˆ‘ไปฌ็š„ๅทฅไฝœ๏ผŒไฝฟ็”จไปฅไธ‹BibTeX๏ผš + +```bibtex +@article{guo2024liveportrait, + title = {LivePortrait: Efficient Portrait Animation with Stitching and Retargeting Control}, + author = {Guo, Jianzhu and Zhang, Dingyun and Liu, Xiaoqiang and Zhong, Zhizhou and Zhang, Yuan and Wan, Pengfei and Zhang, Di}, + journal = {arXiv preprint arXiv:2407.03168}, + year = {2024} +} +``` + +## ่”็ณปๆ–นๅผ ๐Ÿ“ง + +[**Jianzhu Guo (้ƒญๅปบ็ )**](https://guojianzhu.com); **guojianzhu1994@gmail.com**๏ผ› diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/speed.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/speed.py new file mode 100644 index 0000000..20a3482 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/speed.py @@ -0,0 +1,195 @@ +# coding: utf-8 + +""" +Benchmark the inference speed of each module in LivePortrait. + +TODO: heavy GPT style, need to refactor +""" + +import torch +torch._dynamo.config.suppress_errors = True # Suppress errors and fall back to eager execution + +import yaml +import time +import numpy as np + +from src.utils.helper import load_model, concat_feat +from src.config.inference_config import InferenceConfig + + +def initialize_inputs(batch_size=1, device_id=0): + """ + Generate random input tensors and move them to GPU + """ + feature_3d = torch.randn(batch_size, 32, 16, 64, 64).to(device_id).half() + kp_source = torch.randn(batch_size, 21, 3).to(device_id).half() + kp_driving = torch.randn(batch_size, 21, 3).to(device_id).half() + source_image = torch.randn(batch_size, 3, 256, 256).to(device_id).half() + generator_input = torch.randn(batch_size, 256, 64, 64).to(device_id).half() + eye_close_ratio = torch.randn(batch_size, 3).to(device_id).half() + lip_close_ratio = torch.randn(batch_size, 2).to(device_id).half() + feat_stitching = concat_feat(kp_source, kp_driving).half() + feat_eye = concat_feat(kp_source, eye_close_ratio).half() + feat_lip = concat_feat(kp_source, lip_close_ratio).half() + + inputs = { + 'feature_3d': feature_3d, + 'kp_source': kp_source, + 'kp_driving': kp_driving, + 'source_image': source_image, + 'generator_input': generator_input, + 'feat_stitching': feat_stitching, + 'feat_eye': feat_eye, + 'feat_lip': feat_lip + } + + return inputs + + +def load_and_compile_models(cfg, model_config): + """ + Load and compile models for inference + """ + appearance_feature_extractor = load_model(cfg.checkpoint_F, model_config, cfg.device_id, 'appearance_feature_extractor') + motion_extractor = load_model(cfg.checkpoint_M, model_config, cfg.device_id, 'motion_extractor') + warping_module = load_model(cfg.checkpoint_W, model_config, cfg.device_id, 'warping_module') + spade_generator = load_model(cfg.checkpoint_G, model_config, cfg.device_id, 'spade_generator') + stitching_retargeting_module = load_model(cfg.checkpoint_S, model_config, cfg.device_id, 'stitching_retargeting_module') + + models_with_params = [ + ('Appearance Feature Extractor', appearance_feature_extractor), + ('Motion Extractor', motion_extractor), + ('Warping Network', warping_module), + ('SPADE Decoder', spade_generator) + ] + + compiled_models = {} + for name, model in models_with_params: + model = model.half() + model = torch.compile(model, mode='max-autotune') # Optimize for inference + model.eval() # Switch to evaluation mode + compiled_models[name] = model + + retargeting_models = ['stitching', 'eye', 'lip'] + for retarget in retargeting_models: + module = stitching_retargeting_module[retarget].half() + module = torch.compile(module, mode='max-autotune') # Optimize for inference + module.eval() # Switch to evaluation mode + stitching_retargeting_module[retarget] = module + + return compiled_models, stitching_retargeting_module + + +def warm_up_models(compiled_models, stitching_retargeting_module, inputs): + """ + Warm up models to prepare them for benchmarking + """ + print("Warm up start!") + with torch.no_grad(): + for _ in range(10): + compiled_models['Appearance Feature Extractor'](inputs['source_image']) + compiled_models['Motion Extractor'](inputs['source_image']) + compiled_models['Warping Network'](inputs['feature_3d'], inputs['kp_driving'], inputs['kp_source']) + compiled_models['SPADE Decoder'](inputs['generator_input']) # Adjust input as required + stitching_retargeting_module['stitching'](inputs['feat_stitching']) + stitching_retargeting_module['eye'](inputs['feat_eye']) + stitching_retargeting_module['lip'](inputs['feat_lip']) + print("Warm up end!") + + +def measure_inference_times(compiled_models, stitching_retargeting_module, inputs): + """ + Measure inference times for each model + """ + times = {name: [] for name in compiled_models.keys()} + times['Stitching and Retargeting Modules'] = [] + + overall_times = [] + + with torch.no_grad(): + for _ in range(100): + torch.cuda.synchronize() + overall_start = time.time() + + start = time.time() + compiled_models['Appearance Feature Extractor'](inputs['source_image']) + torch.cuda.synchronize() + times['Appearance Feature Extractor'].append(time.time() - start) + + start = time.time() + compiled_models['Motion Extractor'](inputs['source_image']) + torch.cuda.synchronize() + times['Motion Extractor'].append(time.time() - start) + + start = time.time() + compiled_models['Warping Network'](inputs['feature_3d'], inputs['kp_driving'], inputs['kp_source']) + torch.cuda.synchronize() + times['Warping Network'].append(time.time() - start) + + start = time.time() + compiled_models['SPADE Decoder'](inputs['generator_input']) # Adjust input as required + torch.cuda.synchronize() + times['SPADE Decoder'].append(time.time() - start) + + start = time.time() + stitching_retargeting_module['stitching'](inputs['feat_stitching']) + stitching_retargeting_module['eye'](inputs['feat_eye']) + stitching_retargeting_module['lip'](inputs['feat_lip']) + torch.cuda.synchronize() + times['Stitching and Retargeting Modules'].append(time.time() - start) + + overall_times.append(time.time() - overall_start) + + return times, overall_times + + +def print_benchmark_results(compiled_models, stitching_retargeting_module, retargeting_models, times, overall_times): + """ + Print benchmark results with average and standard deviation of inference times + """ + average_times = {name: np.mean(times[name]) * 1000 for name in times.keys()} + std_times = {name: np.std(times[name]) * 1000 for name in times.keys()} + + for name, model in compiled_models.items(): + num_params = sum(p.numel() for p in model.parameters()) + num_params_in_millions = num_params / 1e6 + print(f"Number of parameters for {name}: {num_params_in_millions:.2f} M") + + for index, retarget in enumerate(retargeting_models): + num_params = sum(p.numel() for p in stitching_retargeting_module[retarget].parameters()) + num_params_in_millions = num_params / 1e6 + print(f"Number of parameters for part_{index} in Stitching and Retargeting Modules: {num_params_in_millions:.2f} M") + + for name, avg_time in average_times.items(): + std_time = std_times[name] + print(f"Average inference time for {name} over 100 runs: {avg_time:.2f} ms (std: {std_time:.2f} ms)") + + +def main(): + """ + Main function to benchmark speed and model parameters + """ + # Load configuration + cfg = InferenceConfig() + model_config_path = cfg.models_config + with open(model_config_path, 'r') as file: + model_config = yaml.safe_load(file) + + # Sample input tensors + inputs = initialize_inputs(device_id = cfg.device_id) + + # Load and compile models + compiled_models, stitching_retargeting_module = load_and_compile_models(cfg, model_config) + + # Warm up models + warm_up_models(compiled_models, stitching_retargeting_module, inputs) + + # Measure inference times + times, overall_times = measure_inference_times(compiled_models, stitching_retargeting_module, inputs) + + # Print benchmark results + print_benchmark_results(compiled_models, stitching_retargeting_module, ['stitching', 'eye', 'lip'], times, overall_times) + + +if __name__ == "__main__": + main() diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/config/__init__.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/config/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/config/argument_config.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/config/argument_config.py new file mode 100644 index 0000000..33b6aca --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/config/argument_config.py @@ -0,0 +1,59 @@ +# coding: utf-8 + +""" +All configs for user +""" +from dataclasses import dataclass +import tyro +from typing_extensions import Annotated +from typing import Optional, Literal +from .base_config import PrintableConfig, make_abs_path + + +@dataclass(repr=False) # use repr from PrintableConfig +class ArgumentConfig(PrintableConfig): + ########## input arguments ########## + source: Annotated[str, tyro.conf.arg(aliases=["-s"])] = make_abs_path('../../assets/examples/source/s0.jpg') # path to the source portrait (human/animal) or video (human) + driving: Annotated[str, tyro.conf.arg(aliases=["-d"])] = make_abs_path('../../assets/examples/driving/d0.mp4') # path to driving video or template (.pkl format) + output_dir: Annotated[str, tyro.conf.arg(aliases=["-o"])] = 'animations/' # directory to save output video + output_name: Annotated[str, tyro.conf.arg(aliases=["-n"])] = 'video' # name of the output video + template_dir: Annotated[str, tyro.conf.arg(aliases=["-t"])] = 'templates' # name of the output video + + ########## inference arguments ########## + flag_use_half_precision: bool = True # whether to use half precision (FP16). If black boxes appear, it might be due to GPU incompatibility; set to False. + flag_crop_driving_video: bool = False # whether to crop the driving video, if the given driving info is a video + device_id: int = 0 # gpu device id + flag_force_cpu: bool = False # force cpu inference, WIP! + flag_normalize_lip: bool = False # whether to let the lip to close state before animation, only take effect when flag_eye_retargeting and flag_lip_retargeting is False + flag_source_video_eye_retargeting: bool = False # when the input is a source video, whether to let the eye-open scalar of each frame to be the same as the first source frame before the animation, only take effect when flag_eye_retargeting and flag_lip_retargeting is False, may cause the inter-frame jittering + flag_eye_retargeting: bool = False # not recommend to be True, WIP; whether to transfer the eyes-open ratio of each driving frame to the source image or the corresponding source frame + flag_lip_retargeting: bool = False # not recommend to be True, WIP; whether to transfer the lip-open ratio of each driving frame to the source image or the corresponding source frame + flag_stitching: bool = True # recommend to True if head movement is small, False if head movement is large or the source image is an animal + flag_relative_motion: bool = True # whether to use relative motion + flag_pasteback: bool = True # whether to paste-back/stitch the animated face cropping from the face-cropping space to the original image space + flag_do_crop: bool = True # whether to crop the source portrait or video to the face-cropping space + driving_option: Literal["expression-friendly", "pose-friendly"] = "expression-friendly" # "expression-friendly" or "pose-friendly"; "expression-friendly" would adapt the driving motion with the global multiplier, and could be used when the source is a human image + driving_multiplier: float = 1.0 # be used only when driving_option is "expression-friendly" + driving_smooth_observation_variance: float = 3e-7 # smooth strength scalar for the animated video when the input is a source video, the larger the number, the smoother the animated video; too much smoothness would result in loss of motion accuracy + audio_priority: Literal['source', 'driving'] = 'driving' # whether to use the audio from source or driving video + animation_region: Literal["exp", "pose", "lip", "eyes", "all"] = "all" # the region where the animation was performed, "exp" means the expression, "pose" means the head pose, "all" means all regions + ########## source crop arguments ########## + det_thresh: float = 0.15 # detection threshold + scale: float = 2.3 # the ratio of face area is smaller if scale is larger + vx_ratio: float = 0 # the ratio to move the face to left or right in cropping space + vy_ratio: float = -0.125 # the ratio to move the face to up or down in cropping space + flag_do_rot: bool = True # whether to conduct the rotation when flag_do_crop is True + source_max_dim: int = 1280 # the max dim of height and width of source image or video, you can change it to a larger number, e.g., 1920 + source_division: int = 2 # make sure the height and width of source image or video can be divided by this number + + ########## driving crop arguments ########## + scale_crop_driving_video: float = 2.2 # scale factor for cropping driving video + vx_ratio_crop_driving_video: float = 0. # adjust y offset + vy_ratio_crop_driving_video: float = -0.1 # adjust x offset + + ########## gradio arguments ########## + server_port: Annotated[int, tyro.conf.arg(aliases=["-p"])] = 8890 # port for gradio server + share: bool = False # whether to share the server to public + server_name: Optional[str] = "127.0.0.1" # set the local server name, "0.0.0.0" to broadcast all + flag_do_torch_compile: bool = False # whether to use torch.compile to accelerate generation + gradio_temp_dir: Optional[str] = None # directory to save gradio temp files diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/config/base_config.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/config/base_config.py new file mode 100644 index 0000000..216b8be --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/config/base_config.py @@ -0,0 +1,29 @@ +# coding: utf-8 + +""" +pretty printing class +""" + +from __future__ import annotations +import os.path as osp +from typing import Tuple + + +def make_abs_path(fn): + return osp.join(osp.dirname(osp.realpath(__file__)), fn) + + +class PrintableConfig: # pylint: disable=too-few-public-methods + """Printable Config defining str function""" + + def __repr__(self): + lines = [self.__class__.__name__ + ":"] + for key, val in vars(self).items(): + if isinstance(val, Tuple): + flattened_val = "[" + for item in val: + flattened_val += str(item) + "\n" + flattened_val = flattened_val.rstrip("\n") + val = flattened_val + "]" + lines += f"{key}: {str(val)}".split("\n") + return "\n ".join(lines) diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/config/crop_config.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/config/crop_config.py new file mode 100644 index 0000000..eaf6cc2 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/config/crop_config.py @@ -0,0 +1,35 @@ +# coding: utf-8 + +""" +parameters used for crop faces +""" + +from dataclasses import dataclass + +from .base_config import PrintableConfig, make_abs_path + + +@dataclass(repr=False) # use repr from PrintableConfig +class CropConfig(PrintableConfig): + insightface_root: str = make_abs_path("../../pretrained_weights/insightface") + landmark_ckpt_path: str = make_abs_path("../../pretrained_weights/liveportrait/landmark.onnx") + xpose_config_file_path: str = make_abs_path("../utils/dependencies/XPose/config_model/UniPose_SwinT.py") + xpose_embedding_cache_path: str = make_abs_path('../utils/resources/clip_embedding') + + xpose_ckpt_path: str = make_abs_path("../../pretrained_weights/liveportrait_animals/xpose.pth") + device_id: int = 0 # gpu device id + flag_force_cpu: bool = False # force cpu inference, WIP + det_thresh: float = 0.1 # detection threshold + ########## source image or video cropping option ########## + dsize: int = 512 # crop size + scale: float = 2.3 # scale factor + vx_ratio: float = 0 # vx ratio + vy_ratio: float = -0.125 # vy ratio +up, -down + max_face_num: int = 0 # max face number, 0 mean no limit + flag_do_rot: bool = True # whether to conduct the rotation when flag_do_crop is True + animal_face_type: str = "animal_face_9" # animal_face_68 -> 68 landmark points, animal_face_9 -> 9 landmarks + ########## driving video auto cropping option ########## + scale_crop_driving_video: float = 2.2 # 2.0 # scale factor for cropping driving video + vx_ratio_crop_driving_video: float = 0.0 # adjust y offset + vy_ratio_crop_driving_video: float = -0.1 # adjust x offset + direction: str = "large-small" # direction of cropping diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/config/inference_config.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/config/inference_config.py new file mode 100644 index 0000000..c4471b5 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/config/inference_config.py @@ -0,0 +1,69 @@ +# coding: utf-8 + +""" +config dataclass used for inference +""" + +import cv2 +from numpy import ndarray +import pickle as pkl +from dataclasses import dataclass, field +from typing import Literal, Tuple +from .base_config import PrintableConfig, make_abs_path + +def load_lip_array(): + with open(make_abs_path('../utils/resources/lip_array.pkl'), 'rb') as f: # nosec B301 -- trusted file + return pkl.load(f) # nosec B301 --trusted file + +@dataclass(repr=False) # use repr from PrintableConfig +class InferenceConfig(PrintableConfig): + # HUMAN MODEL CONFIG, NOT EXPORTED PARAMS + models_config: str = make_abs_path('./models.yaml') # portrait animation config + checkpoint_F: str = make_abs_path('../../pretrained_weights/liveportrait/base_models/appearance_feature_extractor.pth') # path to checkpoint of F + checkpoint_M: str = make_abs_path('../../pretrained_weights/liveportrait/base_models/motion_extractor.pth') # path to checkpoint pf M + checkpoint_G: str = make_abs_path('../../pretrained_weights/liveportrait/base_models/spade_generator.pth') # path to checkpoint of G + checkpoint_W: str = make_abs_path('../../pretrained_weights/liveportrait/base_models/warping_module.pth') # path to checkpoint of W + checkpoint_S: str = make_abs_path('../../pretrained_weights/liveportrait/retargeting_models/stitching_retargeting_module.pth') # path to checkpoint to S and R_eyes, R_lip + + # ANIMAL MODEL CONFIG, NOT EXPORTED PARAMS + checkpoint_F_animal: str = make_abs_path('../../pretrained_weights/liveportrait_animals/base_models/appearance_feature_extractor.pth') # path to checkpoint of F + checkpoint_M_animal: str = make_abs_path('../../pretrained_weights/liveportrait_animals/base_models/motion_extractor.pth') # path to checkpoint pf M + checkpoint_G_animal: str = make_abs_path('../../pretrained_weights/liveportrait_animals/base_models/spade_generator.pth') # path to checkpoint of G + checkpoint_W_animal: str = make_abs_path('../../pretrained_weights/liveportrait_animals/base_models/warping_module.pth') # path to checkpoint of W + checkpoint_S_animal: str = make_abs_path('../../pretrained_weights/liveportrait/retargeting_models/stitching_retargeting_module.pth') # path to checkpoint to S and R_eyes, R_lip, NOTE: use human temporarily! + + # EXPORTED PARAMS + flag_use_half_precision: bool = True + flag_crop_driving_video: bool = False + device_id: int = 0 + flag_normalize_lip: bool = True + flag_source_video_eye_retargeting: bool = False + flag_eye_retargeting: bool = False + flag_lip_retargeting: bool = False + flag_stitching: bool = True + flag_relative_motion: bool = True + flag_pasteback: bool = True + flag_do_crop: bool = True + flag_do_rot: bool = True + flag_force_cpu: bool = False + flag_do_torch_compile: bool = False + driving_option: str = "pose-friendly" # "expression-friendly" or "pose-friendly" + driving_multiplier: float = 1.0 + driving_smooth_observation_variance: float = 3e-7 # smooth strength scalar for the animated video when the input is a source video, the larger the number, the smoother the animated video; too much smoothness would result in loss of motion accuracy + source_max_dim: int = 1280 # the max dim of height and width of source image or video + source_division: int = 2 # make sure the height and width of source image or video can be divided by this number + animation_region: Literal["exp", "pose", "lip", "eyes", "all"] = "all" # the region where the animation was performed, "exp" means the expression, "pose" means the head pose + + # NOT EXPORTED PARAMS + lip_normalize_threshold: float = 0.03 # threshold for flag_normalize_lip + source_video_eye_retargeting_threshold: float = 0.18 # threshold for eyes retargeting if the input is a source video + anchor_frame: int = 0 # TO IMPLEMENT + + input_shape: Tuple[int, int] = (256, 256) # input shape + output_format: Literal['mp4', 'gif'] = 'mp4' # output video format + crf: int = 15 # crf for output video + output_fps: int = 25 # default output fps + + mask_crop: ndarray = field(default_factory=lambda: cv2.imread(make_abs_path('../utils/resources/mask_template.png'), cv2.IMREAD_COLOR)) + lip_array: ndarray = field(default_factory=load_lip_array) + size_gif: int = 256 # default gif size, TO IMPLEMENT diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/config/models.yaml b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/config/models.yaml new file mode 100644 index 0000000..131d1c6 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/config/models.yaml @@ -0,0 +1,43 @@ +model_params: + appearance_feature_extractor_params: # the F in the paper + image_channel: 3 + block_expansion: 64 + num_down_blocks: 2 + max_features: 512 + reshape_channel: 32 + reshape_depth: 16 + num_resblocks: 6 + motion_extractor_params: # the M in the paper + num_kp: 21 + backbone: convnextv2_tiny + warping_module_params: # the W in the paper + num_kp: 21 + block_expansion: 64 + max_features: 512 + num_down_blocks: 2 + reshape_channel: 32 + estimate_occlusion_map: True + dense_motion_params: + block_expansion: 32 + max_features: 1024 + num_blocks: 5 + reshape_depth: 16 + compress: 4 + spade_generator_params: # the G in the paper + upscale: 2 # represents upsample factor 256x256 -> 512x512 + block_expansion: 64 + max_features: 512 + num_down_blocks: 2 + stitching_retargeting_module_params: # the S in the paper + stitching: + input_size: 126 # (21*3)*2 + hidden_sizes: [128, 128, 64] + output_size: 65 # (21*3)+2(tx,ty) + lip: + input_size: 65 # (21*3)+2 + hidden_sizes: [128, 128, 64] + output_size: 63 # (21*3) + eye: + input_size: 66 # (21*3)+3 + hidden_sizes: [256, 256, 128, 128, 64] + output_size: 63 # (21*3) diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/gradio_pipeline.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/gradio_pipeline.py new file mode 100644 index 0000000..4ccd951 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/gradio_pipeline.py @@ -0,0 +1,665 @@ +# coding: utf-8 + +""" +Pipeline for gradio +""" + +import os.path as osp +import os +import cv2 +from rich.progress import track +import gradio as gr +import numpy as np +import torch + +from .config.argument_config import ArgumentConfig +from .live_portrait_pipeline import LivePortraitPipeline +from .live_portrait_pipeline_animal import LivePortraitPipelineAnimal +from .utils.io import load_img_online, load_video, resize_to_limit +from .utils.filter import smooth +from .utils.rprint import rlog as log +from .utils.crop import prepare_paste_back, paste_back +from .utils.camera import get_rotation_matrix +from .utils.video import get_fps, has_audio_stream, concat_frames, images2video, add_audio_to_video +from .utils.helper import is_square_video, mkdir, dct2device, basename +from .utils.retargeting_utils import calc_eye_close_ratio, calc_lip_close_ratio + + +def update_args(args, user_args): + """update the args according to user inputs + """ + for k, v in user_args.items(): + if hasattr(args, k): + setattr(args, k, v) + return args + + +class GradioPipeline(LivePortraitPipeline): + """gradio for human + """ + + def __init__(self, inference_cfg, crop_cfg, args: ArgumentConfig): + super().__init__(inference_cfg, crop_cfg) + # self.live_portrait_wrapper = self.live_portrait_wrapper + self.args = args + + @torch.no_grad() + def update_delta_new_eyeball_direction(self, eyeball_direction_x, eyeball_direction_y, delta_new, **kwargs): + if eyeball_direction_x > 0: + delta_new[0, 11, 0] += eyeball_direction_x * 0.0007 + delta_new[0, 15, 0] += eyeball_direction_x * 0.001 + else: + delta_new[0, 11, 0] += eyeball_direction_x * 0.001 + delta_new[0, 15, 0] += eyeball_direction_x * 0.0007 + + delta_new[0, 11, 1] += eyeball_direction_y * -0.001 + delta_new[0, 15, 1] += eyeball_direction_y * -0.001 + blink = -eyeball_direction_y / 2. + + delta_new[0, 11, 1] += blink * -0.001 + delta_new[0, 13, 1] += blink * 0.0003 + delta_new[0, 15, 1] += blink * -0.001 + delta_new[0, 16, 1] += blink * 0.0003 + + return delta_new + + @torch.no_grad() + def update_delta_new_smile(self, smile, delta_new, **kwargs): + delta_new[0, 20, 1] += smile * -0.01 + delta_new[0, 14, 1] += smile * -0.02 + delta_new[0, 17, 1] += smile * 0.0065 + delta_new[0, 17, 2] += smile * 0.003 + delta_new[0, 13, 1] += smile * -0.00275 + delta_new[0, 16, 1] += smile * -0.00275 + delta_new[0, 3, 1] += smile * -0.0035 + delta_new[0, 7, 1] += smile * -0.0035 + + return delta_new + + @torch.no_grad() + def update_delta_new_wink(self, wink, delta_new, **kwargs): + delta_new[0, 11, 1] += wink * 0.001 + delta_new[0, 13, 1] += wink * -0.0003 + delta_new[0, 17, 0] += wink * 0.0003 + delta_new[0, 17, 1] += wink * 0.0003 + delta_new[0, 3, 1] += wink * -0.0003 + + return delta_new + + @torch.no_grad() + def update_delta_new_eyebrow(self, eyebrow, delta_new, **kwargs): + if eyebrow > 0: + delta_new[0, 1, 1] += eyebrow * 0.001 + delta_new[0, 2, 1] += eyebrow * -0.001 + else: + delta_new[0, 1, 0] += eyebrow * -0.001 + delta_new[0, 2, 0] += eyebrow * 0.001 + delta_new[0, 1, 1] += eyebrow * 0.0003 + delta_new[0, 2, 1] += eyebrow * -0.0003 + return delta_new + + @torch.no_grad() + def update_delta_new_lip_variation_zero(self, lip_variation_zero, delta_new, **kwargs): + delta_new[0, 19, 0] += lip_variation_zero + + return delta_new + + @torch.no_grad() + def update_delta_new_lip_variation_one(self, lip_variation_one, delta_new, **kwargs): + delta_new[0, 14, 1] += lip_variation_one * 0.001 + delta_new[0, 3, 1] += lip_variation_one * -0.0005 + delta_new[0, 7, 1] += lip_variation_one * -0.0005 + delta_new[0, 17, 2] += lip_variation_one * -0.0005 + + return delta_new + + @torch.no_grad() + def update_delta_new_lip_variation_two(self, lip_variation_two, delta_new, **kwargs): + delta_new[0, 20, 2] += lip_variation_two * -0.001 + delta_new[0, 20, 1] += lip_variation_two * -0.001 + delta_new[0, 14, 1] += lip_variation_two * -0.001 + + return delta_new + + @torch.no_grad() + def update_delta_new_lip_variation_three(self, lip_variation_three, delta_new, **kwargs): + delta_new[0, 19, 1] += lip_variation_three * 0.001 + delta_new[0, 19, 2] += lip_variation_three * 0.0001 + delta_new[0, 17, 1] += lip_variation_three * -0.0001 + + return delta_new + + @torch.no_grad() + def update_delta_new_mov_x(self, mov_x, delta_new, **kwargs): + delta_new[0, 5, 0] += mov_x + + return delta_new + + @torch.no_grad() + def update_delta_new_mov_y(self, mov_y, delta_new, **kwargs): + delta_new[0, 5, 1] += mov_y + + return delta_new + + @torch.no_grad() + def execute_video( + self, + input_source_image_path=None, + input_source_video_path=None, + input_driving_video_path=None, + input_driving_image_path=None, + input_driving_video_pickle_path=None, + flag_normalize_lip=False, + flag_relative_input=True, + flag_do_crop_input=True, + flag_remap_input=True, + flag_stitching_input=True, + animation_region="all", + driving_option_input="pose-friendly", + driving_multiplier=1.0, + flag_crop_driving_video_input=True, + # flag_video_editing_head_rotation=False, + scale=2.3, + vx_ratio=0.0, + vy_ratio=-0.125, + scale_crop_driving_video=2.2, + vx_ratio_crop_driving_video=0.0, + vy_ratio_crop_driving_video=-0.1, + driving_smooth_observation_variance=3e-7, + tab_selection=None, + v_tab_selection=None + ): + """ for video-driven portrait animation or video editing + """ + if tab_selection == 'Image': + input_source_path = input_source_image_path + elif tab_selection == 'Video': + input_source_path = input_source_video_path + else: + input_source_path = input_source_image_path + + if v_tab_selection == 'Video': + input_driving_path = input_driving_video_path + elif v_tab_selection == 'Image': + input_driving_path = input_driving_image_path + elif v_tab_selection == 'Pickle': + input_driving_path = input_driving_video_pickle_path + else: + input_driving_path = input_driving_video_path + + if input_source_path is not None and input_driving_path is not None: + if osp.exists(input_driving_path) and v_tab_selection == 'Video' and not flag_crop_driving_video_input and is_square_video(input_driving_path) is False: + flag_crop_driving_video_input = True + log("The driving video is not square, it will be cropped to square automatically.") + gr.Info("The driving video is not square, it will be cropped to square automatically.", duration=2) + + args_user = { + 'source': input_source_path, + 'driving': input_driving_path, + 'flag_normalize_lip' : flag_normalize_lip, + 'flag_relative_motion': flag_relative_input, + 'flag_do_crop': flag_do_crop_input, + 'flag_pasteback': flag_remap_input, + 'flag_stitching': flag_stitching_input, + 'animation_region': animation_region, + 'driving_option': driving_option_input, + 'driving_multiplier': driving_multiplier, + 'flag_crop_driving_video': flag_crop_driving_video_input, + 'scale': scale, + 'vx_ratio': vx_ratio, + 'vy_ratio': vy_ratio, + 'scale_crop_driving_video': scale_crop_driving_video, + 'vx_ratio_crop_driving_video': vx_ratio_crop_driving_video, + 'vy_ratio_crop_driving_video': vy_ratio_crop_driving_video, + 'driving_smooth_observation_variance': driving_smooth_observation_variance, + } + # update config from user input + self.args = update_args(self.args, args_user) + self.live_portrait_wrapper.update_config(self.args.__dict__) + self.cropper.update_config(self.args.__dict__) + + output_path, output_path_concat = self.execute(self.args) + gr.Info("Run successfully!", duration=2) + if output_path.endswith(".jpg"): + return gr.update(visible=False), gr.update(visible=False), gr.update(visible=False), gr.update(visible=False), output_path, gr.update(visible=True), output_path_concat, gr.update(visible=True) + else: + return output_path, gr.update(visible=True), output_path_concat, gr.update(visible=True), gr.update(visible=False), gr.update(visible=False), gr.update(visible=False), gr.update(visible=False) + else: + raise gr.Error("Please upload the source portrait or source video, and driving video ๐Ÿค—๐Ÿค—๐Ÿค—", duration=5) + + @torch.no_grad() + def execute_image_retargeting( + self, + input_eye_ratio: float, + input_lip_ratio: float, + input_head_pitch_variation: float, + input_head_yaw_variation: float, + input_head_roll_variation: float, + mov_x: float, + mov_y: float, + mov_z: float, + lip_variation_zero: float, + lip_variation_one: float, + lip_variation_two: float, + lip_variation_three: float, + smile: float, + wink: float, + eyebrow: float, + eyeball_direction_x: float, + eyeball_direction_y: float, + input_image, + retargeting_source_scale: float, + flag_stitching_retargeting_input=True, + flag_do_crop_input_retargeting_image=True): + """ for single image retargeting + """ + if input_head_pitch_variation is None or input_head_yaw_variation is None or input_head_roll_variation is None: + raise gr.Error("Invalid relative pose input ๐Ÿ’ฅ!", duration=5) + # disposable feature + f_s_user, x_s_user, R_s_user, R_d_user, x_s_info, source_lmk_user, crop_M_c2o, mask_ori, img_rgb = \ + self.prepare_retargeting_image( + input_image, input_head_pitch_variation, input_head_yaw_variation, input_head_roll_variation, retargeting_source_scale, flag_do_crop=flag_do_crop_input_retargeting_image) + + if input_eye_ratio is None or input_lip_ratio is None: + raise gr.Error("Invalid ratio input ๐Ÿ’ฅ!", duration=5) + else: + device = self.live_portrait_wrapper.device + # inference_cfg = self.live_portrait_wrapper.inference_cfg + x_s_user = x_s_user.to(device) + f_s_user = f_s_user.to(device) + R_s_user = R_s_user.to(device) + R_d_user = R_d_user.to(device) + mov_x = torch.tensor(mov_x).to(device) + mov_y = torch.tensor(mov_y).to(device) + mov_z = torch.tensor(mov_z).to(device) + eyeball_direction_x = torch.tensor(eyeball_direction_x).to(device) + eyeball_direction_y = torch.tensor(eyeball_direction_y).to(device) + smile = torch.tensor(smile).to(device) + wink = torch.tensor(wink).to(device) + eyebrow = torch.tensor(eyebrow).to(device) + lip_variation_zero = torch.tensor(lip_variation_zero).to(device) + lip_variation_one = torch.tensor(lip_variation_one).to(device) + lip_variation_two = torch.tensor(lip_variation_two).to(device) + lip_variation_three = torch.tensor(lip_variation_three).to(device) + + x_c_s = x_s_info['kp'].to(device) + delta_new = x_s_info['exp'].to(device) + scale_new = x_s_info['scale'].to(device) + t_new = x_s_info['t'].to(device) + R_d_new = (R_d_user @ R_s_user.permute(0, 2, 1)) @ R_s_user + + if eyeball_direction_x != 0 or eyeball_direction_y != 0: + delta_new = self.update_delta_new_eyeball_direction(eyeball_direction_x, eyeball_direction_y, delta_new) + if smile != 0: + delta_new = self.update_delta_new_smile(smile, delta_new) + if wink != 0: + delta_new = self.update_delta_new_wink(wink, delta_new) + if eyebrow != 0: + delta_new = self.update_delta_new_eyebrow(eyebrow, delta_new) + if lip_variation_zero != 0: + delta_new = self.update_delta_new_lip_variation_zero(lip_variation_zero, delta_new) + if lip_variation_one != 0: + delta_new = self.update_delta_new_lip_variation_one(lip_variation_one, delta_new) + if lip_variation_two != 0: + delta_new = self.update_delta_new_lip_variation_two(lip_variation_two, delta_new) + if lip_variation_three != 0: + delta_new = self.update_delta_new_lip_variation_three(lip_variation_three, delta_new) + if mov_x != 0: + delta_new = self.update_delta_new_mov_x(-mov_x, delta_new) + if mov_y !=0 : + delta_new = self.update_delta_new_mov_y(mov_y, delta_new) + + x_d_new = mov_z * scale_new * (x_c_s @ R_d_new + delta_new) + t_new + eyes_delta, lip_delta = None, None + if input_eye_ratio != self.source_eye_ratio: + combined_eye_ratio_tensor = self.live_portrait_wrapper.calc_combined_eye_ratio([[float(input_eye_ratio)]], source_lmk_user) + eyes_delta = self.live_portrait_wrapper.retarget_eye(x_s_user, combined_eye_ratio_tensor) + if input_lip_ratio != self.source_lip_ratio: + combined_lip_ratio_tensor = self.live_portrait_wrapper.calc_combined_lip_ratio([[float(input_lip_ratio)]], source_lmk_user) + lip_delta = self.live_portrait_wrapper.retarget_lip(x_s_user, combined_lip_ratio_tensor) + print(lip_delta) + x_d_new = x_d_new + \ + (eyes_delta if eyes_delta is not None else 0) + \ + (lip_delta if lip_delta is not None else 0) + + if flag_stitching_retargeting_input: + x_d_new = self.live_portrait_wrapper.stitching(x_s_user, x_d_new) + out = self.live_portrait_wrapper.warp_decode(f_s_user, x_s_user, x_d_new) + out = self.live_portrait_wrapper.parse_output(out['out'])[0] + if flag_do_crop_input_retargeting_image: + out_to_ori_blend = paste_back(out, crop_M_c2o, img_rgb, mask_ori) + else: + out_to_ori_blend = out + return out, out_to_ori_blend + + @torch.no_grad() + def prepare_retargeting_image( + self, + input_image, + input_head_pitch_variation, input_head_yaw_variation, input_head_roll_variation, + retargeting_source_scale, + flag_do_crop=True): + """ for single image retargeting + """ + if input_image is not None: + # gr.Info("Upload successfully!", duration=2) + args_user = {'scale': retargeting_source_scale} + self.args = update_args(self.args, args_user) + self.cropper.update_config(self.args.__dict__) + inference_cfg = self.live_portrait_wrapper.inference_cfg + ######## process source portrait ######## + img_rgb = load_img_online(input_image, mode='rgb', max_dim=1280, n=2) + if flag_do_crop: + crop_info = self.cropper.crop_source_image(img_rgb, self.cropper.crop_cfg) + I_s = self.live_portrait_wrapper.prepare_source(crop_info['img_crop_256x256']) + source_lmk_user = crop_info['lmk_crop'] + crop_M_c2o = crop_info['M_c2o'] + mask_ori = prepare_paste_back(inference_cfg.mask_crop, crop_info['M_c2o'], dsize=(img_rgb.shape[1], img_rgb.shape[0])) + else: + I_s = self.live_portrait_wrapper.prepare_source(img_rgb) + source_lmk_user = self.cropper.calc_lmk_from_cropped_image(img_rgb) + crop_M_c2o = None + mask_ori = None + x_s_info = self.live_portrait_wrapper.get_kp_info(I_s) + x_d_info_user_pitch = x_s_info['pitch'] + input_head_pitch_variation + x_d_info_user_yaw = x_s_info['yaw'] + input_head_yaw_variation + x_d_info_user_roll = x_s_info['roll'] + input_head_roll_variation + R_s_user = get_rotation_matrix(x_s_info['pitch'], x_s_info['yaw'], x_s_info['roll']) + R_d_user = get_rotation_matrix(x_d_info_user_pitch, x_d_info_user_yaw, x_d_info_user_roll) + ############################################ + f_s_user = self.live_portrait_wrapper.extract_feature_3d(I_s) + x_s_user = self.live_portrait_wrapper.transform_keypoint(x_s_info) + return f_s_user, x_s_user, R_s_user, R_d_user, x_s_info, source_lmk_user, crop_M_c2o, mask_ori, img_rgb + else: + raise gr.Error("Please upload a source portrait as the retargeting input ๐Ÿค—๐Ÿค—๐Ÿค—", duration=5) + + @torch.no_grad() + def init_retargeting_image(self, retargeting_source_scale: float, source_eye_ratio: float, source_lip_ratio:float, input_image = None): + """ initialize the retargeting slider + """ + if input_image != None: + args_user = {'scale': retargeting_source_scale} + self.args = update_args(self.args, args_user) + self.cropper.update_config(self.args.__dict__) + # inference_cfg = self.live_portrait_wrapper.inference_cfg + ######## process source portrait ######## + img_rgb = load_img_online(input_image, mode='rgb', max_dim=1280, n=16) + log(f"Load source image from {input_image}.") + crop_info = self.cropper.crop_source_image(img_rgb, self.cropper.crop_cfg) + if crop_info is None: + raise gr.Error("Source portrait NO face detected", duration=2) + source_eye_ratio = calc_eye_close_ratio(crop_info['lmk_crop'][None]) + source_lip_ratio = calc_lip_close_ratio(crop_info['lmk_crop'][None]) + self.source_eye_ratio = round(float(source_eye_ratio.mean()), 2) + self.source_lip_ratio = round(float(source_lip_ratio[0][0]), 2) + log("Calculating eyes-open and lip-open ratios successfully!") + return self.source_eye_ratio, self.source_lip_ratio + else: + return source_eye_ratio, source_lip_ratio + + @torch.no_grad() + def execute_video_retargeting(self, input_lip_ratio: float, input_video, retargeting_source_scale: float, driving_smooth_observation_variance_retargeting: float, video_retargeting_silence=False, flag_do_crop_input_retargeting_video=True): + """ retargeting the lip-open ratio of each source frame + """ + # disposable feature + device = self.live_portrait_wrapper.device + + if not video_retargeting_silence: + f_s_user_lst, x_s_user_lst, source_lmk_crop_lst, source_M_c2o_lst, mask_ori_lst, source_rgb_lst, img_crop_256x256_lst, lip_delta_retargeting_lst_smooth, source_fps, n_frames = \ + self.prepare_retargeting_video(input_video, retargeting_source_scale, device, input_lip_ratio, driving_smooth_observation_variance_retargeting, flag_do_crop=flag_do_crop_input_retargeting_video) + if input_lip_ratio is None: + raise gr.Error("Invalid ratio input ๐Ÿ’ฅ!", duration=5) + else: + inference_cfg = self.live_portrait_wrapper.inference_cfg + + I_p_pstbk_lst = None + if flag_do_crop_input_retargeting_video: + I_p_pstbk_lst = [] + I_p_lst = [] + for i in track(range(n_frames), description='Retargeting video...', total=n_frames): + x_s_user_i = x_s_user_lst[i].to(device) + f_s_user_i = f_s_user_lst[i].to(device) + + lip_delta_retargeting = lip_delta_retargeting_lst_smooth[i] + x_d_i_new = x_s_user_i + lip_delta_retargeting + x_d_i_new = self.live_portrait_wrapper.stitching(x_s_user_i, x_d_i_new) + out = self.live_portrait_wrapper.warp_decode(f_s_user_i, x_s_user_i, x_d_i_new) + I_p_i = self.live_portrait_wrapper.parse_output(out['out'])[0] + I_p_lst.append(I_p_i) + + if flag_do_crop_input_retargeting_video: + I_p_pstbk = paste_back(I_p_i, source_M_c2o_lst[i], source_rgb_lst[i], mask_ori_lst[i]) + I_p_pstbk_lst.append(I_p_pstbk) + else: + inference_cfg = self.live_portrait_wrapper.inference_cfg + f_s_user_lst, x_s_user_lst, x_d_i_new_lst, source_M_c2o_lst, mask_ori_lst, source_rgb_lst, img_crop_256x256_lst, source_fps, n_frames = \ + self.prepare_video_lip_silence(input_video, device, flag_do_crop=flag_do_crop_input_retargeting_video) + + I_p_pstbk_lst = None + if flag_do_crop_input_retargeting_video: + I_p_pstbk_lst = [] + I_p_lst = [] + for i in track(range(n_frames), description='Silencing lip...', total=n_frames): + x_s_user_i = x_s_user_lst[i].to(device) + f_s_user_i = f_s_user_lst[i].to(device) + x_d_i_new = x_d_i_new_lst[i] + x_d_i_new = self.live_portrait_wrapper.stitching(x_s_user_i, x_d_i_new) + out = self.live_portrait_wrapper.warp_decode(f_s_user_i, x_s_user_i, x_d_i_new) + I_p_i = self.live_portrait_wrapper.parse_output(out['out'])[0] + I_p_lst.append(I_p_i) + + if flag_do_crop_input_retargeting_video: + I_p_pstbk = paste_back(I_p_i, source_M_c2o_lst[i], source_rgb_lst[i], mask_ori_lst[i]) + I_p_pstbk_lst.append(I_p_pstbk) + + mkdir(self.args.output_dir) + flag_source_has_audio = has_audio_stream(input_video) + + ######### build the final concatenation result ######### + # source frame | generation + frames_concatenated = concat_frames(driving_image_lst=None, source_image_lst=img_crop_256x256_lst, I_p_lst=I_p_lst) + wfp_concat = osp.join(self.args.output_dir, f'{basename(input_video)}_retargeting_concat.mp4') + images2video(frames_concatenated, wfp=wfp_concat, fps=source_fps) + + if flag_source_has_audio: + # final result with concatenation + wfp_concat_with_audio = osp.join(self.args.output_dir, f'{basename(input_video)}_retargeting_concat_with_audio.mp4') + add_audio_to_video(wfp_concat, input_video, wfp_concat_with_audio) + os.replace(wfp_concat_with_audio, wfp_concat) + log(f"Replace {wfp_concat_with_audio} with {wfp_concat}") + + # save the animated result + wfp = osp.join(self.args.output_dir, f'{basename(input_video)}_retargeting.mp4') + if I_p_pstbk_lst is not None and len(I_p_pstbk_lst) > 0: + images2video(I_p_pstbk_lst, wfp=wfp, fps=source_fps) + else: + images2video(I_p_lst, wfp=wfp, fps=source_fps) + + ######### build the final result ######### + if flag_source_has_audio: + wfp_with_audio = osp.join(self.args.output_dir, f'{basename(input_video)}_retargeting_with_audio.mp4') + add_audio_to_video(wfp, input_video, wfp_with_audio) + os.replace(wfp_with_audio, wfp) + log(f"Replace {wfp_with_audio} with {wfp}") + gr.Info("Run successfully!", duration=2) + return wfp_concat, wfp + + @torch.no_grad() + def prepare_retargeting_video(self, input_video, retargeting_source_scale, device, input_lip_ratio, driving_smooth_observation_variance_retargeting, flag_do_crop=True): + """ for video retargeting + """ + if input_video is not None: + # gr.Info("Upload successfully!", duration=2) + args_user = {'scale': retargeting_source_scale} + self.args = update_args(self.args, args_user) + self.cropper.update_config(self.args.__dict__) + inference_cfg = self.live_portrait_wrapper.inference_cfg + ######## process source video ######## + source_rgb_lst = load_video(input_video) + source_rgb_lst = [resize_to_limit(img, inference_cfg.source_max_dim, inference_cfg.source_division) for img in source_rgb_lst] + source_fps = int(get_fps(input_video)) + n_frames = len(source_rgb_lst) + log(f"Load source video from {input_video}. FPS is {source_fps}") + + if flag_do_crop: + ret_s = self.cropper.crop_source_video(source_rgb_lst, self.cropper.crop_cfg) + log(f'Source video is cropped, {len(ret_s["frame_crop_lst"])} frames are processed.') + if len(ret_s["frame_crop_lst"]) != n_frames: + n_frames = min(len(source_rgb_lst), len(ret_s["frame_crop_lst"])) + img_crop_256x256_lst, source_lmk_crop_lst, source_M_c2o_lst = ret_s['frame_crop_lst'], ret_s['lmk_crop_lst'], ret_s['M_c2o_lst'] + mask_ori_lst = [prepare_paste_back(inference_cfg.mask_crop, source_M_c2o, dsize=(source_rgb_lst[0].shape[1], source_rgb_lst[0].shape[0])) for source_M_c2o in source_M_c2o_lst] + else: + source_lmk_crop_lst = self.cropper.calc_lmks_from_cropped_video(source_rgb_lst) + img_crop_256x256_lst = [cv2.resize(_, (256, 256)) for _ in source_rgb_lst] # force to resize to 256x256 + source_M_c2o_lst, mask_ori_lst = None, None + + c_s_eyes_lst, c_s_lip_lst = self.live_portrait_wrapper.calc_ratio(source_lmk_crop_lst) + # save the motion template + I_s_lst = self.live_portrait_wrapper.prepare_videos(img_crop_256x256_lst) + source_template_dct = self.make_motion_template(I_s_lst, c_s_eyes_lst, c_s_lip_lst, output_fps=source_fps) + + c_d_lip_retargeting = [input_lip_ratio] + f_s_user_lst, x_s_user_lst, lip_delta_retargeting_lst = [], [], [] + for i in track(range(n_frames), description='Preparing retargeting video...', total=n_frames): + x_s_info = source_template_dct['motion'][i] + x_s_info = dct2device(x_s_info, device) + x_s_user = x_s_info['x_s'] + + source_lmk = source_lmk_crop_lst[i] + img_crop_256x256 = img_crop_256x256_lst[i] + I_s = I_s_lst[i] + f_s_user = self.live_portrait_wrapper.extract_feature_3d(I_s) + + combined_lip_ratio_tensor_retargeting = self.live_portrait_wrapper.calc_combined_lip_ratio(c_d_lip_retargeting, source_lmk) + lip_delta_retargeting = self.live_portrait_wrapper.retarget_lip(x_s_user, combined_lip_ratio_tensor_retargeting) + f_s_user_lst.append(f_s_user); x_s_user_lst.append(x_s_user); lip_delta_retargeting_lst.append(lip_delta_retargeting.cpu().numpy().astype(np.float32)) + lip_delta_retargeting_lst_smooth = smooth(lip_delta_retargeting_lst, lip_delta_retargeting_lst[0].shape, device, driving_smooth_observation_variance_retargeting) + + return f_s_user_lst, x_s_user_lst, source_lmk_crop_lst, source_M_c2o_lst, mask_ori_lst, source_rgb_lst, img_crop_256x256_lst, lip_delta_retargeting_lst_smooth, source_fps, n_frames + else: + # when press the clear button, go here + raise gr.Error("Please upload a source video as the retargeting input ๐Ÿค—๐Ÿค—๐Ÿค—", duration=5) + + @torch.no_grad() + def prepare_video_lip_silence(self, input_video, device, flag_do_crop=True): + """ for keeping lips in the source video silent + """ + if input_video is not None: + inference_cfg = self.live_portrait_wrapper.inference_cfg + ######## process source video ######## + source_rgb_lst = load_video(input_video) + source_rgb_lst = [resize_to_limit(img, inference_cfg.source_max_dim, inference_cfg.source_division) for img in source_rgb_lst] + source_fps = int(get_fps(input_video)) + n_frames = len(source_rgb_lst) + log(f"Load source video from {input_video}. FPS is {source_fps}") + + if flag_do_crop: + ret_s = self.cropper.crop_source_video(source_rgb_lst, self.cropper.crop_cfg) + log(f'Source video is cropped, {len(ret_s["frame_crop_lst"])} frames are processed.') + if len(ret_s["frame_crop_lst"]) != n_frames: + n_frames = min(len(source_rgb_lst), len(ret_s["frame_crop_lst"])) + img_crop_256x256_lst, source_lmk_crop_lst, source_M_c2o_lst = ret_s['frame_crop_lst'], ret_s['lmk_crop_lst'], ret_s['M_c2o_lst'] + mask_ori_lst = [prepare_paste_back(inference_cfg.mask_crop, source_M_c2o, dsize=(source_rgb_lst[0].shape[1], source_rgb_lst[0].shape[0])) for source_M_c2o in source_M_c2o_lst] + else: + source_lmk_crop_lst = self.cropper.calc_lmks_from_cropped_video(source_rgb_lst) + img_crop_256x256_lst = [cv2.resize(_, (256, 256)) for _ in source_rgb_lst] # force to resize to 256x256 + source_M_c2o_lst, mask_ori_lst = None, None + + c_s_eyes_lst, c_s_lip_lst = self.live_portrait_wrapper.calc_ratio(source_lmk_crop_lst) + # save the motion template + I_s_lst = self.live_portrait_wrapper.prepare_videos(img_crop_256x256_lst) + source_template_dct = self.make_motion_template(I_s_lst, c_s_eyes_lst, c_s_lip_lst, output_fps=source_fps) + + f_s_user_lst, x_s_user_lst, x_d_i_new_lst = [], [], [] + for i in track(range(n_frames), description='Preparing silencing lip...', total=n_frames): + x_s_info = source_template_dct['motion'][i] + x_s_info = dct2device(x_s_info, device) + scale_s = x_s_info['scale'] + x_s_user = x_s_info['x_s'] + x_c_s = x_s_info['kp'] + R_s = x_s_info['R'] + t_s = x_s_info['t'] + delta_new = torch.zeros_like(x_s_info['exp']) + torch.from_numpy(inference_cfg.lip_array).to(dtype=torch.float32, device=device) + for eyes_idx in [11, 13, 15, 16, 18]: + delta_new[:, eyes_idx, :] = x_s_info['exp'][:, eyes_idx, :] + source_lmk = source_lmk_crop_lst[i] + img_crop_256x256 = img_crop_256x256_lst[i] + I_s = I_s_lst[i] + f_s_user = self.live_portrait_wrapper.extract_feature_3d(I_s) + x_d_i_new = scale_s * (x_c_s @ R_s + delta_new) + t_s + f_s_user_lst.append(f_s_user); x_s_user_lst.append(x_s_user); x_d_i_new_lst.append(x_d_i_new) + return f_s_user_lst, x_s_user_lst, x_d_i_new_lst, source_M_c2o_lst, mask_ori_lst, source_rgb_lst, img_crop_256x256_lst, source_fps, n_frames + else: + # when press the clear button, go here + raise gr.Error("Please upload a source video as the input ๐Ÿค—๐Ÿค—๐Ÿค—", duration=5) + +class GradioPipelineAnimal(LivePortraitPipelineAnimal): + """gradio for animal + """ + def __init__(self, inference_cfg, crop_cfg, args: ArgumentConfig): + inference_cfg.flag_crop_driving_video = True # ensure the face_analysis_wrapper is enabled + super().__init__(inference_cfg, crop_cfg) + # self.live_portrait_wrapper_animal = self.live_portrait_wrapper_animal + self.args = args + + @torch.no_grad() + def execute_video( + self, + input_source_image_path=None, + input_driving_video_path=None, + input_driving_video_pickle_path=None, + flag_do_crop_input=False, + flag_remap_input=False, + driving_multiplier=1.0, + flag_stitching=False, + flag_crop_driving_video_input=False, + scale=2.3, + vx_ratio=0.0, + vy_ratio=-0.125, + scale_crop_driving_video=2.2, + vx_ratio_crop_driving_video=0.0, + vy_ratio_crop_driving_video=-0.1, + tab_selection=None, + ): + """ for video-driven potrait animation + """ + input_source_path = input_source_image_path + + if tab_selection == 'Video': + input_driving_path = input_driving_video_path + elif tab_selection == 'Pickle': + input_driving_path = input_driving_video_pickle_path + else: + input_driving_path = input_driving_video_pickle_path + + if input_source_path is not None and input_driving_path is not None: + if osp.exists(input_driving_path) and tab_selection == 'Video' and is_square_video(input_driving_path) is False: + flag_crop_driving_video_input = True + log("The driving video is not square, it will be cropped to square automatically.") + gr.Info("The driving video is not square, it will be cropped to square automatically.", duration=2) + + args_user = { + 'source': input_source_path, + 'driving': input_driving_path, + 'flag_do_crop': flag_do_crop_input, + 'flag_pasteback': flag_remap_input, + 'driving_multiplier': driving_multiplier, + 'flag_stitching': flag_stitching, + 'flag_crop_driving_video': flag_crop_driving_video_input, + 'scale': scale, + 'vx_ratio': vx_ratio, + 'vy_ratio': vy_ratio, + 'scale_crop_driving_video': scale_crop_driving_video, + 'vx_ratio_crop_driving_video': vx_ratio_crop_driving_video, + 'vy_ratio_crop_driving_video': vy_ratio_crop_driving_video, + } + # update config from user input + self.args = update_args(self.args, args_user) + self.live_portrait_wrapper_animal.update_config(self.args.__dict__) + self.cropper.update_config(self.args.__dict__) + # video driven animation + video_path, video_path_concat, video_gif_path = self.execute(self.args) + gr.Info("Run successfully!", duration=2) + return video_path, video_path_concat, video_gif_path + else: + raise gr.Error("Please upload the source animal image, and driving video ๐Ÿค—๐Ÿค—๐Ÿค—", duration=5) diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/live_portrait_pipeline.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/live_portrait_pipeline.py new file mode 100644 index 0000000..cefe396 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/live_portrait_pipeline.py @@ -0,0 +1,471 @@ +# coding: utf-8 + +""" +Pipeline of LivePortrait (Human) +""" + +import torch +torch.backends.cudnn.benchmark = True # disable CUDNN_BACKEND_EXECUTION_PLAN_DESCRIPTOR warning + +import cv2; cv2.setNumThreads(0); cv2.ocl.setUseOpenCL(False) +import numpy as np +import os +import os.path as osp +from rich.progress import track + +from .config.argument_config import ArgumentConfig +from .config.inference_config import InferenceConfig +from .config.crop_config import CropConfig +from .utils.cropper import Cropper +from .utils.camera import get_rotation_matrix +from .utils.video import images2video, get_fps, add_audio_to_video, has_audio_stream +from .utils.crop import prepare_paste_back, paste_back +from .utils.io import load_image_rgb, load_video, resize_to_limit, dump, load +from .utils.helper import mkdir, basename, dct2device, is_video, is_template, remove_suffix, is_image, is_square_video, calc_motion_multiplier +from .utils.filter import smooth +from .utils.rprint import rlog as log +# from .utils.viz import viz_lmk +from .live_portrait_wrapper import LivePortraitWrapper + + +def make_abs_path(fn): + return osp.join(osp.dirname(osp.realpath(__file__)), fn) + + +class LivePortraitPipeline(object): + + def __init__(self, inference_cfg: InferenceConfig, crop_cfg: CropConfig): + self.live_portrait_wrapper: LivePortraitWrapper = LivePortraitWrapper(inference_cfg=inference_cfg) + self.cropper: Cropper = Cropper(crop_cfg=crop_cfg) + + def make_motion_template(self, I_lst, c_eyes_lst, c_lip_lst, **kwargs): + n_frames = I_lst.shape[0] + template_dct = { + 'n_frames': n_frames, + 'output_fps': kwargs.get('output_fps', 25), + 'motion': [], + 'c_eyes_lst': [], + 'c_lip_lst': [], + } + + for i in track(range(n_frames), description='Making motion templates...', total=n_frames): + # collect s, R, ฮด and t for inference + I_i = I_lst[i] + x_i_info = self.live_portrait_wrapper.get_kp_info(I_i) + x_s = self.live_portrait_wrapper.transform_keypoint(x_i_info) + R_i = get_rotation_matrix(x_i_info['pitch'], x_i_info['yaw'], x_i_info['roll']) + + item_dct = { + 'scale': x_i_info['scale'].cpu().numpy().astype(np.float32), + 'R': R_i.cpu().numpy().astype(np.float32), + 'exp': x_i_info['exp'].cpu().numpy().astype(np.float32), + 't': x_i_info['t'].cpu().numpy().astype(np.float32), + 'kp': x_i_info['kp'].cpu().numpy().astype(np.float32), + 'x_s': x_s.cpu().numpy().astype(np.float32), + } + + template_dct['motion'].append(item_dct) + + c_eyes = c_eyes_lst[i].astype(np.float32) + template_dct['c_eyes_lst'].append(c_eyes) + + c_lip = c_lip_lst[i].astype(np.float32) + template_dct['c_lip_lst'].append(c_lip) + + return template_dct + + def execute(self, args: ArgumentConfig): + # for convenience + inf_cfg = self.live_portrait_wrapper.inference_cfg + device = self.live_portrait_wrapper.device + crop_cfg = self.cropper.crop_cfg + + ######## load source input ######## + flag_is_source_video = False + source_fps = None + if is_image(args.source): + flag_is_source_video = False + img_rgb = load_image_rgb(args.source) + img_rgb = resize_to_limit(img_rgb, inf_cfg.source_max_dim, inf_cfg.source_division) + log(f"Load source image from {args.source}") + source_rgb_lst = [img_rgb] + elif is_video(args.source): + flag_is_source_video = True + source_rgb_lst = load_video(args.source) + source_rgb_lst = [resize_to_limit(img, inf_cfg.source_max_dim, inf_cfg.source_division) for img in source_rgb_lst] + source_fps = int(get_fps(args.source)) + log(f"Load source video from {args.source}, FPS is {source_fps}") + else: # source input is an unknown format + raise Exception(f"Unknown source format: {args.source}") + + ######## process driving info ######## + flag_load_from_template = is_template(args.driving) + driving_rgb_crop_256x256_lst = None + wfp_template = None + + if flag_load_from_template: + # NOTE: load from template, it is fast, but the cropping video is None + log(f"Load from template: {args.driving}, NOT the video, so the cropping video and audio are both NULL.", style='bold green') + driving_template_dct = load(args.driving) + c_d_eyes_lst = driving_template_dct['c_eyes_lst'] if 'c_eyes_lst' in driving_template_dct.keys() else driving_template_dct['c_d_eyes_lst'] # compatible with previous keys + c_d_lip_lst = driving_template_dct['c_lip_lst'] if 'c_lip_lst' in driving_template_dct.keys() else driving_template_dct['c_d_lip_lst'] + driving_n_frames = driving_template_dct['n_frames'] + flag_is_driving_video = True if driving_n_frames > 1 else False + if flag_is_source_video and flag_is_driving_video: + n_frames = min(len(source_rgb_lst), driving_n_frames) # minimum number as the number of the animated frames + elif flag_is_source_video and not flag_is_driving_video: + n_frames = len(source_rgb_lst) + else: + n_frames = driving_n_frames + + # set output_fps + output_fps = driving_template_dct.get('output_fps', inf_cfg.output_fps) + log(f'The FPS of template: {output_fps}') + + if args.flag_crop_driving_video: + log("Warning: flag_crop_driving_video is True, but the driving info is a template, so it is ignored.") + + elif osp.exists(args.driving): + if is_video(args.driving): + flag_is_driving_video = True + # load from video file, AND make motion template + output_fps = int(get_fps(args.driving)) + log(f"Load driving video from: {args.driving}, FPS is {output_fps}") + driving_rgb_lst = load_video(args.driving) + elif is_image(args.driving): + flag_is_driving_video = False + driving_img_rgb = load_image_rgb(args.driving) + output_fps = 25 + log(f"Load driving image from {args.driving}") + driving_rgb_lst = [driving_img_rgb] + else: + raise Exception(f"{args.driving} is not a supported type!") + ######## make motion template ######## + log("Start making driving motion template...") + driving_n_frames = len(driving_rgb_lst) + if flag_is_source_video and flag_is_driving_video: + n_frames = min(len(source_rgb_lst), driving_n_frames) # minimum number as the number of the animated frames + driving_rgb_lst = driving_rgb_lst[:n_frames] + elif flag_is_source_video and not flag_is_driving_video: + n_frames = len(source_rgb_lst) + else: + n_frames = driving_n_frames + if inf_cfg.flag_crop_driving_video or (not is_square_video(args.driving)): + ret_d = self.cropper.crop_driving_video(driving_rgb_lst) + log(f'Driving video is cropped, {len(ret_d["frame_crop_lst"])} frames are processed.') + if len(ret_d["frame_crop_lst"]) is not n_frames and flag_is_driving_video: + n_frames = min(n_frames, len(ret_d["frame_crop_lst"])) + driving_rgb_crop_lst, driving_lmk_crop_lst = ret_d['frame_crop_lst'], ret_d['lmk_crop_lst'] + driving_rgb_crop_256x256_lst = [cv2.resize(_, (256, 256)) for _ in driving_rgb_crop_lst] + else: + driving_lmk_crop_lst = self.cropper.calc_lmks_from_cropped_video(driving_rgb_lst) + driving_rgb_crop_256x256_lst = [cv2.resize(_, (256, 256)) for _ in driving_rgb_lst] # force to resize to 256x256 + ####################################### + + c_d_eyes_lst, c_d_lip_lst = self.live_portrait_wrapper.calc_ratio(driving_lmk_crop_lst) + # save the motion template + I_d_lst = self.live_portrait_wrapper.prepare_videos(driving_rgb_crop_256x256_lst) + driving_template_dct = self.make_motion_template(I_d_lst, c_d_eyes_lst, c_d_lip_lst, output_fps=output_fps) + + mkdir(args.template_dir) + wfp_template = osp.join(args.template_dir, remove_suffix(os.path.basename(args.driving)) + '.pkl') + + dump(wfp_template, driving_template_dct) + log(f"Dump motion template to {wfp_template}") + else: + raise Exception(f"{args.driving} does not exist!") + if not flag_is_driving_video: + c_d_eyes_lst = c_d_eyes_lst*n_frames + c_d_lip_lst = c_d_lip_lst*n_frames + + ######## prepare for pasteback ######## + I_p_pstbk_lst = None + if inf_cfg.flag_pasteback and inf_cfg.flag_do_crop and inf_cfg.flag_stitching: + I_p_pstbk_lst = [] + log("Prepared pasteback mask done.") + + I_p_lst = [] + R_d_0, x_d_0_info = None, None + flag_normalize_lip = inf_cfg.flag_normalize_lip # not overwrite + flag_source_video_eye_retargeting = inf_cfg.flag_source_video_eye_retargeting # not overwrite + lip_delta_before_animation, eye_delta_before_animation = None, None + + ######## process source info ######## + if flag_is_source_video: + log(f"Start making source motion template...") + + source_rgb_lst = source_rgb_lst[:n_frames] + if inf_cfg.flag_do_crop: + ret_s = self.cropper.crop_source_video(source_rgb_lst, crop_cfg) + log(f'Source video is cropped, {len(ret_s["frame_crop_lst"])} frames are processed.') + if len(ret_s["frame_crop_lst"]) is not n_frames: + n_frames = min(n_frames, len(ret_s["frame_crop_lst"])) + img_crop_256x256_lst, source_lmk_crop_lst, source_M_c2o_lst = ret_s['frame_crop_lst'], ret_s['lmk_crop_lst'], ret_s['M_c2o_lst'] + else: + source_lmk_crop_lst = self.cropper.calc_lmks_from_cropped_video(source_rgb_lst) + img_crop_256x256_lst = [cv2.resize(_, (256, 256)) for _ in source_rgb_lst] # force to resize to 256x256 + + c_s_eyes_lst, c_s_lip_lst = self.live_portrait_wrapper.calc_ratio(source_lmk_crop_lst) + # save the motion template + I_s_lst = self.live_portrait_wrapper.prepare_videos(img_crop_256x256_lst) + source_template_dct = self.make_motion_template(I_s_lst, c_s_eyes_lst, c_s_lip_lst, output_fps=source_fps) + + key_r = 'R' if 'R' in driving_template_dct['motion'][0].keys() else 'R_d' # compatible with previous keys + if inf_cfg.flag_relative_motion: + if flag_is_driving_video: + x_d_exp_lst = [source_template_dct['motion'][i]['exp'] + driving_template_dct['motion'][i]['exp'] - driving_template_dct['motion'][0]['exp'] for i in range(n_frames)] + x_d_exp_lst_smooth = smooth(x_d_exp_lst, source_template_dct['motion'][0]['exp'].shape, device, inf_cfg.driving_smooth_observation_variance) + else: + x_d_exp_lst = [source_template_dct['motion'][i]['exp'] + (driving_template_dct['motion'][0]['exp'] - inf_cfg.lip_array) for i in range(n_frames)] + x_d_exp_lst_smooth = [torch.tensor(x_d_exp[0], dtype=torch.float32, device=device) for x_d_exp in x_d_exp_lst] + if inf_cfg.animation_region == "all" or inf_cfg.animation_region == "pose": + if flag_is_driving_video: + x_d_r_lst = [(np.dot(driving_template_dct['motion'][i][key_r], driving_template_dct['motion'][0][key_r].transpose(0, 2, 1))) @ source_template_dct['motion'][i]['R'] for i in range(n_frames)] + x_d_r_lst_smooth = smooth(x_d_r_lst, source_template_dct['motion'][0]['R'].shape, device, inf_cfg.driving_smooth_observation_variance) + else: + x_d_r_lst = [source_template_dct['motion'][i]['R'] for i in range(n_frames)] + x_d_r_lst_smooth = [torch.tensor(x_d_r[0], dtype=torch.float32, device=device) for x_d_r in x_d_r_lst] + else: + if flag_is_driving_video: + x_d_exp_lst = [driving_template_dct['motion'][i]['exp'] for i in range(n_frames)] + x_d_exp_lst_smooth = smooth(x_d_exp_lst, source_template_dct['motion'][0]['exp'].shape, device, inf_cfg.driving_smooth_observation_variance) + else: + x_d_exp_lst = [driving_template_dct['motion'][0]['exp']] + x_d_exp_lst_smooth = [torch.tensor(x_d_exp[0], dtype=torch.float32, device=device) for x_d_exp in x_d_exp_lst]*n_frames + if inf_cfg.animation_region == "all" or inf_cfg.animation_region == "pose": + if flag_is_driving_video: + x_d_r_lst = [driving_template_dct['motion'][i][key_r] for i in range(n_frames)] + x_d_r_lst_smooth = smooth(x_d_r_lst, source_template_dct['motion'][0]['R'].shape, device, inf_cfg.driving_smooth_observation_variance) + else: + x_d_r_lst = [driving_template_dct['motion'][0][key_r]] + x_d_r_lst_smooth = [torch.tensor(x_d_r[0], dtype=torch.float32, device=device) for x_d_r in x_d_r_lst]*n_frames + + else: # if the input is a source image, process it only once + if inf_cfg.flag_do_crop: + crop_info = self.cropper.crop_source_image(source_rgb_lst[0], crop_cfg) + if crop_info is None: + raise Exception("No face detected in the source image!") + source_lmk = crop_info['lmk_crop'] + img_crop_256x256 = crop_info['img_crop_256x256'] + else: + source_lmk = self.cropper.calc_lmk_from_cropped_image(source_rgb_lst[0]) + img_crop_256x256 = cv2.resize(source_rgb_lst[0], (256, 256)) # force to resize to 256x256 + I_s = self.live_portrait_wrapper.prepare_source(img_crop_256x256) + x_s_info = self.live_portrait_wrapper.get_kp_info(I_s) + x_c_s = x_s_info['kp'] + R_s = get_rotation_matrix(x_s_info['pitch'], x_s_info['yaw'], x_s_info['roll']) + f_s = self.live_portrait_wrapper.extract_feature_3d(I_s) + x_s = self.live_portrait_wrapper.transform_keypoint(x_s_info) + + # let lip-open scalar to be 0 at first + if flag_normalize_lip and inf_cfg.flag_relative_motion and source_lmk is not None: + c_d_lip_before_animation = [0.] + combined_lip_ratio_tensor_before_animation = self.live_portrait_wrapper.calc_combined_lip_ratio(c_d_lip_before_animation, source_lmk) + if combined_lip_ratio_tensor_before_animation[0][0] >= inf_cfg.lip_normalize_threshold: + lip_delta_before_animation = self.live_portrait_wrapper.retarget_lip(x_s, combined_lip_ratio_tensor_before_animation) + + if inf_cfg.flag_pasteback and inf_cfg.flag_do_crop and inf_cfg.flag_stitching: + mask_ori_float = prepare_paste_back(inf_cfg.mask_crop, crop_info['M_c2o'], dsize=(source_rgb_lst[0].shape[1], source_rgb_lst[0].shape[0])) + + ######## animate ######## + if flag_is_driving_video or (flag_is_source_video and not flag_is_driving_video): + log(f"The animated video consists of {n_frames} frames.") + else: + log(f"The output of image-driven portrait animation is an image.") + for i in track(range(n_frames), description='๐Ÿš€Animating...', total=n_frames): + if flag_is_source_video: # source video + x_s_info = source_template_dct['motion'][i] + x_s_info = dct2device(x_s_info, device) + + source_lmk = source_lmk_crop_lst[i] + img_crop_256x256 = img_crop_256x256_lst[i] + I_s = I_s_lst[i] + f_s = self.live_portrait_wrapper.extract_feature_3d(I_s) + + x_c_s = x_s_info['kp'] + R_s = x_s_info['R'] + x_s =x_s_info['x_s'] + + # let lip-open scalar to be 0 at first if the input is a video + if flag_normalize_lip and inf_cfg.flag_relative_motion and source_lmk is not None: + c_d_lip_before_animation = [0.] + combined_lip_ratio_tensor_before_animation = self.live_portrait_wrapper.calc_combined_lip_ratio(c_d_lip_before_animation, source_lmk) + if combined_lip_ratio_tensor_before_animation[0][0] >= inf_cfg.lip_normalize_threshold: + lip_delta_before_animation = self.live_portrait_wrapper.retarget_lip(x_s, combined_lip_ratio_tensor_before_animation) + else: + lip_delta_before_animation = None + + # let eye-open scalar to be the same as the first frame if the latter is eye-open state + if flag_source_video_eye_retargeting and source_lmk is not None: + if i == 0: + combined_eye_ratio_tensor_frame_zero = c_s_eyes_lst[0] + c_d_eye_before_animation_frame_zero = [[combined_eye_ratio_tensor_frame_zero[0][:2].mean()]] + if c_d_eye_before_animation_frame_zero[0][0] < inf_cfg.source_video_eye_retargeting_threshold: + c_d_eye_before_animation_frame_zero = [[0.39]] + combined_eye_ratio_tensor_before_animation = self.live_portrait_wrapper.calc_combined_eye_ratio(c_d_eye_before_animation_frame_zero, source_lmk) + eye_delta_before_animation = self.live_portrait_wrapper.retarget_eye(x_s, combined_eye_ratio_tensor_before_animation) + + if inf_cfg.flag_pasteback and inf_cfg.flag_do_crop and inf_cfg.flag_stitching: # prepare for paste back + mask_ori_float = prepare_paste_back(inf_cfg.mask_crop, source_M_c2o_lst[i], dsize=(source_rgb_lst[i].shape[1], source_rgb_lst[i].shape[0])) + if flag_is_source_video and not flag_is_driving_video: + x_d_i_info = driving_template_dct['motion'][0] + else: + x_d_i_info = driving_template_dct['motion'][i] + x_d_i_info = dct2device(x_d_i_info, device) + R_d_i = x_d_i_info['R'] if 'R' in x_d_i_info.keys() else x_d_i_info['R_d'] # compatible with previous keys + + if i == 0: # cache the first frame + R_d_0 = R_d_i + x_d_0_info = x_d_i_info.copy() + + delta_new = x_s_info['exp'].clone() + if inf_cfg.flag_relative_motion: + if inf_cfg.animation_region == "all" or inf_cfg.animation_region == "pose": + R_new = x_d_r_lst_smooth[i] if flag_is_source_video else (R_d_i @ R_d_0.permute(0, 2, 1)) @ R_s + else: + R_new = R_s + if inf_cfg.animation_region == "all" or inf_cfg.animation_region == "exp": + if flag_is_source_video: + for idx in [1,2,6,11,12,13,14,15,16,17,18,19,20]: + delta_new[:, idx, :] = x_d_exp_lst_smooth[i][idx, :] + delta_new[:, 3:5, 1] = x_d_exp_lst_smooth[i][3:5, 1] + delta_new[:, 5, 2] = x_d_exp_lst_smooth[i][5, 2] + delta_new[:, 8, 2] = x_d_exp_lst_smooth[i][8, 2] + delta_new[:, 9, 1:] = x_d_exp_lst_smooth[i][9, 1:] + else: + if flag_is_driving_video: + delta_new = x_s_info['exp'] + (x_d_i_info['exp'] - x_d_0_info['exp']) + else: + delta_new = x_s_info['exp'] + (x_d_i_info['exp'] - torch.from_numpy(inf_cfg.lip_array).to(dtype=torch.float32, device=device)) + elif inf_cfg.animation_region == "lip": + for lip_idx in [6, 12, 14, 17, 19, 20]: + if flag_is_source_video: + delta_new[:, lip_idx, :] = x_d_exp_lst_smooth[i][lip_idx, :] + elif flag_is_driving_video: + delta_new[:, lip_idx, :] = (x_s_info['exp'] + (x_d_i_info['exp'] - x_d_0_info['exp']))[:, lip_idx, :] + else: + delta_new[:, lip_idx, :] = (x_s_info['exp'] + (x_d_i_info['exp'] - torch.from_numpy(inf_cfg.lip_array).to(dtype=torch.float32, device=device)))[:, lip_idx, :] + elif inf_cfg.animation_region == "eyes": + for eyes_idx in [11, 13, 15, 16, 18]: + if flag_is_source_video: + delta_new[:, eyes_idx, :] = x_d_exp_lst_smooth[i][eyes_idx, :] + elif flag_is_driving_video: + delta_new[:, eyes_idx, :] = (x_s_info['exp'] + (x_d_i_info['exp'] - x_d_0_info['exp']))[:, eyes_idx, :] + else: + delta_new[:, eyes_idx, :] = (x_s_info['exp'] + (x_d_i_info['exp'] - 0))[:, eyes_idx, :] + if inf_cfg.animation_region == "all": + scale_new = x_s_info['scale'] if flag_is_source_video else x_s_info['scale'] * (x_d_i_info['scale'] / x_d_0_info['scale']) + else: + scale_new = x_s_info['scale'] + if inf_cfg.animation_region == "all" or inf_cfg.animation_region == "pose": + t_new = x_s_info['t'] if flag_is_source_video else x_s_info['t'] + (x_d_i_info['t'] - x_d_0_info['t']) + else: + t_new = x_s_info['t'] + else: + if inf_cfg.animation_region == "all" or inf_cfg.animation_region == "pose": + R_new = x_d_r_lst_smooth[i] if flag_is_source_video else R_d_i + else: + R_new = R_s + if inf_cfg.animation_region == "all" or inf_cfg.animation_region == "exp": + for idx in [1,2,6,11,12,13,14,15,16,17,18,19,20]: + delta_new[:, idx, :] = x_d_exp_lst_smooth[i][idx, :] if flag_is_source_video else x_d_i_info['exp'][:, idx, :] + delta_new[:, 3:5, 1] = x_d_exp_lst_smooth[i][3:5, 1] if flag_is_source_video else x_d_i_info['exp'][:, 3:5, 1] + delta_new[:, 5, 2] = x_d_exp_lst_smooth[i][5, 2] if flag_is_source_video else x_d_i_info['exp'][:, 5, 2] + delta_new[:, 8, 2] = x_d_exp_lst_smooth[i][8, 2] if flag_is_source_video else x_d_i_info['exp'][:, 8, 2] + delta_new[:, 9, 1:] = x_d_exp_lst_smooth[i][9, 1:] if flag_is_source_video else x_d_i_info['exp'][:, 9, 1:] + elif inf_cfg.animation_region == "lip": + for lip_idx in [6, 12, 14, 17, 19, 20]: + delta_new[:, lip_idx, :] = x_d_exp_lst_smooth[i][lip_idx, :] if flag_is_source_video else x_d_i_info['exp'][:, lip_idx, :] + elif inf_cfg.animation_region == "eyes": + for eyes_idx in [11, 13, 15, 16, 18]: + delta_new[:, eyes_idx, :] = x_d_exp_lst_smooth[i][eyes_idx, :] if flag_is_source_video else x_d_i_info['exp'][:, eyes_idx, :] + scale_new = x_s_info['scale'] + if inf_cfg.animation_region == "all" or inf_cfg.animation_region == "pose": + t_new = x_d_i_info['t'] + else: + t_new = x_s_info['t'] + + t_new[..., 2].fill_(0) # zero tz + x_d_i_new = scale_new * (x_c_s @ R_new + delta_new) + t_new + + if inf_cfg.flag_relative_motion and inf_cfg.driving_option == "expression-friendly" and not flag_is_source_video and flag_is_driving_video: + if i == 0: + x_d_0_new = x_d_i_new + motion_multiplier = calc_motion_multiplier(x_s, x_d_0_new) + # motion_multiplier *= inf_cfg.driving_multiplier + x_d_diff = (x_d_i_new - x_d_0_new) * motion_multiplier + x_d_i_new = x_d_diff + x_s + + # Algorithm 1: + if not inf_cfg.flag_stitching and not inf_cfg.flag_eye_retargeting and not inf_cfg.flag_lip_retargeting: + # without stitching or retargeting + if flag_normalize_lip and lip_delta_before_animation is not None: + x_d_i_new += lip_delta_before_animation + if flag_source_video_eye_retargeting and eye_delta_before_animation is not None: + x_d_i_new += eye_delta_before_animation + else: + pass + elif inf_cfg.flag_stitching and not inf_cfg.flag_eye_retargeting and not inf_cfg.flag_lip_retargeting: + # with stitching and without retargeting + if flag_normalize_lip and lip_delta_before_animation is not None: + x_d_i_new = self.live_portrait_wrapper.stitching(x_s, x_d_i_new) + lip_delta_before_animation + else: + x_d_i_new = self.live_portrait_wrapper.stitching(x_s, x_d_i_new) + if flag_source_video_eye_retargeting and eye_delta_before_animation is not None: + x_d_i_new += eye_delta_before_animation + else: + eyes_delta, lip_delta = None, None + if inf_cfg.flag_eye_retargeting and source_lmk is not None: + c_d_eyes_i = c_d_eyes_lst[i] + combined_eye_ratio_tensor = self.live_portrait_wrapper.calc_combined_eye_ratio(c_d_eyes_i, source_lmk) + # โˆ†_eyes,i = R_eyes(x_s; c_s,eyes, c_d,eyes,i) + eyes_delta = self.live_portrait_wrapper.retarget_eye(x_s, combined_eye_ratio_tensor) + if inf_cfg.flag_lip_retargeting and source_lmk is not None: + c_d_lip_i = c_d_lip_lst[i] + combined_lip_ratio_tensor = self.live_portrait_wrapper.calc_combined_lip_ratio(c_d_lip_i, source_lmk) + # โˆ†_lip,i = R_lip(x_s; c_s,lip, c_d,lip,i) + lip_delta = self.live_portrait_wrapper.retarget_lip(x_s, combined_lip_ratio_tensor) + + if inf_cfg.flag_relative_motion: # use x_s + x_d_i_new = x_s + \ + (eyes_delta if eyes_delta is not None else 0) + \ + (lip_delta if lip_delta is not None else 0) + else: # use x_d,i + x_d_i_new = x_d_i_new + \ + (eyes_delta if eyes_delta is not None else 0) + \ + (lip_delta if lip_delta is not None else 0) + + if inf_cfg.flag_stitching: + x_d_i_new = self.live_portrait_wrapper.stitching(x_s, x_d_i_new) + + x_d_i_new = x_s + (x_d_i_new - x_s) * inf_cfg.driving_multiplier + out = self.live_portrait_wrapper.warp_decode(f_s, x_s, x_d_i_new) + I_p_i = self.live_portrait_wrapper.parse_output(out['out'])[0] + I_p_lst.append(I_p_i) + + if inf_cfg.flag_pasteback and inf_cfg.flag_do_crop and inf_cfg.flag_stitching: + # TODO: the paste back procedure is slow, considering optimize it using multi-threading or GPU + if flag_is_source_video: + I_p_pstbk = paste_back(I_p_i, source_M_c2o_lst[i], source_rgb_lst[i], mask_ori_float) + else: + I_p_pstbk = paste_back(I_p_i, crop_info['M_c2o'], source_rgb_lst[0], mask_ori_float) + I_p_pstbk_lst.append(I_p_pstbk) + + mkdir(args.output_dir) + wfp_concat = None + ######### build the final concatenation result ######### + # driving frame | source frame | generation + + # save the animated result + wfp = osp.join(args.output_dir, f'{args.output_name}.mp4') + if I_p_pstbk_lst is not None and len(I_p_pstbk_lst) > 0: + images2video(I_p_pstbk_lst, wfp=wfp, fps=output_fps) + else: + images2video(I_p_lst, wfp=wfp, fps=output_fps) + + # final log + if wfp_template not in (None, ''): + log(f'Animated template: {wfp_template}, you can specify `-d` argument with this template path next time to avoid cropping video, motion making and protecting privacy.', style='bold green') + log(f'Animated video: {wfp}') + + return wfp, wfp_concat diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/live_portrait_pipeline_animal.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/live_portrait_pipeline_animal.py new file mode 100644 index 0000000..9e82278 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/live_portrait_pipeline_animal.py @@ -0,0 +1,237 @@ +# coding: utf-8 + +""" +Pipeline of LivePortrait (Animal) +""" + +import warnings +warnings.filterwarnings("ignore", message="torch.meshgrid: in an upcoming release, it will be required to pass the indexing argument.") +warnings.filterwarnings("ignore", message="torch.utils.checkpoint: please pass in use_reentrant=True or use_reentrant=False explicitly.") +warnings.filterwarnings("ignore", message="None of the inputs have requires_grad=True. Gradients will be None") + +import torch +torch.backends.cudnn.benchmark = True # disable CUDNN_BACKEND_EXECUTION_PLAN_DESCRIPTOR warning + +import cv2; cv2.setNumThreads(0); cv2.ocl.setUseOpenCL(False) +import numpy as np +import os +import os.path as osp +from rich.progress import track + +from .config.argument_config import ArgumentConfig +from .config.inference_config import InferenceConfig +from .config.crop_config import CropConfig +from .utils.cropper import Cropper +from .utils.camera import get_rotation_matrix +from .utils.video import images2video, concat_frames, get_fps, add_audio_to_video, has_audio_stream, video2gif +from .utils.crop import _transform_img, prepare_paste_back, paste_back +from .utils.io import load_image_rgb, load_video, resize_to_limit, dump, load +from .utils.helper import mkdir, basename, dct2device, is_video, is_template, remove_suffix, is_image, calc_motion_multiplier +from .utils.rprint import rlog as log +# from .utils.viz import viz_lmk +from .live_portrait_wrapper import LivePortraitWrapperAnimal + + +def make_abs_path(fn): + return osp.join(osp.dirname(osp.realpath(__file__)), fn) + +class LivePortraitPipelineAnimal(object): + + def __init__(self, inference_cfg: InferenceConfig, crop_cfg: CropConfig): + self.live_portrait_wrapper_animal: LivePortraitWrapperAnimal = LivePortraitWrapperAnimal(inference_cfg=inference_cfg) + self.cropper: Cropper = Cropper(crop_cfg=crop_cfg, image_type='animal_face', flag_use_half_precision=inference_cfg.flag_use_half_precision) + + def make_motion_template(self, I_lst, **kwargs): + n_frames = I_lst.shape[0] + template_dct = { + 'n_frames': n_frames, + 'output_fps': kwargs.get('output_fps', 25), + 'motion': [], + } + + for i in track(range(n_frames), description='Making driving motion templates...', total=n_frames): + # collect s, R, ฮด and t for inference + I_i = I_lst[i] + x_i_info = self.live_portrait_wrapper_animal.get_kp_info(I_i) + R_i = get_rotation_matrix(x_i_info['pitch'], x_i_info['yaw'], x_i_info['roll']) + + item_dct = { + 'scale': x_i_info['scale'].cpu().numpy().astype(np.float32), + 'R': R_i.cpu().numpy().astype(np.float32), + 'exp': x_i_info['exp'].cpu().numpy().astype(np.float32), + 't': x_i_info['t'].cpu().numpy().astype(np.float32), + } + + template_dct['motion'].append(item_dct) + + return template_dct + + def execute(self, args: ArgumentConfig): + # for convenience + inf_cfg = self.live_portrait_wrapper_animal.inference_cfg + device = self.live_portrait_wrapper_animal.device + crop_cfg = self.cropper.crop_cfg + + ######## load source input ######## + if is_image(args.source): + img_rgb = load_image_rgb(args.source) + img_rgb = resize_to_limit(img_rgb, inf_cfg.source_max_dim, inf_cfg.source_division) + log(f"Load source image from {args.source}") + else: # source input is an unknown format + raise Exception(f"Unknown source format: {args.source}") + + ######## process driving info ######## + flag_load_from_template = is_template(args.driving) + driving_rgb_crop_256x256_lst = None + wfp_template = None + + if flag_load_from_template: + # NOTE: load from template, it is fast, but the cropping video is None + log(f"Load from template: {args.driving}, NOT the video, so the cropping video and audio are both NULL.", style='bold green') + driving_template_dct = load(args.driving) + n_frames = driving_template_dct['n_frames'] + + # set output_fps + output_fps = driving_template_dct.get('output_fps', inf_cfg.output_fps) + log(f'The FPS of template: {output_fps}') + + if args.flag_crop_driving_video: + log("Warning: flag_crop_driving_video is True, but the driving info is a template, so it is ignored.") + + elif osp.exists(args.driving) and is_video(args.driving): + # load from video file, AND make motion template + output_fps = int(get_fps(args.driving)) + log(f"Load driving video from: {args.driving}, FPS is {output_fps}") + + driving_rgb_lst = load_video(args.driving) + n_frames = len(driving_rgb_lst) + + ######## make motion template ######## + log("Start making driving motion template...") + if inf_cfg.flag_crop_driving_video: + ret_d = self.cropper.crop_driving_video(driving_rgb_lst) + log(f'Driving video is cropped, {len(ret_d["frame_crop_lst"])} frames are processed.') + if len(ret_d["frame_crop_lst"]) is not n_frames: + n_frames = min(n_frames, len(ret_d["frame_crop_lst"])) + driving_rgb_crop_lst = ret_d['frame_crop_lst'] + driving_rgb_crop_256x256_lst = [cv2.resize(_, (256, 256)) for _ in driving_rgb_crop_lst] + else: + driving_rgb_crop_256x256_lst = [cv2.resize(_, (256, 256)) for _ in driving_rgb_lst] # force to resize to 256x256 + ####################################### + + # save the motion template + I_d_lst = self.live_portrait_wrapper_animal.prepare_videos(driving_rgb_crop_256x256_lst) + driving_template_dct = self.make_motion_template(I_d_lst, output_fps=output_fps) + + wfp_template = remove_suffix(args.driving) + '.pkl' + dump(wfp_template, driving_template_dct) + log(f"Dump motion template to {wfp_template}") + + else: + raise Exception(f"{args.driving} not exists or unsupported driving info types!") + + ######## prepare for pasteback ######## + I_p_pstbk_lst = None + if inf_cfg.flag_pasteback and inf_cfg.flag_do_crop and inf_cfg.flag_stitching: + I_p_pstbk_lst = [] + log("Prepared pasteback mask done.") + + ######## process source info ######## + if inf_cfg.flag_do_crop: + crop_info = self.cropper.crop_source_image(img_rgb, crop_cfg) + if crop_info is None: + raise Exception("No animal face detected in the source image!") + img_crop_256x256 = crop_info['img_crop_256x256'] + else: + img_crop_256x256 = cv2.resize(img_rgb, (256, 256)) # force to resize to 256x256 + I_s = self.live_portrait_wrapper_animal.prepare_source(img_crop_256x256) + x_s_info = self.live_portrait_wrapper_animal.get_kp_info(I_s) + x_c_s = x_s_info['kp'] + R_s = get_rotation_matrix(x_s_info['pitch'], x_s_info['yaw'], x_s_info['roll']) + f_s = self.live_portrait_wrapper_animal.extract_feature_3d(I_s) + x_s = self.live_portrait_wrapper_animal.transform_keypoint(x_s_info) + + if inf_cfg.flag_pasteback and inf_cfg.flag_do_crop and inf_cfg.flag_stitching: + mask_ori_float = prepare_paste_back(inf_cfg.mask_crop, crop_info['M_c2o'], dsize=(img_rgb.shape[1], img_rgb.shape[0])) + + ######## animate ######## + I_p_lst = [] + for i in track(range(n_frames), description='๐Ÿš€Animating...', total=n_frames): + + x_d_i_info = driving_template_dct['motion'][i] + x_d_i_info = dct2device(x_d_i_info, device) + + R_d_i = x_d_i_info['R'] if 'R' in x_d_i_info.keys() else x_d_i_info['R_d'] # compatible with previous keys + delta_new = x_d_i_info['exp'] + t_new = x_d_i_info['t'] + t_new[..., 2].fill_(0) # zero tz + scale_new = x_s_info['scale'] + + x_d_i = scale_new * (x_c_s @ R_d_i + delta_new) + t_new + + if i == 0: + x_d_0 = x_d_i + motion_multiplier = calc_motion_multiplier(x_s, x_d_0) + + x_d_diff = (x_d_i - x_d_0) * motion_multiplier + x_d_i = x_d_diff + x_s + + if not inf_cfg.flag_stitching: + pass + else: + x_d_i = self.live_portrait_wrapper_animal.stitching(x_s, x_d_i) + + x_d_i = x_s + (x_d_i - x_s) * inf_cfg.driving_multiplier + out = self.live_portrait_wrapper_animal.warp_decode(f_s, x_s, x_d_i) + I_p_i = self.live_portrait_wrapper_animal.parse_output(out['out'])[0] + I_p_lst.append(I_p_i) + + if inf_cfg.flag_pasteback and inf_cfg.flag_do_crop and inf_cfg.flag_stitching: + I_p_pstbk = paste_back(I_p_i, crop_info['M_c2o'], img_rgb, mask_ori_float) + I_p_pstbk_lst.append(I_p_pstbk) + + mkdir(args.output_dir) + wfp_concat = None + flag_driving_has_audio = (not flag_load_from_template) and has_audio_stream(args.driving) + + ######### build the final concatenation result ######### + # driving frame | source image | generation + frames_concatenated = concat_frames(driving_rgb_crop_256x256_lst, [img_crop_256x256], I_p_lst) + wfp_concat = osp.join(args.output_dir, f'{basename(args.source)}--{basename(args.driving)}_concat.mp4') + images2video(frames_concatenated, wfp=wfp_concat, fps=output_fps) + + if flag_driving_has_audio: + # final result with concatenation + wfp_concat_with_audio = osp.join(args.output_dir, f'{basename(args.source)}--{basename(args.driving)}_concat_with_audio.mp4') + audio_from_which_video = args.driving + add_audio_to_video(wfp_concat, audio_from_which_video, wfp_concat_with_audio) + os.replace(wfp_concat_with_audio, wfp_concat) + log(f"Replace {wfp_concat_with_audio} with {wfp_concat}") + + # save the animated result + wfp = osp.join(args.output_dir, f'{basename(args.source)}--{basename(args.driving)}.mp4') + if I_p_pstbk_lst is not None and len(I_p_pstbk_lst) > 0: + images2video(I_p_pstbk_lst, wfp=wfp, fps=output_fps) + else: + images2video(I_p_lst, wfp=wfp, fps=output_fps) + + ######### build the final result ######### + if flag_driving_has_audio: + wfp_with_audio = osp.join(args.output_dir, f'{basename(args.source)}--{basename(args.driving)}_with_audio.mp4') + audio_from_which_video = args.driving + add_audio_to_video(wfp, audio_from_which_video, wfp_with_audio) + os.replace(wfp_with_audio, wfp) + log(f"Replace {wfp_with_audio} with {wfp}") + + # final log + if wfp_template not in (None, ''): + log(f'Animated template: {wfp_template}, you can specify `-d` argument with this template path next time to avoid cropping video, motion making and protecting privacy.', style='bold green') + log(f'Animated video: {wfp}') + log(f'Animated video with concat: {wfp_concat}') + + # build the gif + wfp_gif = video2gif(wfp) + log(f'Animated gif: {wfp_gif}') + + + return wfp, wfp_concat, wfp_gif diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/live_portrait_wrapper.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/live_portrait_wrapper.py new file mode 100644 index 0000000..af95812 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/live_portrait_wrapper.py @@ -0,0 +1,384 @@ +# coding: utf-8 + +""" +Wrappers for LivePortrait core functions +""" + +import contextlib +import os.path as osp +import numpy as np +import cv2 +import torch +import yaml + +from .utils.timer import Timer +from .utils.helper import load_model, concat_feat +from .utils.camera import headpose_pred_to_degree, get_rotation_matrix +from .utils.retargeting_utils import calc_eye_close_ratio, calc_lip_close_ratio +from .config.inference_config import InferenceConfig +from .utils.rprint import rlog as log + + +class LivePortraitWrapper(object): + """ + Wrapper for Human + """ + + def __init__(self, inference_cfg: InferenceConfig): + + self.inference_cfg = inference_cfg + self.device_id = inference_cfg.device_id + self.compile = inference_cfg.flag_do_torch_compile + if inference_cfg.flag_force_cpu: + self.device = 'cpu' + else: + try: + if torch.backends.mps.is_available(): + self.device = 'mps' + else: + self.device = 'cuda:' + str(self.device_id) + except: + self.device = 'cuda:' + str(self.device_id) + + model_config = yaml.load(open(inference_cfg.models_config, 'r'), Loader=yaml.SafeLoader) + # init F + self.appearance_feature_extractor = load_model(inference_cfg.checkpoint_F, model_config, self.device, 'appearance_feature_extractor') + log(f'Load appearance_feature_extractor from {osp.realpath(inference_cfg.checkpoint_F)} done.') + # init M + self.motion_extractor = load_model(inference_cfg.checkpoint_M, model_config, self.device, 'motion_extractor') + log(f'Load motion_extractor from {osp.realpath(inference_cfg.checkpoint_M)} done.') + # init W + self.warping_module = load_model(inference_cfg.checkpoint_W, model_config, self.device, 'warping_module') + log(f'Load warping_module from {osp.realpath(inference_cfg.checkpoint_W)} done.') + # init G + self.spade_generator = load_model(inference_cfg.checkpoint_G, model_config, self.device, 'spade_generator') + log(f'Load spade_generator from {osp.realpath(inference_cfg.checkpoint_G)} done.') + # init S and R + if inference_cfg.checkpoint_S is not None and osp.exists(inference_cfg.checkpoint_S): + self.stitching_retargeting_module = load_model(inference_cfg.checkpoint_S, model_config, self.device, 'stitching_retargeting_module') + log(f'Load stitching_retargeting_module from {osp.realpath(inference_cfg.checkpoint_S)} done.') + else: + self.stitching_retargeting_module = None + # Optimize for inference + if self.compile: + torch._dynamo.config.suppress_errors = True # Suppress errors and fall back to eager execution + self.warping_module = torch.compile(self.warping_module, mode='max-autotune') + self.spade_generator = torch.compile(self.spade_generator, mode='max-autotune') + + self.timer = Timer() + + def inference_ctx(self): + if self.device == "mps": + ctx = contextlib.nullcontext() + else: + ctx = torch.autocast(device_type=self.device[:4], dtype=torch.float16, + enabled=self.inference_cfg.flag_use_half_precision) + return ctx + + def update_config(self, user_args): + for k, v in user_args.items(): + if hasattr(self.inference_cfg, k): + setattr(self.inference_cfg, k, v) + + def prepare_source(self, img: np.ndarray) -> torch.Tensor: + """ construct the input as standard + img: HxWx3, uint8, 256x256 + """ + h, w = img.shape[:2] + if h != self.inference_cfg.input_shape[0] or w != self.inference_cfg.input_shape[1]: + x = cv2.resize(img, (self.inference_cfg.input_shape[0], self.inference_cfg.input_shape[1])) + else: + x = img.copy() + + if x.ndim == 3: + x = x[np.newaxis].astype(np.float32) / 255. # HxWx3 -> 1xHxWx3, normalized to 0~1 + elif x.ndim == 4: + x = x.astype(np.float32) / 255. # BxHxWx3, normalized to 0~1 + else: + raise ValueError(f'img ndim should be 3 or 4: {x.ndim}') + x = np.clip(x, 0, 1) # clip to 0~1 + x = torch.from_numpy(x).permute(0, 3, 1, 2) # 1xHxWx3 -> 1x3xHxW + x = x.to(self.device) + return x + + def prepare_videos(self, imgs) -> torch.Tensor: + """ construct the input as standard + imgs: NxBxHxWx3, uint8 + """ + if isinstance(imgs, list): + _imgs = np.array(imgs)[..., np.newaxis] # TxHxWx3x1 + elif isinstance(imgs, np.ndarray): + _imgs = imgs + else: + raise ValueError(f'imgs type error: {type(imgs)}') + + y = _imgs.astype(np.float32) / 255. + y = np.clip(y, 0, 1) # clip to 0~1 + y = torch.from_numpy(y).permute(0, 4, 3, 1, 2) # TxHxWx3x1 -> Tx1x3xHxW + y = y.to(self.device) + + return y + + def extract_feature_3d(self, x: torch.Tensor) -> torch.Tensor: + """ get the appearance feature of the image by F + x: Bx3xHxW, normalized to 0~1 + """ + with torch.no_grad(), self.inference_ctx(): + feature_3d = self.appearance_feature_extractor(x) + + return feature_3d.float() + + def get_kp_info(self, x: torch.Tensor, **kwargs) -> dict: + """ get the implicit keypoint information + x: Bx3xHxW, normalized to 0~1 + flag_refine_info: whether to trandform the pose to degrees and the dimention of the reshape + return: A dict contains keys: 'pitch', 'yaw', 'roll', 't', 'exp', 'scale', 'kp' + """ + with torch.no_grad(), self.inference_ctx(): + kp_info = self.motion_extractor(x) + + if self.inference_cfg.flag_use_half_precision: + # float the dict + for k, v in kp_info.items(): + if isinstance(v, torch.Tensor): + kp_info[k] = v.float() + + flag_refine_info: bool = kwargs.get('flag_refine_info', True) + if flag_refine_info: + bs = kp_info['kp'].shape[0] + kp_info['pitch'] = headpose_pred_to_degree(kp_info['pitch'])[:, None] # Bx1 + kp_info['yaw'] = headpose_pred_to_degree(kp_info['yaw'])[:, None] # Bx1 + kp_info['roll'] = headpose_pred_to_degree(kp_info['roll'])[:, None] # Bx1 + kp_info['kp'] = kp_info['kp'].reshape(bs, -1, 3) # BxNx3 + kp_info['exp'] = kp_info['exp'].reshape(bs, -1, 3) # BxNx3 + + return kp_info + + def get_pose_dct(self, kp_info: dict) -> dict: + pose_dct = dict( + pitch=headpose_pred_to_degree(kp_info['pitch']).item(), + yaw=headpose_pred_to_degree(kp_info['yaw']).item(), + roll=headpose_pred_to_degree(kp_info['roll']).item(), + ) + return pose_dct + + def get_fs_and_kp_info(self, source_prepared, driving_first_frame): + + # get the canonical keypoints of source image by M + source_kp_info = self.get_kp_info(source_prepared, flag_refine_info=True) + source_rotation = get_rotation_matrix(source_kp_info['pitch'], source_kp_info['yaw'], source_kp_info['roll']) + + # get the canonical keypoints of first driving frame by M + driving_first_frame_kp_info = self.get_kp_info(driving_first_frame, flag_refine_info=True) + driving_first_frame_rotation = get_rotation_matrix( + driving_first_frame_kp_info['pitch'], + driving_first_frame_kp_info['yaw'], + driving_first_frame_kp_info['roll'] + ) + + # get feature volume by F + source_feature_3d = self.extract_feature_3d(source_prepared) + + return source_kp_info, source_rotation, source_feature_3d, driving_first_frame_kp_info, driving_first_frame_rotation + + def transform_keypoint(self, kp_info: dict): + """ + transform the implicit keypoints with the pose, shift, and expression deformation + kp: BxNx3 + """ + kp = kp_info['kp'] # (bs, k, 3) + pitch, yaw, roll = kp_info['pitch'], kp_info['yaw'], kp_info['roll'] + + t, exp = kp_info['t'], kp_info['exp'] + scale = kp_info['scale'] + + pitch = headpose_pred_to_degree(pitch) + yaw = headpose_pred_to_degree(yaw) + roll = headpose_pred_to_degree(roll) + + bs = kp.shape[0] + if kp.ndim == 2: + num_kp = kp.shape[1] // 3 # Bx(num_kpx3) + else: + num_kp = kp.shape[1] # Bxnum_kpx3 + + rot_mat = get_rotation_matrix(pitch, yaw, roll) # (bs, 3, 3) + + # Eqn.2: s * (R * x_c,s + exp) + t + kp_transformed = kp.view(bs, num_kp, 3) @ rot_mat + exp.view(bs, num_kp, 3) + kp_transformed *= scale[..., None] # (bs, k, 3) * (bs, 1, 1) = (bs, k, 3) + kp_transformed[:, :, 0:2] += t[:, None, 0:2] # remove z, only apply tx ty + + return kp_transformed + + def retarget_eye(self, kp_source: torch.Tensor, eye_close_ratio: torch.Tensor) -> torch.Tensor: + """ + kp_source: BxNx3 + eye_close_ratio: Bx3 + Return: Bx(3*num_kp) + """ + feat_eye = concat_feat(kp_source, eye_close_ratio) + + with torch.no_grad(): + delta = self.stitching_retargeting_module['eye'](feat_eye) + + return delta.reshape(-1, kp_source.shape[1], 3) + + def retarget_lip(self, kp_source: torch.Tensor, lip_close_ratio: torch.Tensor) -> torch.Tensor: + """ + kp_source: BxNx3 + lip_close_ratio: Bx2 + Return: Bx(3*num_kp) + """ + feat_lip = concat_feat(kp_source, lip_close_ratio) + + with torch.no_grad(): + delta = self.stitching_retargeting_module['lip'](feat_lip) + + return delta.reshape(-1, kp_source.shape[1], 3) + + def stitch(self, kp_source: torch.Tensor, kp_driving: torch.Tensor) -> torch.Tensor: + """ + kp_source: BxNx3 + kp_driving: BxNx3 + Return: Bx(3*num_kp+2) + """ + feat_stiching = concat_feat(kp_source, kp_driving) + + with torch.no_grad(): + delta = self.stitching_retargeting_module['stitching'](feat_stiching) + + return delta + + def stitching(self, kp_source: torch.Tensor, kp_driving: torch.Tensor) -> torch.Tensor: + """ conduct the stitching + kp_source: Bxnum_kpx3 + kp_driving: Bxnum_kpx3 + """ + + if self.stitching_retargeting_module is not None: + + bs, num_kp = kp_source.shape[:2] + + kp_driving_new = kp_driving.clone() + delta = self.stitch(kp_source, kp_driving_new) + + delta_exp = delta[..., :3*num_kp].reshape(bs, num_kp, 3) # 1x20x3 + delta_tx_ty = delta[..., 3*num_kp:3*num_kp+2].reshape(bs, 1, 2) # 1x1x2 + + kp_driving_new += delta_exp + kp_driving_new[..., :2] += delta_tx_ty + + return kp_driving_new + + return kp_driving + + def warp_decode(self, feature_3d: torch.Tensor, kp_source: torch.Tensor, kp_driving: torch.Tensor) -> torch.Tensor: + """ get the image after the warping of the implicit keypoints + feature_3d: Bx32x16x64x64, feature volume + kp_source: BxNx3 + kp_driving: BxNx3 + """ + # The line 18 in Algorithm 1: D(W(f_s; x_s, xโ€ฒ_d,i)๏ผ‰ + with torch.no_grad(), self.inference_ctx(): + if self.compile: + # Mark the beginning of a new CUDA Graph step + torch.compiler.cudagraph_mark_step_begin() + # get decoder input + ret_dct = self.warping_module(feature_3d, kp_source=kp_source, kp_driving=kp_driving) + # decode + ret_dct['out'] = self.spade_generator(feature=ret_dct['out']) + + # float the dict + if self.inference_cfg.flag_use_half_precision: + for k, v in ret_dct.items(): + if isinstance(v, torch.Tensor): + ret_dct[k] = v.float() + + return ret_dct + + def parse_output(self, out: torch.Tensor) -> np.ndarray: + """ construct the output as standard + return: 1xHxWx3, uint8 + """ + out = np.transpose(out.data.cpu().numpy(), [0, 2, 3, 1]) # 1x3xHxW -> 1xHxWx3 + out = np.clip(out, 0, 1) # clip to 0~1 + out = np.clip(out * 255, 0, 255).astype(np.uint8) # 0~1 -> 0~255 + + return out + + def calc_ratio(self, lmk_lst): + input_eye_ratio_lst = [] + input_lip_ratio_lst = [] + for lmk in lmk_lst: + # for eyes retargeting + input_eye_ratio_lst.append(calc_eye_close_ratio(lmk[None])) + # for lip retargeting + input_lip_ratio_lst.append(calc_lip_close_ratio(lmk[None])) + return input_eye_ratio_lst, input_lip_ratio_lst + + def calc_combined_eye_ratio(self, c_d_eyes_i, source_lmk): + c_s_eyes = calc_eye_close_ratio(source_lmk[None]) + c_s_eyes_tensor = torch.from_numpy(c_s_eyes).float().to(self.device) + c_d_eyes_i_tensor = torch.Tensor([c_d_eyes_i[0][0]]).reshape(1, 1).to(self.device) + # [c_s,eyes, c_d,eyes,i] + combined_eye_ratio_tensor = torch.cat([c_s_eyes_tensor, c_d_eyes_i_tensor], dim=1) + return combined_eye_ratio_tensor + + def calc_combined_lip_ratio(self, c_d_lip_i, source_lmk): + c_s_lip = calc_lip_close_ratio(source_lmk[None]) + c_s_lip_tensor = torch.from_numpy(c_s_lip).float().to(self.device) + c_d_lip_i_tensor = torch.Tensor([c_d_lip_i[0]]).to(self.device).reshape(1, 1) # 1x1 + # [c_s,lip, c_d,lip,i] + combined_lip_ratio_tensor = torch.cat([c_s_lip_tensor, c_d_lip_i_tensor], dim=1) # 1x2 + return combined_lip_ratio_tensor + + +class LivePortraitWrapperAnimal(LivePortraitWrapper): + """ + Wrapper for Animal + """ + def __init__(self, inference_cfg: InferenceConfig): + # super().__init__(inference_cfg) # ่ฐƒ็”จ็ˆถ็ฑป็š„ๅˆๅง‹ๅŒ–ๆ–นๆณ• + + self.inference_cfg = inference_cfg + self.device_id = inference_cfg.device_id + self.compile = inference_cfg.flag_do_torch_compile + if inference_cfg.flag_force_cpu: + self.device = 'cpu' + else: + try: + if torch.backends.mps.is_available(): + self.device = 'mps' + else: + self.device = 'cuda:' + str(self.device_id) + except: + self.device = 'cuda:' + str(self.device_id) + + model_config = yaml.load(open(inference_cfg.models_config, 'r'), Loader=yaml.SafeLoader) + # init F + self.appearance_feature_extractor = load_model(inference_cfg.checkpoint_F_animal, model_config, self.device, 'appearance_feature_extractor') + log(f'Load appearance_feature_extractor from {osp.realpath(inference_cfg.checkpoint_F_animal)} done.') + # init M + self.motion_extractor = load_model(inference_cfg.checkpoint_M_animal, model_config, self.device, 'motion_extractor') + log(f'Load motion_extractor from {osp.realpath(inference_cfg.checkpoint_M_animal)} done.') + # init W + self.warping_module = load_model(inference_cfg.checkpoint_W_animal, model_config, self.device, 'warping_module') + log(f'Load warping_module from {osp.realpath(inference_cfg.checkpoint_W_animal)} done.') + # init G + self.spade_generator = load_model(inference_cfg.checkpoint_G_animal, model_config, self.device, 'spade_generator') + log(f'Load spade_generator from {osp.realpath(inference_cfg.checkpoint_G_animal)} done.') + # init S and R + if inference_cfg.checkpoint_S_animal is not None and osp.exists(inference_cfg.checkpoint_S_animal): + self.stitching_retargeting_module = load_model(inference_cfg.checkpoint_S_animal, model_config, self.device, 'stitching_retargeting_module') + log(f'Load stitching_retargeting_module from {osp.realpath(inference_cfg.checkpoint_S_animal)} done.') + else: + self.stitching_retargeting_module = None + + # Optimize for inference + if self.compile: + torch._dynamo.config.suppress_errors = True # Suppress errors and fall back to eager execution + self.warping_module = torch.compile(self.warping_module, mode='max-autotune') + self.spade_generator = torch.compile(self.spade_generator, mode='max-autotune') + + self.timer = Timer() diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/modules/__init__.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/modules/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/modules/appearance_feature_extractor.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/modules/appearance_feature_extractor.py new file mode 100644 index 0000000..8d89e4f --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/modules/appearance_feature_extractor.py @@ -0,0 +1,48 @@ +# coding: utf-8 + +""" +Appearance extractor(F) defined in paper, which maps the source image s to a 3D appearance feature volume. +""" + +import torch +from torch import nn +from .util import SameBlock2d, DownBlock2d, ResBlock3d + + +class AppearanceFeatureExtractor(nn.Module): + + def __init__(self, image_channel, block_expansion, num_down_blocks, max_features, reshape_channel, reshape_depth, num_resblocks): + super(AppearanceFeatureExtractor, self).__init__() + self.image_channel = image_channel + self.block_expansion = block_expansion + self.num_down_blocks = num_down_blocks + self.max_features = max_features + self.reshape_channel = reshape_channel + self.reshape_depth = reshape_depth + + self.first = SameBlock2d(image_channel, block_expansion, kernel_size=(3, 3), padding=(1, 1)) + + down_blocks = [] + for i in range(num_down_blocks): + in_features = min(max_features, block_expansion * (2 ** i)) + out_features = min(max_features, block_expansion * (2 ** (i + 1))) + down_blocks.append(DownBlock2d(in_features, out_features, kernel_size=(3, 3), padding=(1, 1))) + self.down_blocks = nn.ModuleList(down_blocks) + + self.second = nn.Conv2d(in_channels=out_features, out_channels=max_features, kernel_size=1, stride=1) + + self.resblocks_3d = torch.nn.Sequential() + for i in range(num_resblocks): + self.resblocks_3d.add_module('3dr' + str(i), ResBlock3d(reshape_channel, kernel_size=3, padding=1)) + + def forward(self, source_image): + out = self.first(source_image) # Bx3x256x256 -> Bx64x256x256 + + for i in range(len(self.down_blocks)): + out = self.down_blocks[i](out) + out = self.second(out) + bs, c, h, w = out.shape # ->Bx512x64x64 + + f_s = out.view(bs, self.reshape_channel, self.reshape_depth, h, w) # ->Bx32x16x64x64 + f_s = self.resblocks_3d(f_s) # ->Bx32x16x64x64 + return f_s diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/modules/convnextv2.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/modules/convnextv2.py new file mode 100644 index 0000000..83ea126 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/modules/convnextv2.py @@ -0,0 +1,149 @@ +# coding: utf-8 + +""" +This moudle is adapted to the ConvNeXtV2 version for the extraction of implicit keypoints, poses, and expression deformation. +""" + +import torch +import torch.nn as nn +# from timm.models.layers import trunc_normal_, DropPath +from .util import LayerNorm, DropPath, trunc_normal_, GRN + +__all__ = ['convnextv2_tiny'] + + +class Block(nn.Module): + """ ConvNeXtV2 Block. + + Args: + dim (int): Number of input channels. + drop_path (float): Stochastic depth rate. Default: 0.0 + """ + + def __init__(self, dim, drop_path=0.): + super().__init__() + self.dwconv = nn.Conv2d(dim, dim, kernel_size=7, padding=3, groups=dim) # depthwise conv + self.norm = LayerNorm(dim, eps=1e-6) + self.pwconv1 = nn.Linear(dim, 4 * dim) # pointwise/1x1 convs, implemented with linear layers + self.act = nn.GELU() + self.grn = GRN(4 * dim) + self.pwconv2 = nn.Linear(4 * dim, dim) + self.drop_path = DropPath(drop_path) if drop_path > 0. else nn.Identity() + + def forward(self, x): + input = x + x = self.dwconv(x) + x = x.permute(0, 2, 3, 1) # (N, C, H, W) -> (N, H, W, C) + x = self.norm(x) + x = self.pwconv1(x) + x = self.act(x) + x = self.grn(x) + x = self.pwconv2(x) + x = x.permute(0, 3, 1, 2) # (N, H, W, C) -> (N, C, H, W) + + x = input + self.drop_path(x) + return x + + +class ConvNeXtV2(nn.Module): + """ ConvNeXt V2 + + Args: + in_chans (int): Number of input image channels. Default: 3 + num_classes (int): Number of classes for classification head. Default: 1000 + depths (tuple(int)): Number of blocks at each stage. Default: [3, 3, 9, 3] + dims (int): Feature dimension at each stage. Default: [96, 192, 384, 768] + drop_path_rate (float): Stochastic depth rate. Default: 0. + head_init_scale (float): Init scaling value for classifier weights and biases. Default: 1. + """ + + def __init__( + self, + in_chans=3, + depths=[3, 3, 9, 3], + dims=[96, 192, 384, 768], + drop_path_rate=0., + **kwargs + ): + super().__init__() + self.depths = depths + self.downsample_layers = nn.ModuleList() # stem and 3 intermediate downsampling conv layers + stem = nn.Sequential( + nn.Conv2d(in_chans, dims[0], kernel_size=4, stride=4), + LayerNorm(dims[0], eps=1e-6, data_format="channels_first") + ) + self.downsample_layers.append(stem) + for i in range(3): + downsample_layer = nn.Sequential( + LayerNorm(dims[i], eps=1e-6, data_format="channels_first"), + nn.Conv2d(dims[i], dims[i+1], kernel_size=2, stride=2), + ) + self.downsample_layers.append(downsample_layer) + + self.stages = nn.ModuleList() # 4 feature resolution stages, each consisting of multiple residual blocks + dp_rates = [x.item() for x in torch.linspace(0, drop_path_rate, sum(depths))] + cur = 0 + for i in range(4): + stage = nn.Sequential( + *[Block(dim=dims[i], drop_path=dp_rates[cur + j]) for j in range(depths[i])] + ) + self.stages.append(stage) + cur += depths[i] + + self.norm = nn.LayerNorm(dims[-1], eps=1e-6) # final norm layer + + # NOTE: the output semantic items + num_bins = kwargs.get('num_bins', 66) + num_kp = kwargs.get('num_kp', 24) # the number of implicit keypoints + self.fc_kp = nn.Linear(dims[-1], 3 * num_kp) # implicit keypoints + + # print('dims[-1]: ', dims[-1]) + self.fc_scale = nn.Linear(dims[-1], 1) # scale + self.fc_pitch = nn.Linear(dims[-1], num_bins) # pitch bins + self.fc_yaw = nn.Linear(dims[-1], num_bins) # yaw bins + self.fc_roll = nn.Linear(dims[-1], num_bins) # roll bins + self.fc_t = nn.Linear(dims[-1], 3) # translation + self.fc_exp = nn.Linear(dims[-1], 3 * num_kp) # expression / delta + + def _init_weights(self, m): + if isinstance(m, (nn.Conv2d, nn.Linear)): + trunc_normal_(m.weight, std=.02) + nn.init.constant_(m.bias, 0) + + def forward_features(self, x): + for i in range(4): + x = self.downsample_layers[i](x) + x = self.stages[i](x) + return self.norm(x.mean([-2, -1])) # global average pooling, (N, C, H, W) -> (N, C) + + def forward(self, x): + x = self.forward_features(x) + + # implicit keypoints + kp = self.fc_kp(x) + + # pose and expression deformation + pitch = self.fc_pitch(x) + yaw = self.fc_yaw(x) + roll = self.fc_roll(x) + t = self.fc_t(x) + exp = self.fc_exp(x) + scale = self.fc_scale(x) + + ret_dct = { + 'pitch': pitch, + 'yaw': yaw, + 'roll': roll, + 't': t, + 'exp': exp, + 'scale': scale, + + 'kp': kp, # canonical keypoint + } + + return ret_dct + + +def convnextv2_tiny(**kwargs): + model = ConvNeXtV2(depths=[3, 3, 9, 3], dims=[96, 192, 384, 768], **kwargs) + return model diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/modules/dense_motion.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/modules/dense_motion.py new file mode 100644 index 0000000..c1a7f9a --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/modules/dense_motion.py @@ -0,0 +1,104 @@ +# coding: utf-8 + +""" +The module that predicting a dense motion from sparse motion representation given by kp_source and kp_driving +""" + +from torch import nn +import torch.nn.functional as F +import torch +from .util import Hourglass, make_coordinate_grid, kp2gaussian + + +class DenseMotionNetwork(nn.Module): + def __init__(self, block_expansion, num_blocks, max_features, num_kp, feature_channel, reshape_depth, compress, estimate_occlusion_map=True): + super(DenseMotionNetwork, self).__init__() + self.hourglass = Hourglass(block_expansion=block_expansion, in_features=(num_kp+1)*(compress+1), max_features=max_features, num_blocks=num_blocks) # ~60+G + + self.mask = nn.Conv3d(self.hourglass.out_filters, num_kp + 1, kernel_size=7, padding=3) # 65G! NOTE: computation cost is large + self.compress = nn.Conv3d(feature_channel, compress, kernel_size=1) # 0.8G + self.norm = nn.BatchNorm3d(compress, affine=True) + self.num_kp = num_kp + self.flag_estimate_occlusion_map = estimate_occlusion_map + + if self.flag_estimate_occlusion_map: + self.occlusion = nn.Conv2d(self.hourglass.out_filters*reshape_depth, 1, kernel_size=7, padding=3) + else: + self.occlusion = None + + def create_sparse_motions(self, feature, kp_driving, kp_source): + bs, _, d, h, w = feature.shape # (bs, 4, 16, 64, 64) + identity_grid = make_coordinate_grid((d, h, w), ref=kp_source) # (16, 64, 64, 3) + identity_grid = identity_grid.view(1, 1, d, h, w, 3) # (1, 1, d=16, h=64, w=64, 3) + coordinate_grid = identity_grid - kp_driving.view(bs, self.num_kp, 1, 1, 1, 3) + + k = coordinate_grid.shape[1] + + # NOTE: there lacks an one-order flow + driving_to_source = coordinate_grid + kp_source.view(bs, self.num_kp, 1, 1, 1, 3) # (bs, num_kp, d, h, w, 3) + + # adding background feature + identity_grid = identity_grid.repeat(bs, 1, 1, 1, 1, 1) + sparse_motions = torch.cat([identity_grid, driving_to_source], dim=1) # (bs, 1+num_kp, d, h, w, 3) + return sparse_motions + + def create_deformed_feature(self, feature, sparse_motions): + bs, _, d, h, w = feature.shape + feature_repeat = feature.unsqueeze(1).unsqueeze(1).repeat(1, self.num_kp+1, 1, 1, 1, 1, 1) # (bs, num_kp+1, 1, c, d, h, w) + feature_repeat = feature_repeat.view(bs * (self.num_kp+1), -1, d, h, w) # (bs*(num_kp+1), c, d, h, w) + sparse_motions = sparse_motions.view((bs * (self.num_kp+1), d, h, w, -1)) # (bs*(num_kp+1), d, h, w, 3) + sparse_deformed = F.grid_sample(feature_repeat, sparse_motions, align_corners=False) + sparse_deformed = sparse_deformed.view((bs, self.num_kp+1, -1, d, h, w)) # (bs, num_kp+1, c, d, h, w) + + return sparse_deformed + + def create_heatmap_representations(self, feature, kp_driving, kp_source): + spatial_size = feature.shape[3:] # (d=16, h=64, w=64) + gaussian_driving = kp2gaussian(kp_driving, spatial_size=spatial_size, kp_variance=0.01) # (bs, num_kp, d, h, w) + gaussian_source = kp2gaussian(kp_source, spatial_size=spatial_size, kp_variance=0.01) # (bs, num_kp, d, h, w) + heatmap = gaussian_driving - gaussian_source # (bs, num_kp, d, h, w) + + # adding background feature + zeros = torch.zeros(heatmap.shape[0], 1, spatial_size[0], spatial_size[1], spatial_size[2]).type(heatmap.dtype).to(heatmap.device) + heatmap = torch.cat([zeros, heatmap], dim=1) + heatmap = heatmap.unsqueeze(2) # (bs, 1+num_kp, 1, d, h, w) + return heatmap + + def forward(self, feature, kp_driving, kp_source): + bs, _, d, h, w = feature.shape # (bs, 32, 16, 64, 64) + + feature = self.compress(feature) # (bs, 4, 16, 64, 64) + feature = self.norm(feature) # (bs, 4, 16, 64, 64) + feature = F.relu(feature) # (bs, 4, 16, 64, 64) + + out_dict = dict() + + # 1. deform 3d feature + sparse_motion = self.create_sparse_motions(feature, kp_driving, kp_source) # (bs, 1+num_kp, d, h, w, 3) + deformed_feature = self.create_deformed_feature(feature, sparse_motion) # (bs, 1+num_kp, c=4, d=16, h=64, w=64) + + # 2. (bs, 1+num_kp, d, h, w) + heatmap = self.create_heatmap_representations(deformed_feature, kp_driving, kp_source) # (bs, 1+num_kp, 1, d, h, w) + + input = torch.cat([heatmap, deformed_feature], dim=2) # (bs, 1+num_kp, c=5, d=16, h=64, w=64) + input = input.view(bs, -1, d, h, w) # (bs, (1+num_kp)*c=105, d=16, h=64, w=64) + + prediction = self.hourglass(input) + + mask = self.mask(prediction) + mask = F.softmax(mask, dim=1) # (bs, 1+num_kp, d=16, h=64, w=64) + out_dict['mask'] = mask + mask = mask.unsqueeze(2) # (bs, num_kp+1, 1, d, h, w) + sparse_motion = sparse_motion.permute(0, 1, 5, 2, 3, 4) # (bs, num_kp+1, 3, d, h, w) + deformation = (sparse_motion * mask).sum(dim=1) # (bs, 3, d, h, w) mask take effect in this place + deformation = deformation.permute(0, 2, 3, 4, 1) # (bs, d, h, w, 3) + + out_dict['deformation'] = deformation + + if self.flag_estimate_occlusion_map: + bs, _, d, h, w = prediction.shape + prediction_reshape = prediction.view(bs, -1, h, w) + occlusion_map = torch.sigmoid(self.occlusion(prediction_reshape)) # Bx1x64x64 + out_dict['occlusion_map'] = occlusion_map + + return out_dict diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/modules/motion_extractor.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/modules/motion_extractor.py new file mode 100644 index 0000000..b2982e5 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/modules/motion_extractor.py @@ -0,0 +1,35 @@ +# coding: utf-8 + +""" +Motion extractor(M), which directly predicts the canonical keypoints, head pose and expression deformation of the input image +""" + +from torch import nn +import torch + +from .convnextv2 import convnextv2_tiny +from .util import filter_state_dict + +model_dict = { + 'convnextv2_tiny': convnextv2_tiny, +} + + +class MotionExtractor(nn.Module): + def __init__(self, **kwargs): + super(MotionExtractor, self).__init__() + + # default is convnextv2_base + backbone = kwargs.get('backbone', 'convnextv2_tiny') + self.detector = model_dict.get(backbone)(**kwargs) + + def load_pretrained(self, init_path: str): + if init_path not in (None, ''): + state_dict = torch.load(init_path, map_location=lambda storage, loc: storage)['model'] + state_dict = filter_state_dict(state_dict, remove_name='head') + ret = self.detector.load_state_dict(state_dict, strict=False) + print(f'Load pretrained model from {init_path}, ret: {ret}') + + def forward(self, x): + out = self.detector(x) + return out diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/modules/spade_generator.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/modules/spade_generator.py new file mode 100644 index 0000000..147a9ae --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/modules/spade_generator.py @@ -0,0 +1,59 @@ +# coding: utf-8 + +""" +Spade decoder(G) defined in the paper, which input the warped feature to generate the animated image. +""" + +import torch +from torch import nn +import torch.nn.functional as F +from .util import SPADEResnetBlock + + +class SPADEDecoder(nn.Module): + def __init__(self, upscale=1, max_features=256, block_expansion=64, out_channels=64, num_down_blocks=2): + for i in range(num_down_blocks): + input_channels = min(max_features, block_expansion * (2 ** (i + 1))) + self.upscale = upscale + super().__init__() + norm_G = 'spadespectralinstance' + label_num_channels = input_channels # 256 + + self.fc = nn.Conv2d(input_channels, 2 * input_channels, 3, padding=1) + self.G_middle_0 = SPADEResnetBlock(2 * input_channels, 2 * input_channels, norm_G, label_num_channels) + self.G_middle_1 = SPADEResnetBlock(2 * input_channels, 2 * input_channels, norm_G, label_num_channels) + self.G_middle_2 = SPADEResnetBlock(2 * input_channels, 2 * input_channels, norm_G, label_num_channels) + self.G_middle_3 = SPADEResnetBlock(2 * input_channels, 2 * input_channels, norm_G, label_num_channels) + self.G_middle_4 = SPADEResnetBlock(2 * input_channels, 2 * input_channels, norm_G, label_num_channels) + self.G_middle_5 = SPADEResnetBlock(2 * input_channels, 2 * input_channels, norm_G, label_num_channels) + self.up_0 = SPADEResnetBlock(2 * input_channels, input_channels, norm_G, label_num_channels) + self.up_1 = SPADEResnetBlock(input_channels, out_channels, norm_G, label_num_channels) + self.up = nn.Upsample(scale_factor=2) + + if self.upscale is None or self.upscale <= 1: + self.conv_img = nn.Conv2d(out_channels, 3, 3, padding=1) + else: + self.conv_img = nn.Sequential( + nn.Conv2d(out_channels, 3 * (2 * 2), kernel_size=3, padding=1), + nn.PixelShuffle(upscale_factor=2) + ) + + def forward(self, feature): + seg = feature # Bx256x64x64 + x = self.fc(feature) # Bx512x64x64 + x = self.G_middle_0(x, seg) + x = self.G_middle_1(x, seg) + x = self.G_middle_2(x, seg) + x = self.G_middle_3(x, seg) + x = self.G_middle_4(x, seg) + x = self.G_middle_5(x, seg) + + x = self.up(x) # Bx512x64x64 -> Bx512x128x128 + x = self.up_0(x, seg) # Bx512x128x128 -> Bx256x128x128 + x = self.up(x) # Bx256x128x128 -> Bx256x256x256 + x = self.up_1(x, seg) # Bx256x256x256 -> Bx64x256x256 + + x = self.conv_img(F.leaky_relu(x, 2e-1)) # Bx64x256x256 -> Bx3xHxW + x = torch.sigmoid(x) # Bx3xHxW + + return x \ No newline at end of file diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/modules/stitching_retargeting_network.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/modules/stitching_retargeting_network.py new file mode 100644 index 0000000..5f50b7c --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/modules/stitching_retargeting_network.py @@ -0,0 +1,38 @@ +# coding: utf-8 + +""" +Stitching module(S) and two retargeting modules(R) defined in the paper. + +- The stitching module pastes the animated portrait back into the original image space without pixel misalignment, such as in +the stitching region. + +- The eyes retargeting module is designed to address the issue of incomplete eye closure during cross-id reenactment, especially +when a person with small eyes drives a person with larger eyes. + +- The lip retargeting module is designed similarly to the eye retargeting module, and can also normalize the input by ensuring that +the lips are in a closed state, which facilitates better animation driving. +""" +from torch import nn + + +class StitchingRetargetingNetwork(nn.Module): + def __init__(self, input_size, hidden_sizes, output_size): + super(StitchingRetargetingNetwork, self).__init__() + layers = [] + for i in range(len(hidden_sizes)): + if i == 0: + layers.append(nn.Linear(input_size, hidden_sizes[i])) + else: + layers.append(nn.Linear(hidden_sizes[i - 1], hidden_sizes[i])) + layers.append(nn.ReLU(inplace=True)) + layers.append(nn.Linear(hidden_sizes[-1], output_size)) + self.mlp = nn.Sequential(*layers) + + def initialize_weights_to_zero(self): + for m in self.modules(): + if isinstance(m, nn.Linear): + nn.init.zeros_(m.weight) + nn.init.zeros_(m.bias) + + def forward(self, x): + return self.mlp(x) diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/modules/util.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/modules/util.py new file mode 100644 index 0000000..dc6b925 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/modules/util.py @@ -0,0 +1,452 @@ +# coding: utf-8 + +""" +This file defines various neural network modules and utility functions, including convolutional and residual blocks, +normalizations, and functions for spatial transformation and tensor manipulation. +""" + +from torch import nn +import torch.nn.functional as F +import torch +import torch.nn.utils.spectral_norm as spectral_norm +import math +import warnings +import collections.abc +from itertools import repeat + +def kp2gaussian(kp, spatial_size, kp_variance): + """ + Transform a keypoint into gaussian like representation + """ + mean = kp + + coordinate_grid = make_coordinate_grid(spatial_size, mean) + number_of_leading_dimensions = len(mean.shape) - 1 + shape = (1,) * number_of_leading_dimensions + coordinate_grid.shape + coordinate_grid = coordinate_grid.view(*shape) + repeats = mean.shape[:number_of_leading_dimensions] + (1, 1, 1, 1) + coordinate_grid = coordinate_grid.repeat(*repeats) + + # Preprocess kp shape + shape = mean.shape[:number_of_leading_dimensions] + (1, 1, 1, 3) + mean = mean.view(*shape) + + mean_sub = (coordinate_grid - mean) + + out = torch.exp(-0.5 * (mean_sub ** 2).sum(-1) / kp_variance) + + return out + + +def make_coordinate_grid(spatial_size, ref, **kwargs): + d, h, w = spatial_size + x = torch.arange(w).type(ref.dtype).to(ref.device) + y = torch.arange(h).type(ref.dtype).to(ref.device) + z = torch.arange(d).type(ref.dtype).to(ref.device) + + # NOTE: must be right-down-in + x = (2 * (x / (w - 1)) - 1) # the x axis faces to the right + y = (2 * (y / (h - 1)) - 1) # the y axis faces to the bottom + z = (2 * (z / (d - 1)) - 1) # the z axis faces to the inner + + yy = y.view(1, -1, 1).repeat(d, 1, w) + xx = x.view(1, 1, -1).repeat(d, h, 1) + zz = z.view(-1, 1, 1).repeat(1, h, w) + + meshed = torch.cat([xx.unsqueeze_(3), yy.unsqueeze_(3), zz.unsqueeze_(3)], 3) + + return meshed + + +class ConvT2d(nn.Module): + """ + Upsampling block for use in decoder. + """ + + def __init__(self, in_features, out_features, kernel_size=3, stride=2, padding=1, output_padding=1): + super(ConvT2d, self).__init__() + + self.convT = nn.ConvTranspose2d(in_features, out_features, kernel_size=kernel_size, stride=stride, + padding=padding, output_padding=output_padding) + self.norm = nn.InstanceNorm2d(out_features) + + def forward(self, x): + out = self.convT(x) + out = self.norm(out) + out = F.leaky_relu(out) + return out + + +class ResBlock3d(nn.Module): + """ + Res block, preserve spatial resolution. + """ + + def __init__(self, in_features, kernel_size, padding): + super(ResBlock3d, self).__init__() + self.conv1 = nn.Conv3d(in_channels=in_features, out_channels=in_features, kernel_size=kernel_size, padding=padding) + self.conv2 = nn.Conv3d(in_channels=in_features, out_channels=in_features, kernel_size=kernel_size, padding=padding) + self.norm1 = nn.BatchNorm3d(in_features, affine=True) + self.norm2 = nn.BatchNorm3d(in_features, affine=True) + + def forward(self, x): + out = self.norm1(x) + out = F.relu(out) + out = self.conv1(out) + out = self.norm2(out) + out = F.relu(out) + out = self.conv2(out) + out += x + return out + + +class UpBlock3d(nn.Module): + """ + Upsampling block for use in decoder. + """ + + def __init__(self, in_features, out_features, kernel_size=3, padding=1, groups=1): + super(UpBlock3d, self).__init__() + + self.conv = nn.Conv3d(in_channels=in_features, out_channels=out_features, kernel_size=kernel_size, + padding=padding, groups=groups) + self.norm = nn.BatchNorm3d(out_features, affine=True) + + def forward(self, x): + out = F.interpolate(x, scale_factor=(1, 2, 2)) + out = self.conv(out) + out = self.norm(out) + out = F.relu(out) + return out + + +class DownBlock2d(nn.Module): + """ + Downsampling block for use in encoder. + """ + + def __init__(self, in_features, out_features, kernel_size=3, padding=1, groups=1): + super(DownBlock2d, self).__init__() + self.conv = nn.Conv2d(in_channels=in_features, out_channels=out_features, kernel_size=kernel_size, padding=padding, groups=groups) + self.norm = nn.BatchNorm2d(out_features, affine=True) + self.pool = nn.AvgPool2d(kernel_size=(2, 2)) + + def forward(self, x): + out = self.conv(x) + out = self.norm(out) + out = F.relu(out) + out = self.pool(out) + return out + + +class DownBlock3d(nn.Module): + """ + Downsampling block for use in encoder. + """ + + def __init__(self, in_features, out_features, kernel_size=3, padding=1, groups=1): + super(DownBlock3d, self).__init__() + ''' + self.conv = nn.Conv3d(in_channels=in_features, out_channels=out_features, kernel_size=kernel_size, + padding=padding, groups=groups, stride=(1, 2, 2)) + ''' + self.conv = nn.Conv3d(in_channels=in_features, out_channels=out_features, kernel_size=kernel_size, + padding=padding, groups=groups) + self.norm = nn.BatchNorm3d(out_features, affine=True) + self.pool = nn.AvgPool3d(kernel_size=(1, 2, 2)) + + def forward(self, x): + out = self.conv(x) + out = self.norm(out) + out = F.relu(out) + out = self.pool(out) + return out + + +class SameBlock2d(nn.Module): + """ + Simple block, preserve spatial resolution. + """ + + def __init__(self, in_features, out_features, groups=1, kernel_size=3, padding=1, lrelu=False): + super(SameBlock2d, self).__init__() + self.conv = nn.Conv2d(in_channels=in_features, out_channels=out_features, kernel_size=kernel_size, padding=padding, groups=groups) + self.norm = nn.BatchNorm2d(out_features, affine=True) + if lrelu: + self.ac = nn.LeakyReLU() + else: + self.ac = nn.ReLU() + + def forward(self, x): + out = self.conv(x) + out = self.norm(out) + out = self.ac(out) + return out + + +class Encoder(nn.Module): + """ + Hourglass Encoder + """ + + def __init__(self, block_expansion, in_features, num_blocks=3, max_features=256): + super(Encoder, self).__init__() + + down_blocks = [] + for i in range(num_blocks): + down_blocks.append(DownBlock3d(in_features if i == 0 else min(max_features, block_expansion * (2 ** i)), min(max_features, block_expansion * (2 ** (i + 1))), kernel_size=3, padding=1)) + self.down_blocks = nn.ModuleList(down_blocks) + + def forward(self, x): + outs = [x] + for down_block in self.down_blocks: + outs.append(down_block(outs[-1])) + return outs + + +class Decoder(nn.Module): + """ + Hourglass Decoder + """ + + def __init__(self, block_expansion, in_features, num_blocks=3, max_features=256): + super(Decoder, self).__init__() + + up_blocks = [] + + for i in range(num_blocks)[::-1]: + in_filters = (1 if i == num_blocks - 1 else 2) * min(max_features, block_expansion * (2 ** (i + 1))) + out_filters = min(max_features, block_expansion * (2 ** i)) + up_blocks.append(UpBlock3d(in_filters, out_filters, kernel_size=3, padding=1)) + + self.up_blocks = nn.ModuleList(up_blocks) + self.out_filters = block_expansion + in_features + + self.conv = nn.Conv3d(in_channels=self.out_filters, out_channels=self.out_filters, kernel_size=3, padding=1) + self.norm = nn.BatchNorm3d(self.out_filters, affine=True) + + def forward(self, x): + out = x.pop() + for up_block in self.up_blocks: + out = up_block(out) + skip = x.pop() + out = torch.cat([out, skip], dim=1) + out = self.conv(out) + out = self.norm(out) + out = F.relu(out) + return out + + +class Hourglass(nn.Module): + """ + Hourglass architecture. + """ + + def __init__(self, block_expansion, in_features, num_blocks=3, max_features=256): + super(Hourglass, self).__init__() + self.encoder = Encoder(block_expansion, in_features, num_blocks, max_features) + self.decoder = Decoder(block_expansion, in_features, num_blocks, max_features) + self.out_filters = self.decoder.out_filters + + def forward(self, x): + return self.decoder(self.encoder(x)) + + +class SPADE(nn.Module): + def __init__(self, norm_nc, label_nc): + super().__init__() + + self.param_free_norm = nn.InstanceNorm2d(norm_nc, affine=False) + nhidden = 128 + + self.mlp_shared = nn.Sequential( + nn.Conv2d(label_nc, nhidden, kernel_size=3, padding=1), + nn.ReLU()) + self.mlp_gamma = nn.Conv2d(nhidden, norm_nc, kernel_size=3, padding=1) + self.mlp_beta = nn.Conv2d(nhidden, norm_nc, kernel_size=3, padding=1) + + def forward(self, x, segmap): + normalized = self.param_free_norm(x) + segmap = F.interpolate(segmap, size=x.size()[2:], mode='nearest') + actv = self.mlp_shared(segmap) + gamma = self.mlp_gamma(actv) + beta = self.mlp_beta(actv) + out = normalized * (1 + gamma) + beta + return out + + +class SPADEResnetBlock(nn.Module): + def __init__(self, fin, fout, norm_G, label_nc, use_se=False, dilation=1): + super().__init__() + # Attributes + self.learned_shortcut = (fin != fout) + fmiddle = min(fin, fout) + self.use_se = use_se + # create conv layers + self.conv_0 = nn.Conv2d(fin, fmiddle, kernel_size=3, padding=dilation, dilation=dilation) + self.conv_1 = nn.Conv2d(fmiddle, fout, kernel_size=3, padding=dilation, dilation=dilation) + if self.learned_shortcut: + self.conv_s = nn.Conv2d(fin, fout, kernel_size=1, bias=False) + # apply spectral norm if specified + if 'spectral' in norm_G: + self.conv_0 = spectral_norm(self.conv_0) + self.conv_1 = spectral_norm(self.conv_1) + if self.learned_shortcut: + self.conv_s = spectral_norm(self.conv_s) + # define normalization layers + self.norm_0 = SPADE(fin, label_nc) + self.norm_1 = SPADE(fmiddle, label_nc) + if self.learned_shortcut: + self.norm_s = SPADE(fin, label_nc) + + def forward(self, x, seg1): + x_s = self.shortcut(x, seg1) + dx = self.conv_0(self.actvn(self.norm_0(x, seg1))) + dx = self.conv_1(self.actvn(self.norm_1(dx, seg1))) + out = x_s + dx + return out + + def shortcut(self, x, seg1): + if self.learned_shortcut: + x_s = self.conv_s(self.norm_s(x, seg1)) + else: + x_s = x + return x_s + + def actvn(self, x): + return F.leaky_relu(x, 2e-1) + + +def filter_state_dict(state_dict, remove_name='fc'): + new_state_dict = {} + for key in state_dict: + if remove_name in key: + continue + new_state_dict[key] = state_dict[key] + return new_state_dict + + +class GRN(nn.Module): + """ GRN (Global Response Normalization) layer + """ + + def __init__(self, dim): + super().__init__() + self.gamma = nn.Parameter(torch.zeros(1, 1, 1, dim)) + self.beta = nn.Parameter(torch.zeros(1, 1, 1, dim)) + + def forward(self, x): + Gx = torch.norm(x, p=2, dim=(1, 2), keepdim=True) + Nx = Gx / (Gx.mean(dim=-1, keepdim=True) + 1e-6) + return self.gamma * (x * Nx) + self.beta + x + + +class LayerNorm(nn.Module): + r""" LayerNorm that supports two data formats: channels_last (default) or channels_first. + The ordering of the dimensions in the inputs. channels_last corresponds to inputs with + shape (batch_size, height, width, channels) while channels_first corresponds to inputs + with shape (batch_size, channels, height, width). + """ + + def __init__(self, normalized_shape, eps=1e-6, data_format="channels_last"): + super().__init__() + self.weight = nn.Parameter(torch.ones(normalized_shape)) + self.bias = nn.Parameter(torch.zeros(normalized_shape)) + self.eps = eps + self.data_format = data_format + if self.data_format not in ["channels_last", "channels_first"]: + raise NotImplementedError + self.normalized_shape = (normalized_shape, ) + + def forward(self, x): + if self.data_format == "channels_last": + return F.layer_norm(x, self.normalized_shape, self.weight, self.bias, self.eps) + elif self.data_format == "channels_first": + u = x.mean(1, keepdim=True) + s = (x - u).pow(2).mean(1, keepdim=True) + x = (x - u) / torch.sqrt(s + self.eps) + x = self.weight[:, None, None] * x + self.bias[:, None, None] + return x + + +def _no_grad_trunc_normal_(tensor, mean, std, a, b): + # Cut & paste from PyTorch official master until it's in a few official releases - RW + # Method based on https://people.sc.fsu.edu/~jburkardt/presentations/truncated_normal.pdf + def norm_cdf(x): + # Computes standard normal cumulative distribution function + return (1. + math.erf(x / math.sqrt(2.))) / 2. + + if (mean < a - 2 * std) or (mean > b + 2 * std): + warnings.warn("mean is more than 2 std from [a, b] in nn.init.trunc_normal_. " + "The distribution of values may be incorrect.", + stacklevel=2) + + with torch.no_grad(): + # Values are generated by using a truncated uniform distribution and + # then using the inverse CDF for the normal distribution. + # Get upper and lower cdf values + l = norm_cdf((a - mean) / std) + u = norm_cdf((b - mean) / std) + + # Uniformly fill tensor with values from [l, u], then translate to + # [2l-1, 2u-1]. + tensor.uniform_(2 * l - 1, 2 * u - 1) + + # Use inverse cdf transform for normal distribution to get truncated + # standard normal + tensor.erfinv_() + + # Transform to proper mean, std + tensor.mul_(std * math.sqrt(2.)) + tensor.add_(mean) + + # Clamp to ensure it's in the proper range + tensor.clamp_(min=a, max=b) + return tensor + + +def drop_path(x, drop_prob=0., training=False, scale_by_keep=True): + """ Drop paths (Stochastic Depth) per sample (when applied in main path of residual blocks). + + This is the same as the DropConnect impl I created for EfficientNet, etc networks, however, + the original name is misleading as 'Drop Connect' is a different form of dropout in a separate paper... + See discussion: https://github.com/tensorflow/tpu/issues/494#issuecomment-532968956 ... I've opted for + changing the layer and argument names to 'drop path' rather than mix DropConnect as a layer name and use + 'survival rate' as the argument. + + """ + if drop_prob == 0. or not training: + return x + keep_prob = 1 - drop_prob + shape = (x.shape[0],) + (1,) * (x.ndim - 1) # work with diff dim tensors, not just 2D ConvNets + random_tensor = x.new_empty(shape).bernoulli_(keep_prob) + if keep_prob > 0.0 and scale_by_keep: + random_tensor.div_(keep_prob) + return x * random_tensor + + +class DropPath(nn.Module): + """ Drop paths (Stochastic Depth) per sample (when applied in main path of residual blocks). + """ + + def __init__(self, drop_prob=None, scale_by_keep=True): + super(DropPath, self).__init__() + self.drop_prob = drop_prob + self.scale_by_keep = scale_by_keep + + def forward(self, x): + return drop_path(x, self.drop_prob, self.training, self.scale_by_keep) + + +def trunc_normal_(tensor, mean=0., std=1., a=-2., b=2.): + return _no_grad_trunc_normal_(tensor, mean, std, a, b) + +# From PyTorch internals +def _ntuple(n): + def parse(x): + if isinstance(x, collections.abc.Iterable) and not isinstance(x, str): + return tuple(x) + return tuple(repeat(x, n)) + return parse + +to_2tuple = _ntuple(2) diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/modules/warping_network.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/modules/warping_network.py new file mode 100644 index 0000000..9191a19 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/modules/warping_network.py @@ -0,0 +1,77 @@ +# coding: utf-8 + +""" +Warping field estimator(W) defined in the paper, which generates a warping field using the implicit +keypoint representations x_s and x_d, and employs this flow field to warp the source feature volume f_s. +""" + +from torch import nn +import torch.nn.functional as F +from .util import SameBlock2d +from .dense_motion import DenseMotionNetwork + + +class WarpingNetwork(nn.Module): + def __init__( + self, + num_kp, + block_expansion, + max_features, + num_down_blocks, + reshape_channel, + estimate_occlusion_map=False, + dense_motion_params=None, + **kwargs + ): + super(WarpingNetwork, self).__init__() + + self.upscale = kwargs.get('upscale', 1) + self.flag_use_occlusion_map = kwargs.get('flag_use_occlusion_map', True) + + if dense_motion_params is not None: + self.dense_motion_network = DenseMotionNetwork( + num_kp=num_kp, + feature_channel=reshape_channel, + estimate_occlusion_map=estimate_occlusion_map, + **dense_motion_params + ) + else: + self.dense_motion_network = None + + self.third = SameBlock2d(max_features, block_expansion * (2 ** num_down_blocks), kernel_size=(3, 3), padding=(1, 1), lrelu=True) + self.fourth = nn.Conv2d(in_channels=block_expansion * (2 ** num_down_blocks), out_channels=block_expansion * (2 ** num_down_blocks), kernel_size=1, stride=1) + + self.estimate_occlusion_map = estimate_occlusion_map + + def deform_input(self, inp, deformation): + return F.grid_sample(inp, deformation, align_corners=False) + + def forward(self, feature_3d, kp_driving, kp_source): + if self.dense_motion_network is not None: + # Feature warper, Transforming feature representation according to deformation and occlusion + dense_motion = self.dense_motion_network( + feature=feature_3d, kp_driving=kp_driving, kp_source=kp_source + ) + if 'occlusion_map' in dense_motion: + occlusion_map = dense_motion['occlusion_map'] # Bx1x64x64 + else: + occlusion_map = None + + deformation = dense_motion['deformation'] # Bx16x64x64x3 + out = self.deform_input(feature_3d, deformation) # Bx32x16x64x64 + + bs, c, d, h, w = out.shape # Bx32x16x64x64 + out = out.view(bs, c * d, h, w) # -> Bx512x64x64 + out = self.third(out) # -> Bx256x64x64 + out = self.fourth(out) # -> Bx256x64x64 + + if self.flag_use_occlusion_map and (occlusion_map is not None): + out = out * occlusion_map + + ret_dct = { + 'occlusion_map': occlusion_map, + 'deformation': deformation, + 'out': out, + } + + return ret_dct diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/__init__.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/animal_landmark_runner.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/animal_landmark_runner.py new file mode 100644 index 0000000..d7caafc --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/animal_landmark_runner.py @@ -0,0 +1,138 @@ +# coding: utf-8 + +""" +face detectoin and alignment using XPose +""" + +import os +import pickle +import torch +import numpy as np +from PIL import Image +from torchvision.ops import nms + +from .timer import Timer +from .rprint import rlog as log +from .helper import clean_state_dict + +from .dependencies.XPose import transforms as T +from .dependencies.XPose.models import build_model +from .dependencies.XPose.predefined_keypoints import * +from .dependencies.XPose.util import box_ops +from .dependencies.XPose.util.config import Config + + +class XPoseRunner(object): + def __init__(self, model_config_path, model_checkpoint_path, embeddings_cache_path=None, cpu_only=False, **kwargs): + self.device_id = kwargs.get("device_id", 0) + self.flag_use_half_precision = kwargs.get("flag_use_half_precision", True) + self.device = f"cuda:{self.device_id}" if not cpu_only else "cpu" + self.model = self.load_animal_model(model_config_path, model_checkpoint_path, self.device) + self.timer = Timer() + # Load cached embeddings if available + try: + with open(f'{embeddings_cache_path}_9.pkl', 'rb') as f: # nosec B301 + self.ins_text_embeddings_9, self.kpt_text_embeddings_9 = pickle.load(f) # nosec B301 + with open(f'{embeddings_cache_path}_68.pkl', 'rb') as f: # nosec B301 + self.ins_text_embeddings_68, self.kpt_text_embeddings_68 = pickle.load(f) # nosec B301 + print("Loaded cached embeddings from file.") + except Exception: + raise ValueError("Could not load clip embeddings from file, please check your file path.") + + def load_animal_model(self, model_config_path, model_checkpoint_path, device): + args = Config.fromfile(model_config_path) + args.device = device + model = build_model(args) + checkpoint = torch.load(model_checkpoint_path, map_location=lambda storage, loc: storage) + load_res = model.load_state_dict(clean_state_dict(checkpoint["model"]), strict=False) + model.eval() + return model + + def load_image(self, input_image): + image_pil = input_image.convert("RGB") + transform = T.Compose([ + T.RandomResize([800], max_size=1333), # NOTE: fixed size to 800 + T.ToTensor(), + T.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225]), + ]) + image, _ = transform(image_pil, None) + return image_pil, image + + def get_unipose_output(self, image, instance_text_prompt, keypoint_text_prompt, box_threshold, IoU_threshold): + instance_list = instance_text_prompt.split(',') + + if len(keypoint_text_prompt) == 9: + # torch.Size([1, 512]) torch.Size([9, 512]) + ins_text_embeddings, kpt_text_embeddings = self.ins_text_embeddings_9, self.kpt_text_embeddings_9 + elif len(keypoint_text_prompt) ==68: + # torch.Size([1, 512]) torch.Size([68, 512]) + ins_text_embeddings, kpt_text_embeddings = self.ins_text_embeddings_68, self.kpt_text_embeddings_68 + else: + raise ValueError("Invalid number of keypoint embeddings.") + target = { + "instance_text_prompt": instance_list, + "keypoint_text_prompt": keypoint_text_prompt, + "object_embeddings_text": ins_text_embeddings.float(), + "kpts_embeddings_text": torch.cat((kpt_text_embeddings.float(), torch.zeros(100 - kpt_text_embeddings.shape[0], 512, device=self.device)), dim=0), + "kpt_vis_text": torch.cat((torch.ones(kpt_text_embeddings.shape[0], device=self.device), torch.zeros(100 - kpt_text_embeddings.shape[0], device=self.device)), dim=0) + } + + self.model = self.model.to(self.device) + image = image.to(self.device) + + with torch.no_grad(): + with torch.autocast(device_type=self.device[:4], dtype=torch.float16, enabled=self.flag_use_half_precision): + outputs = self.model(image[None], [target]) + + logits = outputs["pred_logits"].sigmoid()[0] + boxes = outputs["pred_boxes"][0] + keypoints = outputs["pred_keypoints"][0][:, :2 * len(keypoint_text_prompt)] + + logits_filt = logits.cpu().clone() + boxes_filt = boxes.cpu().clone() + keypoints_filt = keypoints.cpu().clone() + filt_mask = logits_filt.max(dim=1)[0] > box_threshold + logits_filt = logits_filt[filt_mask] + boxes_filt = boxes_filt[filt_mask] + keypoints_filt = keypoints_filt[filt_mask] + + keep_indices = nms(box_ops.box_cxcywh_to_xyxy(boxes_filt), logits_filt.max(dim=1)[0], iou_threshold=IoU_threshold) + + filtered_boxes = boxes_filt[keep_indices] + filtered_keypoints = keypoints_filt[keep_indices] + + return filtered_boxes, filtered_keypoints + + def run(self, input_image, instance_text_prompt, keypoint_text_example, box_threshold, IoU_threshold): + if keypoint_text_example in globals(): + keypoint_dict = globals()[keypoint_text_example] + elif instance_text_prompt in globals(): + keypoint_dict = globals()[instance_text_prompt] + else: + keypoint_dict = globals()["animal"] + + keypoint_text_prompt = keypoint_dict.get("keypoints") + keypoint_skeleton = keypoint_dict.get("skeleton") + + image_pil, image = self.load_image(input_image) + boxes_filt, keypoints_filt = self.get_unipose_output(image, instance_text_prompt, keypoint_text_prompt, box_threshold, IoU_threshold) + + size = image_pil.size + H, W = size[1], size[0] + keypoints_filt = keypoints_filt[0].squeeze(0) + kp = np.array(keypoints_filt.cpu()) + num_kpts = len(keypoint_text_prompt) + Z = kp[:num_kpts * 2] * np.array([W, H] * num_kpts) + Z = Z.reshape(num_kpts * 2) + x = Z[0::2] + y = Z[1::2] + return np.stack((x, y), axis=1) + + def warmup(self): + self.timer.tic() + + img_rgb = Image.fromarray(np.zeros((512, 512, 3), dtype=np.uint8)) + self.run(img_rgb, 'face', 'face', box_threshold=0.0, IoU_threshold=0.0) + + elapse = self.timer.toc() + log(f'XPoseRunner warmup time: {elapse:.3f}s') diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/camera.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/camera.py new file mode 100644 index 0000000..a3dd942 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/camera.py @@ -0,0 +1,73 @@ +# coding: utf-8 + +""" +functions for processing and transforming 3D facial keypoints +""" + +import numpy as np +import torch +import torch.nn.functional as F + +PI = np.pi + + +def headpose_pred_to_degree(pred): + """ + pred: (bs, 66) or (bs, 1) or others + """ + if pred.ndim > 1 and pred.shape[1] == 66: + # NOTE: note that the average is modified to 97.5 + device = pred.device + idx_tensor = [idx for idx in range(0, 66)] + idx_tensor = torch.FloatTensor(idx_tensor).to(device) + pred = F.softmax(pred, dim=1) + degree = torch.sum(pred*idx_tensor, axis=1) * 3 - 97.5 + + return degree + + return pred + + +def get_rotation_matrix(pitch_, yaw_, roll_): + """ the input is in degree + """ + # transform to radian + pitch = pitch_ / 180 * PI + yaw = yaw_ / 180 * PI + roll = roll_ / 180 * PI + + device = pitch.device + + if pitch.ndim == 1: + pitch = pitch.unsqueeze(1) + if yaw.ndim == 1: + yaw = yaw.unsqueeze(1) + if roll.ndim == 1: + roll = roll.unsqueeze(1) + + # calculate the euler matrix + bs = pitch.shape[0] + ones = torch.ones([bs, 1]).to(device) + zeros = torch.zeros([bs, 1]).to(device) + x, y, z = pitch, yaw, roll + + rot_x = torch.cat([ + ones, zeros, zeros, + zeros, torch.cos(x), -torch.sin(x), + zeros, torch.sin(x), torch.cos(x) + ], dim=1).reshape([bs, 3, 3]) + + rot_y = torch.cat([ + torch.cos(y), zeros, torch.sin(y), + zeros, ones, zeros, + -torch.sin(y), zeros, torch.cos(y) + ], dim=1).reshape([bs, 3, 3]) + + rot_z = torch.cat([ + torch.cos(z), -torch.sin(z), zeros, + torch.sin(z), torch.cos(z), zeros, + zeros, zeros, ones + ], dim=1).reshape([bs, 3, 3]) + + rot = rot_z @ rot_y @ rot_x + return rot.permute(0, 2, 1) # transpose diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/check_windows_port.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/check_windows_port.py new file mode 100644 index 0000000..c2f9728 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/check_windows_port.py @@ -0,0 +1,18 @@ +import socket +import sys + +if len(sys.argv) != 2: + print("Usage: python check_port.py ") + sys.exit(1) + +port = int(sys.argv[1]) + +sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) +sock.settimeout(1) +result = sock.connect_ex(('127.0.0.1', port)) + +if result == 0: + print("LISTENING") +else: + print("NOT LISTENING") +sock.close diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/crop.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/crop.py new file mode 100644 index 0000000..fd8b8a4 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/crop.py @@ -0,0 +1,423 @@ +# coding: utf-8 + +""" +cropping function and the related preprocess functions for cropping +""" + +import numpy as np +import os.path as osp +from math import sin, cos, acos, degrees +import cv2; cv2.setNumThreads(0); cv2.ocl.setUseOpenCL(False) # NOTE: enforce single thread +from .rprint import rprint as print + +DTYPE = np.float32 +CV2_INTERP = cv2.INTER_LINEAR + +def make_abs_path(fn): + return osp.join(osp.dirname(osp.realpath(__file__)), fn) + +def _transform_img(img, M, dsize, flags=CV2_INTERP, borderMode=None): + """ conduct similarity or affine transformation to the image, do not do border operation! + img: + M: 2x3 matrix or 3x3 matrix + dsize: target shape (width, height) + """ + if isinstance(dsize, tuple) or isinstance(dsize, list): + _dsize = tuple(dsize) + else: + _dsize = (dsize, dsize) + + if borderMode is not None: + return cv2.warpAffine(img, M[:2, :], dsize=_dsize, flags=flags, borderMode=borderMode, borderValue=(0, 0, 0)) + else: + return cv2.warpAffine(img, M[:2, :], dsize=_dsize, flags=flags) + + +def _transform_pts(pts, M): + """ conduct similarity or affine transformation to the pts + pts: Nx2 ndarray + M: 2x3 matrix or 3x3 matrix + return: Nx2 + """ + return pts @ M[:2, :2].T + M[:2, 2] + + +def parse_pt2_from_pt101(pt101, use_lip=True): + """ + parsing the 2 points according to the 101 points, which cancels the roll + """ + # the former version use the eye center, but it is not robust, now use interpolation + pt_left_eye = np.mean(pt101[[39, 42, 45, 48]], axis=0) # left eye center + pt_right_eye = np.mean(pt101[[51, 54, 57, 60]], axis=0) # right eye center + + if use_lip: + # use lip + pt_center_eye = (pt_left_eye + pt_right_eye) / 2 + pt_center_lip = (pt101[75] + pt101[81]) / 2 + pt2 = np.stack([pt_center_eye, pt_center_lip], axis=0) + else: + pt2 = np.stack([pt_left_eye, pt_right_eye], axis=0) + return pt2 + + +def parse_pt2_from_pt106(pt106, use_lip=True): + """ + parsing the 2 points according to the 106 points, which cancels the roll + """ + pt_left_eye = np.mean(pt106[[33, 35, 40, 39]], axis=0) # left eye center + pt_right_eye = np.mean(pt106[[87, 89, 94, 93]], axis=0) # right eye center + + if use_lip: + # use lip + pt_center_eye = (pt_left_eye + pt_right_eye) / 2 + pt_center_lip = (pt106[52] + pt106[61]) / 2 + pt2 = np.stack([pt_center_eye, pt_center_lip], axis=0) + else: + pt2 = np.stack([pt_left_eye, pt_right_eye], axis=0) + return pt2 + + +def parse_pt2_from_pt203(pt203, use_lip=True): + """ + parsing the 2 points according to the 203 points, which cancels the roll + """ + pt_left_eye = np.mean(pt203[[0, 6, 12, 18]], axis=0) # left eye center + pt_right_eye = np.mean(pt203[[24, 30, 36, 42]], axis=0) # right eye center + if use_lip: + # use lip + pt_center_eye = (pt_left_eye + pt_right_eye) / 2 + pt_center_lip = (pt203[48] + pt203[66]) / 2 + pt2 = np.stack([pt_center_eye, pt_center_lip], axis=0) + else: + pt2 = np.stack([pt_left_eye, pt_right_eye], axis=0) + return pt2 + + +def parse_pt2_from_pt68(pt68, use_lip=True): + """ + parsing the 2 points according to the 68 points, which cancels the roll + """ + lm_idx = np.array([31, 37, 40, 43, 46, 49, 55], dtype=np.int32) - 1 + if use_lip: + pt5 = np.stack([ + np.mean(pt68[lm_idx[[1, 2]], :], 0), # left eye + np.mean(pt68[lm_idx[[3, 4]], :], 0), # right eye + pt68[lm_idx[0], :], # nose + pt68[lm_idx[5], :], # lip + pt68[lm_idx[6], :] # lip + ], axis=0) + + pt2 = np.stack([ + (pt5[0] + pt5[1]) / 2, + (pt5[3] + pt5[4]) / 2 + ], axis=0) + else: + pt2 = np.stack([ + np.mean(pt68[lm_idx[[1, 2]], :], 0), # left eye + np.mean(pt68[lm_idx[[3, 4]], :], 0), # right eye + ], axis=0) + + return pt2 + + +def parse_pt2_from_pt5(pt5, use_lip=True): + """ + parsing the 2 points according to the 5 points, which cancels the roll + """ + if use_lip: + pt2 = np.stack([ + (pt5[0] + pt5[1]) / 2, + (pt5[3] + pt5[4]) / 2 + ], axis=0) + else: + pt2 = np.stack([ + pt5[0], + pt5[1] + ], axis=0) + return pt2 + +def parse_pt2_from_pt9(pt9, use_lip=True): + ''' + parsing the 2 points according to the 9 points, which cancels the roll + ['right eye right', 'right eye left', 'left eye right', 'left eye left', 'nose tip', 'lip right', 'lip left', 'upper lip', 'lower lip'] + ''' + if use_lip: + pt9 = np.stack([ + (pt9[2] + pt9[3]) / 2, # left eye + (pt9[0] + pt9[1]) / 2, # right eye + pt9[4], + (pt9[5] + pt9[6] ) / 2 # lip + ], axis=0) + pt2 = np.stack([ + (pt9[0] + pt9[1]) / 2, # eye + pt9[3] # lip + ], axis=0) + else: + pt2 = np.stack([ + (pt9[2] + pt9[3]) / 2, + (pt9[0] + pt9[1]) / 2, + ], axis=0) + + return pt2 + +def parse_pt2_from_pt_x(pts, use_lip=True): + if pts.shape[0] == 101: + pt2 = parse_pt2_from_pt101(pts, use_lip=use_lip) + elif pts.shape[0] == 106: + pt2 = parse_pt2_from_pt106(pts, use_lip=use_lip) + elif pts.shape[0] == 68: + pt2 = parse_pt2_from_pt68(pts, use_lip=use_lip) + elif pts.shape[0] == 5: + pt2 = parse_pt2_from_pt5(pts, use_lip=use_lip) + elif pts.shape[0] == 203: + pt2 = parse_pt2_from_pt203(pts, use_lip=use_lip) + elif pts.shape[0] > 101: + # take the first 101 points + pt2 = parse_pt2_from_pt101(pts[:101], use_lip=use_lip) + elif pts.shape[0] == 9: + pt2 = parse_pt2_from_pt9(pts, use_lip=use_lip) + else: + raise Exception(f'Unknow shape: {pts.shape}') + + if not use_lip: + # NOTE: to compile with the latter code, need to rotate the pt2 90 degrees clockwise manually + v = pt2[1] - pt2[0] + pt2[1, 0] = pt2[0, 0] - v[1] + pt2[1, 1] = pt2[0, 1] + v[0] + + return pt2 + + +def parse_rect_from_landmark( + pts, + scale=1.5, + need_square=True, + vx_ratio=0, + vy_ratio=0, + use_deg_flag=False, + **kwargs +): + """parsing center, size, angle from 101/68/5/x landmarks + vx_ratio: the offset ratio along the pupil axis x-axis, multiplied by size + vy_ratio: the offset ratio along the pupil axis y-axis, multiplied by size, which is used to contain more forehead area + + judge with pts.shape + """ + pt2 = parse_pt2_from_pt_x(pts, use_lip=kwargs.get('use_lip', True)) + + uy = pt2[1] - pt2[0] + l = np.linalg.norm(uy) + if l <= 1e-3: + uy = np.array([0, 1], dtype=DTYPE) + else: + uy /= l + ux = np.array((uy[1], -uy[0]), dtype=DTYPE) + + # the rotation degree of the x-axis, the clockwise is positive, the counterclockwise is negative (image coordinate system) + # print(uy) + # print(ux) + angle = acos(ux[0]) + if ux[1] < 0: + angle = -angle + + # rotation matrix + M = np.array([ux, uy]) + + # calculate the size which contains the angle degree of the bbox, and the center + center0 = np.mean(pts, axis=0) + rpts = (pts - center0) @ M.T # (M @ P.T).T = P @ M.T + lt_pt = np.min(rpts, axis=0) + rb_pt = np.max(rpts, axis=0) + center1 = (lt_pt + rb_pt) / 2 + + size = rb_pt - lt_pt + if need_square: + m = max(size[0], size[1]) + size[0] = m + size[1] = m + + size *= scale # scale size + center = center0 + ux * center1[0] + uy * center1[1] # counterclockwise rotation, equivalent to M.T @ center1.T + center = center + ux * (vx_ratio * size) + uy * \ + (vy_ratio * size) # considering the offset in vx and vy direction + + if use_deg_flag: + angle = degrees(angle) + + return center, size, angle + + +def parse_bbox_from_landmark(pts, **kwargs): + center, size, angle = parse_rect_from_landmark(pts, **kwargs) + cx, cy = center + w, h = size + + # calculate the vertex positions before rotation + bbox = np.array([ + [cx-w/2, cy-h/2], # left, top + [cx+w/2, cy-h/2], + [cx+w/2, cy+h/2], # right, bottom + [cx-w/2, cy+h/2] + ], dtype=DTYPE) + + # construct rotation matrix + bbox_rot = bbox.copy() + R = np.array([ + [np.cos(angle), -np.sin(angle)], + [np.sin(angle), np.cos(angle)] + ], dtype=DTYPE) + + # calculate the relative position of each vertex from the rotation center, then rotate these positions, and finally add the coordinates of the rotation center + bbox_rot = (bbox_rot - center) @ R.T + center + + return { + 'center': center, # 2x1 + 'size': size, # scalar + 'angle': angle, # rad, counterclockwise + 'bbox': bbox, # 4x2 + 'bbox_rot': bbox_rot, # 4x2 + } + + +def crop_image_by_bbox(img, bbox, lmk=None, dsize=512, angle=None, flag_rot=False, **kwargs): + left, top, right, bot = bbox + if int(right - left) != int(bot - top): + print(f'right-left {right-left} != bot-top {bot-top}') + size = right - left + + src_center = np.array([(left + right) / 2, (top + bot) / 2], dtype=DTYPE) + tgt_center = np.array([dsize / 2, dsize / 2], dtype=DTYPE) + + s = dsize / size # scale + if flag_rot and angle is not None: + costheta, sintheta = cos(angle), sin(angle) + cx, cy = src_center[0], src_center[1] # ori center + tcx, tcy = tgt_center[0], tgt_center[1] # target center + # need to infer + M_o2c = np.array( + [[s * costheta, s * sintheta, tcx - s * (costheta * cx + sintheta * cy)], + [-s * sintheta, s * costheta, tcy - s * (-sintheta * cx + costheta * cy)]], + dtype=DTYPE + ) + else: + M_o2c = np.array( + [[s, 0, tgt_center[0] - s * src_center[0]], + [0, s, tgt_center[1] - s * src_center[1]]], + dtype=DTYPE + ) + + # if flag_rot and angle is None: + # print('angle is None, but flag_rotate is True', style="bold yellow") + + img_crop = _transform_img(img, M_o2c, dsize=dsize, borderMode=kwargs.get('borderMode', None)) + lmk_crop = _transform_pts(lmk, M_o2c) if lmk is not None else None + + M_o2c = np.vstack([M_o2c, np.array([0, 0, 1], dtype=DTYPE)]) + M_c2o = np.linalg.inv(M_o2c) + + # cv2.imwrite('crop.jpg', img_crop) + + return { + 'img_crop': img_crop, + 'lmk_crop': lmk_crop, + 'M_o2c': M_o2c, + 'M_c2o': M_c2o, + } + + +def _estimate_similar_transform_from_pts( + pts, + dsize, + scale=1.5, + vx_ratio=0, + vy_ratio=-0.1, + flag_do_rot=True, + **kwargs +): + """ calculate the affine matrix of the cropped image from sparse points, the original image to the cropped image, the inverse is the cropped image to the original image + pts: landmark, 101 or 68 points or other points, Nx2 + scale: the larger scale factor, the smaller face ratio + vx_ratio: x shift + vy_ratio: y shift, the smaller the y shift, the lower the face region + rot_flag: if it is true, conduct correction + """ + center, size, angle = parse_rect_from_landmark( + pts, scale=scale, vx_ratio=vx_ratio, vy_ratio=vy_ratio, + use_lip=kwargs.get('use_lip', True) + ) + + s = dsize / size[0] # scale + tgt_center = np.array([dsize / 2, dsize / 2], dtype=DTYPE) # center of dsize + + if flag_do_rot: + costheta, sintheta = cos(angle), sin(angle) + cx, cy = center[0], center[1] # ori center + tcx, tcy = tgt_center[0], tgt_center[1] # target center + # need to infer + M_INV = np.array( + [[s * costheta, s * sintheta, tcx - s * (costheta * cx + sintheta * cy)], + [-s * sintheta, s * costheta, tcy - s * (-sintheta * cx + costheta * cy)]], + dtype=DTYPE + ) + else: + M_INV = np.array( + [[s, 0, tgt_center[0] - s * center[0]], + [0, s, tgt_center[1] - s * center[1]]], + dtype=DTYPE + ) + + M_INV_H = np.vstack([M_INV, np.array([0, 0, 1])]) + M = np.linalg.inv(M_INV_H) + + # M_INV is from the original image to the cropped image, M is from the cropped image to the original image + return M_INV, M[:2, ...] + + +def crop_image(img, pts: np.ndarray, **kwargs): + dsize = kwargs.get('dsize', 224) + scale = kwargs.get('scale', 1.5) # 1.5 | 1.6 + vy_ratio = kwargs.get('vy_ratio', -0.1) # -0.0625 | -0.1 + + M_INV, _ = _estimate_similar_transform_from_pts( + pts, + dsize=dsize, + scale=scale, + vy_ratio=vy_ratio, + flag_do_rot=kwargs.get('flag_do_rot', True), + ) + + img_crop = _transform_img(img, M_INV, dsize) # origin to crop + pt_crop = _transform_pts(pts, M_INV) + + M_o2c = np.vstack([M_INV, np.array([0, 0, 1], dtype=DTYPE)]) + M_c2o = np.linalg.inv(M_o2c) + + ret_dct = { + 'M_o2c': M_o2c, # from the original image to the cropped image 3x3 + 'M_c2o': M_c2o, # from the cropped image to the original image 3x3 + 'img_crop': img_crop, # the cropped image + 'pt_crop': pt_crop, # the landmarks of the cropped image + } + + return ret_dct + +def average_bbox_lst(bbox_lst): + if len(bbox_lst) == 0: + return None + bbox_arr = np.array(bbox_lst) + return np.mean(bbox_arr, axis=0).tolist() + +def prepare_paste_back(mask_crop, crop_M_c2o, dsize): + """prepare mask for later image paste back + """ + mask_ori = _transform_img(mask_crop, crop_M_c2o, dsize) + mask_ori = mask_ori.astype(np.float32) / 255. + return mask_ori + +def paste_back(img_crop, M_c2o, img_ori, mask_ori): + """paste back the image + """ + dsize = (img_ori.shape[1], img_ori.shape[0]) + result = _transform_img(img_crop, M_c2o, dsize=dsize) + result = np.clip(mask_ori * result + (1 - mask_ori) * img_ori, 0, 255).astype(np.uint8) + return result diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/cropper.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/cropper.py new file mode 100644 index 0000000..97e26c7 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/cropper.py @@ -0,0 +1,313 @@ +# coding: utf-8 + +import os.path as osp +import torch +import numpy as np +import cv2; cv2.setNumThreads(0); cv2.ocl.setUseOpenCL(False) + +from PIL import Image +from typing import List, Tuple, Union +from dataclasses import dataclass, field + +from ..config.crop_config import CropConfig +from .crop import ( + average_bbox_lst, + crop_image, + crop_image_by_bbox, + parse_bbox_from_landmark, +) +from .io import contiguous +from .rprint import rlog as log +from .face_analysis_diy import FaceAnalysisDIY +from .human_landmark_runner import LandmarkRunner as HumanLandmark + +def make_abs_path(fn): + return osp.join(osp.dirname(osp.realpath(__file__)), fn) + + +@dataclass +class Trajectory: + start: int = -1 # start frame + end: int = -1 # end frame + lmk_lst: Union[Tuple, List, np.ndarray] = field(default_factory=list) # lmk list + bbox_lst: Union[Tuple, List, np.ndarray] = field(default_factory=list) # bbox list + M_c2o_lst: Union[Tuple, List, np.ndarray] = field(default_factory=list) # M_c2o list + + frame_rgb_lst: Union[Tuple, List, np.ndarray] = field(default_factory=list) # frame list + lmk_crop_lst: Union[Tuple, List, np.ndarray] = field(default_factory=list) # lmk list + frame_rgb_crop_lst: Union[Tuple, List, np.ndarray] = field(default_factory=list) # frame crop list + + +class Cropper(object): + def __init__(self, **kwargs) -> None: + self.crop_cfg: CropConfig = kwargs.get("crop_cfg", None) + self.image_type = kwargs.get("image_type", 'human_face') + device_id = kwargs.get("device_id", 0) + flag_force_cpu = kwargs.get("flag_force_cpu", False) + if flag_force_cpu: + device = "cpu" + face_analysis_wrapper_provider = ["CPUExecutionProvider"] + else: + try: + if torch.backends.mps.is_available(): + # Shape inference currently fails with CoreMLExecutionProvider + # for the retinaface model + device = "mps" + face_analysis_wrapper_provider = ["CPUExecutionProvider"] + else: + device = "cuda" + face_analysis_wrapper_provider = ["CUDAExecutionProvider"] + except: + device = "cuda" + face_analysis_wrapper_provider = ["CUDAExecutionProvider"] + self.face_analysis_wrapper = FaceAnalysisDIY( + name="buffalo_l", + root=self.crop_cfg.insightface_root, + providers=face_analysis_wrapper_provider, + ) + self.face_analysis_wrapper.prepare(ctx_id=device_id, det_size=(512, 512), det_thresh=self.crop_cfg.det_thresh) + self.face_analysis_wrapper.warmup() + + self.human_landmark_runner = HumanLandmark( + ckpt_path=self.crop_cfg.landmark_ckpt_path, + onnx_provider=device, + device_id=device_id, + ) + self.human_landmark_runner.warmup() + + if self.image_type == "animal_face": + from .animal_landmark_runner import XPoseRunner as AnimalLandmarkRunner + self.animal_landmark_runner = AnimalLandmarkRunner( + model_config_path=self.crop_cfg.xpose_config_file_path, + model_checkpoint_path=self.crop_cfg.xpose_ckpt_path, + embeddings_cache_path=self.crop_cfg.xpose_embedding_cache_path, + flag_use_half_precision=kwargs.get("flag_use_half_precision", True), + ) + self.animal_landmark_runner.warmup() + + def update_config(self, user_args): + for k, v in user_args.items(): + if hasattr(self.crop_cfg, k): + setattr(self.crop_cfg, k, v) + + def crop_source_image(self, img_rgb_: np.ndarray, crop_cfg: CropConfig): + # crop a source image and get neccessary information + img_rgb = img_rgb_.copy() # copy it + img_bgr = cv2.cvtColor(img_rgb, cv2.COLOR_RGB2BGR) + + if self.image_type == "human_face": + src_face = self.face_analysis_wrapper.get( + img_bgr, + flag_do_landmark_2d_106=True, + direction=crop_cfg.direction, + max_face_num=crop_cfg.max_face_num, + ) + + if len(src_face) == 0: + log("No face detected in the source image.") + return None + elif len(src_face) > 1: + log(f"More than one face detected in the image, only pick one face by rule {crop_cfg.direction}.") + + # NOTE: temporarily only pick the first face, to support multiple face in the future + src_face = src_face[0] + lmk = src_face.landmark_2d_106 # this is the 106 landmarks from insightface + else: + tmp_dct = { + 'animal_face_9': 'animal_face', + 'animal_face_68': 'face' + } + + img_rgb_pil = Image.fromarray(img_rgb) + lmk = self.animal_landmark_runner.run( + img_rgb_pil, + 'face', + tmp_dct[crop_cfg.animal_face_type], + 0, + 0 + ) + + # crop the face + ret_dct = crop_image( + img_rgb, # ndarray + lmk, # 106x2 or Nx2 + dsize=crop_cfg.dsize, + scale=crop_cfg.scale, + vx_ratio=crop_cfg.vx_ratio, + vy_ratio=crop_cfg.vy_ratio, + flag_do_rot=crop_cfg.flag_do_rot, + ) + + # update a 256x256 version for network input + ret_dct["img_crop_256x256"] = cv2.resize(ret_dct["img_crop"], (256, 256), interpolation=cv2.INTER_AREA) + if self.image_type == "human_face": + lmk = self.human_landmark_runner.run(img_rgb, lmk) + ret_dct["lmk_crop"] = lmk + ret_dct["lmk_crop_256x256"] = ret_dct["lmk_crop"] * 256 / crop_cfg.dsize + else: + # 68x2 or 9x2 + ret_dct["lmk_crop"] = lmk + + return ret_dct + + def calc_lmk_from_cropped_image(self, img_rgb_, **kwargs): + direction = kwargs.get("direction", "large-small") + src_face = self.face_analysis_wrapper.get( + contiguous(img_rgb_[..., ::-1]), # convert to BGR + flag_do_landmark_2d_106=True, + direction=direction, + ) + if len(src_face) == 0: + log("No face detected in the source image.") + return None + elif len(src_face) > 1: + log(f"More than one face detected in the image, only pick one face by rule {direction}.") + src_face = src_face[0] + lmk = src_face.landmark_2d_106 + lmk = self.human_landmark_runner.run(img_rgb_, lmk) + + return lmk + + # TODO: support skipping frame with NO FACE + def crop_source_video(self, source_rgb_lst, crop_cfg: CropConfig, **kwargs): + """Tracking based landmarks/alignment and cropping""" + trajectory = Trajectory() + direction = kwargs.get("direction", "large-small") + for idx, frame_rgb in enumerate(source_rgb_lst): + if idx == 0 or trajectory.start == -1: + src_face = self.face_analysis_wrapper.get( + contiguous(frame_rgb[..., ::-1]), + flag_do_landmark_2d_106=True, + direction=crop_cfg.direction, + max_face_num=crop_cfg.max_face_num, + ) + if len(src_face) == 0: + log(f"No face detected in the frame #{idx}") + continue + elif len(src_face) > 1: + log(f"More than one face detected in the source frame_{idx}, only pick one face by rule {direction}.") + src_face = src_face[0] + lmk = src_face.landmark_2d_106 + lmk = self.human_landmark_runner.run(frame_rgb, lmk) + trajectory.start, trajectory.end = idx, idx + else: + # TODO: add IOU check for tracking + lmk = self.human_landmark_runner.run(frame_rgb, trajectory.lmk_lst[-1]) + trajectory.end = idx + + trajectory.lmk_lst.append(lmk) + + # crop the face + ret_dct = crop_image( + frame_rgb, # ndarray + lmk, # 106x2 or Nx2 + dsize=crop_cfg.dsize, + scale=crop_cfg.scale, + vx_ratio=crop_cfg.vx_ratio, + vy_ratio=crop_cfg.vy_ratio, + flag_do_rot=crop_cfg.flag_do_rot, + ) + lmk = self.human_landmark_runner.run(frame_rgb, lmk) + ret_dct["lmk_crop"] = lmk + + # update a 256x256 version for network input + ret_dct["img_crop_256x256"] = cv2.resize(ret_dct["img_crop"], (256, 256), interpolation=cv2.INTER_AREA) + ret_dct["lmk_crop_256x256"] = ret_dct["lmk_crop"] * 256 / crop_cfg.dsize + + trajectory.frame_rgb_crop_lst.append(ret_dct["img_crop_256x256"]) + trajectory.lmk_crop_lst.append(ret_dct["lmk_crop_256x256"]) + trajectory.M_c2o_lst.append(ret_dct['M_c2o']) + + return { + "frame_crop_lst": trajectory.frame_rgb_crop_lst, + "lmk_crop_lst": trajectory.lmk_crop_lst, + "M_c2o_lst": trajectory.M_c2o_lst, + } + + def crop_driving_video(self, driving_rgb_lst, **kwargs): + """Tracking based landmarks/alignment and cropping""" + trajectory = Trajectory() + direction = kwargs.get("direction", "large-small") + for idx, frame_rgb in enumerate(driving_rgb_lst): + if idx == 0 or trajectory.start == -1: + src_face = self.face_analysis_wrapper.get( + contiguous(frame_rgb[..., ::-1]), + flag_do_landmark_2d_106=True, + direction=direction, + ) + if len(src_face) == 0: + log(f"No face detected in the frame #{idx}") + continue + elif len(src_face) > 1: + log(f"More than one face detected in the driving frame_{idx}, only pick one face by rule {direction}.") + src_face = src_face[0] + lmk = src_face.landmark_2d_106 + lmk = self.human_landmark_runner.run(frame_rgb, lmk) + trajectory.start, trajectory.end = idx, idx + else: + lmk = self.human_landmark_runner.run(frame_rgb, trajectory.lmk_lst[-1]) + trajectory.end = idx + + trajectory.lmk_lst.append(lmk) + ret_bbox = parse_bbox_from_landmark( + lmk, + scale=self.crop_cfg.scale_crop_driving_video, + vx_ratio_crop_driving_video=self.crop_cfg.vx_ratio_crop_driving_video, + vy_ratio=self.crop_cfg.vy_ratio_crop_driving_video, + )["bbox"] + bbox = [ + ret_bbox[0, 0], + ret_bbox[0, 1], + ret_bbox[2, 0], + ret_bbox[2, 1], + ] # 4, + trajectory.bbox_lst.append(bbox) # bbox + trajectory.frame_rgb_lst.append(frame_rgb) + + global_bbox = average_bbox_lst(trajectory.bbox_lst) + + for idx, (frame_rgb, lmk) in enumerate(zip(trajectory.frame_rgb_lst, trajectory.lmk_lst)): + ret_dct = crop_image_by_bbox( + frame_rgb, + global_bbox, + lmk=lmk, + dsize=kwargs.get("dsize", 512), + flag_rot=False, + borderValue=(0, 0, 0), + ) + trajectory.frame_rgb_crop_lst.append(ret_dct["img_crop"]) + trajectory.lmk_crop_lst.append(ret_dct["lmk_crop"]) + + return { + "frame_crop_lst": trajectory.frame_rgb_crop_lst, + "lmk_crop_lst": trajectory.lmk_crop_lst, + } + + + def calc_lmks_from_cropped_video(self, driving_rgb_crop_lst, **kwargs): + """Tracking based landmarks/alignment""" + trajectory = Trajectory() + direction = kwargs.get("direction", "large-small") + + for idx, frame_rgb_crop in enumerate(driving_rgb_crop_lst): + if idx == 0 or trajectory.start == -1: + src_face = self.face_analysis_wrapper.get( + contiguous(frame_rgb_crop[..., ::-1]), # convert to BGR + flag_do_landmark_2d_106=True, + direction=direction, + ) + if len(src_face) == 0: + log(f"No face detected in the frame #{idx}") + raise Exception(f"No face detected in the frame #{idx}") + elif len(src_face) > 1: + log(f"More than one face detected in the driving frame_{idx}, only pick one face by rule {direction}.") + src_face = src_face[0] + lmk = src_face.landmark_2d_106 + lmk = self.human_landmark_runner.run(frame_rgb_crop, lmk) + trajectory.start, trajectory.end = idx, idx + else: + lmk = self.human_landmark_runner.run(frame_rgb_crop, trajectory.lmk_lst[-1]) + trajectory.end = idx + + trajectory.lmk_lst.append(lmk) + return trajectory.lmk_lst diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/config_model/UniPose_SwinT.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/config_model/UniPose_SwinT.py new file mode 100644 index 0000000..707b359 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/config_model/UniPose_SwinT.py @@ -0,0 +1,125 @@ +_base_ = ['coco_transformer.py'] + +use_label_enc = True + +num_classes=2 + +lr = 0.0001 +param_dict_type = 'default' +lr_backbone = 1e-05 +lr_backbone_names = ['backbone.0'] +lr_linear_proj_names = ['reference_points', 'sampling_offsets'] +lr_linear_proj_mult = 0.1 +ddetr_lr_param = False +batch_size = 2 +weight_decay = 0.0001 +epochs = 12 +lr_drop = 11 +save_checkpoint_interval = 100 +clip_max_norm = 0.1 +onecyclelr = False +multi_step_lr = False +lr_drop_list = [33, 45] + + +modelname = 'UniPose' +frozen_weights = None +backbone = 'swin_T_224_1k' + + +dilation = False +position_embedding = 'sine' +pe_temperatureH = 20 +pe_temperatureW = 20 +return_interm_indices = [1, 2, 3] +backbone_freeze_keywords = None +enc_layers = 6 +dec_layers = 6 +unic_layers = 0 +pre_norm = False +dim_feedforward = 2048 +hidden_dim = 256 +dropout = 0.0 +nheads = 8 +num_queries = 900 +query_dim = 4 +num_patterns = 0 +pdetr3_bbox_embed_diff_each_layer = False +pdetr3_refHW = -1 +random_refpoints_xy = False +fix_refpoints_hw = -1 +dabdetr_yolo_like_anchor_update = False +dabdetr_deformable_encoder = False +dabdetr_deformable_decoder = False +use_deformable_box_attn = False +box_attn_type = 'roi_align' +dec_layer_number = None +num_feature_levels = 4 +enc_n_points = 4 +dec_n_points = 4 +decoder_layer_noise = False +dln_xy_noise = 0.2 +dln_hw_noise = 0.2 +add_channel_attention = False +add_pos_value = False +two_stage_type = 'standard' +two_stage_pat_embed = 0 +two_stage_add_query_num = 0 +two_stage_bbox_embed_share = False +two_stage_class_embed_share = False +two_stage_learn_wh = False +two_stage_default_hw = 0.05 +two_stage_keep_all_tokens = False +num_select = 50 +transformer_activation = 'relu' +batch_norm_type = 'FrozenBatchNorm2d' +masks = False + +decoder_sa_type = 'sa' # ['sa', 'ca_label', 'ca_content'] +matcher_type = 'HungarianMatcher' # or SimpleMinsumMatcher +decoder_module_seq = ['sa', 'ca', 'ffn'] +nms_iou_threshold = -1 + +dec_pred_bbox_embed_share = True +dec_pred_class_embed_share = True + + +use_dn = True +dn_number = 100 +dn_box_noise_scale = 1.0 +dn_label_noise_ratio = 0.5 +dn_label_coef=1.0 +dn_bbox_coef=1.0 +embed_init_tgt = True +dn_labelbook_size = 2000 + +match_unstable_error = True + +# for ema +use_ema = True +ema_decay = 0.9997 +ema_epoch = 0 + +use_detached_boxes_dec_out = False + +max_text_len = 256 +shuffle_type = None + +use_text_enhancer = True +use_fusion_layer = True + +use_checkpoint = False # True +use_transformer_ckpt = True +text_encoder_type = 'bert-base-uncased' + +use_text_cross_attention = True +text_dropout = 0.0 +fusion_dropout = 0.0 +fusion_droppath = 0.1 + +num_body_points=68 +binary_query_selection = False +use_cdn = True +ffn_extra_layernorm = False + +fix_size=False diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/config_model/coco_transformer.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/config_model/coco_transformer.py new file mode 100644 index 0000000..e7b3fee --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/config_model/coco_transformer.py @@ -0,0 +1,8 @@ +data_aug_scales = [480, 512, 544, 576, 608, 640, 672, 704, 736, 768, 800] +data_aug_max_size = 1333 +data_aug_scales2_resize = [400, 500, 600] +data_aug_scales2_crop = [384, 600] + + +data_aug_scale_overlap = None + diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/__init__.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/__init__.py new file mode 100644 index 0000000..0765963 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/__init__.py @@ -0,0 +1,10 @@ +# ------------------------------------------------------------------------ +# Conditional DETR +# Copyright (c) 2021 Microsoft. All Rights Reserved. +# Licensed under the Apache License, Version 2.0 [see LICENSE for details] +# ------------------------------------------------------------------------ +# Copied from DETR (https://github.com/facebookresearch/detr) +# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. +# ------------------------------------------------------------------------ + +from .unipose import build_unipose diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/attention.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/attention.py new file mode 100644 index 0000000..103cf17 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/attention.py @@ -0,0 +1,373 @@ +# ------------------------------------------------------------------------ +# UniPose +# url: https://github.com/IDEA-Research/UniPose +# Copyright (c) 2023 IDEA. All Rights Reserved. +# Licensed under the Apache License, Version 2.0 [see LICENSE for details] +# ------------------------------------------------------------------------ +# ED-Pose +# Copyright (c) 2023 IDEA. All Rights Reserved. +# Licensed under the Apache License, Version 2.0 [see LICENSE for details] +# ------------------------------------------------------------------------ +# Conditional DETR +# Copyright (c) 2021 Microsoft. All Rights Reserved. +# Licensed under the Apache License, Version 2.0 [see LICENSE for details] +# ------------------------------------------------------------------------ +# Modified from codes in torch.nn +# ------------------------------------------------------------------------ + +""" +MultiheadAttention that support query, key, and value to have different dimensions. +Query, key, and value projections are removed. + +Mostly copy-paste from https://github.com/pytorch/pytorch/blob/master/torch/nn/modules/activation.py#L873 +and https://github.com/pytorch/pytorch/blob/master/torch/nn/functional.py#L4837 +""" + +import warnings +import torch +from torch.nn.modules.linear import Linear +from torch.nn.init import constant_ +from torch.nn.modules.module import Module +from torch._jit_internal import Optional, Tuple +try: + from torch.overrides import has_torch_function, handle_torch_function +except: + from torch._overrides import has_torch_function, handle_torch_function +from torch.nn.functional import linear, pad, softmax, dropout +Tensor = torch.Tensor + +class MultiheadAttention(Module): + r"""Allows the model to jointly attend to information + from different representation subspaces. + See reference: Attention Is All You Need + .. math:: + \text{MultiHead}(Q, K, V) = \text{Concat}(head_1,\dots,head_h)W^O + \text{where} head_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V) + Args: + embed_dim: total dimension of the model. + num_heads: parallel attention heads. + dropout: a Dropout layer on attn_output_weights. Default: 0.0. + bias: add bias as module parameter. Default: True. + add_bias_kv: add bias to the key and value sequences at dim=0. + add_zero_attn: add a new batch of zeros to the key and + value sequences at dim=1. + kdim: total number of features in key. Default: None. + vdim: total number of features in value. Default: None. + Note: if kdim and vdim are None, they will be set to embed_dim such that + query, key, and value have the same number of features. + Examples:: + >>> multihead_attn = nn.MultiheadAttention(embed_dim, num_heads) + >>> attn_output, attn_output_weights = multihead_attn(query, key, value) + """ + bias_k: Optional[torch.Tensor] + bias_v: Optional[torch.Tensor] + + def __init__(self, embed_dim, num_heads, dropout=0., bias=True, add_bias_kv=False, add_zero_attn=False, kdim=None, vdim=None): + super(MultiheadAttention, self).__init__() + self.embed_dim = embed_dim + self.kdim = kdim if kdim is not None else embed_dim + self.vdim = vdim if vdim is not None else embed_dim + self._qkv_same_embed_dim = self.kdim == embed_dim and self.vdim == embed_dim + + self.num_heads = num_heads + self.dropout = dropout + self.head_dim = embed_dim // num_heads + assert self.head_dim * num_heads == self.embed_dim, "embed_dim must be divisible by num_heads" + + vdim = vdim if vdim is not None else embed_dim + self.out_proj = Linear(vdim , vdim) + + self.in_proj_bias = None + self.in_proj_weight = None + self.bias_k = self.bias_v = None + self.q_proj_weight = None + self.k_proj_weight = None + self.v_proj_weight = None + + self.add_zero_attn = add_zero_attn + + self._reset_parameters() + + def _reset_parameters(self): + constant_(self.out_proj.bias, 0.) + + def __setstate__(self, state): + # Support loading old MultiheadAttention checkpoints generated by v1.1.0 + if '_qkv_same_embed_dim' not in state: + state['_qkv_same_embed_dim'] = True + + super(MultiheadAttention, self).__setstate__(state) + + def forward(self, query, key, value, key_padding_mask=None, + need_weights=True, attn_mask=None): + # type: (Tensor, Tensor, Tensor, Optional[Tensor], bool, Optional[Tensor]) -> Tuple[Tensor, Optional[Tensor]] + r""" + Args: + query, key, value: map a query and a set of key-value pairs to an output. + See "Attention Is All You Need" for more details. + key_padding_mask: if provided, specified padding elements in the key will + be ignored by the attention. When given a binary mask and a value is True, + the corresponding value on the attention layer will be ignored. When given + a byte mask and a value is non-zero, the corresponding value on the attention + layer will be ignored + need_weights: output attn_output_weights. + attn_mask: 2D or 3D mask that prevents attention to certain positions. A 2D mask will be broadcasted for all + the batches while a 3D mask allows to specify a different mask for the entries of each batch. + Shape: + - Inputs: + - query: :math:`(L, N, E)` where L is the target sequence length, N is the batch size, E is + the embedding dimension. + - key: :math:`(S, N, E)`, where S is the source sequence length, N is the batch size, E is + the embedding dimension. + - value: :math:`(S, N, E)` where S is the source sequence length, N is the batch size, E is + the embedding dimension. + - key_padding_mask: :math:`(N, S)` where N is the batch size, S is the source sequence length. + If a ByteTensor is provided, the non-zero positions will be ignored while the position + with the zero positions will be unchanged. If a BoolTensor is provided, the positions with the + value of ``True`` will be ignored while the position with the value of ``False`` will be unchanged. + - attn_mask: 2D mask :math:`(L, S)` where L is the target sequence length, S is the source sequence length. + 3D mask :math:`(N*\text{num_heads}, L, S)` where N is the batch size, L is the target sequence length, + S is the source sequence length. attn_mask ensure that position i is allowed to attend the unmasked + positions. If a ByteTensor is provided, the non-zero positions are not allowed to attend + while the zero positions will be unchanged. If a BoolTensor is provided, positions with ``True`` + is not allowed to attend while ``False`` values will be unchanged. If a FloatTensor + is provided, it will be added to the attention weight. + - Outputs: + - attn_output: :math:`(L, N, E)` where L is the target sequence length, N is the batch size, + E is the embedding dimension. + - attn_output_weights: :math:`(N, L, S)` where N is the batch size, + L is the target sequence length, S is the source sequence length. + """ + if not self._qkv_same_embed_dim: + return multi_head_attention_forward( + query, key, value, self.embed_dim, self.num_heads, + self.in_proj_weight, self.in_proj_bias, + self.bias_k, self.bias_v, self.add_zero_attn, + self.dropout, self.out_proj.weight, self.out_proj.bias, + training=self.training, + key_padding_mask=key_padding_mask, need_weights=need_weights, + attn_mask=attn_mask, use_separate_proj_weight=True, + q_proj_weight=self.q_proj_weight, k_proj_weight=self.k_proj_weight, + v_proj_weight=self.v_proj_weight, out_dim=self.vdim) + else: + return multi_head_attention_forward( + query, key, value, self.embed_dim, self.num_heads, + self.in_proj_weight, self.in_proj_bias, + self.bias_k, self.bias_v, self.add_zero_attn, + self.dropout, self.out_proj.weight, self.out_proj.bias, + training=self.training, + key_padding_mask=key_padding_mask, need_weights=need_weights, + attn_mask=attn_mask, out_dim=self.vdim) + + +def multi_head_attention_forward(query: Tensor, + key: Tensor, + value: Tensor, + embed_dim_to_check: int, + num_heads: int, + in_proj_weight: Tensor, + in_proj_bias: Tensor, + bias_k: Optional[Tensor], + bias_v: Optional[Tensor], + add_zero_attn: bool, + dropout_p: float, + out_proj_weight: Tensor, + out_proj_bias: Tensor, + training: bool = True, + key_padding_mask: Optional[Tensor] = None, + need_weights: bool = True, + attn_mask: Optional[Tensor] = None, + use_separate_proj_weight: bool = False, + q_proj_weight: Optional[Tensor] = None, + k_proj_weight: Optional[Tensor] = None, + v_proj_weight: Optional[Tensor] = None, + static_k: Optional[Tensor] = None, + static_v: Optional[Tensor] = None, + out_dim: Optional[Tensor] = None + ) -> Tuple[Tensor, Optional[Tensor]]: + r""" + Args: + query, key, value: map a query and a set of key-value pairs to an output. + See "Attention Is All You Need" for more details. + embed_dim_to_check: total dimension of the model. + num_heads: parallel attention heads. + in_proj_weight, in_proj_bias: input projection weight and bias. + bias_k, bias_v: bias of the key and value sequences to be added at dim=0. + add_zero_attn: add a new batch of zeros to the key and + value sequences at dim=1. + dropout_p: probability of an element to be zeroed. + out_proj_weight, out_proj_bias: the output projection weight and bias. + training: apply dropout if is ``True``. + key_padding_mask: if provided, specified padding elements in the key will + be ignored by the attention. This is an binary mask. When the value is True, + the corresponding value on the attention layer will be filled with -inf. + need_weights: output attn_output_weights. + attn_mask: 2D or 3D mask that prevents attention to certain positions. A 2D mask will be broadcasted for all + the batches while a 3D mask allows to specify a different mask for the entries of each batch. + use_separate_proj_weight: the function accept the proj. weights for query, key, + and value in different forms. If false, in_proj_weight will be used, which is + a combination of q_proj_weight, k_proj_weight, v_proj_weight. + q_proj_weight, k_proj_weight, v_proj_weight, in_proj_bias: input projection weight and bias. + static_k, static_v: static key and value used for attention operators. + Shape: + Inputs: + - query: :math:`(L, N, E)` where L is the target sequence length, N is the batch size, E is + the embedding dimension. + - key: :math:`(S, N, E)`, where S is the source sequence length, N is the batch size, E is + the embedding dimension. + - value: :math:`(S, N, E)` where S is the source sequence length, N is the batch size, E is + the embedding dimension. + - key_padding_mask: :math:`(N, S)` where N is the batch size, S is the source sequence length. + If a ByteTensor is provided, the non-zero positions will be ignored while the zero positions + will be unchanged. If a BoolTensor is provided, the positions with the + value of ``True`` will be ignored while the position with the value of ``False`` will be unchanged. + - attn_mask: 2D mask :math:`(L, S)` where L is the target sequence length, S is the source sequence length. + 3D mask :math:`(N*num_heads, L, S)` where N is the batch size, L is the target sequence length, + S is the source sequence length. attn_mask ensures that position i is allowed to attend the unmasked + positions. If a ByteTensor is provided, the non-zero positions are not allowed to attend + while the zero positions will be unchanged. If a BoolTensor is provided, positions with ``True`` + are not allowed to attend while ``False`` values will be unchanged. If a FloatTensor + is provided, it will be added to the attention weight. + - static_k: :math:`(N*num_heads, S, E/num_heads)`, where S is the source sequence length, + N is the batch size, E is the embedding dimension. E/num_heads is the head dimension. + - static_v: :math:`(N*num_heads, S, E/num_heads)`, where S is the source sequence length, + N is the batch size, E is the embedding dimension. E/num_heads is the head dimension. + Outputs: + - attn_output: :math:`(L, N, E)` where L is the target sequence length, N is the batch size, + E is the embedding dimension. + - attn_output_weights: :math:`(N, L, S)` where N is the batch size, + L is the target sequence length, S is the source sequence length. + """ + if not torch.jit.is_scripting(): + tens_ops = (query, key, value, in_proj_weight, in_proj_bias, bias_k, bias_v, + out_proj_weight, out_proj_bias) + if any([type(t) is not Tensor for t in tens_ops]) and has_torch_function(tens_ops): + return handle_torch_function( + multi_head_attention_forward, tens_ops, query, key, value, + embed_dim_to_check, num_heads, in_proj_weight, in_proj_bias, + bias_k, bias_v, add_zero_attn, dropout_p, out_proj_weight, + out_proj_bias, training=training, key_padding_mask=key_padding_mask, + need_weights=need_weights, attn_mask=attn_mask, + use_separate_proj_weight=use_separate_proj_weight, + q_proj_weight=q_proj_weight, k_proj_weight=k_proj_weight, + v_proj_weight=v_proj_weight, static_k=static_k, static_v=static_v) + tgt_len, bsz, embed_dim = query.size() + assert embed_dim == embed_dim_to_check + # allow MHA to have different sizes for the feature dimension + assert key.size(0) == value.size(0) and key.size(1) == value.size(1) + + head_dim = embed_dim // num_heads + v_head_dim = out_dim // num_heads + assert head_dim * num_heads == embed_dim, "embed_dim must be divisible by num_heads" + scaling = float(head_dim) ** -0.5 + + q = query * scaling + k = key + v = value + + if attn_mask is not None: + assert attn_mask.dtype == torch.float32 or attn_mask.dtype == torch.float64 or \ + attn_mask.dtype == torch.float16 or attn_mask.dtype == torch.uint8 or attn_mask.dtype == torch.bool, \ + 'Only float, byte, and bool types are supported for attn_mask, not {}'.format(attn_mask.dtype) + if attn_mask.dtype == torch.uint8: + warnings.warn("Byte tensor for attn_mask in nn.MultiheadAttention is deprecated. Use bool tensor instead.") + attn_mask = attn_mask.to(torch.bool) + + if attn_mask.dim() == 2: + attn_mask = attn_mask.unsqueeze(0) + if list(attn_mask.size()) != [1, query.size(0), key.size(0)]: + raise RuntimeError('The size of the 2D attn_mask is not correct.') + elif attn_mask.dim() == 3: + if list(attn_mask.size()) != [bsz * num_heads, query.size(0), key.size(0)]: + raise RuntimeError('The size of the 3D attn_mask is not correct.') + else: + raise RuntimeError("attn_mask's dimension {} is not supported".format(attn_mask.dim())) + # attn_mask's dim is 3 now. + + # convert ByteTensor key_padding_mask to bool + if key_padding_mask is not None and key_padding_mask.dtype == torch.uint8: + warnings.warn("Byte tensor for key_padding_mask in nn.MultiheadAttention is deprecated. Use bool tensor instead.") + key_padding_mask = key_padding_mask.to(torch.bool) + + if bias_k is not None and bias_v is not None: + if static_k is None and static_v is None: + k = torch.cat([k, bias_k.repeat(1, bsz, 1)]) + v = torch.cat([v, bias_v.repeat(1, bsz, 1)]) + if attn_mask is not None: + attn_mask = pad(attn_mask, (0, 1)) + if key_padding_mask is not None: + key_padding_mask = pad(key_padding_mask, (0, 1)) + else: + assert static_k is None, "bias cannot be added to static key." + assert static_v is None, "bias cannot be added to static value." + else: + assert bias_k is None + assert bias_v is None + + q = q.contiguous().view(tgt_len, bsz * num_heads, head_dim).transpose(0, 1) + if k is not None: + k = k.contiguous().view(-1, bsz * num_heads, head_dim).transpose(0, 1) + if v is not None: + v = v.contiguous().view(-1, bsz * num_heads, v_head_dim).transpose(0, 1) + + if static_k is not None: + assert static_k.size(0) == bsz * num_heads + assert static_k.size(2) == head_dim + k = static_k + + if static_v is not None: + assert static_v.size(0) == bsz * num_heads + assert static_v.size(2) == v_head_dim + v = static_v + + src_len = k.size(1) + + if key_padding_mask is not None: + assert key_padding_mask.size(0) == bsz + assert key_padding_mask.size(1) == src_len + + if add_zero_attn: + src_len += 1 + k = torch.cat([k, torch.zeros((k.size(0), 1) + k.size()[2:], dtype=k.dtype, device=k.device)], dim=1) + v = torch.cat([v, torch.zeros((v.size(0), 1) + v.size()[2:], dtype=v.dtype, device=v.device)], dim=1) + if attn_mask is not None: + attn_mask = pad(attn_mask, (0, 1)) + if key_padding_mask is not None: + key_padding_mask = pad(key_padding_mask, (0, 1)) + + attn_output_weights = torch.bmm(q, k.transpose(1, 2)) + assert list(attn_output_weights.size()) == [bsz * num_heads, tgt_len, src_len] + + if attn_mask is not None: + if attn_mask.dtype == torch.bool: + attn_output_weights.masked_fill_(attn_mask, float('-inf')) + else: + attn_output_weights += attn_mask + + + if key_padding_mask is not None: + attn_output_weights = attn_output_weights.view(bsz, num_heads, tgt_len, src_len) + attn_output_weights = attn_output_weights.masked_fill( + key_padding_mask.unsqueeze(1).unsqueeze(2), + float('-inf'), + ) + attn_output_weights = attn_output_weights.view(bsz * num_heads, tgt_len, src_len) + + # attn_output_weights = softmax( + # attn_output_weights, dim=-1) + attn_output_weights = softmax( + attn_output_weights - attn_output_weights.max(dim=-1, keepdim=True)[0], dim=-1) + attn_output_weights = dropout(attn_output_weights, p=dropout_p, training=training) + + attn_output = torch.bmm(attn_output_weights, v) + assert list(attn_output.size()) == [bsz * num_heads, tgt_len, v_head_dim] + attn_output = attn_output.transpose(0, 1).contiguous().view(tgt_len, bsz, out_dim) + attn_output = linear(attn_output, out_proj_weight, out_proj_bias) + + if need_weights: + # average attention weights over heads + attn_output_weights = attn_output_weights.view(bsz, num_heads, tgt_len, src_len) + return attn_output, attn_output_weights.sum(dim=1) / num_heads + else: + return attn_output, None + diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/backbone.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/backbone.py new file mode 100644 index 0000000..b2f4c04 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/backbone.py @@ -0,0 +1,211 @@ +# ------------------------------------------------------------------------ +# UniPose +# url: https://github.com/IDEA-Research/UniPose +# Copyright (c) 2023 IDEA. All Rights Reserved. +# Licensed under the Apache License, Version 2.0 [see LICENSE for details] +# ------------------------------------------------------------------------ +# Conditional DETR +# Copyright (c) 2021 Microsoft. All Rights Reserved. +# Licensed under the Apache License, Version 2.0 [see LICENSE for details] +# ------------------------------------------------------------------------ +# Copied from DETR (https://github.com/facebookresearch/detr) +# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. +# ------------------------------------------------------------------------ + +""" +Backbone modules. +""" + +import torch +import torch.nn.functional as F +import torchvision +from torch import nn +from torchvision.models._utils import IntermediateLayerGetter +from typing import Dict, List + +from util.misc import NestedTensor, is_main_process + +from .position_encoding import build_position_encoding +from .swin_transformer import build_swin_transformer + +class FrozenBatchNorm2d(torch.nn.Module): + """ + BatchNorm2d where the batch statistics and the affine parameters are fixed. + + Copy-paste from torchvision.misc.ops with added eps before rqsrt, + without which any other models than torchvision.models.resnet[18,34,50,101] + produce nans. + """ + + def __init__(self, n): + super(FrozenBatchNorm2d, self).__init__() + self.register_buffer("weight", torch.ones(n)) + self.register_buffer("bias", torch.zeros(n)) + self.register_buffer("running_mean", torch.zeros(n)) + self.register_buffer("running_var", torch.ones(n)) + + def _load_from_state_dict( + self, state_dict, prefix, local_metadata, strict, missing_keys, unexpected_keys, error_msgs + ): + num_batches_tracked_key = prefix + "num_batches_tracked" + if num_batches_tracked_key in state_dict: + del state_dict[num_batches_tracked_key] + + super(FrozenBatchNorm2d, self)._load_from_state_dict( + state_dict, prefix, local_metadata, strict, missing_keys, unexpected_keys, error_msgs + ) + + def forward(self, x): + # move reshapes to the beginning + # to make it fuser-friendly + w = self.weight.reshape(1, -1, 1, 1) + b = self.bias.reshape(1, -1, 1, 1) + rv = self.running_var.reshape(1, -1, 1, 1) + rm = self.running_mean.reshape(1, -1, 1, 1) + eps = 1e-5 + scale = w * (rv + eps).rsqrt() + bias = b - rm * scale + return x * scale + bias + + +class BackboneBase(nn.Module): + def __init__( + self, + backbone: nn.Module, + train_backbone: bool, + num_channels: int, + return_interm_indices: list, + ): + super().__init__() + for name, parameter in backbone.named_parameters(): + if ( + not train_backbone + or "layer2" not in name + and "layer3" not in name + and "layer4" not in name + ): + parameter.requires_grad_(False) + + return_layers = {} + for idx, layer_index in enumerate(return_interm_indices): + return_layers.update( + {"layer{}".format(5 - len(return_interm_indices) + idx): "{}".format(layer_index)} + ) + + self.body = IntermediateLayerGetter(backbone, return_layers=return_layers) + self.num_channels = num_channels + + def forward(self, tensor_list: NestedTensor): + xs = self.body(tensor_list.tensors) + out: Dict[str, NestedTensor] = {} + for name, x in xs.items(): + m = tensor_list.mask + assert m is not None + mask = F.interpolate(m[None].float(), size=x.shape[-2:]).to(torch.bool)[0] + out[name] = NestedTensor(x, mask) + # import ipdb; ipdb.set_trace() + return out + + +class Backbone(BackboneBase): + """ResNet backbone with frozen BatchNorm.""" + + def __init__( + self, + name: str, + train_backbone: bool, + dilation: bool, + return_interm_indices: list, + batch_norm=FrozenBatchNorm2d, + ): + if name in ["resnet18", "resnet34", "resnet50", "resnet101"]: + backbone = getattr(torchvision.models, name)( + replace_stride_with_dilation=[False, False, dilation], + pretrained=is_main_process(), + norm_layer=batch_norm, + ) + else: + raise NotImplementedError("Why you can get here with name {}".format(name)) + # num_channels = 512 if name in ('resnet18', 'resnet34') else 2048 + assert name not in ("resnet18", "resnet34"), "Only resnet50 and resnet101 are available." + assert return_interm_indices in [[0, 1, 2, 3], [1, 2, 3], [3]] + num_channels_all = [256, 512, 1024, 2048] + num_channels = num_channels_all[4 - len(return_interm_indices) :] + super().__init__(backbone, train_backbone, num_channels, return_interm_indices) + + +class Joiner(nn.Sequential): + def __init__(self, backbone, position_embedding): + super().__init__(backbone, position_embedding) + + def forward(self, tensor_list: NestedTensor): + xs = self[0](tensor_list) + out: List[NestedTensor] = [] + pos = [] + for name, x in xs.items(): + out.append(x) + # position encoding + pos.append(self[1](x).to(x.tensors.dtype)) + + return out, pos + + +def build_backbone(args): + """ + Useful args: + - backbone: backbone name + - lr_backbone: + - dilation + - return_interm_indices: available: [0,1,2,3], [1,2,3], [3] + - backbone_freeze_keywords: + - use_checkpoint: for swin only for now + + """ + position_embedding = build_position_encoding(args) + train_backbone = True + if not train_backbone: + raise ValueError("Please set lr_backbone > 0") + return_interm_indices = args.return_interm_indices + assert return_interm_indices in [[0, 1, 2, 3], [1, 2, 3], [3]] + args.backbone_freeze_keywords + use_checkpoint = getattr(args, "use_checkpoint", False) + + if args.backbone in ["resnet50", "resnet101"]: + backbone = Backbone( + args.backbone, + train_backbone, + args.dilation, + return_interm_indices, + batch_norm=FrozenBatchNorm2d, + ) + bb_num_channels = backbone.num_channels + elif args.backbone in [ + "swin_T_224_1k", + "swin_B_224_22k", + "swin_B_384_22k", + "swin_L_224_22k", + "swin_L_384_22k", + ]: + pretrain_img_size = int(args.backbone.split("_")[-2]) + backbone = build_swin_transformer( + args.backbone, + pretrain_img_size=pretrain_img_size, + out_indices=tuple(return_interm_indices), + dilation=False, + use_checkpoint=use_checkpoint, + ) + + bb_num_channels = backbone.num_features[4 - len(return_interm_indices) :] + else: + raise NotImplementedError("Unknown backbone {}".format(args.backbone)) + + assert len(bb_num_channels) == len( + return_interm_indices + ), f"len(bb_num_channels) {len(bb_num_channels)} != len(return_interm_indices) {len(return_interm_indices)}" + + model = Joiner(backbone, position_embedding) + model.num_channels = bb_num_channels + assert isinstance( + bb_num_channels, List + ), "bb_num_channels is expected to be a List but {}".format(type(bb_num_channels)) + return model diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/deformable_transformer.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/deformable_transformer.py new file mode 100644 index 0000000..8f99779 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/deformable_transformer.py @@ -0,0 +1,1230 @@ +# ------------------------------------------------------------------------ +# UniPose +# url: https://github.com/IDEA-Research/UniPose +# Copyright (c) 2023 IDEA. All Rights Reserved. +# Licensed under the Apache License, Version 2.0 [see LICENSE for details] +# ------------------------------------------------------------------------ +# ED-Pose +# Copyright (c) 2023 IDEA. All Rights Reserved. +# Licensed under the Apache License, Version 2.0 [see LICENSE for details] +# ------------------------------------------------------------------------ +# DINO +# Copyright (c) 2022 IDEA. All Rights Reserved. +# Licensed under the Apache License, Version 2.0 [see LICENSE for details] +# ------------------------------------------------------------------------ +# Modified from DETR (https://github.com/facebookresearch/detr) +# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. +# ------------------------------------------------------------------------ + +import math +import copy +import torch +import torch.utils.checkpoint as checkpoint +from torch import nn, Tensor +from typing import Optional +from util.misc import inverse_sigmoid + +from .transformer_vanilla import TransformerEncoderLayer +from .fuse_modules import BiAttentionBlock +from .utils import gen_encoder_output_proposals, MLP, _get_activation_fn, gen_sineembed_for_position, get_sine_pos_embed +from .ops.modules import MSDeformAttn + + +class DeformableTransformer(nn.Module): + + def __init__(self, d_model=256, nhead=8, + num_queries=300, + num_encoder_layers=6, + num_unicoder_layers=0, + num_decoder_layers=6, + dim_feedforward=2048, dropout=0.0, + activation="relu", normalize_before=False, + return_intermediate_dec=False, query_dim=4, + num_patterns=0, + modulate_hw_attn=False, + # for deformable encoder + deformable_encoder=False, + deformable_decoder=False, + num_feature_levels=1, + enc_n_points=4, + dec_n_points=4, + use_deformable_box_attn=False, + box_attn_type='roi_align', + # init query + learnable_tgt_init=False, + decoder_query_perturber=None, + add_channel_attention=False, + add_pos_value=False, + random_refpoints_xy=False, + # two stage + two_stage_type='no', + two_stage_pat_embed=0, + two_stage_add_query_num=0, + two_stage_learn_wh=False, + two_stage_keep_all_tokens=False, + # evo of #anchors + dec_layer_number=None, + rm_enc_query_scale=True, + rm_dec_query_scale=True, + rm_self_attn_layers=None, + key_aware_type=None, + # layer share + layer_share_type=None, + # for detach + rm_detach=None, + decoder_sa_type='ca', + module_seq=['sa', 'ca', 'ffn'], + # for dn + embed_init_tgt=False, + + use_detached_boxes_dec_out=False, + use_text_enhancer=False, + use_fusion_layer=False, + use_checkpoint=False, + use_transformer_ckpt=False, + use_text_cross_attention=False, + text_dropout=0.1, + fusion_dropout=0.1, + fusion_droppath=0.0, + + binary_query_selection=False, + ffn_extra_layernorm=False, + ): + super().__init__() + self.num_feature_levels = num_feature_levels + self.num_encoder_layers = num_encoder_layers + self.num_unicoder_layers = num_unicoder_layers + self.num_decoder_layers = num_decoder_layers + self.deformable_encoder = deformable_encoder + self.deformable_decoder = deformable_decoder + self.two_stage_keep_all_tokens = two_stage_keep_all_tokens + self.num_queries = num_queries + self.random_refpoints_xy = random_refpoints_xy + self.use_detached_boxes_dec_out = use_detached_boxes_dec_out + self.ffn_extra_layernorm = ffn_extra_layernorm + assert query_dim == 4 + + self.binary_query_selection = binary_query_selection + if self.binary_query_selection: + self.binary_query_selection_layer = nn.Linear(d_model, 1) + # assert not binary_query_selection, 'binary_query_selection not implemented yet' + + if num_feature_levels > 1: + assert deformable_encoder, "only support deformable_encoder for num_feature_levels > 1" + if use_deformable_box_attn: + assert deformable_encoder or deformable_encoder + + assert layer_share_type in [None, 'encoder', 'decoder', 'both'] + if layer_share_type in ['encoder', 'both']: + enc_layer_share = True + else: + enc_layer_share = False + if layer_share_type in ['decoder', 'both']: + dec_layer_share = True + else: + dec_layer_share = False + assert layer_share_type is None + + self.decoder_sa_type = decoder_sa_type + assert decoder_sa_type in ['sa', 'ca_label', 'ca_content'] + + # choose encoder layer type + if deformable_encoder: + encoder_layer = DeformableTransformerEncoderLayer(d_model, dim_feedforward, + dropout, activation, + num_feature_levels, nhead, enc_n_points, + add_channel_attention=add_channel_attention, + use_deformable_box_attn=use_deformable_box_attn, + box_attn_type=box_attn_type) + else: + raise NotImplementedError + + if use_text_enhancer: + text_enhance_layer = TransformerEncoderLayer( + d_model=d_model, + nhead=nhead // 2, + dim_feedforward=dim_feedforward // 2, + dropout=text_dropout + ) + else: + text_enhance_layer = None + + if use_fusion_layer: + feature_fusion_layer = BiAttentionBlock( + v_dim=d_model, + l_dim=d_model, + embed_dim=dim_feedforward // 2, + num_heads=nhead // 2, + dropout=fusion_dropout, + drop_path=fusion_droppath + ) + else: + feature_fusion_layer = None + + encoder_norm = nn.LayerNorm(d_model) if normalize_before else None + assert encoder_norm is None + self.encoder = TransformerEncoder( + encoder_layer, num_encoder_layers, d_model=d_model, + num_queries=num_queries, + enc_layer_share=enc_layer_share, + text_enhance_layer=text_enhance_layer, + feature_fusion_layer=feature_fusion_layer, + use_checkpoint=use_checkpoint, + use_transformer_ckpt=use_transformer_ckpt, + ) + + # choose decoder layer type + if deformable_decoder: + decoder_layer = DeformableTransformerDecoderLayer(d_model, dim_feedforward, + dropout, activation, + num_feature_levels, nhead, dec_n_points, + use_text_cross_attention=use_text_cross_attention, + ffn_extra_layernorm=ffn_extra_layernorm, ) + + else: + raise NotImplementedError + + decoder_norm = nn.LayerNorm(d_model) + self.decoder = TransformerDecoder(decoder_layer, num_decoder_layers, decoder_norm, + return_intermediate=return_intermediate_dec, + d_model=d_model, query_dim=query_dim, + modulate_hw_attn=modulate_hw_attn, + num_feature_levels=num_feature_levels, + deformable_decoder=deformable_decoder, + decoder_query_perturber=decoder_query_perturber, + dec_layer_number=dec_layer_number, rm_dec_query_scale=rm_dec_query_scale, + dec_layer_share=dec_layer_share, + use_detached_boxes_dec_out=use_detached_boxes_dec_out + ) + + self.d_model = d_model + self.nhead = nhead + self.dec_layers = num_decoder_layers + self.num_queries = num_queries # useful for single stage model only + self.num_patterns = num_patterns + if not isinstance(num_patterns, int): + Warning("num_patterns should be int but {}".format(type(num_patterns))) + self.num_patterns = 0 + + if num_feature_levels > 1: + if self.num_encoder_layers > 0: + self.level_embed = nn.Parameter(torch.Tensor(num_feature_levels, d_model)) + else: + self.level_embed = None + + self.learnable_tgt_init = learnable_tgt_init + assert learnable_tgt_init, "why not learnable_tgt_init" + self.embed_init_tgt = embed_init_tgt + if (two_stage_type != 'no' and embed_init_tgt) or (two_stage_type == 'no'): + self.tgt_embed = nn.Embedding(self.num_queries, d_model) + nn.init.normal_(self.tgt_embed.weight.data) + else: + self.tgt_embed = None + + # for two stage + self.two_stage_type = two_stage_type + self.two_stage_pat_embed = two_stage_pat_embed + self.two_stage_add_query_num = two_stage_add_query_num + self.two_stage_learn_wh = two_stage_learn_wh + assert two_stage_type in ['no', 'standard'], "unknown param {} of two_stage_type".format(two_stage_type) + if two_stage_type == 'standard': + # anchor selection at the output of encoder + self.enc_output = nn.Linear(d_model, d_model) + self.enc_output_norm = nn.LayerNorm(d_model) + + if two_stage_pat_embed > 0: + self.pat_embed_for_2stage = nn.Parameter(torch.Tensor(two_stage_pat_embed, d_model)) + nn.init.normal_(self.pat_embed_for_2stage) + + if two_stage_add_query_num > 0: + self.tgt_embed = nn.Embedding(self.two_stage_add_query_num, d_model) + + if two_stage_learn_wh: + # import ipdb; ipdb.set_trace() + self.two_stage_wh_embedding = nn.Embedding(1, 2) + else: + self.two_stage_wh_embedding = None + + if two_stage_type == 'no': + self.init_ref_points(num_queries) # init self.refpoint_embed + + self.enc_out_class_embed = None + self.enc_out_bbox_embed = None + + # evolution of anchors + self.dec_layer_number = dec_layer_number + if dec_layer_number is not None: + if self.two_stage_type != 'no' or num_patterns == 0: + assert dec_layer_number[ + 0] == num_queries, f"dec_layer_number[0]({dec_layer_number[0]}) != num_queries({num_queries})" + else: + assert dec_layer_number[ + 0] == num_queries * num_patterns, f"dec_layer_number[0]({dec_layer_number[0]}) != num_queries({num_queries}) * num_patterns({num_patterns})" + + self._reset_parameters() + + self.rm_self_attn_layers = rm_self_attn_layers + if rm_self_attn_layers is not None: + # assert len(rm_self_attn_layers) == num_decoder_layers + print("Removing the self-attn in {} decoder layers".format(rm_self_attn_layers)) + for lid, dec_layer in enumerate(self.decoder.layers): + if lid in rm_self_attn_layers: + dec_layer.rm_self_attn_modules() + + self.rm_detach = rm_detach + if self.rm_detach: + assert isinstance(rm_detach, list) + assert any([i in ['enc_ref', 'enc_tgt', 'dec'] for i in rm_detach]) + self.decoder.rm_detach = rm_detach + + def _reset_parameters(self): + for p in self.parameters(): + if p.dim() > 1: + nn.init.xavier_uniform_(p) + for m in self.modules(): + if isinstance(m, MSDeformAttn): + m._reset_parameters() + if self.num_feature_levels > 1 and self.level_embed is not None: + nn.init.normal_(self.level_embed) + + if self.two_stage_learn_wh: + nn.init.constant_(self.two_stage_wh_embedding.weight, math.log(0.05 / (1 - 0.05))) + + def get_valid_ratio(self, mask): + _, H, W = mask.shape + valid_H = torch.sum(~mask[:, :, 0], 1) + valid_W = torch.sum(~mask[:, 0, :], 1) + valid_ratio_h = valid_H.float() / H + valid_ratio_w = valid_W.float() / W + valid_ratio = torch.stack([valid_ratio_w, valid_ratio_h], -1) + return valid_ratio + + def init_ref_points(self, use_num_queries): + self.refpoint_embed = nn.Embedding(use_num_queries, 4) + + if self.random_refpoints_xy: + # import ipdb; ipdb.set_trace() + self.refpoint_embed.weight.data[:, :2].uniform_(0, 1) + self.refpoint_embed.weight.data[:, :2] = inverse_sigmoid(self.refpoint_embed.weight.data[:, :2]) + self.refpoint_embed.weight.data[:, :2].requires_grad = False + + def forward(self, srcs, masks, refpoint_embed, pos_embeds, tgt, attn_mask=None, attn_mask2=None, text_dict=None, + dn_meta=None,targets=None,kpt_embed=None): + """ + Input: + - srcs: List of multi features [bs, ci, hi, wi] + - masks: List of multi masks [bs, hi, wi] + - refpoint_embed: [bs, num_dn, 4]. None in infer + - pos_embeds: List of multi pos embeds [bs, ci, hi, wi] + - tgt: [bs, num_dn, d_model]. None in infer + + """ + # if self.two_stage_type != 'no' and self.two_stage_add_query_num == 0: + # assert refpoint_embed is None + + # prepare input for encoder + src_flatten = [] + mask_flatten = [] + lvl_pos_embed_flatten = [] + spatial_shapes = [] + for lvl, (src, mask, pos_embed) in enumerate(zip(srcs, masks, pos_embeds)): + bs, c, h, w = src.shape + spatial_shape = (h, w) + spatial_shapes.append(spatial_shape) + + src = src.flatten(2).transpose(1, 2) # bs, hw, c + mask = mask.flatten(1) # bs, hw + pos_embed = pos_embed.flatten(2).transpose(1, 2) # bs, hw, c + if self.num_feature_levels > 1 and self.level_embed is not None: + lvl_pos_embed = pos_embed + self.level_embed[lvl].view(1, 1, -1) + else: + lvl_pos_embed = pos_embed + lvl_pos_embed_flatten.append(lvl_pos_embed) + src_flatten.append(src) + mask_flatten.append(mask) + src_flatten = torch.cat(src_flatten, 1) # bs, \sum{hxw}, c + mask_flatten = torch.cat(mask_flatten, 1) # bs, \sum{hxw} + lvl_pos_embed_flatten = torch.cat(lvl_pos_embed_flatten, 1) # bs, \sum{hxw}, c + spatial_shapes = torch.as_tensor(spatial_shapes, dtype=torch.long, device=src_flatten.device) + level_start_index = torch.cat((spatial_shapes.new_zeros((1,)), spatial_shapes.prod(1).cumsum(0)[:-1])) + valid_ratios = torch.stack([self.get_valid_ratio(m) for m in masks], 1) + + # two stage + enc_topk_proposals = enc_refpoint_embed = None + + ######################################################### + # Begin Encoder + ######################################################### + memory, memory_text = self.encoder( + src_flatten, + pos=lvl_pos_embed_flatten, + level_start_index=level_start_index, + spatial_shapes=spatial_shapes, + valid_ratios=valid_ratios, + key_padding_mask=mask_flatten, + memory_text=text_dict['encoded_text'], + text_attention_mask=~text_dict['text_token_mask'], + # we ~ the mask . False means use the token; True means pad the token + position_ids=text_dict['position_ids'], + text_self_attention_masks=text_dict['text_self_attention_masks'], + ) + ######################################################### + # End Encoder + # - memory: bs, \sum{hw}, c + # - mask_flatten: bs, \sum{hw} + # - lvl_pos_embed_flatten: bs, \sum{hw}, c + # - enc_intermediate_output: None or (nenc+1, bs, nq, c) or (nenc, bs, nq, c) + # - enc_intermediate_refpoints: None or (nenc+1, bs, nq, c) or (nenc, bs, nq, c) + ######################################################### + text_dict['encoded_text'] = memory_text + + if self.two_stage_type == 'standard': + if self.two_stage_learn_wh: + input_hw = self.two_stage_wh_embedding.weight[0] + else: + input_hw = None + output_memory, output_proposals = gen_encoder_output_proposals(memory, mask_flatten, spatial_shapes, + input_hw) + output_memory = self.enc_output_norm(self.enc_output(output_memory)) + + if self.two_stage_pat_embed > 0: + bs, nhw, _ = output_memory.shape + # output_memory: bs, n, 256; self.pat_embed_for_2stage: k, 256 + output_memory = output_memory.repeat(1, self.two_stage_pat_embed, 1) + _pats = self.pat_embed_for_2stage.repeat_interleave(nhw, 0) + output_memory = output_memory + _pats + output_proposals = output_proposals.repeat(1, self.two_stage_pat_embed, 1) + + if self.two_stage_add_query_num > 0: + assert refpoint_embed is not None + output_memory = torch.cat((output_memory, tgt), dim=1) + output_proposals = torch.cat((output_proposals, refpoint_embed), dim=1) + + if self.binary_query_selection: + topk_logits = self.binary_query_selection_layer(output_memory).squeeze(-1) + else: + if text_dict is not None: + enc_outputs_class_unselected = self.enc_out_class_embed(output_memory, text_dict) + else: + enc_outputs_class_unselected = self.enc_out_class_embed(output_memory) + + topk_logits = enc_outputs_class_unselected.max(-1)[0] + enc_outputs_coord_unselected = self.enc_out_bbox_embed( + output_memory) + output_proposals # (bs, \sum{hw}, 4) unsigmoid + topk = self.num_queries + + topk_proposals = torch.topk(topk_logits, topk, dim=1)[1] # bs, nq + + # gather boxes + refpoint_embed_undetach = torch.gather(enc_outputs_coord_unselected, 1, + topk_proposals.unsqueeze(-1).repeat(1, 1, 4)) # unsigmoid + refpoint_embed_ = refpoint_embed_undetach.detach() + init_box_proposal = torch.gather(output_proposals, 1, + topk_proposals.unsqueeze(-1).repeat(1, 1, 4)).sigmoid() # sigmoid + + # gather tgt + tgt_undetach = torch.gather(output_memory, 1, topk_proposals.unsqueeze(-1).repeat(1, 1, self.d_model)) + if self.embed_init_tgt: + tgt_ = self.tgt_embed.weight[:, None, :].repeat(1, bs, 1).transpose(0, 1) # nq, bs, d_model + else: + tgt_ = tgt_undetach.detach() + + if refpoint_embed is not None: + refpoint_embed = torch.cat([refpoint_embed, refpoint_embed_], dim=1) + tgt = torch.cat([tgt, tgt_], dim=1) + else: + refpoint_embed, tgt = refpoint_embed_, tgt_ + + elif self.two_stage_type == 'no': + tgt_ = self.tgt_embed.weight[:, None, :].repeat(1, bs, 1).transpose(0, 1) # nq, bs, d_model + refpoint_embed_ = self.refpoint_embed.weight[:, None, :].repeat(1, bs, 1).transpose(0, 1) # nq, bs, 4 + + if refpoint_embed is not None: + refpoint_embed = torch.cat([refpoint_embed, refpoint_embed_], dim=1) + tgt = torch.cat([tgt, tgt_], dim=1) + else: + refpoint_embed, tgt = refpoint_embed_, tgt_ + + if self.num_patterns > 0: + tgt_embed = tgt.repeat(1, self.num_patterns, 1) + refpoint_embed = refpoint_embed.repeat(1, self.num_patterns, 1) + tgt_pat = self.patterns.weight[None, :, :].repeat_interleave(self.num_queries, + 1) # 1, n_q*n_pat, d_model + tgt = tgt_embed + tgt_pat + + init_box_proposal = refpoint_embed_.sigmoid() + + else: + raise NotImplementedError("unknown two_stage_type {}".format(self.two_stage_type)) + ######################################################### + # End preparing tgt + # - tgt: bs, NQ, d_model + # - refpoint_embed(unsigmoid): bs, NQ, d_model + ######################################################### + # if os.environ.get("SHILONG_AMP_INFNAN_DEBUG") == '1': + # if refpoint_embed.isnan().any() | refpoint_embed.isinf().any(): + # import ipdb; ipdb.set_trace() + # if tgt.isnan().any() | tgt.isinf().any(): + # import ipdb; ipdb.set_trace() + + ######################################################### + # Begin Decoder + ######################################################### + hs, references = self.decoder( + tgt=tgt.transpose(0, 1), + memory=memory.transpose(0, 1), + memory_key_padding_mask=mask_flatten, + pos=lvl_pos_embed_flatten.transpose(0, 1), + refpoints_unsigmoid=refpoint_embed.transpose(0, 1), + level_start_index=level_start_index, + spatial_shapes=spatial_shapes, + valid_ratios=valid_ratios, tgt_mask=attn_mask, + tgt_mask2=attn_mask2, + memory_text=text_dict['encoded_text'], + text_attention_mask=~text_dict['text_token_mask'], + text_dict=text_dict, + dn_meta=dn_meta, + targets=targets, + kpt_embed=kpt_embed + # we ~ the mask . False means use the token; True means pad the token + ) + ######################################################### + # End Decoder + # hs: n_dec, bs, nq, d_model + # references: n_dec+1, bs, nq, query_dim + ######################################################### + + ######################################################### + # Begin postprocess + ######################################################### + if self.two_stage_type == 'standard': + if self.two_stage_keep_all_tokens: + hs_enc = output_memory.unsqueeze(0) + ref_enc = enc_outputs_coord_unselected.unsqueeze(0) + init_box_proposal = output_proposals + # import ipdb; ipdb.set_trace() + else: + hs_enc = tgt_undetach.unsqueeze(0) + ref_enc = refpoint_embed_undetach.sigmoid().unsqueeze(0) + else: + hs_enc = ref_enc = None + ######################################################### + # End postprocess + # hs_enc: (n_enc+1, bs, nq, d_model) or (1, bs, nq, d_model) or (n_enc, bs, nq, d_model) or None + # ref_enc: (n_enc+1, bs, nq, query_dim) or (1, bs, nq, query_dim) or (n_enc, bs, nq, d_model) or None + ######################################################### + + return hs, references, hs_enc, ref_enc, init_box_proposal + # hs: (n_dec, bs, nq, d_model) + # references: sigmoid coordinates. (n_dec+1, bs, bq, 4) + # hs_enc: (n_enc+1, bs, nq, d_model) or (1, bs, nq, d_model) or None + # ref_enc: sigmoid coordinates. \ + # (n_enc+1, bs, nq, query_dim) or (1, bs, nq, query_dim) or None + + +class TransformerEncoder(nn.Module): + + def __init__(self, + encoder_layer, num_layers, d_model=256, + num_queries=300, + enc_layer_share=False, + text_enhance_layer=None, + feature_fusion_layer=None, + use_checkpoint=False, + use_transformer_ckpt=False, + ): + """_summary_ + + Args: + encoder_layer (_type_): _description_ + num_layers (_type_): _description_ + norm (_type_, optional): _description_. Defaults to None. + d_model (int, optional): _description_. Defaults to 256. + num_queries (int, optional): _description_. Defaults to 300. + enc_layer_share (bool, optional): _description_. Defaults to False. + + """ + super().__init__() + # prepare layers + self.layers = [] + self.text_layers = [] + self.fusion_layers = [] + if num_layers > 0: + self.layers = _get_clones(encoder_layer, num_layers, layer_share=enc_layer_share) + + if text_enhance_layer is not None: + self.text_layers = _get_clones(text_enhance_layer, num_layers, layer_share=enc_layer_share) + if feature_fusion_layer is not None: + self.fusion_layers = _get_clones(feature_fusion_layer, num_layers, layer_share=enc_layer_share) + else: + self.layers = [] + del encoder_layer + + if text_enhance_layer is not None: + self.text_layers = [] + del text_enhance_layer + if feature_fusion_layer is not None: + self.fusion_layers = [] + del feature_fusion_layer + + self.query_scale = None + self.num_queries = num_queries + self.num_layers = num_layers + self.d_model = d_model + + self.use_checkpoint = use_checkpoint + self.use_transformer_ckpt = use_transformer_ckpt + + @staticmethod + def get_reference_points(spatial_shapes, valid_ratios, device): + reference_points_list = [] + for lvl, (H_, W_) in enumerate(spatial_shapes): + ref_y, ref_x = torch.meshgrid(torch.linspace(0.5, H_ - 0.5, H_, dtype=torch.float32, device=device), + torch.linspace(0.5, W_ - 0.5, W_, dtype=torch.float32, device=device),) + ref_y = ref_y.reshape(-1)[None] / (valid_ratios[:, None, lvl, 1] * H_) + ref_x = ref_x.reshape(-1)[None] / (valid_ratios[:, None, lvl, 0] * W_) + ref = torch.stack((ref_x, ref_y), -1) + reference_points_list.append(ref) + reference_points = torch.cat(reference_points_list, 1) + reference_points = reference_points[:, :, None] * valid_ratios[:, None] + return reference_points + + def forward(self, + # for images + src: Tensor, + pos: Tensor, + spatial_shapes: Tensor, + level_start_index: Tensor, + valid_ratios: Tensor, + key_padding_mask: Tensor, + # for texts + memory_text: Tensor = None, + text_attention_mask: Tensor = None, + pos_text: Tensor = None, + text_self_attention_masks: Tensor = None, + position_ids: Tensor = None, + ): + """ + Input: + - src: [bs, sum(hi*wi), 256] + - pos: pos embed for src. [bs, sum(hi*wi), 256] + - spatial_shapes: h,w of each level [num_level, 2] + - level_start_index: [num_level] start point of level in sum(hi*wi). + - valid_ratios: [bs, num_level, 2] + - key_padding_mask: [bs, sum(hi*wi)] + + - memory_text: bs, n_text, 256 + - text_attention_mask: bs, n_text + False for no padding; True for padding + - pos_text: bs, n_text, 256 + + - position_ids: bs, n_text + Intermedia: + - reference_points: [bs, sum(hi*wi), num_level, 2] + Outpus: + - output: [bs, sum(hi*wi), 256] + """ + + output = src + + # preparation and reshape + if self.num_layers > 0: + reference_points = self.get_reference_points(spatial_shapes, valid_ratios, device=src.device) + + if self.text_layers: + # generate pos_text + bs, n_text, text_dim = memory_text.shape + if pos_text is None and position_ids is None: + pos_text = torch.arange(n_text, device=memory_text.device).float().unsqueeze(0).unsqueeze(-1).repeat(bs, + 1, + 1) + pos_text = get_sine_pos_embed(pos_text, num_pos_feats=256, exchange_xy=False) + if position_ids is not None: + pos_text = get_sine_pos_embed(position_ids[..., None], num_pos_feats=256, exchange_xy=False) + + # main process + for layer_id, layer in enumerate(self.layers): + # if output.isnan().any() or memory_text.isnan().any(): + # if os.environ.get('IPDB_SHILONG_DEBUG', None) == 'INFO': + # import ipdb; ipdb.set_trace() + if self.fusion_layers: + if self.use_checkpoint: + output, memory_text = checkpoint.checkpoint( + self.fusion_layers[layer_id], + output, + memory_text, + key_padding_mask, + text_attention_mask + ) + else: + output, memory_text = self.fusion_layers[layer_id](v=output, l=memory_text, + attention_mask_v=key_padding_mask, + attention_mask_l=text_attention_mask) + + if self.text_layers: + memory_text = self.text_layers[layer_id]( + src=memory_text.transpose(0, 1), + src_mask=~text_self_attention_masks, # note we use ~ for mask here + src_key_padding_mask=text_attention_mask, + pos=(pos_text.transpose(0, 1) if pos_text is not None else None) + ).transpose(0, 1) + + # main process + if self.use_transformer_ckpt: + output = checkpoint.checkpoint( + layer, + output, + pos, + reference_points, + spatial_shapes, + level_start_index, + key_padding_mask + ) + else: + output = layer(src=output, pos=pos, reference_points=reference_points, spatial_shapes=spatial_shapes, + level_start_index=level_start_index, key_padding_mask=key_padding_mask) + + return output, memory_text + + +class TransformerDecoder(nn.Module): + + def __init__(self, decoder_layer, num_layers, norm=None, + return_intermediate=False, + d_model=256, query_dim=4, + modulate_hw_attn=False, + num_feature_levels=1, + deformable_decoder=False, + decoder_query_perturber=None, + dec_layer_number=None, # number of queries each layer in decoder + rm_dec_query_scale=False, + dec_layer_share=False, + dec_layer_dropout_prob=None, + use_detached_boxes_dec_out=False, + num_box_decoder_layers=2, + num_body_points=68, + ): + super().__init__() + if num_layers > 0: + self.layers = _get_clones(decoder_layer, num_layers, layer_share=dec_layer_share) + else: + self.layers = [] + self.num_layers = num_layers + self.norm = norm + self.return_intermediate = return_intermediate + assert return_intermediate, "support return_intermediate only" + self.query_dim = query_dim + assert query_dim in [2, 4], "query_dim should be 2/4 but {}".format(query_dim) + self.num_feature_levels = num_feature_levels + self.use_detached_boxes_dec_out = use_detached_boxes_dec_out + + self.ref_point_head = MLP(query_dim // 2 * d_model, d_model, d_model, 2) + if not deformable_decoder: + self.query_pos_sine_scale = MLP(d_model, d_model, d_model, 2) + else: + self.query_pos_sine_scale = None + + if rm_dec_query_scale: + self.query_scale = None + else: + raise NotImplementedError + self.query_scale = MLP(d_model, d_model, d_model, 2) + self.bbox_embed = None + self.class_embed = None + self.pose_embed = None + self.pose_hw_embed = None + self.d_model = d_model + self.modulate_hw_attn = modulate_hw_attn + self.deformable_decoder = deformable_decoder + + if not deformable_decoder and modulate_hw_attn: + self.ref_anchor_head = MLP(d_model, d_model, 2, 2) + else: + self.ref_anchor_head = None + + self.decoder_query_perturber = decoder_query_perturber + self.box_pred_damping = None + + self.dec_layer_number = dec_layer_number + if dec_layer_number is not None: + assert isinstance(dec_layer_number, list) + assert len(dec_layer_number) == num_layers + # assert dec_layer_number[0] == + + self.dec_layer_dropout_prob = dec_layer_dropout_prob + if dec_layer_dropout_prob is not None: + assert isinstance(dec_layer_dropout_prob, list) + assert len(dec_layer_dropout_prob) == num_layers + for i in dec_layer_dropout_prob: + assert 0.0 <= i <= 1.0 + + self.rm_detach = None + self.num_body_points = num_body_points + + self.hw = nn.Embedding(17, 2) + self.num_box_decoder_layers = num_box_decoder_layers + self.kpt_index = [x for x in range(50 * (self.num_body_points + 1)) if x % (self.num_body_points + 1) != 0] + self.hw_append = nn.Embedding(self.num_body_points-17, 2) + + def forward(self, tgt, memory, + tgt_mask: Optional[Tensor] = None, + tgt_mask2: Optional[Tensor] = None, + memory_mask: Optional[Tensor] = None, + tgt_key_padding_mask: Optional[Tensor] = None, + memory_key_padding_mask: Optional[Tensor] = None, + pos: Optional[Tensor] = None, + refpoints_unsigmoid: Optional[Tensor] = None, # num_queries, bs, 2 + # for memory + level_start_index: Optional[Tensor] = None, # num_levels + spatial_shapes: Optional[Tensor] = None, # bs, num_levels, 2 + valid_ratios: Optional[Tensor] = None, + # for text + memory_text: Optional[Tensor] = None, + text_attention_mask: Optional[Tensor] = None, + text_dict: Optional[Tensor] = None, + dn_meta: Optional[Tensor] = None, + targets: Optional[Tensor] = None, + kpt_embed: Optional[Tensor] = None + ): + """ + Input: + - tgt: nq, bs, d_model + - memory: hw, bs, d_model + - pos: hw, bs, d_model + - refpoints_unsigmoid: nq, bs, 2/4 + - valid_ratios/spatial_shapes: bs, nlevel, 2 + """ + + output = tgt + output += self.hw.weight[0, 0] * 0.0 + + + intermediate = [] + reference_points = refpoints_unsigmoid.sigmoid() + ref_points = [reference_points] + effect_num_dn = dn_meta['pad_size'] if self.training else 0 + inter_select_number = 50 + for layer_id, layer in enumerate(self.layers): + + if reference_points.shape[-1] == 4: + reference_points_input = reference_points[:, :, None] \ + * torch.cat([valid_ratios, valid_ratios], -1)[None, :] # nq, bs, nlevel, 4 + else: + assert reference_points.shape[-1] == 2 + reference_points_input = reference_points[:, :, None] * valid_ratios[None, :] + query_sine_embed = gen_sineembed_for_position(reference_points_input[:, :, 0, :]) # nq, bs, 256*2 + + # conditional query + raw_query_pos = self.ref_point_head(query_sine_embed) # nq, bs, 256 + pos_scale = self.query_scale(output) if self.query_scale is not None else 1 + query_pos = pos_scale * raw_query_pos + # if os.environ.get("SHILONG_AMP_INFNAN_DEBUG") == '1': + # if query_pos.isnan().any() | query_pos.isinf().any(): + # import ipdb; ipdb.set_trace() + + # main process + output = layer( + tgt=output, + tgt_query_pos=query_pos, + tgt_query_sine_embed=query_sine_embed, + tgt_key_padding_mask=tgt_key_padding_mask, + tgt_reference_points=reference_points_input, + + memory_text=memory_text, + text_attention_mask=text_attention_mask, + + memory=memory, + memory_key_padding_mask=memory_key_padding_mask, + memory_level_start_index=level_start_index, + memory_spatial_shapes=spatial_shapes, + memory_pos=pos, + + self_attn_mask=tgt_mask, + cross_attn_mask=memory_mask + ) + if output.isnan().any() | output.isinf().any(): + print(f"output layer_id {layer_id} is nan") + try: + num_nan = output.isnan().sum().item() + num_inf = output.isinf().sum().item() + print(f"num_nan {num_nan}, num_inf {num_inf}") + except Exception as e: + print(e) + + + + + intermediate.append(self.norm(output)) + # iter update + if layer_id < self.num_box_decoder_layers: + reference_before_sigmoid = inverse_sigmoid(reference_points) + delta_unsig = self.bbox_embed[layer_id](output) + outputs_unsig = delta_unsig + reference_before_sigmoid + new_reference_points = outputs_unsig.sigmoid() + + # select # ref points as anchors + if layer_id == self.num_box_decoder_layers - 1: + dn_output = output[:effect_num_dn] + dn_new_reference_points = new_reference_points[:effect_num_dn] + class_unselected = self.class_embed[layer_id](output.transpose(0, 1), text_dict)[:, + effect_num_dn:].transpose(0, 1) + topk_proposals = torch.topk(class_unselected.max(-1)[0], inter_select_number, dim=0)[1] + new_reference_points_for_box = torch.gather(new_reference_points[effect_num_dn:], 0, + topk_proposals.unsqueeze(-1).repeat(1, 1, 4)) + new_output_for_box = torch.gather(output[effect_num_dn:], 0, + topk_proposals.unsqueeze(-1).repeat(1, 1, self.d_model)) + keypoint_embed=kpt_embed.transpose(0, 1) + + new_output_for_keypoint = keypoint_embed[None, :, :, :].repeat(new_output_for_box.shape[0],1,1,1) + delta_xy = self.pose_embed[-1](new_output_for_keypoint)[..., :2] + keypoint_xy = (inverse_sigmoid(new_reference_points_for_box[..., :2][:, None]) + delta_xy).sigmoid() + num_queries, _, bs, _ = keypoint_xy.shape + aa = torch.cat((self.hw.weight,self.hw_append.weight),dim=0) + keypoint_wh_weight = aa.unsqueeze(0).unsqueeze(-2).repeat(num_queries, 1, bs, 1).sigmoid() + keypoint_wh = keypoint_wh_weight * new_reference_points_for_box[..., 2:][:, None] + new_reference_points_for_keypoint = torch.cat((keypoint_xy, keypoint_wh), dim=-1) + new_reference_points = torch.cat( + (new_reference_points_for_box.unsqueeze(1), new_reference_points_for_keypoint), dim=1).flatten(0, 1) + output = torch.cat((new_output_for_box.unsqueeze(1), new_output_for_keypoint), dim=1).flatten(0, 1) + new_reference_points = torch.cat((dn_new_reference_points, new_reference_points), dim=0) + output = torch.cat((dn_output, output), dim=0) + tgt_mask = tgt_mask2 + + if layer_id >= self.num_box_decoder_layers: + reference_before_sigmoid = inverse_sigmoid(reference_points) + output_bbox_dn = output[:effect_num_dn] + output_bbox_norm = output[effect_num_dn:][0::(self.num_body_points + 1)] + reference_before_sigmoid_bbox_dn = reference_before_sigmoid[:effect_num_dn] + reference_before_sigmoid_bbox_norm = reference_before_sigmoid[effect_num_dn:][ + 0::(self.num_body_points + 1)] + delta_unsig_dn = self.bbox_embed[layer_id](output_bbox_dn) + delta_unsig_norm = self.bbox_embed[layer_id](output_bbox_norm) + outputs_unsig_dn = delta_unsig_dn + reference_before_sigmoid_bbox_dn + outputs_unsig_norm = delta_unsig_norm + reference_before_sigmoid_bbox_norm + new_reference_points_for_box_dn = outputs_unsig_dn.sigmoid() + new_reference_points_for_box_norm = outputs_unsig_norm.sigmoid() + output_kpt = output[effect_num_dn:].index_select(0, torch.tensor(self.kpt_index, device=output.device)) + delta_xy_unsig = self.pose_embed[layer_id - self.num_box_decoder_layers](output_kpt) + outputs_unsig = reference_before_sigmoid[effect_num_dn:].index_select(0, torch.tensor(self.kpt_index, + device=output.device)).clone() ## + delta_hw_unsig = self.pose_hw_embed[layer_id - self.num_box_decoder_layers](output_kpt) + outputs_unsig[..., :2] += delta_xy_unsig[..., :2] + outputs_unsig[..., 2:] += delta_hw_unsig + new_reference_points_for_keypoint = outputs_unsig.sigmoid() + bs = new_reference_points_for_box_norm.shape[1] + new_reference_points_norm = torch.cat((new_reference_points_for_box_norm.unsqueeze(1), + new_reference_points_for_keypoint.view(-1, self.num_body_points, + bs, 4)), dim=1).flatten(0, + 1) + new_reference_points = torch.cat((new_reference_points_for_box_dn, new_reference_points_norm), dim=0) + + if self.rm_detach and 'dec' in self.rm_detach: + reference_points = new_reference_points + else: + reference_points = new_reference_points.detach() + + # if layer_id != self.num_layers - 1: + if self.use_detached_boxes_dec_out: + ref_points.append(reference_points) + else: + ref_points.append(new_reference_points) + + return [ + [itm_out.transpose(0, 1) for itm_out in intermediate], + [itm_refpoint.transpose(0, 1) for itm_refpoint in ref_points] + ] + + +class DeformableTransformerEncoderLayer(nn.Module): + def __init__(self, + d_model=256, d_ffn=1024, + dropout=0.1, activation="relu", + n_levels=4, n_heads=8, n_points=4, + add_channel_attention=False, + use_deformable_box_attn=False, + box_attn_type='roi_align', + ): + super().__init__() + + # self attention + self.self_attn = MSDeformAttn(d_model, n_levels, n_heads, n_points) + self.dropout1 = nn.Dropout(dropout) + self.norm1 = nn.LayerNorm(d_model) + + # ffn + self.linear1 = nn.Linear(d_model, d_ffn) + self.activation = _get_activation_fn(activation, d_model=d_ffn) + self.dropout2 = nn.Dropout(dropout) + self.linear2 = nn.Linear(d_ffn, d_model) + self.dropout3 = nn.Dropout(dropout) + self.norm2 = nn.LayerNorm(d_model) + + # channel attention + self.add_channel_attention = add_channel_attention + if add_channel_attention: + self.activ_channel = _get_activation_fn('dyrelu', d_model=d_model) + self.norm_channel = nn.LayerNorm(d_model) + + @staticmethod + def with_pos_embed(tensor, pos): + return tensor if pos is None else tensor + pos + + def forward_ffn(self, src): + src2 = self.linear2(self.dropout2(self.activation(self.linear1(src)))) + src = src + self.dropout3(src2) + src = self.norm2(src) + return src + + def forward(self, src, pos, reference_points, spatial_shapes, level_start_index, key_padding_mask=None): + # self attention + # import ipdb; ipdb.set_trace() + src2 = self.self_attn(self.with_pos_embed(src, pos), reference_points, src, spatial_shapes, level_start_index, + key_padding_mask) + src = src + self.dropout1(src2) + src = self.norm1(src) + + # ffn + src = self.forward_ffn(src) + + # channel attn + if self.add_channel_attention: + src = self.norm_channel(src + self.activ_channel(src)) + + return src + + +class DeformableTransformerDecoderLayer(nn.Module): + def __init__(self, d_model=256, d_ffn=1024, + dropout=0.1, activation="relu", + n_levels=4, n_heads=8, n_points=4, + use_text_feat_guide=False, + use_text_cross_attention=False, + ffn_extra_layernorm=False + ): + super().__init__() + + # cross attention + # self.cross_attn = MSDeformAttn(d_model, n_levels, n_heads, n_points) + self.cross_attn = MSDeformAttn(d_model, n_levels, n_heads, n_points) + self.dropout1 = nn.Dropout(dropout) if dropout > 0 else nn.Identity() + self.norm1 = nn.LayerNorm(d_model) + + # cross attention text + if use_text_cross_attention: + self.ca_text = nn.MultiheadAttention(d_model, n_heads, dropout=dropout) + self.catext_dropout = nn.Dropout(dropout) if dropout > 0 else nn.Identity() + self.catext_norm = nn.LayerNorm(d_model) + + # self attention + self.self_attn = nn.MultiheadAttention(d_model, n_heads, dropout=dropout) + self.dropout2 = nn.Dropout(dropout) if dropout > 0 else nn.Identity() + self.norm2 = nn.LayerNorm(d_model) + + # ffn + self.linear1 = nn.Linear(d_model, d_ffn) + self.activation = _get_activation_fn(activation, d_model=d_ffn, batch_dim=1) + self.dropout3 = nn.Dropout(dropout) if dropout > 0 else nn.Identity() + self.linear2 = nn.Linear(d_ffn, d_model) + self.dropout4 = nn.Dropout(dropout) if dropout > 0 else nn.Identity() + self.norm3 = nn.LayerNorm(d_model) + if ffn_extra_layernorm: + raise NotImplementedError('ffn_extra_layernorm not implemented') + self.norm_ext = nn.LayerNorm(d_ffn) + else: + self.norm_ext = None + + self.key_aware_proj = None + self.use_text_feat_guide = use_text_feat_guide + assert not use_text_feat_guide + self.use_text_cross_attention = use_text_cross_attention + + def rm_self_attn_modules(self): + self.self_attn = None + self.dropout2 = None + self.norm2 = None + + @staticmethod + def with_pos_embed(tensor, pos): + return tensor if pos is None else tensor + pos + + def forward_ffn(self, tgt, ipdb_flag=False): + + with torch.cuda.amp.autocast(enabled=False): + tgt2 = self.linear2(self.dropout3(self.activation(self.linear1(tgt)))) + + tgt = tgt + self.dropout4(tgt2) + tgt = self.norm3(tgt) + return tgt + + def forward(self, + # for tgt + tgt: Optional[Tensor], # nq, bs, d_model + tgt_query_pos: Optional[Tensor] = None, # pos for query. MLP(Sine(pos)) + tgt_query_sine_embed: Optional[Tensor] = None, # pos for query. Sine(pos) + tgt_key_padding_mask: Optional[Tensor] = None, + tgt_reference_points: Optional[Tensor] = None, # nq, bs, 4 + + memory_text: Optional[Tensor] = None, # bs, num_token, d_model + text_attention_mask: Optional[Tensor] = None, # bs, num_token + + # for memory + memory: Optional[Tensor] = None, # hw, bs, d_model + memory_key_padding_mask: Optional[Tensor] = None, + memory_level_start_index: Optional[Tensor] = None, # num_levels + memory_spatial_shapes: Optional[Tensor] = None, # bs, num_levels, 2 + memory_pos: Optional[Tensor] = None, # pos for memory + + # sa + self_attn_mask: Optional[Tensor] = None, # mask used for self-attention + cross_attn_mask: Optional[Tensor] = None, # mask used for cross-attention + ): + """ + Input: + - tgt/tgt_query_pos: nq, bs, d_model + - + """ + assert cross_attn_mask is None + + # self attention + if self.self_attn is not None: + # import ipdb; ipdb.set_trace() + q = k = self.with_pos_embed(tgt, tgt_query_pos) + tgt2 = self.self_attn(q, k, tgt, attn_mask=self_attn_mask)[0] + tgt = tgt + self.dropout2(tgt2) + tgt = self.norm2(tgt) + + # if os.environ.get("SHILONG_AMP_INFNAN_DEBUG") == '1': + # if tgt.isnan().any() | tgt.isinf().any() : + # import ipdb; ipdb.set_trace() + + if self.use_text_cross_attention: + tgt2 = self.ca_text(self.with_pos_embed(tgt, tgt_query_pos), memory_text.transpose(0, 1), + memory_text.transpose(0, 1), key_padding_mask=text_attention_mask)[0] + tgt = tgt + self.catext_dropout(tgt2) + tgt = self.catext_norm(tgt) + + # if os.environ.get("SHILONG_AMP_INFNAN_DEBUG") == '1': + # if os.environ.get('IPDB_SHILONG_DEBUG', None) == 'INFO': + # import ipdb; ipdb.set_trace() + + # if tgt.isnan().any() | tgt.isinf().any() : + # import ipdb; ipdb.set_trace() + + tgt2 = self.cross_attn(self.with_pos_embed(tgt, tgt_query_pos).transpose(0, 1), + tgt_reference_points.transpose(0, 1).contiguous(), + memory.transpose(0, 1), memory_spatial_shapes, memory_level_start_index, + memory_key_padding_mask).transpose(0, 1) + tgt = tgt + self.dropout1(tgt2) + tgt = self.norm1(tgt) + + # if os.environ.get("SHILONG_AMP_INFNAN_DEBUG") == '1': + # tgtk = tgt.clone() + # if tgt.isnan().any() | tgt.isinf().any() : + # import ipdb; ipdb.set_trace() + + # ffn + tgt = self.forward_ffn(tgt) + # if os.environ.get("SHILONG_AMP_INFNAN_DEBUG") == '1': + # if tgt.isnan().any() | tgt.isinf().any() : + # tgtk = self.forward_ffn(tgtk, ipdb_flag=True) + # import ipdb; ipdb.set_trace() + + return tgt + + +def _get_clones(module, N, layer_share=False): + # import ipdb; ipdb.set_trace() + if layer_share: + return nn.ModuleList([module for i in range(N)]) + else: + return nn.ModuleList([copy.deepcopy(module) for i in range(N)]) + + +def build_deformable_transformer(args): + decoder_query_perturber = None + if args.decoder_layer_noise: + from .utils import RandomBoxPerturber + decoder_query_perturber = RandomBoxPerturber( + x_noise_scale=args.dln_xy_noise, y_noise_scale=args.dln_xy_noise, + w_noise_scale=args.dln_hw_noise, h_noise_scale=args.dln_hw_noise) + + use_detached_boxes_dec_out = False + try: + use_detached_boxes_dec_out = args.use_detached_boxes_dec_out + except: + use_detached_boxes_dec_out = False + + binary_query_selection = False + try: + binary_query_selection = args.binary_query_selection + except: + binary_query_selection = False + + ffn_extra_layernorm = False + try: + ffn_extra_layernorm = args.ffn_extra_layernorm + except: + print('ffn_extra_layernorm not found, set to False') + ffn_extra_layernorm = False + + return DeformableTransformer( + d_model=args.hidden_dim, + dropout=args.dropout, + nhead=args.nheads, + num_queries=args.num_queries, + dim_feedforward=args.dim_feedforward, + num_encoder_layers=args.enc_layers, + num_unicoder_layers=args.unic_layers, + num_decoder_layers=args.dec_layers, + normalize_before=args.pre_norm, + return_intermediate_dec=True, + query_dim=args.query_dim, + activation=args.transformer_activation, + num_patterns=args.num_patterns, + modulate_hw_attn=True, + + deformable_encoder=True, + deformable_decoder=True, + num_feature_levels=args.num_feature_levels, + enc_n_points=args.enc_n_points, + dec_n_points=args.dec_n_points, + use_deformable_box_attn=args.use_deformable_box_attn, + box_attn_type=args.box_attn_type, + + learnable_tgt_init=True, + decoder_query_perturber=decoder_query_perturber, + + add_channel_attention=args.add_channel_attention, + add_pos_value=args.add_pos_value, + random_refpoints_xy=args.random_refpoints_xy, + + # two stage + two_stage_type=args.two_stage_type, # ['no', 'standard', 'early'] + two_stage_pat_embed=args.two_stage_pat_embed, + two_stage_add_query_num=args.two_stage_add_query_num, + two_stage_learn_wh=args.two_stage_learn_wh, + two_stage_keep_all_tokens=args.two_stage_keep_all_tokens, + dec_layer_number=args.dec_layer_number, + rm_self_attn_layers=None, + key_aware_type=None, + layer_share_type=None, + + rm_detach=None, + decoder_sa_type=args.decoder_sa_type, + module_seq=args.decoder_module_seq, + + embed_init_tgt=args.embed_init_tgt, + use_detached_boxes_dec_out=use_detached_boxes_dec_out, + use_text_enhancer=args.use_text_enhancer, + use_fusion_layer=args.use_fusion_layer, + use_checkpoint=args.use_checkpoint, + use_transformer_ckpt=args.use_transformer_ckpt, + use_text_cross_attention=args.use_text_cross_attention, + + text_dropout=args.text_dropout, + fusion_dropout=args.fusion_dropout, + fusion_droppath=args.fusion_droppath, + + binary_query_selection=binary_query_selection, + ffn_extra_layernorm=ffn_extra_layernorm, + ) diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/fuse_modules.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/fuse_modules.py new file mode 100644 index 0000000..3e8edb6 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/fuse_modules.py @@ -0,0 +1,274 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F + +# from timm.models.layers import DropPath +from src.modules.util import DropPath + +class FeatureResizer(nn.Module): + """ + This class takes as input a set of embeddings of dimension C1 and outputs a set of + embedding of dimension C2, after a linear transformation, dropout and normalization (LN). + """ + + def __init__(self, input_feat_size, output_feat_size, dropout, do_ln=True): + super().__init__() + self.do_ln = do_ln + # Object feature encoding + self.fc = nn.Linear(input_feat_size, output_feat_size, bias=True) + self.layer_norm = nn.LayerNorm(output_feat_size, eps=1e-12) + self.dropout = nn.Dropout(dropout) + + def forward(self, encoder_features): + x = self.fc(encoder_features) + if self.do_ln: + x = self.layer_norm(x) + output = self.dropout(x) + return output + + + + +def l1norm(X, dim, eps=1e-8): + """L1-normalize columns of X + """ + norm = torch.abs(X).sum(dim=dim, keepdim=True) + eps + X = torch.div(X, norm) + return X + + +def l2norm(X, dim, eps=1e-8): + """L2-normalize columns of X + """ + norm = torch.pow(X, 2).sum(dim=dim, keepdim=True).sqrt() + eps + X = torch.div(X, norm) + return X + + +def func_attention(query, context, smooth=1, raw_feature_norm="softmax", eps=1e-8): + """ + query: (n_context, queryL, d) + context: (n_context, sourceL, d) + """ + batch_size_q, queryL = query.size(0), query.size(1) + batch_size, sourceL = context.size(0), context.size(1) + + # Get attention + # --> (batch, d, queryL) + queryT = torch.transpose(query, 1, 2) + + # (batch, sourceL, d)(batch, d, queryL) + # --> (batch, sourceL, queryL) + attn = torch.bmm(context, queryT) + if raw_feature_norm == "softmax": + # --> (batch*sourceL, queryL) + attn = attn.view(batch_size * sourceL, queryL) + attn = nn.Softmax()(attn) + # --> (batch, sourceL, queryL) + attn = attn.view(batch_size, sourceL, queryL) + elif raw_feature_norm == "l2norm": + attn = l2norm(attn, 2) + elif raw_feature_norm == "clipped_l2norm": + attn = nn.LeakyReLU(0.1)(attn) + attn = l2norm(attn, 2) + else: + raise ValueError("unknown first norm type:", raw_feature_norm) + # --> (batch, queryL, sourceL) + attn = torch.transpose(attn, 1, 2).contiguous() + # --> (batch*queryL, sourceL) + attn = attn.view(batch_size * queryL, sourceL) + attn = nn.Softmax()(attn * smooth) + # --> (batch, queryL, sourceL) + attn = attn.view(batch_size, queryL, sourceL) + # --> (batch, sourceL, queryL) + attnT = torch.transpose(attn, 1, 2).contiguous() + + # --> (batch, d, sourceL) + contextT = torch.transpose(context, 1, 2) + # (batch x d x sourceL)(batch x sourceL x queryL) + # --> (batch, d, queryL) + weightedContext = torch.bmm(contextT, attnT) + # --> (batch, queryL, d) + weightedContext = torch.transpose(weightedContext, 1, 2) + + return weightedContext, attnT + + +class BiMultiHeadAttention(nn.Module): + def __init__(self, v_dim, l_dim, embed_dim, num_heads, dropout=0.1, cfg=None): + super(BiMultiHeadAttention, self).__init__() + + self.embed_dim = embed_dim + self.num_heads = num_heads + self.head_dim = embed_dim // num_heads + self.v_dim = v_dim + self.l_dim = l_dim + + assert ( + self.head_dim * self.num_heads == self.embed_dim + ), f"embed_dim must be divisible by num_heads (got `embed_dim`: {self.embed_dim} and `num_heads`: {self.num_heads})." + self.scale = self.head_dim ** (-0.5) + self.dropout = dropout + + self.v_proj = nn.Linear(self.v_dim, self.embed_dim) + self.l_proj = nn.Linear(self.l_dim, self.embed_dim) + self.values_v_proj = nn.Linear(self.v_dim, self.embed_dim) + self.values_l_proj = nn.Linear(self.l_dim, self.embed_dim) + + self.out_v_proj = nn.Linear(self.embed_dim, self.v_dim) + self.out_l_proj = nn.Linear(self.embed_dim, self.l_dim) + + self.stable_softmax_2d = True + self.clamp_min_for_underflow = True + self.clamp_max_for_overflow = True + + self._reset_parameters() + + def _shape(self, tensor: torch.Tensor, seq_len: int, bsz: int): + return tensor.view(bsz, seq_len, self.num_heads, self.head_dim).transpose(1, 2).contiguous() + + def _reset_parameters(self): + nn.init.xavier_uniform_(self.v_proj.weight) + self.v_proj.bias.data.fill_(0) + nn.init.xavier_uniform_(self.l_proj.weight) + self.l_proj.bias.data.fill_(0) + nn.init.xavier_uniform_(self.values_v_proj.weight) + self.values_v_proj.bias.data.fill_(0) + nn.init.xavier_uniform_(self.values_l_proj.weight) + self.values_l_proj.bias.data.fill_(0) + nn.init.xavier_uniform_(self.out_v_proj.weight) + self.out_v_proj.bias.data.fill_(0) + nn.init.xavier_uniform_(self.out_l_proj.weight) + self.out_l_proj.bias.data.fill_(0) + + def forward(self, v, l, attention_mask_v=None, attention_mask_l=None): + """_summary_ + + Args: + v (_type_): bs, n_img, dim + l (_type_): bs, n_text, dim + attention_mask_v (_type_, optional): _description_. bs, n_img + attention_mask_l (_type_, optional): _description_. bs, n_text + + Returns: + _type_: _description_ + """ + # if os.environ.get('IPDB_SHILONG_DEBUG', None) == 'INFO': + # import ipdb; ipdb.set_trace() + bsz, tgt_len, _ = v.size() + + query_states = self.v_proj(v) * self.scale + key_states = self._shape(self.l_proj(l), -1, bsz) + value_v_states = self._shape(self.values_v_proj(v), -1, bsz) + value_l_states = self._shape(self.values_l_proj(l), -1, bsz) + + proj_shape = (bsz * self.num_heads, -1, self.head_dim) + query_states = self._shape(query_states, tgt_len, bsz).view(*proj_shape) + key_states = key_states.view(*proj_shape) + value_v_states = value_v_states.view(*proj_shape) + value_l_states = value_l_states.view(*proj_shape) + + src_len = key_states.size(1) + attn_weights = torch.bmm(query_states, key_states.transpose(1, 2)) # bs*nhead, nimg, ntxt + + if attn_weights.size() != (bsz * self.num_heads, tgt_len, src_len): + raise ValueError( + f"Attention weights should be of size {(bsz * self.num_heads, tgt_len, src_len)}, but is {attn_weights.size()}" + ) + + if self.stable_softmax_2d: + attn_weights = attn_weights - attn_weights.max() + + if self.clamp_min_for_underflow: + attn_weights = torch.clamp(attn_weights, min=-50000) # Do not increase -50000, data type half has quite limited range + if self.clamp_max_for_overflow: + attn_weights = torch.clamp(attn_weights, max=50000) # Do not increase 50000, data type half has quite limited range + + attn_weights_T = attn_weights.transpose(1, 2) + attn_weights_l = (attn_weights_T - torch.max(attn_weights_T, dim=-1, keepdim=True)[ + 0]) + if self.clamp_min_for_underflow: + attn_weights_l = torch.clamp(attn_weights_l, min=-50000) # Do not increase -50000, data type half has quite limited range + if self.clamp_max_for_overflow: + attn_weights_l = torch.clamp(attn_weights_l, max=50000) # Do not increase 50000, data type half has quite limited range + + # mask vison for language + if attention_mask_v is not None: + attention_mask_v = attention_mask_v[:, None, None, :].repeat(1, self.num_heads, 1, 1).flatten(0, 1) + attn_weights_l.masked_fill_(attention_mask_v, float('-inf')) + + attn_weights_l = attn_weights_l.softmax(dim=-1) + + # mask language for vision + if attention_mask_l is not None: + attention_mask_l = attention_mask_l[:, None, None, :].repeat(1, self.num_heads, 1, 1).flatten(0, 1) + attn_weights.masked_fill_(attention_mask_l, float('-inf')) + attn_weights_v = attn_weights.softmax(dim=-1) + + attn_probs_v = F.dropout(attn_weights_v, p=self.dropout, training=self.training) + attn_probs_l = F.dropout(attn_weights_l, p=self.dropout, training=self.training) + + attn_output_v = torch.bmm(attn_probs_v, value_l_states) + attn_output_l = torch.bmm(attn_probs_l, value_v_states) + + + if attn_output_v.size() != (bsz * self.num_heads, tgt_len, self.head_dim): + raise ValueError( + f"`attn_output_v` should be of size {(bsz, self.num_heads, tgt_len, self.head_dim)}, but is {attn_output_v.size()}" + ) + + if attn_output_l.size() != (bsz * self.num_heads, src_len, self.head_dim): + raise ValueError( + f"`attn_output_l` should be of size {(bsz, self.num_heads, src_len, self.head_dim)}, but is {attn_output_l.size()}" + ) + + attn_output_v = attn_output_v.view(bsz, self.num_heads, tgt_len, self.head_dim) + attn_output_v = attn_output_v.transpose(1, 2) + attn_output_v = attn_output_v.reshape(bsz, tgt_len, self.embed_dim) + + attn_output_l = attn_output_l.view(bsz, self.num_heads, src_len, self.head_dim) + attn_output_l = attn_output_l.transpose(1, 2) + attn_output_l = attn_output_l.reshape(bsz, src_len, self.embed_dim) + + attn_output_v = self.out_v_proj(attn_output_v) + attn_output_l = self.out_l_proj(attn_output_l) + + return attn_output_v, attn_output_l + + +# Bi-Direction MHA (text->image, image->text) +class BiAttentionBlock(nn.Module): + def __init__(self, v_dim, l_dim, embed_dim, num_heads, dropout=0.1, + drop_path=.0, init_values=1e-4, cfg=None): + """ + Inputs: + embed_dim - Dimensionality of input and attention feature vectors + hidden_dim - Dimensionality of hidden layer in feed-forward network + (usually 2-4x larger than embed_dim) + num_heads - Number of heads to use in the Multi-Head Attention block + dropout - Amount of dropout to apply in the feed-forward network + """ + super(BiAttentionBlock, self).__init__() + + # pre layer norm + self.layer_norm_v = nn.LayerNorm(v_dim) + self.layer_norm_l = nn.LayerNorm(l_dim) + self.attn = BiMultiHeadAttention(v_dim=v_dim, + l_dim=l_dim, + embed_dim=embed_dim, + num_heads=num_heads, + dropout=dropout) + + # add layer scale for training stability + self.drop_path = DropPath(drop_path) if drop_path > 0. else nn.Identity() + self.gamma_v = nn.Parameter(init_values * torch.ones((v_dim)), requires_grad=False) + self.gamma_l = nn.Parameter(init_values * torch.ones((l_dim)), requires_grad=False) + + def forward(self, v, l, attention_mask_v=None, attention_mask_l=None): + v = self.layer_norm_v(v) + l = self.layer_norm_l(l) + delta_v, delta_l = self.attn(v, l, attention_mask_v=attention_mask_v, attention_mask_l=attention_mask_l) + # v, l = v + delta_v, l + delta_l + v = v + self.drop_path(self.gamma_v * delta_v) + l = l + self.drop_path(self.gamma_l * delta_l) + return v, l diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/mask_generate.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/mask_generate.py new file mode 100644 index 0000000..ed79e74 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/mask_generate.py @@ -0,0 +1,56 @@ +import torch + + +def prepare_for_mask(kpt_mask): + + + tgt_size2 = 50 * 69 + attn_mask2 = torch.ones(kpt_mask.shape[0], 8, tgt_size2, tgt_size2).to('cuda') < 0 + group_bbox_kpt = 69 + num_group=50 + for matchj in range(num_group * group_bbox_kpt): + sj = (matchj // group_bbox_kpt) * group_bbox_kpt + ej = (matchj // group_bbox_kpt + 1)*group_bbox_kpt + if sj > 0: + attn_mask2[:,:,matchj, :sj] = True + if ej < num_group * group_bbox_kpt: + attn_mask2[:,:,matchj, ej:] = True + + + bs, length = kpt_mask.shape + equal_mask = kpt_mask[:, :, None] == kpt_mask[:, None, :] + equal_mask= equal_mask.unsqueeze(1).repeat(1,8,1,1) + for idx in range(num_group): + start_idx = idx * length + end_idx = (idx + 1) * length + attn_mask2[:, :,start_idx:end_idx, start_idx:end_idx][equal_mask] = False + attn_mask2[:, :,start_idx:end_idx, start_idx:end_idx][~equal_mask] = True + + + + + input_query_label = None + input_query_bbox = None + attn_mask = None + dn_meta = None + + return input_query_label, input_query_bbox, attn_mask, attn_mask2.flatten(0,1), dn_meta + + +def post_process(outputs_class, outputs_coord, dn_meta, aux_loss, _set_aux_loss): + + if dn_meta and dn_meta['pad_size'] > 0: + + output_known_class = [outputs_class_i[:, :dn_meta['pad_size'], :] for outputs_class_i in outputs_class] + output_known_coord = [outputs_coord_i[:, :dn_meta['pad_size'], :] for outputs_coord_i in outputs_coord] + + outputs_class = [outputs_class_i[:, dn_meta['pad_size']:, :] for outputs_class_i in outputs_class] + outputs_coord = [outputs_coord_i[:, dn_meta['pad_size']:, :] for outputs_coord_i in outputs_coord] + + out = {'pred_logits': output_known_class[-1], 'pred_boxes': output_known_coord[-1]} + if aux_loss: + out['aux_outputs'] = _set_aux_loss(output_known_class, output_known_coord) + dn_meta['output_known_lbs_bboxes'] = out + return outputs_class, outputs_coord + + diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/functions/__init__.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/functions/__init__.py new file mode 100644 index 0000000..8a2197b --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/functions/__init__.py @@ -0,0 +1,10 @@ +# ------------------------------------------------------------------------------------------------ +# Deformable DETR +# Copyright (c) 2020 SenseTime. All Rights Reserved. +# Licensed under the Apache License, Version 2.0 [see LICENSE for details] +# ------------------------------------------------------------------------------------------------ +# Modified from https://github.com/chengdazhi/Deformable-Convolution-V2-PyTorch/tree/pytorch_1.0.0 +# ------------------------------------------------------------------------------------------------ + +from .ms_deform_attn_func import MSDeformAttnFunction + diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/functions/ms_deform_attn_func.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/functions/ms_deform_attn_func.py new file mode 100644 index 0000000..8c5df8c --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/functions/ms_deform_attn_func.py @@ -0,0 +1,61 @@ +# ------------------------------------------------------------------------------------------------ +# Deformable DETR +# Copyright (c) 2020 SenseTime. All Rights Reserved. +# Licensed under the Apache License, Version 2.0 [see LICENSE for details] +# ------------------------------------------------------------------------------------------------ +# Modified from https://github.com/chengdazhi/Deformable-Convolution-V2-PyTorch/tree/pytorch_1.0.0 +# ------------------------------------------------------------------------------------------------ + +from __future__ import absolute_import +from __future__ import print_function +from __future__ import division + +import torch +import torch.nn.functional as F +from torch.autograd import Function +from torch.autograd.function import once_differentiable + +import MultiScaleDeformableAttention as MSDA + + +class MSDeformAttnFunction(Function): + @staticmethod + def forward(ctx, value, value_spatial_shapes, value_level_start_index, sampling_locations, attention_weights, im2col_step): + ctx.im2col_step = im2col_step + output = MSDA.ms_deform_attn_forward( + value, value_spatial_shapes, value_level_start_index, sampling_locations, attention_weights, ctx.im2col_step) + ctx.save_for_backward(value, value_spatial_shapes, value_level_start_index, sampling_locations, attention_weights) + return output + + @staticmethod + @once_differentiable + def backward(ctx, grad_output): + value, value_spatial_shapes, value_level_start_index, sampling_locations, attention_weights = ctx.saved_tensors + grad_value, grad_sampling_loc, grad_attn_weight = \ + MSDA.ms_deform_attn_backward( + value, value_spatial_shapes, value_level_start_index, sampling_locations, attention_weights, grad_output, ctx.im2col_step) + + return grad_value, None, None, grad_sampling_loc, grad_attn_weight, None + + +def ms_deform_attn_core_pytorch(value, value_spatial_shapes, sampling_locations, attention_weights): + # for debug and test only, + # need to use cuda version instead + N_, S_, M_, D_ = value.shape + _, Lq_, M_, L_, P_, _ = sampling_locations.shape + value_list = value.split([H_ * W_ for H_, W_ in value_spatial_shapes], dim=1) + sampling_grids = 2 * sampling_locations - 1 + sampling_value_list = [] + for lid_, (H_, W_) in enumerate(value_spatial_shapes): + # N_, H_*W_, M_, D_ -> N_, H_*W_, M_*D_ -> N_, M_*D_, H_*W_ -> N_*M_, D_, H_, W_ + value_l_ = value_list[lid_].flatten(2).transpose(1, 2).reshape(N_*M_, D_, H_, W_) + # N_, Lq_, M_, P_, 2 -> N_, M_, Lq_, P_, 2 -> N_*M_, Lq_, P_, 2 + sampling_grid_l_ = sampling_grids[:, :, :, lid_].transpose(1, 2).flatten(0, 1) + # N_*M_, D_, Lq_, P_ + sampling_value_l_ = F.grid_sample(value_l_, sampling_grid_l_, + mode='bilinear', padding_mode='zeros', align_corners=False) + sampling_value_list.append(sampling_value_l_) + # (N_, Lq_, M_, L_, P_) -> (N_, M_, Lq_, L_, P_) -> (N_, M_, 1, Lq_, L_*P_) + attention_weights = attention_weights.transpose(1, 2).reshape(N_*M_, 1, Lq_, L_*P_) + output = (torch.stack(sampling_value_list, dim=-2).flatten(-2) * attention_weights).sum(-1).view(N_, M_*D_, Lq_) + return output.transpose(1, 2).contiguous() diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/modules/__init__.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/modules/__init__.py new file mode 100644 index 0000000..f82cb1a --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/modules/__init__.py @@ -0,0 +1,9 @@ +# ------------------------------------------------------------------------------------------------ +# Deformable DETR +# Copyright (c) 2020 SenseTime. All Rights Reserved. +# Licensed under the Apache License, Version 2.0 [see LICENSE for details] +# ------------------------------------------------------------------------------------------------ +# Modified from https://github.com/chengdazhi/Deformable-Convolution-V2-PyTorch/tree/pytorch_1.0.0 +# ------------------------------------------------------------------------------------------------ + +from .ms_deform_attn import MSDeformAttn diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/modules/ms_deform_attn.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/modules/ms_deform_attn.py new file mode 100644 index 0000000..cd48d27 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/modules/ms_deform_attn.py @@ -0,0 +1,142 @@ +# ------------------------------------------------------------------------------------------------ +# Deformable DETR +# Copyright (c) 2020 SenseTime. All Rights Reserved. +# Licensed under the Apache License, Version 2.0 [see LICENSE for details] +# ------------------------------------------------------------------------------------------------ +# Modified from https://github.com/chengdazhi/Deformable-Convolution-V2-PyTorch/tree/pytorch_1.0.0 +# ------------------------------------------------------------------------------------------------ + +from __future__ import absolute_import +from __future__ import print_function +from __future__ import division + +import warnings +import math, os +import sys +sys.path.append(os.path.dirname(os.path.abspath(__file__))) + +import torch +from torch import nn +import torch.nn.functional as F +from torch.nn.init import xavier_uniform_, constant_ + +from src.utils.dependencies.XPose.models.UniPose.ops.functions.ms_deform_attn_func import MSDeformAttnFunction + + +def _is_power_of_2(n): + if (not isinstance(n, int)) or (n < 0): + raise ValueError("invalid input for _is_power_of_2: {} (type: {})".format(n, type(n))) + return (n & (n-1) == 0) and n != 0 + + +class MSDeformAttn(nn.Module): + def __init__(self, d_model=256, n_levels=4, n_heads=8, n_points=4, use_4D_normalizer=False): + """ + Multi-Scale Deformable Attention Module + :param d_model hidden dimension + :param n_levels number of feature levels + :param n_heads number of attention heads + :param n_points number of sampling points per attention head per feature level + """ + super().__init__() + if d_model % n_heads != 0: + raise ValueError('d_model must be divisible by n_heads, but got {} and {}'.format(d_model, n_heads)) + _d_per_head = d_model // n_heads + # you'd better set _d_per_head to a power of 2 which is more efficient in our CUDA implementation + if not _is_power_of_2(_d_per_head): + warnings.warn("You'd better set d_model in MSDeformAttn to make the dimension of each attention head a power of 2 " + "which is more efficient in our CUDA implementation.") + + self.im2col_step = 64 + + self.d_model = d_model + self.n_levels = n_levels + self.n_heads = n_heads + self.n_points = n_points + + self.sampling_offsets = nn.Linear(d_model, n_heads * n_levels * n_points * 2) + self.attention_weights = nn.Linear(d_model, n_heads * n_levels * n_points) + self.value_proj = nn.Linear(d_model, d_model) + self.output_proj = nn.Linear(d_model, d_model) + + self.use_4D_normalizer = use_4D_normalizer + + self._reset_parameters() + + def _reset_parameters(self): + constant_(self.sampling_offsets.weight.data, 0.) + thetas = torch.arange(self.n_heads, dtype=torch.float32) * (2.0 * math.pi / self.n_heads) + grid_init = torch.stack([thetas.cos(), thetas.sin()], -1) + grid_init = (grid_init / grid_init.abs().max(-1, keepdim=True)[0]).view(self.n_heads, 1, 1, 2).repeat(1, self.n_levels, self.n_points, 1) + for i in range(self.n_points): + grid_init[:, :, i, :] *= i + 1 + with torch.no_grad(): + self.sampling_offsets.bias = nn.Parameter(grid_init.view(-1)) + constant_(self.attention_weights.weight.data, 0.) + constant_(self.attention_weights.bias.data, 0.) + xavier_uniform_(self.value_proj.weight.data) + constant_(self.value_proj.bias.data, 0.) + xavier_uniform_(self.output_proj.weight.data) + constant_(self.output_proj.bias.data, 0.) + + def forward(self, query, reference_points, input_flatten, input_spatial_shapes, input_level_start_index, input_padding_mask=None): + """ + :param query (N, Length_{query}, C) + :param reference_points (N, Length_{query}, n_levels, 2), range in [0, 1], top-left (0,0), bottom-right (1, 1), including padding area + or (N, Length_{query}, n_levels, 4), add additional (w, h) to form reference boxes + :param input_flatten (N, \sum_{l=0}^{L-1} H_l \cdot W_l, C) + :param input_spatial_shapes (n_levels, 2), [(H_0, W_0), (H_1, W_1), ..., (H_{L-1}, W_{L-1})] + :param input_level_start_index (n_levels, ), [0, H_0*W_0, H_0*W_0+H_1*W_1, H_0*W_0+H_1*W_1+H_2*W_2, ..., H_0*W_0+H_1*W_1+...+H_{L-1}*W_{L-1}] + :param input_padding_mask (N, \sum_{l=0}^{L-1} H_l \cdot W_l), True for padding elements, False for non-padding elements + + :return output (N, Length_{query}, C) + """ + N, Len_q, _ = query.shape + N, Len_in, _ = input_flatten.shape + assert (input_spatial_shapes[:, 0] * input_spatial_shapes[:, 1]).sum() == Len_in + + value = self.value_proj(input_flatten) + if input_padding_mask is not None: + value = value.masked_fill(input_padding_mask[..., None], float(0)) + value = value.view(N, Len_in, self.n_heads, self.d_model // self.n_heads) + sampling_offsets = self.sampling_offsets(query).view(N, Len_q, self.n_heads, self.n_levels, self.n_points, 2) + attention_weights = self.attention_weights(query).view(N, Len_q, self.n_heads, self.n_levels * self.n_points) + attention_weights = F.softmax(attention_weights, -1).view(N, Len_q, self.n_heads, self.n_levels, self.n_points) + # N, Len_q, n_heads, n_levels, n_points, 2 + + # if os.environ.get('IPDB_DEBUG_SHILONG', False) == 'INFO': + # import ipdb; ipdb.set_trace() + + if reference_points.shape[-1] == 2: + offset_normalizer = torch.stack([input_spatial_shapes[..., 1], input_spatial_shapes[..., 0]], -1) + sampling_locations = reference_points[:, :, None, :, None, :] \ + + sampling_offsets / offset_normalizer[None, None, None, :, None, :] + elif reference_points.shape[-1] == 4: + if self.use_4D_normalizer: + offset_normalizer = torch.stack([input_spatial_shapes[..., 1], input_spatial_shapes[..., 0]], -1) + sampling_locations = reference_points[:, :, None, :, None, :2] \ + + sampling_offsets / offset_normalizer[None, None, None, :, None, :] * reference_points[:, :, None, :, None, 2:] * 0.5 + else: + sampling_locations = reference_points[:, :, None, :, None, :2] \ + + sampling_offsets / self.n_points * reference_points[:, :, None, :, None, 2:] * 0.5 + else: + raise ValueError( + 'Last dim of reference_points must be 2 or 4, but get {} instead.'.format(reference_points.shape[-1])) + + + # if os.environ.get('IPDB_DEBUG_SHILONG', False) == 'INFO': + # import ipdb; ipdb.set_trace() + + # for amp + if value.dtype == torch.float16: + # for mixed precision + output = MSDeformAttnFunction.apply( + value.to(torch.float32), input_spatial_shapes, input_level_start_index, sampling_locations.to(torch.float32), attention_weights, self.im2col_step) + output = output.to(torch.float16) + output = self.output_proj(output) + return output + + output = MSDeformAttnFunction.apply( + value, input_spatial_shapes, input_level_start_index, sampling_locations, attention_weights, self.im2col_step) + output = self.output_proj(output) + return output diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/modules/ms_deform_attn_key_aware.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/modules/ms_deform_attn_key_aware.py new file mode 100644 index 0000000..b737ba6 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/modules/ms_deform_attn_key_aware.py @@ -0,0 +1,130 @@ +# ------------------------------------------------------------------------------------------------ +# Deformable DETR +# Copyright (c) 2020 SenseTime. All Rights Reserved. +# Licensed under the Apache License, Version 2.0 [see LICENSE for details] +# ------------------------------------------------------------------------------------------------ +# Modified from https://github.com/chengdazhi/Deformable-Convolution-V2-PyTorch/tree/pytorch_1.0.0 +# ------------------------------------------------------------------------------------------------ + +from __future__ import absolute_import +from __future__ import print_function +from __future__ import division + +import warnings +import math, os + +import torch +from torch import nn +import torch.nn.functional as F +from torch.nn.init import xavier_uniform_, constant_ + +try: + from src.utils.dependencies.XPose.models.UniPose.ops.functions import MSDeformAttnFunction +except: + warnings.warn('Failed to import MSDeformAttnFunction.') + + +def _is_power_of_2(n): + if (not isinstance(n, int)) or (n < 0): + raise ValueError("invalid input for _is_power_of_2: {} (type: {})".format(n, type(n))) + return (n & (n-1) == 0) and n != 0 + + +class MSDeformAttn(nn.Module): + def __init__(self, d_model=256, n_levels=4, n_heads=8, n_points=4, use_4D_normalizer=False): + """ + Multi-Scale Deformable Attention Module + :param d_model hidden dimension + :param n_levels number of feature levels + :param n_heads number of attention heads + :param n_points number of sampling points per attention head per feature level + """ + super().__init__() + if d_model % n_heads != 0: + raise ValueError('d_model must be divisible by n_heads, but got {} and {}'.format(d_model, n_heads)) + _d_per_head = d_model // n_heads + # you'd better set _d_per_head to a power of 2 which is more efficient in our CUDA implementation + if not _is_power_of_2(_d_per_head): + warnings.warn("You'd better set d_model in MSDeformAttn to make the dimension of each attention head a power of 2 " + "which is more efficient in our CUDA implementation.") + + self.im2col_step = 64 + + self.d_model = d_model + self.n_levels = n_levels + self.n_heads = n_heads + self.n_points = n_points + + self.sampling_offsets = nn.Linear(d_model, n_heads * n_levels * n_points * 2) + self.attention_weights = nn.Linear(d_model, n_heads * n_levels * n_points) + self.value_proj = nn.Linear(d_model, d_model) + self.output_proj = nn.Linear(d_model, d_model) + + self.use_4D_normalizer = use_4D_normalizer + + self._reset_parameters() + + def _reset_parameters(self): + constant_(self.sampling_offsets.weight.data, 0.) + thetas = torch.arange(self.n_heads, dtype=torch.float32) * (2.0 * math.pi / self.n_heads) + grid_init = torch.stack([thetas.cos(), thetas.sin()], -1) + grid_init = (grid_init / grid_init.abs().max(-1, keepdim=True)[0]).view(self.n_heads, 1, 1, 2).repeat(1, self.n_levels, self.n_points, 1) + for i in range(self.n_points): + grid_init[:, :, i, :] *= i + 1 + with torch.no_grad(): + self.sampling_offsets.bias = nn.Parameter(grid_init.view(-1)) + constant_(self.attention_weights.weight.data, 0.) + constant_(self.attention_weights.bias.data, 0.) + xavier_uniform_(self.value_proj.weight.data) + constant_(self.value_proj.bias.data, 0.) + xavier_uniform_(self.output_proj.weight.data) + constant_(self.output_proj.bias.data, 0.) + + def forward(self, query, key, reference_points, input_flatten, input_spatial_shapes, input_level_start_index, input_padding_mask=None): + """ + :param query (N, Length_{query}, C) + :param key (N, 1, C) + :param reference_points (N, Length_{query}, n_levels, 2), range in [0, 1], top-left (0,0), bottom-right (1, 1), including padding area + or (N, Length_{query}, n_levels, 4), add additional (w, h) to form reference boxes + :param input_flatten (N, \sum_{l=0}^{L-1} H_l \cdot W_l, C) + :param input_spatial_shapes (n_levels, 2), [(H_0, W_0), (H_1, W_1), ..., (H_{L-1}, W_{L-1})] + :param input_level_start_index (n_levels, ), [0, H_0*W_0, H_0*W_0+H_1*W_1, H_0*W_0+H_1*W_1+H_2*W_2, ..., H_0*W_0+H_1*W_1+...+H_{L-1}*W_{L-1}] + :param input_padding_mask (N, \sum_{l=0}^{L-1} H_l \cdot W_l), True for padding elements, False for non-padding elements + + :return output (N, Length_{query}, C) + """ + N, Len_q, _ = query.shape + N, Len_in, _ = input_flatten.shape + assert (input_spatial_shapes[:, 0] * input_spatial_shapes[:, 1]).sum() == Len_in + + value = self.value_proj(input_flatten) + if input_padding_mask is not None: + value = value.masked_fill(input_padding_mask[..., None], float(0)) + value = value.view(N, Len_in, self.n_heads, self.d_model // self.n_heads) + sampling_offsets = self.sampling_offsets(query).view(N, Len_q, self.n_heads, self.n_levels, self.n_points, 2) + attention_weights = self.attention_weights(query).view(N, Len_q, self.n_heads, self.n_levels * self.n_points) + attention_weights = F.softmax(attention_weights, -1).view(N, Len_q, self.n_heads, self.n_levels, self.n_points) + # N, Len_q, n_heads, n_levels, n_points, 2 + + # if os.environ.get('IPDB_DEBUG_SHILONG', False) == 'INFO': + # import ipdb; ipdb.set_trace() + + if reference_points.shape[-1] == 2: + offset_normalizer = torch.stack([input_spatial_shapes[..., 1], input_spatial_shapes[..., 0]], -1) + sampling_locations = reference_points[:, :, None, :, None, :] \ + + sampling_offsets / offset_normalizer[None, None, None, :, None, :] + elif reference_points.shape[-1] == 4: + if self.use_4D_normalizer: + offset_normalizer = torch.stack([input_spatial_shapes[..., 1], input_spatial_shapes[..., 0]], -1) + sampling_locations = reference_points[:, :, None, :, None, :2] \ + + sampling_offsets / offset_normalizer[None, None, None, :, None, :] * reference_points[:, :, None, :, None, 2:] * 0.5 + else: + sampling_locations = reference_points[:, :, None, :, None, :2] \ + + sampling_offsets / self.n_points * reference_points[:, :, None, :, None, 2:] * 0.5 + else: + raise ValueError( + 'Last dim of reference_points must be 2 or 4, but get {} instead.'.format(reference_points.shape[-1])) + output = MSDeformAttnFunction.apply( + value, input_spatial_shapes, input_level_start_index, sampling_locations, attention_weights, self.im2col_step) + output = self.output_proj(output) + return output diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/setup.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/setup.py new file mode 100644 index 0000000..049f923 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/setup.py @@ -0,0 +1,73 @@ +# ------------------------------------------------------------------------------------------------ +# Deformable DETR +# Copyright (c) 2020 SenseTime. All Rights Reserved. +# Licensed under the Apache License, Version 2.0 [see LICENSE for details] +# ------------------------------------------------------------------------------------------------ +# Modified from https://github.com/chengdazhi/Deformable-Convolution-V2-PyTorch/tree/pytorch_1.0.0 +# ------------------------------------------------------------------------------------------------ + +import os +import glob + +import torch + +from torch.utils.cpp_extension import CUDA_HOME +from torch.utils.cpp_extension import CppExtension +from torch.utils.cpp_extension import CUDAExtension + +from setuptools import find_packages +from setuptools import setup + +requirements = ["torch", "torchvision"] + +def get_extensions(): + this_dir = os.path.dirname(os.path.abspath(__file__)) + extensions_dir = os.path.join(this_dir, "src") + + main_file = glob.glob(os.path.join(extensions_dir, "*.cpp")) + source_cpu = glob.glob(os.path.join(extensions_dir, "cpu", "*.cpp")) + source_cuda = glob.glob(os.path.join(extensions_dir, "cuda", "*.cu")) + + sources = main_file + source_cpu + extension = CppExtension + extra_compile_args = {"cxx": []} + define_macros = [] + + # import ipdb; ipdb.set_trace() + + if torch.cuda.is_available() and CUDA_HOME is not None: + extension = CUDAExtension + sources += source_cuda + define_macros += [("WITH_CUDA", None)] + extra_compile_args["nvcc"] = [ + "-DCUDA_HAS_FP16=1", + "-D__CUDA_NO_HALF_OPERATORS__", + "-D__CUDA_NO_HALF_CONVERSIONS__", + "-D__CUDA_NO_HALF2_OPERATORS__", + ] + else: + raise NotImplementedError('Cuda is not availabel') + + sources = [os.path.join(extensions_dir, s) for s in sources] + include_dirs = [extensions_dir] + ext_modules = [ + extension( + "MultiScaleDeformableAttention", + sources, + include_dirs=include_dirs, + define_macros=define_macros, + extra_compile_args=extra_compile_args, + ) + ] + return ext_modules + +setup( + name="MultiScaleDeformableAttention", + version="1.0", + author="Weijie Su", + url="https://github.com/fundamentalvision/Deformable-DETR", + description="PyTorch Wrapper for CUDA Functions of Multi-Scale Deformable Attention", + packages=find_packages(exclude=("configs", "tests",)), + ext_modules=get_extensions(), + cmdclass={"build_ext": torch.utils.cpp_extension.BuildExtension}, +) diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/src/cpu/ms_deform_attn_cpu.cpp b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/src/cpu/ms_deform_attn_cpu.cpp new file mode 100644 index 0000000..e1bf854 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/src/cpu/ms_deform_attn_cpu.cpp @@ -0,0 +1,41 @@ +/*! +************************************************************************************************** +* Deformable DETR +* Copyright (c) 2020 SenseTime. All Rights Reserved. +* Licensed under the Apache License, Version 2.0 [see LICENSE for details] +************************************************************************************************** +* Modified from https://github.com/chengdazhi/Deformable-Convolution-V2-PyTorch/tree/pytorch_1.0.0 +************************************************************************************************** +*/ + +#include + +#include +#include + + +at::Tensor +ms_deform_attn_cpu_forward( + const at::Tensor &value, + const at::Tensor &spatial_shapes, + const at::Tensor &level_start_index, + const at::Tensor &sampling_loc, + const at::Tensor &attn_weight, + const int im2col_step) +{ + AT_ERROR("Not implement on cpu"); +} + +std::vector +ms_deform_attn_cpu_backward( + const at::Tensor &value, + const at::Tensor &spatial_shapes, + const at::Tensor &level_start_index, + const at::Tensor &sampling_loc, + const at::Tensor &attn_weight, + const at::Tensor &grad_output, + const int im2col_step) +{ + AT_ERROR("Not implement on cpu"); +} + diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/src/cpu/ms_deform_attn_cpu.h b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/src/cpu/ms_deform_attn_cpu.h new file mode 100644 index 0000000..81b7b58 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/src/cpu/ms_deform_attn_cpu.h @@ -0,0 +1,33 @@ +/*! +************************************************************************************************** +* Deformable DETR +* Copyright (c) 2020 SenseTime. All Rights Reserved. +* Licensed under the Apache License, Version 2.0 [see LICENSE for details] +************************************************************************************************** +* Modified from https://github.com/chengdazhi/Deformable-Convolution-V2-PyTorch/tree/pytorch_1.0.0 +************************************************************************************************** +*/ + +#pragma once +#include + +at::Tensor +ms_deform_attn_cpu_forward( + const at::Tensor &value, + const at::Tensor &spatial_shapes, + const at::Tensor &level_start_index, + const at::Tensor &sampling_loc, + const at::Tensor &attn_weight, + const int im2col_step); + +std::vector +ms_deform_attn_cpu_backward( + const at::Tensor &value, + const at::Tensor &spatial_shapes, + const at::Tensor &level_start_index, + const at::Tensor &sampling_loc, + const at::Tensor &attn_weight, + const at::Tensor &grad_output, + const int im2col_step); + + diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/src/cuda/ms_deform_attn_cuda.cu b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/src/cuda/ms_deform_attn_cuda.cu new file mode 100644 index 0000000..d6d5836 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/src/cuda/ms_deform_attn_cuda.cu @@ -0,0 +1,153 @@ +/*! +************************************************************************************************** +* Deformable DETR +* Copyright (c) 2020 SenseTime. All Rights Reserved. +* Licensed under the Apache License, Version 2.0 [see LICENSE for details] +************************************************************************************************** +* Modified from https://github.com/chengdazhi/Deformable-Convolution-V2-PyTorch/tree/pytorch_1.0.0 +************************************************************************************************** +*/ + +#include +#include "cuda/ms_deform_im2col_cuda.cuh" + +#include +#include +#include +#include + + +at::Tensor ms_deform_attn_cuda_forward( + const at::Tensor &value, + const at::Tensor &spatial_shapes, + const at::Tensor &level_start_index, + const at::Tensor &sampling_loc, + const at::Tensor &attn_weight, + const int im2col_step) +{ + AT_ASSERTM(value.is_contiguous(), "value tensor has to be contiguous"); + AT_ASSERTM(spatial_shapes.is_contiguous(), "spatial_shapes tensor has to be contiguous"); + AT_ASSERTM(level_start_index.is_contiguous(), "level_start_index tensor has to be contiguous"); + AT_ASSERTM(sampling_loc.is_contiguous(), "sampling_loc tensor has to be contiguous"); + AT_ASSERTM(attn_weight.is_contiguous(), "attn_weight tensor has to be contiguous"); + + AT_ASSERTM(value.type().is_cuda(), "value must be a CUDA tensor"); + AT_ASSERTM(spatial_shapes.type().is_cuda(), "spatial_shapes must be a CUDA tensor"); + AT_ASSERTM(level_start_index.type().is_cuda(), "level_start_index must be a CUDA tensor"); + AT_ASSERTM(sampling_loc.type().is_cuda(), "sampling_loc must be a CUDA tensor"); + AT_ASSERTM(attn_weight.type().is_cuda(), "attn_weight must be a CUDA tensor"); + + const int batch = value.size(0); + const int spatial_size = value.size(1); + const int num_heads = value.size(2); + const int channels = value.size(3); + + const int num_levels = spatial_shapes.size(0); + + const int num_query = sampling_loc.size(1); + const int num_point = sampling_loc.size(4); + + const int im2col_step_ = std::min(batch, im2col_step); + + AT_ASSERTM(batch % im2col_step_ == 0, "batch(%d) must divide im2col_step(%d)", batch, im2col_step_); + + auto output = at::zeros({batch, num_query, num_heads, channels}, value.options()); + + const int batch_n = im2col_step_; + auto output_n = output.view({batch/im2col_step_, batch_n, num_query, num_heads, channels}); + auto per_value_size = spatial_size * num_heads * channels; + auto per_sample_loc_size = num_query * num_heads * num_levels * num_point * 2; + auto per_attn_weight_size = num_query * num_heads * num_levels * num_point; + for (int n = 0; n < batch/im2col_step_; ++n) + { + auto columns = output_n.select(0, n); + AT_DISPATCH_FLOATING_TYPES(value.type(), "ms_deform_attn_forward_cuda", ([&] { + ms_deformable_im2col_cuda(at::cuda::getCurrentCUDAStream(), + value.data() + n * im2col_step_ * per_value_size, + spatial_shapes.data(), + level_start_index.data(), + sampling_loc.data() + n * im2col_step_ * per_sample_loc_size, + attn_weight.data() + n * im2col_step_ * per_attn_weight_size, + batch_n, spatial_size, num_heads, channels, num_levels, num_query, num_point, + columns.data()); + + })); + } + + output = output.view({batch, num_query, num_heads*channels}); + + return output; +} + + +std::vector ms_deform_attn_cuda_backward( + const at::Tensor &value, + const at::Tensor &spatial_shapes, + const at::Tensor &level_start_index, + const at::Tensor &sampling_loc, + const at::Tensor &attn_weight, + const at::Tensor &grad_output, + const int im2col_step) +{ + + AT_ASSERTM(value.is_contiguous(), "value tensor has to be contiguous"); + AT_ASSERTM(spatial_shapes.is_contiguous(), "spatial_shapes tensor has to be contiguous"); + AT_ASSERTM(level_start_index.is_contiguous(), "level_start_index tensor has to be contiguous"); + AT_ASSERTM(sampling_loc.is_contiguous(), "sampling_loc tensor has to be contiguous"); + AT_ASSERTM(attn_weight.is_contiguous(), "attn_weight tensor has to be contiguous"); + AT_ASSERTM(grad_output.is_contiguous(), "grad_output tensor has to be contiguous"); + + AT_ASSERTM(value.type().is_cuda(), "value must be a CUDA tensor"); + AT_ASSERTM(spatial_shapes.type().is_cuda(), "spatial_shapes must be a CUDA tensor"); + AT_ASSERTM(level_start_index.type().is_cuda(), "level_start_index must be a CUDA tensor"); + AT_ASSERTM(sampling_loc.type().is_cuda(), "sampling_loc must be a CUDA tensor"); + AT_ASSERTM(attn_weight.type().is_cuda(), "attn_weight must be a CUDA tensor"); + AT_ASSERTM(grad_output.type().is_cuda(), "grad_output must be a CUDA tensor"); + + const int batch = value.size(0); + const int spatial_size = value.size(1); + const int num_heads = value.size(2); + const int channels = value.size(3); + + const int num_levels = spatial_shapes.size(0); + + const int num_query = sampling_loc.size(1); + const int num_point = sampling_loc.size(4); + + const int im2col_step_ = std::min(batch, im2col_step); + + AT_ASSERTM(batch % im2col_step_ == 0, "batch(%d) must divide im2col_step(%d)", batch, im2col_step_); + + auto grad_value = at::zeros_like(value); + auto grad_sampling_loc = at::zeros_like(sampling_loc); + auto grad_attn_weight = at::zeros_like(attn_weight); + + const int batch_n = im2col_step_; + auto per_value_size = spatial_size * num_heads * channels; + auto per_sample_loc_size = num_query * num_heads * num_levels * num_point * 2; + auto per_attn_weight_size = num_query * num_heads * num_levels * num_point; + auto grad_output_n = grad_output.view({batch/im2col_step_, batch_n, num_query, num_heads, channels}); + + for (int n = 0; n < batch/im2col_step_; ++n) + { + auto grad_output_g = grad_output_n.select(0, n); + AT_DISPATCH_FLOATING_TYPES(value.type(), "ms_deform_attn_backward_cuda", ([&] { + ms_deformable_col2im_cuda(at::cuda::getCurrentCUDAStream(), + grad_output_g.data(), + value.data() + n * im2col_step_ * per_value_size, + spatial_shapes.data(), + level_start_index.data(), + sampling_loc.data() + n * im2col_step_ * per_sample_loc_size, + attn_weight.data() + n * im2col_step_ * per_attn_weight_size, + batch_n, spatial_size, num_heads, channels, num_levels, num_query, num_point, + grad_value.data() + n * im2col_step_ * per_value_size, + grad_sampling_loc.data() + n * im2col_step_ * per_sample_loc_size, + grad_attn_weight.data() + n * im2col_step_ * per_attn_weight_size); + + })); + } + + return { + grad_value, grad_sampling_loc, grad_attn_weight + }; +} \ No newline at end of file diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/src/cuda/ms_deform_attn_cuda.h b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/src/cuda/ms_deform_attn_cuda.h new file mode 100644 index 0000000..c7ae53f --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/src/cuda/ms_deform_attn_cuda.h @@ -0,0 +1,30 @@ +/*! +************************************************************************************************** +* Deformable DETR +* Copyright (c) 2020 SenseTime. All Rights Reserved. +* Licensed under the Apache License, Version 2.0 [see LICENSE for details] +************************************************************************************************** +* Modified from https://github.com/chengdazhi/Deformable-Convolution-V2-PyTorch/tree/pytorch_1.0.0 +************************************************************************************************** +*/ + +#pragma once +#include + +at::Tensor ms_deform_attn_cuda_forward( + const at::Tensor &value, + const at::Tensor &spatial_shapes, + const at::Tensor &level_start_index, + const at::Tensor &sampling_loc, + const at::Tensor &attn_weight, + const int im2col_step); + +std::vector ms_deform_attn_cuda_backward( + const at::Tensor &value, + const at::Tensor &spatial_shapes, + const at::Tensor &level_start_index, + const at::Tensor &sampling_loc, + const at::Tensor &attn_weight, + const at::Tensor &grad_output, + const int im2col_step); + diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/src/cuda/ms_deform_im2col_cuda.cuh b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/src/cuda/ms_deform_im2col_cuda.cuh new file mode 100644 index 0000000..6bc2acb --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/src/cuda/ms_deform_im2col_cuda.cuh @@ -0,0 +1,1327 @@ +/*! +************************************************************************** +* Deformable DETR +* Copyright (c) 2020 SenseTime. All Rights Reserved. +* Licensed under the Apache License, Version 2.0 [see LICENSE for details] +************************************************************************** +* Modified from DCN (https://github.com/msracver/Deformable-ConvNets) +* Copyright (c) 2018 Microsoft +************************************************************************** +*/ + +#include +#include +#include + +#include +#include + +#include + +#define CUDA_KERNEL_LOOP(i, n) \ + for (int i = blockIdx.x * blockDim.x + threadIdx.x; \ + i < (n); \ + i += blockDim.x * gridDim.x) + +const int CUDA_NUM_THREADS = 1024; +inline int GET_BLOCKS(const int N, const int num_threads) +{ + return (N + num_threads - 1) / num_threads; +} + + +template +__device__ scalar_t ms_deform_attn_im2col_bilinear(const scalar_t* &bottom_data, + const int &height, const int &width, const int &nheads, const int &channels, + const scalar_t &h, const scalar_t &w, const int &m, const int &c) +{ + const int h_low = floor(h); + const int w_low = floor(w); + const int h_high = h_low + 1; + const int w_high = w_low + 1; + + const scalar_t lh = h - h_low; + const scalar_t lw = w - w_low; + const scalar_t hh = 1 - lh, hw = 1 - lw; + + const int w_stride = nheads * channels; + const int h_stride = width * w_stride; + const int h_low_ptr_offset = h_low * h_stride; + const int h_high_ptr_offset = h_low_ptr_offset + h_stride; + const int w_low_ptr_offset = w_low * w_stride; + const int w_high_ptr_offset = w_low_ptr_offset + w_stride; + const int base_ptr = m * channels + c; + + scalar_t v1 = 0; + if (h_low >= 0 && w_low >= 0) + { + const int ptr1 = h_low_ptr_offset + w_low_ptr_offset + base_ptr; + v1 = bottom_data[ptr1]; + } + scalar_t v2 = 0; + if (h_low >= 0 && w_high <= width - 1) + { + const int ptr2 = h_low_ptr_offset + w_high_ptr_offset + base_ptr; + v2 = bottom_data[ptr2]; + } + scalar_t v3 = 0; + if (h_high <= height - 1 && w_low >= 0) + { + const int ptr3 = h_high_ptr_offset + w_low_ptr_offset + base_ptr; + v3 = bottom_data[ptr3]; + } + scalar_t v4 = 0; + if (h_high <= height - 1 && w_high <= width - 1) + { + const int ptr4 = h_high_ptr_offset + w_high_ptr_offset + base_ptr; + v4 = bottom_data[ptr4]; + } + + const scalar_t w1 = hh * hw, w2 = hh * lw, w3 = lh * hw, w4 = lh * lw; + + const scalar_t val = (w1 * v1 + w2 * v2 + w3 * v3 + w4 * v4); + return val; +} + + +template +__device__ void ms_deform_attn_col2im_bilinear(const scalar_t* &bottom_data, + const int &height, const int &width, const int &nheads, const int &channels, + const scalar_t &h, const scalar_t &w, const int &m, const int &c, + const scalar_t &top_grad, + const scalar_t &attn_weight, + scalar_t* &grad_value, + scalar_t* grad_sampling_loc, + scalar_t* grad_attn_weight) +{ + const int h_low = floor(h); + const int w_low = floor(w); + const int h_high = h_low + 1; + const int w_high = w_low + 1; + + const scalar_t lh = h - h_low; + const scalar_t lw = w - w_low; + const scalar_t hh = 1 - lh, hw = 1 - lw; + + const int w_stride = nheads * channels; + const int h_stride = width * w_stride; + const int h_low_ptr_offset = h_low * h_stride; + const int h_high_ptr_offset = h_low_ptr_offset + h_stride; + const int w_low_ptr_offset = w_low * w_stride; + const int w_high_ptr_offset = w_low_ptr_offset + w_stride; + const int base_ptr = m * channels + c; + + const scalar_t w1 = hh * hw, w2 = hh * lw, w3 = lh * hw, w4 = lh * lw; + const scalar_t top_grad_value = top_grad * attn_weight; + scalar_t grad_h_weight = 0, grad_w_weight = 0; + + scalar_t v1 = 0; + if (h_low >= 0 && w_low >= 0) + { + const int ptr1 = h_low_ptr_offset + w_low_ptr_offset + base_ptr; + v1 = bottom_data[ptr1]; + grad_h_weight -= hw * v1; + grad_w_weight -= hh * v1; + atomicAdd(grad_value+ptr1, w1*top_grad_value); + } + scalar_t v2 = 0; + if (h_low >= 0 && w_high <= width - 1) + { + const int ptr2 = h_low_ptr_offset + w_high_ptr_offset + base_ptr; + v2 = bottom_data[ptr2]; + grad_h_weight -= lw * v2; + grad_w_weight += hh * v2; + atomicAdd(grad_value+ptr2, w2*top_grad_value); + } + scalar_t v3 = 0; + if (h_high <= height - 1 && w_low >= 0) + { + const int ptr3 = h_high_ptr_offset + w_low_ptr_offset + base_ptr; + v3 = bottom_data[ptr3]; + grad_h_weight += hw * v3; + grad_w_weight -= lh * v3; + atomicAdd(grad_value+ptr3, w3*top_grad_value); + } + scalar_t v4 = 0; + if (h_high <= height - 1 && w_high <= width - 1) + { + const int ptr4 = h_high_ptr_offset + w_high_ptr_offset + base_ptr; + v4 = bottom_data[ptr4]; + grad_h_weight += lw * v4; + grad_w_weight += lh * v4; + atomicAdd(grad_value+ptr4, w4*top_grad_value); + } + + const scalar_t val = (w1 * v1 + w2 * v2 + w3 * v3 + w4 * v4); + *grad_attn_weight = top_grad * val; + *grad_sampling_loc = width * grad_w_weight * top_grad_value; + *(grad_sampling_loc + 1) = height * grad_h_weight * top_grad_value; +} + + +template +__device__ void ms_deform_attn_col2im_bilinear_gm(const scalar_t* &bottom_data, + const int &height, const int &width, const int &nheads, const int &channels, + const scalar_t &h, const scalar_t &w, const int &m, const int &c, + const scalar_t &top_grad, + const scalar_t &attn_weight, + scalar_t* &grad_value, + scalar_t* grad_sampling_loc, + scalar_t* grad_attn_weight) +{ + const int h_low = floor(h); + const int w_low = floor(w); + const int h_high = h_low + 1; + const int w_high = w_low + 1; + + const scalar_t lh = h - h_low; + const scalar_t lw = w - w_low; + const scalar_t hh = 1 - lh, hw = 1 - lw; + + const int w_stride = nheads * channels; + const int h_stride = width * w_stride; + const int h_low_ptr_offset = h_low * h_stride; + const int h_high_ptr_offset = h_low_ptr_offset + h_stride; + const int w_low_ptr_offset = w_low * w_stride; + const int w_high_ptr_offset = w_low_ptr_offset + w_stride; + const int base_ptr = m * channels + c; + + const scalar_t w1 = hh * hw, w2 = hh * lw, w3 = lh * hw, w4 = lh * lw; + const scalar_t top_grad_value = top_grad * attn_weight; + scalar_t grad_h_weight = 0, grad_w_weight = 0; + + scalar_t v1 = 0; + if (h_low >= 0 && w_low >= 0) + { + const int ptr1 = h_low_ptr_offset + w_low_ptr_offset + base_ptr; + v1 = bottom_data[ptr1]; + grad_h_weight -= hw * v1; + grad_w_weight -= hh * v1; + atomicAdd(grad_value+ptr1, w1*top_grad_value); + } + scalar_t v2 = 0; + if (h_low >= 0 && w_high <= width - 1) + { + const int ptr2 = h_low_ptr_offset + w_high_ptr_offset + base_ptr; + v2 = bottom_data[ptr2]; + grad_h_weight -= lw * v2; + grad_w_weight += hh * v2; + atomicAdd(grad_value+ptr2, w2*top_grad_value); + } + scalar_t v3 = 0; + if (h_high <= height - 1 && w_low >= 0) + { + const int ptr3 = h_high_ptr_offset + w_low_ptr_offset + base_ptr; + v3 = bottom_data[ptr3]; + grad_h_weight += hw * v3; + grad_w_weight -= lh * v3; + atomicAdd(grad_value+ptr3, w3*top_grad_value); + } + scalar_t v4 = 0; + if (h_high <= height - 1 && w_high <= width - 1) + { + const int ptr4 = h_high_ptr_offset + w_high_ptr_offset + base_ptr; + v4 = bottom_data[ptr4]; + grad_h_weight += lw * v4; + grad_w_weight += lh * v4; + atomicAdd(grad_value+ptr4, w4*top_grad_value); + } + + const scalar_t val = (w1 * v1 + w2 * v2 + w3 * v3 + w4 * v4); + atomicAdd(grad_attn_weight, top_grad * val); + atomicAdd(grad_sampling_loc, width * grad_w_weight * top_grad_value); + atomicAdd(grad_sampling_loc + 1, height * grad_h_weight * top_grad_value); +} + + +template +__global__ void ms_deformable_im2col_gpu_kernel(const int n, + const scalar_t *data_value, + const int64_t *data_spatial_shapes, + const int64_t *data_level_start_index, + const scalar_t *data_sampling_loc, + const scalar_t *data_attn_weight, + const int batch_size, + const int spatial_size, + const int num_heads, + const int channels, + const int num_levels, + const int num_query, + const int num_point, + scalar_t *data_col) +{ + CUDA_KERNEL_LOOP(index, n) + { + int _temp = index; + const int c_col = _temp % channels; + _temp /= channels; + const int sampling_index = _temp; + const int m_col = _temp % num_heads; + _temp /= num_heads; + const int q_col = _temp % num_query; + _temp /= num_query; + const int b_col = _temp; + + scalar_t *data_col_ptr = data_col + index; + int data_weight_ptr = sampling_index * num_levels * num_point; + int data_loc_w_ptr = data_weight_ptr << 1; + const int qid_stride = num_heads * channels; + const int data_value_ptr_init_offset = b_col * spatial_size * qid_stride; + scalar_t col = 0; + + for (int l_col=0; l_col < num_levels; ++l_col) + { + const int level_start_id = data_level_start_index[l_col]; + const int spatial_h_ptr = l_col << 1; + const int spatial_h = data_spatial_shapes[spatial_h_ptr]; + const int spatial_w = data_spatial_shapes[spatial_h_ptr + 1]; + const scalar_t *data_value_ptr = data_value + (data_value_ptr_init_offset + level_start_id * qid_stride); + for (int p_col=0; p_col < num_point; ++p_col) + { + const scalar_t loc_w = data_sampling_loc[data_loc_w_ptr]; + const scalar_t loc_h = data_sampling_loc[data_loc_w_ptr + 1]; + const scalar_t weight = data_attn_weight[data_weight_ptr]; + + const scalar_t h_im = loc_h * spatial_h - 0.5; + const scalar_t w_im = loc_w * spatial_w - 0.5; + + if (h_im > -1 && w_im > -1 && h_im < spatial_h && w_im < spatial_w) + { + col += ms_deform_attn_im2col_bilinear(data_value_ptr, spatial_h, spatial_w, num_heads, channels, h_im, w_im, m_col, c_col) * weight; + } + + data_weight_ptr += 1; + data_loc_w_ptr += 2; + } + } + *data_col_ptr = col; + } +} + +template +__global__ void ms_deformable_col2im_gpu_kernel_shm_blocksize_aware_reduce_v1(const int n, + const scalar_t *grad_col, + const scalar_t *data_value, + const int64_t *data_spatial_shapes, + const int64_t *data_level_start_index, + const scalar_t *data_sampling_loc, + const scalar_t *data_attn_weight, + const int batch_size, + const int spatial_size, + const int num_heads, + const int channels, + const int num_levels, + const int num_query, + const int num_point, + scalar_t *grad_value, + scalar_t *grad_sampling_loc, + scalar_t *grad_attn_weight) +{ + CUDA_KERNEL_LOOP(index, n) + { + __shared__ scalar_t cache_grad_sampling_loc[blockSize * 2]; + __shared__ scalar_t cache_grad_attn_weight[blockSize]; + unsigned int tid = threadIdx.x; + int _temp = index; + const int c_col = _temp % channels; + _temp /= channels; + const int sampling_index = _temp; + const int m_col = _temp % num_heads; + _temp /= num_heads; + const int q_col = _temp % num_query; + _temp /= num_query; + const int b_col = _temp; + + const scalar_t top_grad = grad_col[index]; + + int data_weight_ptr = sampling_index * num_levels * num_point; + int data_loc_w_ptr = data_weight_ptr << 1; + const int grad_sampling_ptr = data_weight_ptr; + grad_sampling_loc += grad_sampling_ptr << 1; + grad_attn_weight += grad_sampling_ptr; + const int grad_weight_stride = 1; + const int grad_loc_stride = 2; + const int qid_stride = num_heads * channels; + const int data_value_ptr_init_offset = b_col * spatial_size * qid_stride; + + for (int l_col=0; l_col < num_levels; ++l_col) + { + const int level_start_id = data_level_start_index[l_col]; + const int spatial_h_ptr = l_col << 1; + const int spatial_h = data_spatial_shapes[spatial_h_ptr]; + const int spatial_w = data_spatial_shapes[spatial_h_ptr + 1]; + const int value_ptr_offset = data_value_ptr_init_offset + level_start_id * qid_stride; + const scalar_t *data_value_ptr = data_value + value_ptr_offset; + scalar_t *grad_value_ptr = grad_value + value_ptr_offset; + + for (int p_col=0; p_col < num_point; ++p_col) + { + const scalar_t loc_w = data_sampling_loc[data_loc_w_ptr]; + const scalar_t loc_h = data_sampling_loc[data_loc_w_ptr + 1]; + const scalar_t weight = data_attn_weight[data_weight_ptr]; + + const scalar_t h_im = loc_h * spatial_h - 0.5; + const scalar_t w_im = loc_w * spatial_w - 0.5; + *(cache_grad_sampling_loc+(threadIdx.x << 1)) = 0; + *(cache_grad_sampling_loc+((threadIdx.x << 1) + 1)) = 0; + *(cache_grad_attn_weight+threadIdx.x)=0; + if (h_im > -1 && w_im > -1 && h_im < spatial_h && w_im < spatial_w) + { + ms_deform_attn_col2im_bilinear( + data_value_ptr, spatial_h, spatial_w, num_heads, channels, h_im, w_im, m_col, c_col, + top_grad, weight, grad_value_ptr, + cache_grad_sampling_loc+(threadIdx.x << 1), cache_grad_attn_weight+threadIdx.x); + } + + __syncthreads(); + if (tid == 0) + { + scalar_t _grad_w=cache_grad_sampling_loc[0], _grad_h=cache_grad_sampling_loc[1], _grad_a=cache_grad_attn_weight[0]; + int sid=2; + for (unsigned int tid = 1; tid < blockSize; ++tid) + { + _grad_w += cache_grad_sampling_loc[sid]; + _grad_h += cache_grad_sampling_loc[sid + 1]; + _grad_a += cache_grad_attn_weight[tid]; + sid += 2; + } + + + *grad_sampling_loc = _grad_w; + *(grad_sampling_loc + 1) = _grad_h; + *grad_attn_weight = _grad_a; + } + __syncthreads(); + + data_weight_ptr += 1; + data_loc_w_ptr += 2; + grad_attn_weight += grad_weight_stride; + grad_sampling_loc += grad_loc_stride; + } + } + } +} + + +template +__global__ void ms_deformable_col2im_gpu_kernel_shm_blocksize_aware_reduce_v2(const int n, + const scalar_t *grad_col, + const scalar_t *data_value, + const int64_t *data_spatial_shapes, + const int64_t *data_level_start_index, + const scalar_t *data_sampling_loc, + const scalar_t *data_attn_weight, + const int batch_size, + const int spatial_size, + const int num_heads, + const int channels, + const int num_levels, + const int num_query, + const int num_point, + scalar_t *grad_value, + scalar_t *grad_sampling_loc, + scalar_t *grad_attn_weight) +{ + CUDA_KERNEL_LOOP(index, n) + { + __shared__ scalar_t cache_grad_sampling_loc[blockSize * 2]; + __shared__ scalar_t cache_grad_attn_weight[blockSize]; + unsigned int tid = threadIdx.x; + int _temp = index; + const int c_col = _temp % channels; + _temp /= channels; + const int sampling_index = _temp; + const int m_col = _temp % num_heads; + _temp /= num_heads; + const int q_col = _temp % num_query; + _temp /= num_query; + const int b_col = _temp; + + const scalar_t top_grad = grad_col[index]; + + int data_weight_ptr = sampling_index * num_levels * num_point; + int data_loc_w_ptr = data_weight_ptr << 1; + const int grad_sampling_ptr = data_weight_ptr; + grad_sampling_loc += grad_sampling_ptr << 1; + grad_attn_weight += grad_sampling_ptr; + const int grad_weight_stride = 1; + const int grad_loc_stride = 2; + const int qid_stride = num_heads * channels; + const int data_value_ptr_init_offset = b_col * spatial_size * qid_stride; + + for (int l_col=0; l_col < num_levels; ++l_col) + { + const int level_start_id = data_level_start_index[l_col]; + const int spatial_h_ptr = l_col << 1; + const int spatial_h = data_spatial_shapes[spatial_h_ptr]; + const int spatial_w = data_spatial_shapes[spatial_h_ptr + 1]; + const int value_ptr_offset = data_value_ptr_init_offset + level_start_id * qid_stride; + const scalar_t *data_value_ptr = data_value + value_ptr_offset; + scalar_t *grad_value_ptr = grad_value + value_ptr_offset; + + for (int p_col=0; p_col < num_point; ++p_col) + { + const scalar_t loc_w = data_sampling_loc[data_loc_w_ptr]; + const scalar_t loc_h = data_sampling_loc[data_loc_w_ptr + 1]; + const scalar_t weight = data_attn_weight[data_weight_ptr]; + + const scalar_t h_im = loc_h * spatial_h - 0.5; + const scalar_t w_im = loc_w * spatial_w - 0.5; + *(cache_grad_sampling_loc+(threadIdx.x << 1)) = 0; + *(cache_grad_sampling_loc+((threadIdx.x << 1) + 1)) = 0; + *(cache_grad_attn_weight+threadIdx.x)=0; + if (h_im > -1 && w_im > -1 && h_im < spatial_h && w_im < spatial_w) + { + ms_deform_attn_col2im_bilinear( + data_value_ptr, spatial_h, spatial_w, num_heads, channels, h_im, w_im, m_col, c_col, + top_grad, weight, grad_value_ptr, + cache_grad_sampling_loc+(threadIdx.x << 1), cache_grad_attn_weight+threadIdx.x); + } + + __syncthreads(); + + for (unsigned int s=blockSize/2; s>0; s>>=1) + { + if (tid < s) { + const unsigned int xid1 = tid << 1; + const unsigned int xid2 = (tid + s) << 1; + cache_grad_attn_weight[tid] += cache_grad_attn_weight[tid + s]; + cache_grad_sampling_loc[xid1] += cache_grad_sampling_loc[xid2]; + cache_grad_sampling_loc[xid1 + 1] += cache_grad_sampling_loc[xid2 + 1]; + } + __syncthreads(); + } + + if (tid == 0) + { + *grad_sampling_loc = cache_grad_sampling_loc[0]; + *(grad_sampling_loc + 1) = cache_grad_sampling_loc[1]; + *grad_attn_weight = cache_grad_attn_weight[0]; + } + __syncthreads(); + + data_weight_ptr += 1; + data_loc_w_ptr += 2; + grad_attn_weight += grad_weight_stride; + grad_sampling_loc += grad_loc_stride; + } + } + } +} + + +template +__global__ void ms_deformable_col2im_gpu_kernel_shm_reduce_v1(const int n, + const scalar_t *grad_col, + const scalar_t *data_value, + const int64_t *data_spatial_shapes, + const int64_t *data_level_start_index, + const scalar_t *data_sampling_loc, + const scalar_t *data_attn_weight, + const int batch_size, + const int spatial_size, + const int num_heads, + const int channels, + const int num_levels, + const int num_query, + const int num_point, + scalar_t *grad_value, + scalar_t *grad_sampling_loc, + scalar_t *grad_attn_weight) +{ + CUDA_KERNEL_LOOP(index, n) + { + extern __shared__ int _s[]; + scalar_t* cache_grad_sampling_loc = (scalar_t*)_s; + scalar_t* cache_grad_attn_weight = cache_grad_sampling_loc + 2 * blockDim.x; + unsigned int tid = threadIdx.x; + int _temp = index; + const int c_col = _temp % channels; + _temp /= channels; + const int sampling_index = _temp; + const int m_col = _temp % num_heads; + _temp /= num_heads; + const int q_col = _temp % num_query; + _temp /= num_query; + const int b_col = _temp; + + const scalar_t top_grad = grad_col[index]; + + int data_weight_ptr = sampling_index * num_levels * num_point; + int data_loc_w_ptr = data_weight_ptr << 1; + const int grad_sampling_ptr = data_weight_ptr; + grad_sampling_loc += grad_sampling_ptr << 1; + grad_attn_weight += grad_sampling_ptr; + const int grad_weight_stride = 1; + const int grad_loc_stride = 2; + const int qid_stride = num_heads * channels; + const int data_value_ptr_init_offset = b_col * spatial_size * qid_stride; + + for (int l_col=0; l_col < num_levels; ++l_col) + { + const int level_start_id = data_level_start_index[l_col]; + const int spatial_h_ptr = l_col << 1; + const int spatial_h = data_spatial_shapes[spatial_h_ptr]; + const int spatial_w = data_spatial_shapes[spatial_h_ptr + 1]; + const int value_ptr_offset = data_value_ptr_init_offset + level_start_id * qid_stride; + const scalar_t *data_value_ptr = data_value + value_ptr_offset; + scalar_t *grad_value_ptr = grad_value + value_ptr_offset; + + for (int p_col=0; p_col < num_point; ++p_col) + { + const scalar_t loc_w = data_sampling_loc[data_loc_w_ptr]; + const scalar_t loc_h = data_sampling_loc[data_loc_w_ptr + 1]; + const scalar_t weight = data_attn_weight[data_weight_ptr]; + + const scalar_t h_im = loc_h * spatial_h - 0.5; + const scalar_t w_im = loc_w * spatial_w - 0.5; + *(cache_grad_sampling_loc+(threadIdx.x << 1)) = 0; + *(cache_grad_sampling_loc+((threadIdx.x << 1) + 1)) = 0; + *(cache_grad_attn_weight+threadIdx.x)=0; + if (h_im > -1 && w_im > -1 && h_im < spatial_h && w_im < spatial_w) + { + ms_deform_attn_col2im_bilinear( + data_value_ptr, spatial_h, spatial_w, num_heads, channels, h_im, w_im, m_col, c_col, + top_grad, weight, grad_value_ptr, + cache_grad_sampling_loc+(threadIdx.x << 1), cache_grad_attn_weight+threadIdx.x); + } + + __syncthreads(); + if (tid == 0) + { + scalar_t _grad_w=cache_grad_sampling_loc[0], _grad_h=cache_grad_sampling_loc[1], _grad_a=cache_grad_attn_weight[0]; + int sid=2; + for (unsigned int tid = 1; tid < blockDim.x; ++tid) + { + _grad_w += cache_grad_sampling_loc[sid]; + _grad_h += cache_grad_sampling_loc[sid + 1]; + _grad_a += cache_grad_attn_weight[tid]; + sid += 2; + } + + + *grad_sampling_loc = _grad_w; + *(grad_sampling_loc + 1) = _grad_h; + *grad_attn_weight = _grad_a; + } + __syncthreads(); + + data_weight_ptr += 1; + data_loc_w_ptr += 2; + grad_attn_weight += grad_weight_stride; + grad_sampling_loc += grad_loc_stride; + } + } + } +} + +template +__global__ void ms_deformable_col2im_gpu_kernel_shm_reduce_v2(const int n, + const scalar_t *grad_col, + const scalar_t *data_value, + const int64_t *data_spatial_shapes, + const int64_t *data_level_start_index, + const scalar_t *data_sampling_loc, + const scalar_t *data_attn_weight, + const int batch_size, + const int spatial_size, + const int num_heads, + const int channels, + const int num_levels, + const int num_query, + const int num_point, + scalar_t *grad_value, + scalar_t *grad_sampling_loc, + scalar_t *grad_attn_weight) +{ + CUDA_KERNEL_LOOP(index, n) + { + extern __shared__ int _s[]; + scalar_t* cache_grad_sampling_loc = (scalar_t*)_s; + scalar_t* cache_grad_attn_weight = cache_grad_sampling_loc + 2 * blockDim.x; + unsigned int tid = threadIdx.x; + int _temp = index; + const int c_col = _temp % channels; + _temp /= channels; + const int sampling_index = _temp; + const int m_col = _temp % num_heads; + _temp /= num_heads; + const int q_col = _temp % num_query; + _temp /= num_query; + const int b_col = _temp; + + const scalar_t top_grad = grad_col[index]; + + int data_weight_ptr = sampling_index * num_levels * num_point; + int data_loc_w_ptr = data_weight_ptr << 1; + const int grad_sampling_ptr = data_weight_ptr; + grad_sampling_loc += grad_sampling_ptr << 1; + grad_attn_weight += grad_sampling_ptr; + const int grad_weight_stride = 1; + const int grad_loc_stride = 2; + const int qid_stride = num_heads * channels; + const int data_value_ptr_init_offset = b_col * spatial_size * qid_stride; + + for (int l_col=0; l_col < num_levels; ++l_col) + { + const int level_start_id = data_level_start_index[l_col]; + const int spatial_h_ptr = l_col << 1; + const int spatial_h = data_spatial_shapes[spatial_h_ptr]; + const int spatial_w = data_spatial_shapes[spatial_h_ptr + 1]; + const int value_ptr_offset = data_value_ptr_init_offset + level_start_id * qid_stride; + const scalar_t *data_value_ptr = data_value + value_ptr_offset; + scalar_t *grad_value_ptr = grad_value + value_ptr_offset; + + for (int p_col=0; p_col < num_point; ++p_col) + { + const scalar_t loc_w = data_sampling_loc[data_loc_w_ptr]; + const scalar_t loc_h = data_sampling_loc[data_loc_w_ptr + 1]; + const scalar_t weight = data_attn_weight[data_weight_ptr]; + + const scalar_t h_im = loc_h * spatial_h - 0.5; + const scalar_t w_im = loc_w * spatial_w - 0.5; + *(cache_grad_sampling_loc+(threadIdx.x << 1)) = 0; + *(cache_grad_sampling_loc+((threadIdx.x << 1) + 1)) = 0; + *(cache_grad_attn_weight+threadIdx.x)=0; + if (h_im > -1 && w_im > -1 && h_im < spatial_h && w_im < spatial_w) + { + ms_deform_attn_col2im_bilinear( + data_value_ptr, spatial_h, spatial_w, num_heads, channels, h_im, w_im, m_col, c_col, + top_grad, weight, grad_value_ptr, + cache_grad_sampling_loc+(threadIdx.x << 1), cache_grad_attn_weight+threadIdx.x); + } + + __syncthreads(); + + for (unsigned int s=blockDim.x/2, spre=blockDim.x; s>0; s>>=1, spre>>=1) + { + if (tid < s) { + const unsigned int xid1 = tid << 1; + const unsigned int xid2 = (tid + s) << 1; + cache_grad_attn_weight[tid] += cache_grad_attn_weight[tid + s]; + cache_grad_sampling_loc[xid1] += cache_grad_sampling_loc[xid2]; + cache_grad_sampling_loc[xid1 + 1] += cache_grad_sampling_loc[xid2 + 1]; + if (tid + (s << 1) < spre) + { + cache_grad_attn_weight[tid] += cache_grad_attn_weight[tid + (s << 1)]; + cache_grad_sampling_loc[xid1] += cache_grad_sampling_loc[xid2 + (s << 1)]; + cache_grad_sampling_loc[xid1 + 1] += cache_grad_sampling_loc[xid2 + 1 + (s << 1)]; + } + } + __syncthreads(); + } + + if (tid == 0) + { + *grad_sampling_loc = cache_grad_sampling_loc[0]; + *(grad_sampling_loc + 1) = cache_grad_sampling_loc[1]; + *grad_attn_weight = cache_grad_attn_weight[0]; + } + __syncthreads(); + + data_weight_ptr += 1; + data_loc_w_ptr += 2; + grad_attn_weight += grad_weight_stride; + grad_sampling_loc += grad_loc_stride; + } + } + } +} + +template +__global__ void ms_deformable_col2im_gpu_kernel_shm_reduce_v2_multi_blocks(const int n, + const scalar_t *grad_col, + const scalar_t *data_value, + const int64_t *data_spatial_shapes, + const int64_t *data_level_start_index, + const scalar_t *data_sampling_loc, + const scalar_t *data_attn_weight, + const int batch_size, + const int spatial_size, + const int num_heads, + const int channels, + const int num_levels, + const int num_query, + const int num_point, + scalar_t *grad_value, + scalar_t *grad_sampling_loc, + scalar_t *grad_attn_weight) +{ + CUDA_KERNEL_LOOP(index, n) + { + extern __shared__ int _s[]; + scalar_t* cache_grad_sampling_loc = (scalar_t*)_s; + scalar_t* cache_grad_attn_weight = cache_grad_sampling_loc + 2 * blockDim.x; + unsigned int tid = threadIdx.x; + int _temp = index; + const int c_col = _temp % channels; + _temp /= channels; + const int sampling_index = _temp; + const int m_col = _temp % num_heads; + _temp /= num_heads; + const int q_col = _temp % num_query; + _temp /= num_query; + const int b_col = _temp; + + const scalar_t top_grad = grad_col[index]; + + int data_weight_ptr = sampling_index * num_levels * num_point; + int data_loc_w_ptr = data_weight_ptr << 1; + const int grad_sampling_ptr = data_weight_ptr; + grad_sampling_loc += grad_sampling_ptr << 1; + grad_attn_weight += grad_sampling_ptr; + const int grad_weight_stride = 1; + const int grad_loc_stride = 2; + const int qid_stride = num_heads * channels; + const int data_value_ptr_init_offset = b_col * spatial_size * qid_stride; + + for (int l_col=0; l_col < num_levels; ++l_col) + { + const int level_start_id = data_level_start_index[l_col]; + const int spatial_h_ptr = l_col << 1; + const int spatial_h = data_spatial_shapes[spatial_h_ptr]; + const int spatial_w = data_spatial_shapes[spatial_h_ptr + 1]; + const int value_ptr_offset = data_value_ptr_init_offset + level_start_id * qid_stride; + const scalar_t *data_value_ptr = data_value + value_ptr_offset; + scalar_t *grad_value_ptr = grad_value + value_ptr_offset; + + for (int p_col=0; p_col < num_point; ++p_col) + { + const scalar_t loc_w = data_sampling_loc[data_loc_w_ptr]; + const scalar_t loc_h = data_sampling_loc[data_loc_w_ptr + 1]; + const scalar_t weight = data_attn_weight[data_weight_ptr]; + + const scalar_t h_im = loc_h * spatial_h - 0.5; + const scalar_t w_im = loc_w * spatial_w - 0.5; + *(cache_grad_sampling_loc+(threadIdx.x << 1)) = 0; + *(cache_grad_sampling_loc+((threadIdx.x << 1) + 1)) = 0; + *(cache_grad_attn_weight+threadIdx.x)=0; + if (h_im > -1 && w_im > -1 && h_im < spatial_h && w_im < spatial_w) + { + ms_deform_attn_col2im_bilinear( + data_value_ptr, spatial_h, spatial_w, num_heads, channels, h_im, w_im, m_col, c_col, + top_grad, weight, grad_value_ptr, + cache_grad_sampling_loc+(threadIdx.x << 1), cache_grad_attn_weight+threadIdx.x); + } + + __syncthreads(); + + for (unsigned int s=blockDim.x/2, spre=blockDim.x; s>0; s>>=1, spre>>=1) + { + if (tid < s) { + const unsigned int xid1 = tid << 1; + const unsigned int xid2 = (tid + s) << 1; + cache_grad_attn_weight[tid] += cache_grad_attn_weight[tid + s]; + cache_grad_sampling_loc[xid1] += cache_grad_sampling_loc[xid2]; + cache_grad_sampling_loc[xid1 + 1] += cache_grad_sampling_loc[xid2 + 1]; + if (tid + (s << 1) < spre) + { + cache_grad_attn_weight[tid] += cache_grad_attn_weight[tid + (s << 1)]; + cache_grad_sampling_loc[xid1] += cache_grad_sampling_loc[xid2 + (s << 1)]; + cache_grad_sampling_loc[xid1 + 1] += cache_grad_sampling_loc[xid2 + 1 + (s << 1)]; + } + } + __syncthreads(); + } + + if (tid == 0) + { + atomicAdd(grad_sampling_loc, cache_grad_sampling_loc[0]); + atomicAdd(grad_sampling_loc + 1, cache_grad_sampling_loc[1]); + atomicAdd(grad_attn_weight, cache_grad_attn_weight[0]); + } + __syncthreads(); + + data_weight_ptr += 1; + data_loc_w_ptr += 2; + grad_attn_weight += grad_weight_stride; + grad_sampling_loc += grad_loc_stride; + } + } + } +} + + +template +__global__ void ms_deformable_col2im_gpu_kernel_gm(const int n, + const scalar_t *grad_col, + const scalar_t *data_value, + const int64_t *data_spatial_shapes, + const int64_t *data_level_start_index, + const scalar_t *data_sampling_loc, + const scalar_t *data_attn_weight, + const int batch_size, + const int spatial_size, + const int num_heads, + const int channels, + const int num_levels, + const int num_query, + const int num_point, + scalar_t *grad_value, + scalar_t *grad_sampling_loc, + scalar_t *grad_attn_weight) +{ + CUDA_KERNEL_LOOP(index, n) + { + int _temp = index; + const int c_col = _temp % channels; + _temp /= channels; + const int sampling_index = _temp; + const int m_col = _temp % num_heads; + _temp /= num_heads; + const int q_col = _temp % num_query; + _temp /= num_query; + const int b_col = _temp; + + const scalar_t top_grad = grad_col[index]; + + int data_weight_ptr = sampling_index * num_levels * num_point; + int data_loc_w_ptr = data_weight_ptr << 1; + const int grad_sampling_ptr = data_weight_ptr; + grad_sampling_loc += grad_sampling_ptr << 1; + grad_attn_weight += grad_sampling_ptr; + const int grad_weight_stride = 1; + const int grad_loc_stride = 2; + const int qid_stride = num_heads * channels; + const int data_value_ptr_init_offset = b_col * spatial_size * qid_stride; + + for (int l_col=0; l_col < num_levels; ++l_col) + { + const int level_start_id = data_level_start_index[l_col]; + const int spatial_h_ptr = l_col << 1; + const int spatial_h = data_spatial_shapes[spatial_h_ptr]; + const int spatial_w = data_spatial_shapes[spatial_h_ptr + 1]; + const int value_ptr_offset = data_value_ptr_init_offset + level_start_id * qid_stride; + const scalar_t *data_value_ptr = data_value + value_ptr_offset; + scalar_t *grad_value_ptr = grad_value + value_ptr_offset; + + for (int p_col=0; p_col < num_point; ++p_col) + { + const scalar_t loc_w = data_sampling_loc[data_loc_w_ptr]; + const scalar_t loc_h = data_sampling_loc[data_loc_w_ptr + 1]; + const scalar_t weight = data_attn_weight[data_weight_ptr]; + + const scalar_t h_im = loc_h * spatial_h - 0.5; + const scalar_t w_im = loc_w * spatial_w - 0.5; + if (h_im > -1 && w_im > -1 && h_im < spatial_h && w_im < spatial_w) + { + ms_deform_attn_col2im_bilinear_gm( + data_value_ptr, spatial_h, spatial_w, num_heads, channels, h_im, w_im, m_col, c_col, + top_grad, weight, grad_value_ptr, + grad_sampling_loc, grad_attn_weight); + } + data_weight_ptr += 1; + data_loc_w_ptr += 2; + grad_attn_weight += grad_weight_stride; + grad_sampling_loc += grad_loc_stride; + } + } + } +} + + +template +void ms_deformable_im2col_cuda(cudaStream_t stream, + const scalar_t* data_value, + const int64_t* data_spatial_shapes, + const int64_t* data_level_start_index, + const scalar_t* data_sampling_loc, + const scalar_t* data_attn_weight, + const int batch_size, + const int spatial_size, + const int num_heads, + const int channels, + const int num_levels, + const int num_query, + const int num_point, + scalar_t* data_col) +{ + const int num_kernels = batch_size * num_query * num_heads * channels; + const int num_actual_kernels = batch_size * num_query * num_heads * channels; + const int num_threads = CUDA_NUM_THREADS; + ms_deformable_im2col_gpu_kernel + <<>>( + num_kernels, data_value, data_spatial_shapes, data_level_start_index, data_sampling_loc, data_attn_weight, + batch_size, spatial_size, num_heads, channels, num_levels, num_query, num_point, data_col); + + cudaError_t err = cudaGetLastError(); + if (err != cudaSuccess) + { + printf("error in ms_deformable_im2col_cuda: %s\n", cudaGetErrorString(err)); + } + +} + +template +void ms_deformable_col2im_cuda(cudaStream_t stream, + const scalar_t* grad_col, + const scalar_t* data_value, + const int64_t * data_spatial_shapes, + const int64_t * data_level_start_index, + const scalar_t * data_sampling_loc, + const scalar_t * data_attn_weight, + const int batch_size, + const int spatial_size, + const int num_heads, + const int channels, + const int num_levels, + const int num_query, + const int num_point, + scalar_t* grad_value, + scalar_t* grad_sampling_loc, + scalar_t* grad_attn_weight) +{ + const int num_threads = (channels > CUDA_NUM_THREADS)?CUDA_NUM_THREADS:channels; + const int num_kernels = batch_size * num_query * num_heads * channels; + const int num_actual_kernels = batch_size * num_query * num_heads * channels; + if (channels > 1024) + { + if ((channels & 1023) == 0) + { + ms_deformable_col2im_gpu_kernel_shm_reduce_v2_multi_blocks + <<>>( + num_kernels, + grad_col, + data_value, + data_spatial_shapes, + data_level_start_index, + data_sampling_loc, + data_attn_weight, + batch_size, + spatial_size, + num_heads, + channels, + num_levels, + num_query, + num_point, + grad_value, + grad_sampling_loc, + grad_attn_weight); + } + else + { + ms_deformable_col2im_gpu_kernel_gm + <<>>( + num_kernels, + grad_col, + data_value, + data_spatial_shapes, + data_level_start_index, + data_sampling_loc, + data_attn_weight, + batch_size, + spatial_size, + num_heads, + channels, + num_levels, + num_query, + num_point, + grad_value, + grad_sampling_loc, + grad_attn_weight); + } + } + else{ + switch(channels) + { + case 1: + ms_deformable_col2im_gpu_kernel_shm_blocksize_aware_reduce_v1 + <<>>( + num_kernels, + grad_col, + data_value, + data_spatial_shapes, + data_level_start_index, + data_sampling_loc, + data_attn_weight, + batch_size, + spatial_size, + num_heads, + channels, + num_levels, + num_query, + num_point, + grad_value, + grad_sampling_loc, + grad_attn_weight); + break; + case 2: + ms_deformable_col2im_gpu_kernel_shm_blocksize_aware_reduce_v1 + <<>>( + num_kernels, + grad_col, + data_value, + data_spatial_shapes, + data_level_start_index, + data_sampling_loc, + data_attn_weight, + batch_size, + spatial_size, + num_heads, + channels, + num_levels, + num_query, + num_point, + grad_value, + grad_sampling_loc, + grad_attn_weight); + break; + case 4: + ms_deformable_col2im_gpu_kernel_shm_blocksize_aware_reduce_v1 + <<>>( + num_kernels, + grad_col, + data_value, + data_spatial_shapes, + data_level_start_index, + data_sampling_loc, + data_attn_weight, + batch_size, + spatial_size, + num_heads, + channels, + num_levels, + num_query, + num_point, + grad_value, + grad_sampling_loc, + grad_attn_weight); + break; + case 8: + ms_deformable_col2im_gpu_kernel_shm_blocksize_aware_reduce_v1 + <<>>( + num_kernels, + grad_col, + data_value, + data_spatial_shapes, + data_level_start_index, + data_sampling_loc, + data_attn_weight, + batch_size, + spatial_size, + num_heads, + channels, + num_levels, + num_query, + num_point, + grad_value, + grad_sampling_loc, + grad_attn_weight); + break; + case 16: + ms_deformable_col2im_gpu_kernel_shm_blocksize_aware_reduce_v1 + <<>>( + num_kernels, + grad_col, + data_value, + data_spatial_shapes, + data_level_start_index, + data_sampling_loc, + data_attn_weight, + batch_size, + spatial_size, + num_heads, + channels, + num_levels, + num_query, + num_point, + grad_value, + grad_sampling_loc, + grad_attn_weight); + break; + case 32: + ms_deformable_col2im_gpu_kernel_shm_blocksize_aware_reduce_v1 + <<>>( + num_kernels, + grad_col, + data_value, + data_spatial_shapes, + data_level_start_index, + data_sampling_loc, + data_attn_weight, + batch_size, + spatial_size, + num_heads, + channels, + num_levels, + num_query, + num_point, + grad_value, + grad_sampling_loc, + grad_attn_weight); + break; + case 64: + ms_deformable_col2im_gpu_kernel_shm_blocksize_aware_reduce_v2 + <<>>( + num_kernels, + grad_col, + data_value, + data_spatial_shapes, + data_level_start_index, + data_sampling_loc, + data_attn_weight, + batch_size, + spatial_size, + num_heads, + channels, + num_levels, + num_query, + num_point, + grad_value, + grad_sampling_loc, + grad_attn_weight); + break; + case 128: + ms_deformable_col2im_gpu_kernel_shm_blocksize_aware_reduce_v2 + <<>>( + num_kernels, + grad_col, + data_value, + data_spatial_shapes, + data_level_start_index, + data_sampling_loc, + data_attn_weight, + batch_size, + spatial_size, + num_heads, + channels, + num_levels, + num_query, + num_point, + grad_value, + grad_sampling_loc, + grad_attn_weight); + break; + case 256: + ms_deformable_col2im_gpu_kernel_shm_blocksize_aware_reduce_v2 + <<>>( + num_kernels, + grad_col, + data_value, + data_spatial_shapes, + data_level_start_index, + data_sampling_loc, + data_attn_weight, + batch_size, + spatial_size, + num_heads, + channels, + num_levels, + num_query, + num_point, + grad_value, + grad_sampling_loc, + grad_attn_weight); + break; + case 512: + ms_deformable_col2im_gpu_kernel_shm_blocksize_aware_reduce_v2 + <<>>( + num_kernels, + grad_col, + data_value, + data_spatial_shapes, + data_level_start_index, + data_sampling_loc, + data_attn_weight, + batch_size, + spatial_size, + num_heads, + channels, + num_levels, + num_query, + num_point, + grad_value, + grad_sampling_loc, + grad_attn_weight); + break; + case 1024: + ms_deformable_col2im_gpu_kernel_shm_blocksize_aware_reduce_v2 + <<>>( + num_kernels, + grad_col, + data_value, + data_spatial_shapes, + data_level_start_index, + data_sampling_loc, + data_attn_weight, + batch_size, + spatial_size, + num_heads, + channels, + num_levels, + num_query, + num_point, + grad_value, + grad_sampling_loc, + grad_attn_weight); + break; + default: + if (channels < 64) + { + ms_deformable_col2im_gpu_kernel_shm_reduce_v1 + <<>>( + num_kernels, + grad_col, + data_value, + data_spatial_shapes, + data_level_start_index, + data_sampling_loc, + data_attn_weight, + batch_size, + spatial_size, + num_heads, + channels, + num_levels, + num_query, + num_point, + grad_value, + grad_sampling_loc, + grad_attn_weight); + } + else + { + ms_deformable_col2im_gpu_kernel_shm_reduce_v2 + <<>>( + num_kernels, + grad_col, + data_value, + data_spatial_shapes, + data_level_start_index, + data_sampling_loc, + data_attn_weight, + batch_size, + spatial_size, + num_heads, + channels, + num_levels, + num_query, + num_point, + grad_value, + grad_sampling_loc, + grad_attn_weight); + } + } + } + cudaError_t err = cudaGetLastError(); + if (err != cudaSuccess) + { + printf("error in ms_deformable_col2im_cuda: %s\n", cudaGetErrorString(err)); + } + +} \ No newline at end of file diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/src/ms_deform_attn.h b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/src/ms_deform_attn.h new file mode 100644 index 0000000..ac0ef2e --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/src/ms_deform_attn.h @@ -0,0 +1,62 @@ +/*! +************************************************************************************************** +* Deformable DETR +* Copyright (c) 2020 SenseTime. All Rights Reserved. +* Licensed under the Apache License, Version 2.0 [see LICENSE for details] +************************************************************************************************** +* Modified from https://github.com/chengdazhi/Deformable-Convolution-V2-PyTorch/tree/pytorch_1.0.0 +************************************************************************************************** +*/ + +#pragma once + +#include "cpu/ms_deform_attn_cpu.h" + +#ifdef WITH_CUDA +#include "cuda/ms_deform_attn_cuda.h" +#endif + + +at::Tensor +ms_deform_attn_forward( + const at::Tensor &value, + const at::Tensor &spatial_shapes, + const at::Tensor &level_start_index, + const at::Tensor &sampling_loc, + const at::Tensor &attn_weight, + const int im2col_step) +{ + if (value.type().is_cuda()) + { +#ifdef WITH_CUDA + return ms_deform_attn_cuda_forward( + value, spatial_shapes, level_start_index, sampling_loc, attn_weight, im2col_step); +#else + AT_ERROR("Not compiled with GPU support"); +#endif + } + AT_ERROR("Not implemented on the CPU"); +} + +std::vector +ms_deform_attn_backward( + const at::Tensor &value, + const at::Tensor &spatial_shapes, + const at::Tensor &level_start_index, + const at::Tensor &sampling_loc, + const at::Tensor &attn_weight, + const at::Tensor &grad_output, + const int im2col_step) +{ + if (value.type().is_cuda()) + { +#ifdef WITH_CUDA + return ms_deform_attn_cuda_backward( + value, spatial_shapes, level_start_index, sampling_loc, attn_weight, grad_output, im2col_step); +#else + AT_ERROR("Not compiled with GPU support"); +#endif + } + AT_ERROR("Not implemented on the CPU"); +} + diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/src/vision.cpp b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/src/vision.cpp new file mode 100644 index 0000000..2201f63 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/src/vision.cpp @@ -0,0 +1,16 @@ +/*! +************************************************************************************************** +* Deformable DETR +* Copyright (c) 2020 SenseTime. All Rights Reserved. +* Licensed under the Apache License, Version 2.0 [see LICENSE for details] +************************************************************************************************** +* Modified from https://github.com/chengdazhi/Deformable-Convolution-V2-PyTorch/tree/pytorch_1.0.0 +************************************************************************************************** +*/ + +#include "ms_deform_attn.h" + +PYBIND11_MODULE(TORCH_EXTENSION_NAME, m) { + m.def("ms_deform_attn_forward", &ms_deform_attn_forward, "ms_deform_attn_forward"); + m.def("ms_deform_attn_backward", &ms_deform_attn_backward, "ms_deform_attn_backward"); +} diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/test.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/test.py new file mode 100644 index 0000000..8dbf6d5 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/ops/test.py @@ -0,0 +1,89 @@ +# ------------------------------------------------------------------------------------------------ +# Deformable DETR +# Copyright (c) 2020 SenseTime. All Rights Reserved. +# Licensed under the Apache License, Version 2.0 [see LICENSE for details] +# ------------------------------------------------------------------------------------------------ +# Modified from https://github.com/chengdazhi/Deformable-Convolution-V2-PyTorch/tree/pytorch_1.0.0 +# ------------------------------------------------------------------------------------------------ + +from __future__ import absolute_import +from __future__ import print_function +from __future__ import division + +import time +import torch +import torch.nn as nn +from torch.autograd import gradcheck + +from functions.ms_deform_attn_func import MSDeformAttnFunction, ms_deform_attn_core_pytorch + + +N, M, D = 1, 2, 2 +Lq, L, P = 2, 2, 2 +shapes = torch.as_tensor([(6, 4), (3, 2)], dtype=torch.long).cuda() +level_start_index = torch.cat((shapes.new_zeros((1, )), shapes.prod(1).cumsum(0)[:-1])) +S = sum([(H*W).item() for H, W in shapes]) + + +torch.manual_seed(3) + + +@torch.no_grad() +def check_forward_equal_with_pytorch_double(): + value = torch.rand(N, S, M, D).cuda() * 0.01 + sampling_locations = torch.rand(N, Lq, M, L, P, 2).cuda() + attention_weights = torch.rand(N, Lq, M, L, P).cuda() + 1e-5 + attention_weights /= attention_weights.sum(-1, keepdim=True).sum(-2, keepdim=True) + im2col_step = 2 + output_pytorch = ms_deform_attn_core_pytorch(value.double(), shapes, sampling_locations.double(), attention_weights.double()).detach().cpu() + output_cuda = MSDeformAttnFunction.apply(value.double(), shapes, level_start_index, sampling_locations.double(), attention_weights.double(), im2col_step).detach().cpu() + fwdok = torch.allclose(output_cuda, output_pytorch) + max_abs_err = (output_cuda - output_pytorch).abs().max() + max_rel_err = ((output_cuda - output_pytorch).abs() / output_pytorch.abs()).max() + + print(f'* {fwdok} check_forward_equal_with_pytorch_double: max_abs_err {max_abs_err:.2e} max_rel_err {max_rel_err:.2e}') + + +@torch.no_grad() +def check_forward_equal_with_pytorch_float(): + value = torch.rand(N, S, M, D).cuda() * 0.01 + sampling_locations = torch.rand(N, Lq, M, L, P, 2).cuda() + attention_weights = torch.rand(N, Lq, M, L, P).cuda() + 1e-5 + attention_weights /= attention_weights.sum(-1, keepdim=True).sum(-2, keepdim=True) + im2col_step = 2 + output_pytorch = ms_deform_attn_core_pytorch(value, shapes, sampling_locations, attention_weights).detach().cpu() + output_cuda = MSDeformAttnFunction.apply(value, shapes, level_start_index, sampling_locations, attention_weights, im2col_step).detach().cpu() + fwdok = torch.allclose(output_cuda, output_pytorch, rtol=1e-2, atol=1e-3) + max_abs_err = (output_cuda - output_pytorch).abs().max() + max_rel_err = ((output_cuda - output_pytorch).abs() / output_pytorch.abs()).max() + + print(f'* {fwdok} check_forward_equal_with_pytorch_float: max_abs_err {max_abs_err:.2e} max_rel_err {max_rel_err:.2e}') + + +def check_gradient_numerical(channels=4, grad_value=True, grad_sampling_loc=True, grad_attn_weight=True): + + value = torch.rand(N, S, M, channels).cuda() * 0.01 + sampling_locations = torch.rand(N, Lq, M, L, P, 2).cuda() + attention_weights = torch.rand(N, Lq, M, L, P).cuda() + 1e-5 + attention_weights /= attention_weights.sum(-1, keepdim=True).sum(-2, keepdim=True) + im2col_step = 2 + func = MSDeformAttnFunction.apply + + value.requires_grad = grad_value + sampling_locations.requires_grad = grad_sampling_loc + attention_weights.requires_grad = grad_attn_weight + + gradok = gradcheck(func, (value.double(), shapes, level_start_index, sampling_locations.double(), attention_weights.double(), im2col_step)) + + print(f'* {gradok} check_gradient_numerical(D={channels})') + + +if __name__ == '__main__': + check_forward_equal_with_pytorch_double() + check_forward_equal_with_pytorch_float() + + for channels in [30, 32, 64, 71, 1025, 2048, 3096]: + check_gradient_numerical(channels, True, True, True) + + + diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/position_encoding.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/position_encoding.py new file mode 100644 index 0000000..e0db9cc --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/position_encoding.py @@ -0,0 +1,157 @@ +# ------------------------------------------------------------------------ +# ED-Pose +# Copyright (c) 2023 IDEA. All Rights Reserved. +# Licensed under the Apache License, Version 2.0 [see LICENSE for details] +# ------------------------------------------------------------------------ +# Conditional DETR +# Copyright (c) 2021 Microsoft. All Rights Reserved. +# Licensed under the Apache License, Version 2.0 [see LICENSE for details] +# ------------------------------------------------------------------------ +# Copied from DETR (https://github.com/facebookresearch/detr) +# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved. +# ------------------------------------------------------------------------ + +""" +Various positional encodings for the transformer. +""" +import math +import torch +from torch import nn + +from util.misc import NestedTensor + + +class PositionEmbeddingSine(nn.Module): + """ + This is a more standard version of the position embedding, very similar to the one + used by the Attention is all you need paper, generalized to work on images. + """ + def __init__(self, num_pos_feats=64, temperature=10000, normalize=False, scale=None): + super().__init__() + self.num_pos_feats = num_pos_feats + self.temperature = temperature + self.normalize = normalize + if scale is not None and normalize is False: + raise ValueError("normalize should be True if scale is passed") + if scale is None: + scale = 2 * math.pi + self.scale = scale + + def forward(self, tensor_list: NestedTensor): + x = tensor_list.tensors + mask = tensor_list.mask + assert mask is not None + not_mask = ~mask + y_embed = not_mask.cumsum(1, dtype=torch.float32) + x_embed = not_mask.cumsum(2, dtype=torch.float32) + if self.normalize: + eps = 1e-6 + # if os.environ.get("SHILONG_AMP", None) == '1': + # eps = 1e-4 + # else: + # eps = 1e-6 + y_embed = y_embed / (y_embed[:, -1:, :] + eps) * self.scale + x_embed = x_embed / (x_embed[:, :, -1:] + eps) * self.scale + + dim_t = torch.arange(self.num_pos_feats, dtype=torch.float32, device=x.device) + dim_t = self.temperature ** (2 * (dim_t // 2) / self.num_pos_feats) + + pos_x = x_embed[:, :, :, None] / dim_t + pos_y = y_embed[:, :, :, None] / dim_t + pos_x = torch.stack((pos_x[:, :, :, 0::2].sin(), pos_x[:, :, :, 1::2].cos()), dim=4).flatten(3) + pos_y = torch.stack((pos_y[:, :, :, 0::2].sin(), pos_y[:, :, :, 1::2].cos()), dim=4).flatten(3) + pos = torch.cat((pos_y, pos_x), dim=3).permute(0, 3, 1, 2) + return pos + +class PositionEmbeddingSineHW(nn.Module): + """ + This is a more standard version of the position embedding, very similar to the one + used by the Attention is all you need paper, generalized to work on images. + """ + def __init__(self, num_pos_feats=64, temperatureH=10000, temperatureW=10000, normalize=False, scale=None): + super().__init__() + self.num_pos_feats = num_pos_feats + self.temperatureH = temperatureH + self.temperatureW = temperatureW + self.normalize = normalize + if scale is not None and normalize is False: + raise ValueError("normalize should be True if scale is passed") + if scale is None: + scale = 2 * math.pi + self.scale = scale + + def forward(self, tensor_list: NestedTensor): + x = tensor_list.tensors + mask = tensor_list.mask + assert mask is not None + not_mask = ~mask + y_embed = not_mask.cumsum(1, dtype=torch.float32) + x_embed = not_mask.cumsum(2, dtype=torch.float32) + + # import ipdb; ipdb.set_trace() + + if self.normalize: + eps = 1e-6 + y_embed = y_embed / (y_embed[:, -1:, :] + eps) * self.scale + x_embed = x_embed / (x_embed[:, :, -1:] + eps) * self.scale + + dim_tx = torch.arange(self.num_pos_feats, dtype=torch.float32, device=x.device) + dim_tx = self.temperatureW ** (2 * (dim_tx // 2) / self.num_pos_feats) + pos_x = x_embed[:, :, :, None] / dim_tx + + dim_ty = torch.arange(self.num_pos_feats, dtype=torch.float32, device=x.device) + dim_ty = self.temperatureH ** (2 * (dim_ty // 2) / self.num_pos_feats) + pos_y = y_embed[:, :, :, None] / dim_ty + + pos_x = torch.stack((pos_x[:, :, :, 0::2].sin(), pos_x[:, :, :, 1::2].cos()), dim=4).flatten(3) + pos_y = torch.stack((pos_y[:, :, :, 0::2].sin(), pos_y[:, :, :, 1::2].cos()), dim=4).flatten(3) + pos = torch.cat((pos_y, pos_x), dim=3).permute(0, 3, 1, 2) + + # import ipdb; ipdb.set_trace() + + return pos + +class PositionEmbeddingLearned(nn.Module): + """ + Absolute pos embedding, learned. + """ + def __init__(self, num_pos_feats=256): + super().__init__() + self.row_embed = nn.Embedding(50, num_pos_feats) + self.col_embed = nn.Embedding(50, num_pos_feats) + self.reset_parameters() + + def reset_parameters(self): + nn.init.uniform_(self.row_embed.weight) + nn.init.uniform_(self.col_embed.weight) + + def forward(self, tensor_list: NestedTensor): + x = tensor_list.tensors + h, w = x.shape[-2:] + i = torch.arange(w, device=x.device) + j = torch.arange(h, device=x.device) + x_emb = self.col_embed(i) + y_emb = self.row_embed(j) + pos = torch.cat([ + x_emb.unsqueeze(0).repeat(h, 1, 1), + y_emb.unsqueeze(1).repeat(1, w, 1), + ], dim=-1).permute(2, 0, 1).unsqueeze(0).repeat(x.shape[0], 1, 1, 1) + return pos + + +def build_position_encoding(args): + N_steps = args.hidden_dim // 2 + if args.position_embedding in ('v2', 'sine'): + # TODO find a better way of exposing other arguments + position_embedding = PositionEmbeddingSineHW( + N_steps, + temperatureH=args.pe_temperatureH, + temperatureW=args.pe_temperatureW, + normalize=True + ) + elif args.position_embedding in ('v3', 'learned'): + position_embedding = PositionEmbeddingLearned(N_steps) + else: + raise ValueError(f"not supported {args.position_embedding}") + + return position_embedding diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/swin_transformer.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/swin_transformer.py new file mode 100644 index 0000000..8f42508 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/swin_transformer.py @@ -0,0 +1,701 @@ + +import torch +import torch.nn as nn +import torch.nn.functional as F +import torch.utils.checkpoint as checkpoint +import numpy as np + +from util.misc import NestedTensor +# from timm.models.layers import DropPath, to_2tuple, trunc_normal_ +from src.modules.util import DropPath, to_2tuple, trunc_normal_ + + + +class Mlp(nn.Module): + """ Multilayer perceptron.""" + + def __init__(self, in_features, hidden_features=None, out_features=None, act_layer=nn.GELU, drop=0.): + super().__init__() + out_features = out_features or in_features + hidden_features = hidden_features or in_features + self.fc1 = nn.Linear(in_features, hidden_features) + self.act = act_layer() + self.fc2 = nn.Linear(hidden_features, out_features) + self.drop = nn.Dropout(drop) + + def forward(self, x): + x = self.fc1(x) + x = self.act(x) + x = self.drop(x) + x = self.fc2(x) + x = self.drop(x) + return x + + +def window_partition(x, window_size): + """ + Args: + x: (B, H, W, C) + window_size (int): window size + Returns: + windows: (num_windows*B, window_size, window_size, C) + """ + B, H, W, C = x.shape + x = x.view(B, H // window_size, window_size, W // window_size, window_size, C) + windows = x.permute(0, 1, 3, 2, 4, 5).contiguous().view(-1, window_size, window_size, C) + return windows + + +def window_reverse(windows, window_size, H, W): + """ + Args: + windows: (num_windows*B, window_size, window_size, C) + window_size (int): Window size + H (int): Height of image + W (int): Width of image + Returns: + x: (B, H, W, C) + """ + B = int(windows.shape[0] / (H * W / window_size / window_size)) + x = windows.view(B, H // window_size, W // window_size, window_size, window_size, -1) + x = x.permute(0, 1, 3, 2, 4, 5).contiguous().view(B, H, W, -1) + return x + + +class WindowAttention(nn.Module): + """ Window based multi-head self attention (W-MSA) module with relative position bias. + It supports both of shifted and non-shifted window. + Args: + dim (int): Number of input channels. + window_size (tuple[int]): The height and width of the window. + num_heads (int): Number of attention heads. + qkv_bias (bool, optional): If True, add a learnable bias to query, key, value. Default: True + qk_scale (float | None, optional): Override default qk scale of head_dim ** -0.5 if set + attn_drop (float, optional): Dropout ratio of attention weight. Default: 0.0 + proj_drop (float, optional): Dropout ratio of output. Default: 0.0 + """ + + def __init__(self, dim, window_size, num_heads, qkv_bias=True, qk_scale=None, attn_drop=0., proj_drop=0.): + + super().__init__() + self.dim = dim + self.window_size = window_size # Wh, Ww + self.num_heads = num_heads + head_dim = dim // num_heads + self.scale = qk_scale or head_dim ** -0.5 + + # define a parameter table of relative position bias + self.relative_position_bias_table = nn.Parameter( + torch.zeros((2 * window_size[0] - 1) * (2 * window_size[1] - 1), num_heads)) # 2*Wh-1 * 2*Ww-1, nH + + # get pair-wise relative position index for each token inside the window + coords_h = torch.arange(self.window_size[0]) + coords_w = torch.arange(self.window_size[1]) + coords = torch.stack(torch.meshgrid([coords_h, coords_w])) # 2, Wh, Ww + coords_flatten = torch.flatten(coords, 1) # 2, Wh*Ww + relative_coords = coords_flatten[:, :, None] - coords_flatten[:, None, :] # 2, Wh*Ww, Wh*Ww + relative_coords = relative_coords.permute(1, 2, 0).contiguous() # Wh*Ww, Wh*Ww, 2 + relative_coords[:, :, 0] += self.window_size[0] - 1 # shift to start from 0 + relative_coords[:, :, 1] += self.window_size[1] - 1 + relative_coords[:, :, 0] *= 2 * self.window_size[1] - 1 + relative_position_index = relative_coords.sum(-1) # Wh*Ww, Wh*Ww + self.register_buffer("relative_position_index", relative_position_index) + + self.qkv = nn.Linear(dim, dim * 3, bias=qkv_bias) + self.attn_drop = nn.Dropout(attn_drop) + self.proj = nn.Linear(dim, dim) + self.proj_drop = nn.Dropout(proj_drop) + + trunc_normal_(self.relative_position_bias_table, std=.02) + self.softmax = nn.Softmax(dim=-1) + + def forward(self, x, mask=None): + """ Forward function. + Args: + x: input features with shape of (num_windows*B, N, C) + mask: (0/-inf) mask with shape of (num_windows, Wh*Ww, Wh*Ww) or None + """ + B_, N, C = x.shape + qkv = self.qkv(x).reshape(B_, N, 3, self.num_heads, C // self.num_heads).permute(2, 0, 3, 1, 4) + q, k, v = qkv[0], qkv[1], qkv[2] # make torchscript happy (cannot use tensor as tuple) + + q = q * self.scale + attn = (q @ k.transpose(-2, -1)) + + relative_position_bias = self.relative_position_bias_table[self.relative_position_index.view(-1)].view( + self.window_size[0] * self.window_size[1], self.window_size[0] * self.window_size[1], -1) # Wh*Ww,Wh*Ww,nH + relative_position_bias = relative_position_bias.permute(2, 0, 1).contiguous() # nH, Wh*Ww, Wh*Ww + attn = attn + relative_position_bias.unsqueeze(0) + + if mask is not None: + nW = mask.shape[0] + attn = attn.view(B_ // nW, nW, self.num_heads, N, N) + mask.unsqueeze(1).unsqueeze(0) + attn = attn.view(-1, self.num_heads, N, N) + attn = self.softmax(attn) + else: + attn = self.softmax(attn) + + attn = self.attn_drop(attn) + + x = (attn @ v).transpose(1, 2).reshape(B_, N, C) + x = self.proj(x) + x = self.proj_drop(x) + return x + + +class SwinTransformerBlock(nn.Module): + """ Swin Transformer Block. + Args: + dim (int): Number of input channels. + num_heads (int): Number of attention heads. + window_size (int): Window size. + shift_size (int): Shift size for SW-MSA. + mlp_ratio (float): Ratio of mlp hidden dim to embedding dim. + qkv_bias (bool, optional): If True, add a learnable bias to query, key, value. Default: True + qk_scale (float | None, optional): Override default qk scale of head_dim ** -0.5 if set. + drop (float, optional): Dropout rate. Default: 0.0 + attn_drop (float, optional): Attention dropout rate. Default: 0.0 + drop_path (float, optional): Stochastic depth rate. Default: 0.0 + act_layer (nn.Module, optional): Activation layer. Default: nn.GELU + norm_layer (nn.Module, optional): Normalization layer. Default: nn.LayerNorm + """ + + def __init__(self, dim, num_heads, window_size=7, shift_size=0, + mlp_ratio=4., qkv_bias=True, qk_scale=None, drop=0., attn_drop=0., drop_path=0., + act_layer=nn.GELU, norm_layer=nn.LayerNorm): + super().__init__() + self.dim = dim + self.num_heads = num_heads + self.window_size = window_size + self.shift_size = shift_size + self.mlp_ratio = mlp_ratio + assert 0 <= self.shift_size < self.window_size, "shift_size must in 0-window_size" + + self.norm1 = norm_layer(dim) + self.attn = WindowAttention( + dim, window_size=to_2tuple(self.window_size), num_heads=num_heads, + qkv_bias=qkv_bias, qk_scale=qk_scale, attn_drop=attn_drop, proj_drop=drop) + + self.drop_path = DropPath(drop_path) if drop_path > 0. else nn.Identity() + self.norm2 = norm_layer(dim) + mlp_hidden_dim = int(dim * mlp_ratio) + self.mlp = Mlp(in_features=dim, hidden_features=mlp_hidden_dim, act_layer=act_layer, drop=drop) + + self.H = None + self.W = None + + def forward(self, x, mask_matrix): + """ Forward function. + Args: + x: Input feature, tensor size (B, H*W, C). + H, W: Spatial resolution of the input feature. + mask_matrix: Attention mask for cyclic shift. + """ + B, L, C = x.shape + H, W = self.H, self.W + assert L == H * W, "input feature has wrong size" + + shortcut = x + x = self.norm1(x) + x = x.view(B, H, W, C) + + # pad feature maps to multiples of window size + pad_l = pad_t = 0 + pad_r = (self.window_size - W % self.window_size) % self.window_size + pad_b = (self.window_size - H % self.window_size) % self.window_size + x = F.pad(x, (0, 0, pad_l, pad_r, pad_t, pad_b)) + _, Hp, Wp, _ = x.shape + + # cyclic shift + if self.shift_size > 0: + shifted_x = torch.roll(x, shifts=(-self.shift_size, -self.shift_size), dims=(1, 2)) + attn_mask = mask_matrix + else: + shifted_x = x + attn_mask = None + + # partition windows + x_windows = window_partition(shifted_x, self.window_size) # nW*B, window_size, window_size, C + x_windows = x_windows.view(-1, self.window_size * self.window_size, C) # nW*B, window_size*window_size, C + + # W-MSA/SW-MSA + attn_windows = self.attn(x_windows, mask=attn_mask) # nW*B, window_size*window_size, C + + # merge windows + attn_windows = attn_windows.view(-1, self.window_size, self.window_size, C) + shifted_x = window_reverse(attn_windows, self.window_size, Hp, Wp) # B H' W' C + + # reverse cyclic shift + if self.shift_size > 0: + x = torch.roll(shifted_x, shifts=(self.shift_size, self.shift_size), dims=(1, 2)) + else: + x = shifted_x + + if pad_r > 0 or pad_b > 0: + x = x[:, :H, :W, :].contiguous() + + x = x.view(B, H * W, C) + + # FFN + x = shortcut + self.drop_path(x) + x = x + self.drop_path(self.mlp(self.norm2(x))) + + return x + + +class PatchMerging(nn.Module): + """ Patch Merging Layer + Args: + dim (int): Number of input channels. + norm_layer (nn.Module, optional): Normalization layer. Default: nn.LayerNorm + """ + def __init__(self, dim, norm_layer=nn.LayerNorm): + super().__init__() + self.dim = dim + self.reduction = nn.Linear(4 * dim, 2 * dim, bias=False) + self.norm = norm_layer(4 * dim) + + def forward(self, x, H, W): + """ Forward function. + Args: + x: Input feature, tensor size (B, H*W, C). + H, W: Spatial resolution of the input feature. + """ + B, L, C = x.shape + assert L == H * W, "input feature has wrong size" + + x = x.view(B, H, W, C) + + # padding + pad_input = (H % 2 == 1) or (W % 2 == 1) + if pad_input: + x = F.pad(x, (0, 0, 0, W % 2, 0, H % 2)) + + x0 = x[:, 0::2, 0::2, :] # B H/2 W/2 C + x1 = x[:, 1::2, 0::2, :] # B H/2 W/2 C + x2 = x[:, 0::2, 1::2, :] # B H/2 W/2 C + x3 = x[:, 1::2, 1::2, :] # B H/2 W/2 C + x = torch.cat([x0, x1, x2, x3], -1) # B H/2 W/2 4*C + x = x.view(B, -1, 4 * C) # B H/2*W/2 4*C + + x = self.norm(x) + x = self.reduction(x) + + return x + + +class BasicLayer(nn.Module): + """ A basic Swin Transformer layer for one stage. + Args: + dim (int): Number of feature channels + depth (int): Depths of this stage. + num_heads (int): Number of attention head. + window_size (int): Local window size. Default: 7. + mlp_ratio (float): Ratio of mlp hidden dim to embedding dim. Default: 4. + qkv_bias (bool, optional): If True, add a learnable bias to query, key, value. Default: True + qk_scale (float | None, optional): Override default qk scale of head_dim ** -0.5 if set. + drop (float, optional): Dropout rate. Default: 0.0 + attn_drop (float, optional): Attention dropout rate. Default: 0.0 + drop_path (float | tuple[float], optional): Stochastic depth rate. Default: 0.0 + norm_layer (nn.Module, optional): Normalization layer. Default: nn.LayerNorm + downsample (nn.Module | None, optional): Downsample layer at the end of the layer. Default: None + use_checkpoint (bool): Whether to use checkpointing to save memory. Default: False. + """ + + def __init__(self, + dim, + depth, + num_heads, + window_size=7, + mlp_ratio=4., + qkv_bias=True, + qk_scale=None, + drop=0., + attn_drop=0., + drop_path=0., + norm_layer=nn.LayerNorm, + downsample=None, + use_checkpoint=False): + super().__init__() + self.window_size = window_size + self.shift_size = window_size // 2 + self.depth = depth + self.use_checkpoint = use_checkpoint + + # build blocks + self.blocks = nn.ModuleList([ + SwinTransformerBlock( + dim=dim, + num_heads=num_heads, + window_size=window_size, + shift_size=0 if (i % 2 == 0) else window_size // 2, + mlp_ratio=mlp_ratio, + qkv_bias=qkv_bias, + qk_scale=qk_scale, + drop=drop, + attn_drop=attn_drop, + drop_path=drop_path[i] if isinstance(drop_path, list) else drop_path, + norm_layer=norm_layer) + for i in range(depth)]) + + # patch merging layer + if downsample is not None: + self.downsample = downsample(dim=dim, norm_layer=norm_layer) + else: + self.downsample = None + + def forward(self, x, H, W): + """ Forward function. + Args: + x: Input feature, tensor size (B, H*W, C). + H, W: Spatial resolution of the input feature. + """ + + # calculate attention mask for SW-MSA + Hp = int(np.ceil(H / self.window_size)) * self.window_size + Wp = int(np.ceil(W / self.window_size)) * self.window_size + img_mask = torch.zeros((1, Hp, Wp, 1), device=x.device) # 1 Hp Wp 1 + h_slices = (slice(0, -self.window_size), + slice(-self.window_size, -self.shift_size), + slice(-self.shift_size, None)) + w_slices = (slice(0, -self.window_size), + slice(-self.window_size, -self.shift_size), + slice(-self.shift_size, None)) + cnt = 0 + for h in h_slices: + for w in w_slices: + img_mask[:, h, w, :] = cnt + cnt += 1 + + mask_windows = window_partition(img_mask, self.window_size) # nW, window_size, window_size, 1 + mask_windows = mask_windows.view(-1, self.window_size * self.window_size) + attn_mask = mask_windows.unsqueeze(1) - mask_windows.unsqueeze(2) + attn_mask = attn_mask.masked_fill(attn_mask != 0, float(-100.0)).masked_fill(attn_mask == 0, float(0.0)) + + for blk in self.blocks: + blk.H, blk.W = H, W + if self.use_checkpoint: + x = checkpoint.checkpoint(blk, x, attn_mask) + else: + x = blk(x, attn_mask) + if self.downsample is not None: + x_down = self.downsample(x, H, W) + Wh, Ww = (H + 1) // 2, (W + 1) // 2 + return x, H, W, x_down, Wh, Ww + else: + return x, H, W, x, H, W + + +class PatchEmbed(nn.Module): + """ Image to Patch Embedding + Args: + patch_size (int): Patch token size. Default: 4. + in_chans (int): Number of input image channels. Default: 3. + embed_dim (int): Number of linear projection output channels. Default: 96. + norm_layer (nn.Module, optional): Normalization layer. Default: None + """ + + def __init__(self, patch_size=4, in_chans=3, embed_dim=96, norm_layer=None): + super().__init__() + patch_size = to_2tuple(patch_size) + self.patch_size = patch_size + + self.in_chans = in_chans + self.embed_dim = embed_dim + + self.proj = nn.Conv2d(in_chans, embed_dim, kernel_size=patch_size, stride=patch_size) + if norm_layer is not None: + self.norm = norm_layer(embed_dim) + else: + self.norm = None + + def forward(self, x): + """Forward function.""" + # padding + _, _, H, W = x.size() + if W % self.patch_size[1] != 0: + x = F.pad(x, (0, self.patch_size[1] - W % self.patch_size[1])) + if H % self.patch_size[0] != 0: + x = F.pad(x, (0, 0, 0, self.patch_size[0] - H % self.patch_size[0])) + + x = self.proj(x) # B C Wh Ww + if self.norm is not None: + Wh, Ww = x.size(2), x.size(3) + x = x.flatten(2).transpose(1, 2) + x = self.norm(x) + x = x.transpose(1, 2).view(-1, self.embed_dim, Wh, Ww) + + return x + + +class SwinTransformer(nn.Module): + """ Swin Transformer backbone. + A PyTorch impl of : `Swin Transformer: Hierarchical Vision Transformer using Shifted Windows` - + https://arxiv.org/pdf/2103.14030 + Args: + pretrain_img_size (int): Input image size for training the pretrained model, + used in absolute postion embedding. Default 224. + patch_size (int | tuple(int)): Patch size. Default: 4. + in_chans (int): Number of input image channels. Default: 3. + embed_dim (int): Number of linear projection output channels. Default: 96. + depths (tuple[int]): Depths of each Swin Transformer stage. + num_heads (tuple[int]): Number of attention head of each stage. + window_size (int): Window size. Default: 7. + mlp_ratio (float): Ratio of mlp hidden dim to embedding dim. Default: 4. + qkv_bias (bool): If True, add a learnable bias to query, key, value. Default: True + qk_scale (float): Override default qk scale of head_dim ** -0.5 if set. + drop_rate (float): Dropout rate. + attn_drop_rate (float): Attention dropout rate. Default: 0. + drop_path_rate (float): Stochastic depth rate. Default: 0.2. + norm_layer (nn.Module): Normalization layer. Default: nn.LayerNorm. + ape (bool): If True, add absolute position embedding to the patch embedding. Default: False. + patch_norm (bool): If True, add normalization after patch embedding. Default: True. + out_indices (Sequence[int]): Output from which stages. + frozen_stages (int): Stages to be frozen (stop grad and set eval mode). + -1 means not freezing any parameters. + use_checkpoint (bool): Whether to use checkpointing to save memory. Default: False. + dilation (bool): if True, the output size if 16x downsample, ow 32x downsample. + """ + + def __init__(self, + pretrain_img_size=224, + patch_size=4, + in_chans=3, + embed_dim=96, + depths=[2, 2, 6, 2], + num_heads=[3, 6, 12, 24], + window_size=7, + mlp_ratio=4., + qkv_bias=True, + qk_scale=None, + drop_rate=0., + attn_drop_rate=0., + drop_path_rate=0.2, + norm_layer=nn.LayerNorm, + ape=False, + patch_norm=True, + out_indices=(0, 1, 2, 3), + frozen_stages=-1, + dilation=False, + use_checkpoint=False): + super().__init__() + + self.pretrain_img_size = pretrain_img_size + self.num_layers = len(depths) + self.embed_dim = embed_dim + self.ape = ape + self.patch_norm = patch_norm + self.out_indices = out_indices + self.frozen_stages = frozen_stages + self.dilation = dilation + + # if use_checkpoint: + # print("use_checkpoint!!!!!!!!!!!!!!!!!!!!!!!!") + + # split image into non-overlapping patches + self.patch_embed = PatchEmbed( + patch_size=patch_size, in_chans=in_chans, embed_dim=embed_dim, + norm_layer=norm_layer if self.patch_norm else None) + + # absolute position embedding + if self.ape: + pretrain_img_size = to_2tuple(pretrain_img_size) + patch_size = to_2tuple(patch_size) + patches_resolution = [pretrain_img_size[0] // patch_size[0], pretrain_img_size[1] // patch_size[1]] + + self.absolute_pos_embed = nn.Parameter(torch.zeros(1, embed_dim, patches_resolution[0], patches_resolution[1])) + trunc_normal_(self.absolute_pos_embed, std=.02) + + self.pos_drop = nn.Dropout(p=drop_rate) + + # stochastic depth + dpr = [x.item() for x in torch.linspace(0, drop_path_rate, sum(depths))] # stochastic depth decay rule + + # build layers + self.layers = nn.ModuleList() + # prepare downsample list + downsamplelist = [PatchMerging for i in range(self.num_layers)] + downsamplelist[-1] = None + num_features = [int(embed_dim * 2 ** i) for i in range(self.num_layers)] + if self.dilation: + downsamplelist[-2] = None + num_features[-1] = int(embed_dim * 2 ** (self.num_layers - 1)) // 2 + for i_layer in range(self.num_layers): + layer = BasicLayer( + # dim=int(embed_dim * 2 ** i_layer), + dim=num_features[i_layer], + depth=depths[i_layer], + num_heads=num_heads[i_layer], + window_size=window_size, + mlp_ratio=mlp_ratio, + qkv_bias=qkv_bias, + qk_scale=qk_scale, + drop=drop_rate, + attn_drop=attn_drop_rate, + drop_path=dpr[sum(depths[:i_layer]):sum(depths[:i_layer + 1])], + norm_layer=norm_layer, + # downsample=PatchMerging if (i_layer < self.num_layers - 1) else None, + downsample=downsamplelist[i_layer], + use_checkpoint=use_checkpoint) + self.layers.append(layer) + + # num_features = [int(embed_dim * 2 ** i) for i in range(self.num_layers)] + self.num_features = num_features + + # add a norm layer for each output + for i_layer in out_indices: + layer = norm_layer(num_features[i_layer]) + layer_name = f'norm{i_layer}' + self.add_module(layer_name, layer) + + self._freeze_stages() + + def _freeze_stages(self): + if self.frozen_stages >= 0: + self.patch_embed.eval() + for param in self.patch_embed.parameters(): + param.requires_grad = False + + if self.frozen_stages >= 1 and self.ape: + self.absolute_pos_embed.requires_grad = False + + if self.frozen_stages >= 2: + self.pos_drop.eval() + for i in range(0, self.frozen_stages - 1): + m = self.layers[i] + m.eval() + for param in m.parameters(): + param.requires_grad = False + + + + def forward_raw(self, x): + """Forward function.""" + x = self.patch_embed(x) + + Wh, Ww = x.size(2), x.size(3) + if self.ape: + # interpolate the position embedding to the corresponding size + absolute_pos_embed = F.interpolate(self.absolute_pos_embed, size=(Wh, Ww), mode='bicubic') + x = (x + absolute_pos_embed).flatten(2).transpose(1, 2) # B Wh*Ww C + else: + x = x.flatten(2).transpose(1, 2) + x = self.pos_drop(x) + + outs = [] + for i in range(self.num_layers): + layer = self.layers[i] + x_out, H, W, x, Wh, Ww = layer(x, Wh, Ww) + # import ipdb; ipdb.set_trace() + + if i in self.out_indices: + norm_layer = getattr(self, f'norm{i}') + x_out = norm_layer(x_out) + + out = x_out.view(-1, H, W, self.num_features[i]).permute(0, 3, 1, 2).contiguous() + outs.append(out) + # in: + # torch.Size([2, 3, 1024, 1024]) + # outs: + # [torch.Size([2, 192, 256, 256]), torch.Size([2, 384, 128, 128]), \ + # torch.Size([2, 768, 64, 64]), torch.Size([2, 1536, 32, 32])] + return tuple(outs) + + + def forward(self, tensor_list: NestedTensor): + x = tensor_list.tensors + + """Forward function.""" + x = self.patch_embed(x) + + Wh, Ww = x.size(2), x.size(3) + if self.ape: + # interpolate the position embedding to the corresponding size + absolute_pos_embed = F.interpolate(self.absolute_pos_embed, size=(Wh, Ww), mode='bicubic') + x = (x + absolute_pos_embed).flatten(2).transpose(1, 2) # B Wh*Ww C + else: + x = x.flatten(2).transpose(1, 2) + x = self.pos_drop(x) + + outs = [] + for i in range(self.num_layers): + layer = self.layers[i] + x_out, H, W, x, Wh, Ww = layer(x, Wh, Ww) + + if i in self.out_indices: + norm_layer = getattr(self, f'norm{i}') + x_out = norm_layer(x_out) + + out = x_out.view(-1, H, W, self.num_features[i]).permute(0, 3, 1, 2).contiguous() + outs.append(out) + # in: + # torch.Size([2, 3, 1024, 1024]) + # out: + # [torch.Size([2, 192, 256, 256]), torch.Size([2, 384, 128, 128]), \ + # torch.Size([2, 768, 64, 64]), torch.Size([2, 1536, 32, 32])] + + # collect for nesttensors + outs_dict = {} + for idx, out_i in enumerate(outs): + m = tensor_list.mask + assert m is not None + mask = F.interpolate(m[None].float(), size=out_i.shape[-2:]).to(torch.bool)[0] + outs_dict[idx] = NestedTensor(out_i, mask) + + return outs_dict + + + def train(self, mode=True): + """Convert the model into training mode while keep layers freezed.""" + super(SwinTransformer, self).train(mode) + self._freeze_stages() + + + +def build_swin_transformer(modelname, pretrain_img_size, **kw): + assert modelname in ['swin_T_224_1k', 'swin_B_224_22k', 'swin_B_384_22k', 'swin_L_224_22k', 'swin_L_384_22k'] + + model_para_dict = { + 'swin_T_224_1k': dict( + embed_dim=96, + depths=[ 2, 2, 6, 2 ], + num_heads=[ 3, 6, 12, 24], + window_size=7 + ), + 'swin_B_224_22k': dict( + embed_dim=128, + depths=[ 2, 2, 18, 2 ], + num_heads=[ 4, 8, 16, 32 ], + window_size=7 + ), + 'swin_B_384_22k': dict( + embed_dim=128, + depths=[ 2, 2, 18, 2 ], + num_heads=[ 4, 8, 16, 32 ], + window_size=12 + ), + 'swin_L_224_22k': dict( + embed_dim=192, + depths=[ 2, 2, 18, 2 ], + num_heads=[ 6, 12, 24, 48 ], + window_size=7 + ), + 'swin_L_384_22k': dict( + embed_dim=192, + depths=[ 2, 2, 18, 2 ], + num_heads=[ 6, 12, 24, 48 ], + window_size=12 + ), + } + kw_cgf = model_para_dict[modelname] + kw_cgf.update(kw) + model = SwinTransformer(pretrain_img_size=pretrain_img_size, **kw_cgf) + return model + +if __name__ == "__main__": + model = build_swin_transformer('swin_L_384_22k', 384, dilation=True) + x = torch.rand(2, 3, 1024, 1024) + y = model.forward_raw(x) + import ipdb; ipdb.set_trace() + x = torch.rand(2, 3, 384, 384) + y = model.forward_raw(x) diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/transformer_deformable.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/transformer_deformable.py new file mode 100644 index 0000000..1d441e8 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/transformer_deformable.py @@ -0,0 +1,595 @@ +# ------------------------------------------------------------------------ +# ED-Pose +# Copyright (c) 2023 IDEA. All Rights Reserved. +# Licensed under the Apache License, Version 2.0 [see LICENSE for details] +# ------------------------------------------------------------------------ +# Deformable DETR +# Copyright (c) 2020 SenseTime. All Rights Reserved. +# Licensed under the Apache License, Version 2.0 [see LICENSE for details] +# ------------------------------------------------------------------------ +# Modified from DETR (https://github.com/facebookresearch/detr) +# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved +# ------------------------------------------------------------------------ + +import copy +import math +import torch +from torch import nn, Tensor +from torch.nn.init import xavier_uniform_, constant_, normal_ +from typing import Optional + +from util.misc import inverse_sigmoid +from .ops.modules import MSDeformAttn +from .utils import MLP, _get_activation_fn, gen_sineembed_for_position + +class DeformableTransformer(nn.Module): + def __init__(self, d_model=256, nhead=8, + num_encoder_layers=6, num_decoder_layers=6, dim_feedforward=1024, dropout=0.1, + activation="relu", return_intermediate_dec=False, + num_feature_levels=4, dec_n_points=4, enc_n_points=4, + two_stage=False, two_stage_num_proposals=300, + use_dab=False, high_dim_query_update=False, no_sine_embed=False): + super().__init__() + + self.d_model = d_model + self.nhead = nhead + self.two_stage = two_stage + self.two_stage_num_proposals = two_stage_num_proposals + self.use_dab = use_dab + + encoder_layer = DeformableTransformerEncoderLayer(d_model, dim_feedforward, + dropout, activation, + num_feature_levels, nhead, enc_n_points) + self.encoder = DeformableTransformerEncoder(encoder_layer, num_encoder_layers) + + decoder_layer = DeformableTransformerDecoderLayer(d_model, dim_feedforward, + dropout, activation, + num_feature_levels, nhead, dec_n_points) + self.decoder = DeformableTransformerDecoder(decoder_layer, num_decoder_layers, return_intermediate_dec, + use_dab=use_dab, d_model=d_model, high_dim_query_update=high_dim_query_update, no_sine_embed=no_sine_embed) + + self.level_embed = nn.Parameter(torch.Tensor(num_feature_levels, d_model)) + + if two_stage: + self.enc_output = nn.Linear(d_model, d_model) + self.enc_output_norm = nn.LayerNorm(d_model) + self.pos_trans = nn.Linear(d_model * 2, d_model * 2) + self.pos_trans_norm = nn.LayerNorm(d_model * 2) + else: + if not self.use_dab: + self.reference_points = nn.Linear(d_model, 2) + + self.high_dim_query_update = high_dim_query_update + if high_dim_query_update: + assert not self.use_dab, "use_dab must be True" + + self._reset_parameters() + + def _reset_parameters(self): + for p in self.parameters(): + if p.dim() > 1: + nn.init.xavier_uniform_(p) + for m in self.modules(): + if isinstance(m, MSDeformAttn): + m._reset_parameters() + if not self.two_stage and not self.use_dab: + xavier_uniform_(self.reference_points.weight.data, gain=1.0) + constant_(self.reference_points.bias.data, 0.) + normal_(self.level_embed) + + def get_proposal_pos_embed(self, proposals): + num_pos_feats = 128 + temperature = 10000 + scale = 2 * math.pi + + dim_t = torch.arange(num_pos_feats, dtype=torch.float32, device=proposals.device) + dim_t = temperature ** (2 * (dim_t // 2) / num_pos_feats) + # N, L, 4 + proposals = proposals.sigmoid() * scale + # N, L, 4, 128 + pos = proposals[:, :, :, None] / dim_t + # N, L, 4, 64, 2 + pos = torch.stack((pos[:, :, :, 0::2].sin(), pos[:, :, :, 1::2].cos()), dim=4).flatten(2) + return pos + + def gen_encoder_output_proposals(self, memory, memory_padding_mask, spatial_shapes): + N_, S_, C_ = memory.shape + base_scale = 4.0 + proposals = [] + _cur = 0 + for lvl, (H_, W_) in enumerate(spatial_shapes): + mask_flatten_ = memory_padding_mask[:, _cur:(_cur + H_ * W_)].view(N_, H_, W_, 1) + valid_H = torch.sum(~mask_flatten_[:, :, 0, 0], 1) + valid_W = torch.sum(~mask_flatten_[:, 0, :, 0], 1) + + grid_y, grid_x = torch.meshgrid(torch.linspace(0, H_ - 1, H_, dtype=torch.float32, device=memory.device), + torch.linspace(0, W_ - 1, W_, dtype=torch.float32, device=memory.device)) + grid = torch.cat([grid_x.unsqueeze(-1), grid_y.unsqueeze(-1)], -1) + + scale = torch.cat([valid_W.unsqueeze(-1), valid_H.unsqueeze(-1)], 1).view(N_, 1, 1, 2) + grid = (grid.unsqueeze(0).expand(N_, -1, -1, -1) + 0.5) / scale + wh = torch.ones_like(grid) * 0.05 * (2.0 ** lvl) + proposal = torch.cat((grid, wh), -1).view(N_, -1, 4) + proposals.append(proposal) + _cur += (H_ * W_) + output_proposals = torch.cat(proposals, 1) + output_proposals_valid = ((output_proposals > 0.01) & (output_proposals < 0.99)).all(-1, keepdim=True) + output_proposals = torch.log(output_proposals / (1 - output_proposals)) + output_proposals = output_proposals.masked_fill(memory_padding_mask.unsqueeze(-1), float('inf')) + output_proposals = output_proposals.masked_fill(~output_proposals_valid, float('inf')) + + output_memory = memory + output_memory = output_memory.masked_fill(memory_padding_mask.unsqueeze(-1), float(0)) + output_memory = output_memory.masked_fill(~output_proposals_valid, float(0)) + output_memory = self.enc_output_norm(self.enc_output(output_memory)) + return output_memory, output_proposals + + def get_valid_ratio(self, mask): + _, H, W = mask.shape + valid_H = torch.sum(~mask[:, :, 0], 1) + valid_W = torch.sum(~mask[:, 0, :], 1) + valid_ratio_h = valid_H.float() / H + valid_ratio_w = valid_W.float() / W + valid_ratio = torch.stack([valid_ratio_w, valid_ratio_h], -1) + return valid_ratio + + def forward(self, srcs, masks, pos_embeds, query_embed=None): + """ + Input: + - srcs: List([bs, c, h, w]) + - masks: List([bs, h, w]) + """ + assert self.two_stage or query_embed is not None + + # prepare input for encoder + src_flatten = [] + mask_flatten = [] + lvl_pos_embed_flatten = [] + spatial_shapes = [] + for lvl, (src, mask, pos_embed) in enumerate(zip(srcs, masks, pos_embeds)): + bs, c, h, w = src.shape + spatial_shape = (h, w) + spatial_shapes.append(spatial_shape) + + src = src.flatten(2).transpose(1, 2) # bs, hw, c + mask = mask.flatten(1) # bs, hw + pos_embed = pos_embed.flatten(2).transpose(1, 2) # bs, hw, c + lvl_pos_embed = pos_embed + self.level_embed[lvl].view(1, 1, -1) + lvl_pos_embed_flatten.append(lvl_pos_embed) + src_flatten.append(src) + mask_flatten.append(mask) + src_flatten = torch.cat(src_flatten, 1) # bs, \sum{hxw}, c + mask_flatten = torch.cat(mask_flatten, 1) # bs, \sum{hxw} + lvl_pos_embed_flatten = torch.cat(lvl_pos_embed_flatten, 1) + spatial_shapes = torch.as_tensor(spatial_shapes, dtype=torch.long, device=src_flatten.device) + level_start_index = torch.cat((spatial_shapes.new_zeros((1, )), spatial_shapes.prod(1).cumsum(0)[:-1])) + valid_ratios = torch.stack([self.get_valid_ratio(m) for m in masks], 1) + + # encoder + memory = self.encoder(src_flatten, spatial_shapes, level_start_index, valid_ratios, lvl_pos_embed_flatten, mask_flatten) + # import ipdb; ipdb.set_trace() + + # prepare input for decoder + bs, _, c = memory.shape + if self.two_stage: + output_memory, output_proposals = self.gen_encoder_output_proposals(memory, mask_flatten, spatial_shapes) + + # hack implementation for two-stage Deformable DETR + enc_outputs_class = self.decoder.class_embed[self.decoder.num_layers](output_memory) + enc_outputs_coord_unact = self.decoder.bbox_embed[self.decoder.num_layers](output_memory) + output_proposals + + topk = self.two_stage_num_proposals + topk_proposals = torch.topk(enc_outputs_class[..., 0], topk, dim=1)[1] + topk_coords_unact = torch.gather(enc_outputs_coord_unact, 1, topk_proposals.unsqueeze(-1).repeat(1, 1, 4)) + topk_coords_unact = topk_coords_unact.detach() + reference_points = topk_coords_unact.sigmoid() + init_reference_out = reference_points + pos_trans_out = self.pos_trans_norm(self.pos_trans(self.get_proposal_pos_embed(topk_coords_unact))) + query_embed, tgt = torch.split(pos_trans_out, c, dim=2) + elif self.use_dab: + reference_points = query_embed[..., self.d_model:].sigmoid() + tgt = query_embed[..., :self.d_model] + tgt = tgt.unsqueeze(0).expand(bs, -1, -1) + init_reference_out = reference_points + else: + query_embed, tgt = torch.split(query_embed, c, dim=1) + query_embed = query_embed.unsqueeze(0).expand(bs, -1, -1) + tgt = tgt.unsqueeze(0).expand(bs, -1, -1) + reference_points = self.reference_points(query_embed).sigmoid() + # bs, num_quires, 2 + init_reference_out = reference_points + + # decoder + # import ipdb; ipdb.set_trace() + hs, inter_references = self.decoder(tgt, reference_points, memory, + spatial_shapes, level_start_index, valid_ratios, + query_pos=query_embed if not self.use_dab else None, + src_padding_mask=mask_flatten) + + inter_references_out = inter_references + if self.two_stage: + return hs, init_reference_out, inter_references_out, enc_outputs_class, enc_outputs_coord_unact + return hs, init_reference_out, inter_references_out, None, None + + +class DeformableTransformerEncoderLayer(nn.Module): + def __init__(self, + d_model=256, d_ffn=1024, + dropout=0.1, activation="relu", + n_levels=4, n_heads=8, n_points=4, + add_channel_attention=False, + use_deformable_box_attn=False, + box_attn_type='roi_align', + ): + super().__init__() + + # self attention + if use_deformable_box_attn: + self.self_attn = MSDeformableBoxAttention(d_model, n_levels, n_heads, n_boxes=n_points, used_func=box_attn_type) + else: + self.self_attn = MSDeformAttn(d_model, n_levels, n_heads, n_points) + self.dropout1 = nn.Dropout(dropout) + self.norm1 = nn.LayerNorm(d_model) + + # ffn + self.linear1 = nn.Linear(d_model, d_ffn) + self.activation = _get_activation_fn(activation, d_model=d_ffn) + self.dropout2 = nn.Dropout(dropout) + self.linear2 = nn.Linear(d_ffn, d_model) + self.dropout3 = nn.Dropout(dropout) + self.norm2 = nn.LayerNorm(d_model) + + # channel attention + self.add_channel_attention = add_channel_attention + if add_channel_attention: + self.activ_channel = _get_activation_fn('dyrelu', d_model=d_model) + self.norm_channel = nn.LayerNorm(d_model) + + @staticmethod + def with_pos_embed(tensor, pos): + return tensor if pos is None else tensor + pos + + def forward_ffn(self, src): + src2 = self.linear2(self.dropout2(self.activation(self.linear1(src)))) + src = src + self.dropout3(src2) + src = self.norm2(src) + return src + + def forward(self, src, pos, reference_points, spatial_shapes, level_start_index, key_padding_mask=None): + # self attention + # import ipdb; ipdb.set_trace() + src2 = self.self_attn(self.with_pos_embed(src, pos), reference_points, src, spatial_shapes, level_start_index, key_padding_mask) + src = src + self.dropout1(src2) + src = self.norm1(src) + + # ffn + src = self.forward_ffn(src) + + # channel attn + if self.add_channel_attention: + src = self.norm_channel(src + self.activ_channel(src)) + + return src + + +class DeformableTransformerEncoder(nn.Module): + def __init__(self, encoder_layer, num_layers, norm=None): + super().__init__() + if num_layers > 0: + self.layers = _get_clones(encoder_layer, num_layers) + else: + self.layers = [] + del encoder_layer + self.num_layers = num_layers + self.norm = norm + + @staticmethod + def get_reference_points(spatial_shapes, valid_ratios, device): + reference_points_list = [] + for lvl, (H_, W_) in enumerate(spatial_shapes): + + ref_y, ref_x = torch.meshgrid(torch.linspace(0.5, H_ - 0.5, H_, dtype=torch.float32, device=device), + torch.linspace(0.5, W_ - 0.5, W_, dtype=torch.float32, device=device)) + ref_y = ref_y.reshape(-1)[None] / (valid_ratios[:, None, lvl, 1] * H_) + ref_x = ref_x.reshape(-1)[None] / (valid_ratios[:, None, lvl, 0] * W_) + ref = torch.stack((ref_x, ref_y), -1) + reference_points_list.append(ref) + reference_points = torch.cat(reference_points_list, 1) + reference_points = reference_points[:, :, None] * valid_ratios[:, None] + return reference_points + + def forward(self, src, spatial_shapes, level_start_index, valid_ratios, pos=None, padding_mask=None): + """ + Input: + - src: [bs, sum(hi*wi), 256] + - spatial_shapes: h,w of each level [num_level, 2] + - level_start_index: [num_level] start point of level in sum(hi*wi). + - valid_ratios: [bs, num_level, 2] + - pos: pos embed for src. [bs, sum(hi*wi), 256] + - padding_mask: [bs, sum(hi*wi)] + Intermedia: + - reference_points: [bs, sum(hi*wi), num_lebel, 2] + """ + output = src + # bs, sum(hi*wi), 256 + # import ipdb; ipdb.set_trace() + if self.num_layers > 0: + reference_points = self.get_reference_points(spatial_shapes, valid_ratios, device=src.device) + for _, layer in enumerate(self.layers): + output = layer(output, pos, reference_points, spatial_shapes, level_start_index, padding_mask) + + if self.norm is not None: + output = self.norm(output) + + return output + + +class DeformableTransformerDecoderLayer(nn.Module): + def __init__(self, d_model=256, d_ffn=1024, + dropout=0.1, activation="relu", + n_levels=4, n_heads=8, n_points=4, + use_deformable_box_attn=False, + box_attn_type='roi_align', + key_aware_type=None, + decoder_sa_type='ca', + module_seq=['sa', 'ca', 'ffn'], + ): + super().__init__() + self.module_seq = module_seq + assert sorted(module_seq) == ['ca', 'ffn', 'sa'] + + # cross attention + # self.cross_attn = MSDeformAttn(d_model, n_levels, n_heads, n_points) + if use_deformable_box_attn: + self.cross_attn = MSDeformableBoxAttention(d_model, n_levels, n_heads, n_boxes=n_points, used_func=box_attn_type) + else: + self.cross_attn = MSDeformAttn(d_model, n_levels, n_heads, n_points) + self.dropout1 = nn.Dropout(dropout) + self.norm1 = nn.LayerNorm(d_model) + + # self attention + self.self_attn = nn.MultiheadAttention(d_model, n_heads, dropout=dropout) + self.dropout2 = nn.Dropout(dropout) + self.norm2 = nn.LayerNorm(d_model) + + # ffn + self.linear1 = nn.Linear(d_model, d_ffn) + self.activation = _get_activation_fn(activation, d_model=d_ffn, batch_dim=1) + self.dropout3 = nn.Dropout(dropout) + self.linear2 = nn.Linear(d_ffn, d_model) + self.dropout4 = nn.Dropout(dropout) + self.norm3 = nn.LayerNorm(d_model) + + self.key_aware_type = key_aware_type + self.key_aware_proj = None + self.decoder_sa_type = decoder_sa_type + assert decoder_sa_type in ['sa', 'ca_label', 'ca_content'] + + if decoder_sa_type == 'ca_content': + self.self_attn = MSDeformAttn(d_model, n_levels, n_heads, n_points) + + + + + def rm_self_attn_modules(self): + self.self_attn = None + self.dropout2 = None + self.norm2 = None + + + @staticmethod + def with_pos_embed(tensor, pos): + return tensor if pos is None else tensor + pos + + def forward_ffn(self, tgt): + tgt2 = self.linear2(self.dropout3(self.activation(self.linear1(tgt)))) + tgt = tgt + self.dropout4(tgt2) + tgt = self.norm3(tgt) + return tgt + + def forward_sa(self, + # for tgt + tgt: Optional[Tensor], # nq, bs, d_model + tgt_query_pos: Optional[Tensor] = None, # pos for query. MLP(Sine(pos)) + tgt_query_sine_embed: Optional[Tensor] = None, # pos for query. Sine(pos) + tgt_key_padding_mask: Optional[Tensor] = None, + tgt_reference_points: Optional[Tensor] = None, # nq, bs, 4 + + # for memory + memory: Optional[Tensor] = None, # hw, bs, d_model + memory_key_padding_mask: Optional[Tensor] = None, + memory_level_start_index: Optional[Tensor] = None, # num_levels + memory_spatial_shapes: Optional[Tensor] = None, # bs, num_levels, 2 + memory_pos: Optional[Tensor] = None, # pos for memory + + # sa + self_attn_mask: Optional[Tensor] = None, # mask used for self-attention + cross_attn_mask: Optional[Tensor] = None, # mask used for cross-attention + ): + # self attention + if self.self_attn is not None: + # import ipdb; ipdb.set_trace() + if self.decoder_sa_type == 'sa': + q = k = self.with_pos_embed(tgt, tgt_query_pos) + tgt2 = self.self_attn(q, k, tgt, attn_mask=self_attn_mask)[0] + tgt = tgt + self.dropout2(tgt2) + tgt = self.norm2(tgt) + elif self.decoder_sa_type == 'ca_label': + # import ipdb; ipdb.set_trace() + # q = self.with_pos_embed(tgt, tgt_query_pos) + bs = tgt.shape[1] + k = v = self.label_embedding.weight[:, None, :].repeat(1, bs, 1) + tgt2 = self.self_attn(tgt, k, v, attn_mask=self_attn_mask)[0] + tgt = tgt + self.dropout2(tgt2) + tgt = self.norm2(tgt) + elif self.decoder_sa_type == 'ca_content': + tgt2 = self.self_attn(self.with_pos_embed(tgt, tgt_query_pos).transpose(0, 1), + tgt_reference_points.transpose(0, 1).contiguous(), + memory.transpose(0, 1), memory_spatial_shapes, memory_level_start_index, memory_key_padding_mask).transpose(0, 1) + tgt = tgt + self.dropout2(tgt2) + tgt = self.norm2(tgt) + else: + raise NotImplementedError("Unknown decoder_sa_type {}".format(self.decoder_sa_type)) + + return tgt + + def forward_ca(self, + # for tgt + tgt: Optional[Tensor], # nq, bs, d_model + tgt_query_pos: Optional[Tensor] = None, # pos for query. MLP(Sine(pos)) + tgt_query_sine_embed: Optional[Tensor] = None, # pos for query. Sine(pos) + tgt_key_padding_mask: Optional[Tensor] = None, + tgt_reference_points: Optional[Tensor] = None, # nq, bs, 4 + + # for memory + memory: Optional[Tensor] = None, # hw, bs, d_model + memory_key_padding_mask: Optional[Tensor] = None, + memory_level_start_index: Optional[Tensor] = None, # num_levels + memory_spatial_shapes: Optional[Tensor] = None, # bs, num_levels, 2 + memory_pos: Optional[Tensor] = None, # pos for memory + + # sa + self_attn_mask: Optional[Tensor] = None, # mask used for self-attention + cross_attn_mask: Optional[Tensor] = None, # mask used for cross-attention + ): + # cross attention + # import ipdb; ipdb.set_trace() + if self.key_aware_type is not None: + + if self.key_aware_type == 'mean': + tgt = tgt + memory.mean(0, keepdim=True) + elif self.key_aware_type == 'proj_mean': + tgt = tgt + self.key_aware_proj(memory).mean(0, keepdim=True) + else: + raise NotImplementedError("Unknown key_aware_type: {}".format(self.key_aware_type)) + tgt2 = self.cross_attn(self.with_pos_embed(tgt, tgt_query_pos).transpose(0, 1), + tgt_reference_points.transpose(0, 1).contiguous(), + memory.transpose(0, 1), memory_spatial_shapes, memory_level_start_index, memory_key_padding_mask).transpose(0, 1) + tgt = tgt + self.dropout1(tgt2) + tgt = self.norm1(tgt) + + return tgt + + def forward(self, + # for tgt + tgt: Optional[Tensor], # nq, bs, d_model + tgt_query_pos: Optional[Tensor] = None, # pos for query. MLP(Sine(pos)) + tgt_query_sine_embed: Optional[Tensor] = None, # pos for query. Sine(pos) + tgt_key_padding_mask: Optional[Tensor] = None, + tgt_reference_points: Optional[Tensor] = None, # nq, bs, 4 + + # for memory + memory: Optional[Tensor] = None, # hw, bs, d_model + memory_key_padding_mask: Optional[Tensor] = None, + memory_level_start_index: Optional[Tensor] = None, # num_levels + memory_spatial_shapes: Optional[Tensor] = None, # bs, num_levels, 2 + memory_pos: Optional[Tensor] = None, # pos for memory + + # sa + self_attn_mask: Optional[Tensor] = None, # mask used for self-attention + cross_attn_mask: Optional[Tensor] = None, # mask used for cross-attention + ): + + for funcname in self.module_seq: + # if os.environ.get('IPDB_DEBUG_SHILONG') == 'INFO': + # import ipdb; ipdb.set_trace() + if funcname == 'ffn': + tgt = self.forward_ffn(tgt) + elif funcname == 'ca': + tgt = self.forward_ca(tgt, tgt_query_pos, tgt_query_sine_embed, \ + tgt_key_padding_mask, tgt_reference_points, \ + memory, memory_key_padding_mask, memory_level_start_index, \ + memory_spatial_shapes, memory_pos, self_attn_mask, cross_attn_mask) + elif funcname == 'sa': + tgt = self.forward_sa(tgt, tgt_query_pos, tgt_query_sine_embed, \ + tgt_key_padding_mask, tgt_reference_points, \ + memory, memory_key_padding_mask, memory_level_start_index, \ + memory_spatial_shapes, memory_pos, self_attn_mask, cross_attn_mask) + else: + raise ValueError('unknown funcname {}'.format(funcname)) + + return tgt + + + +class DeformableTransformerDecoder(nn.Module): + def __init__(self, decoder_layer, num_layers, return_intermediate=False, use_dab=False, d_model=256, query_dim=4): + super().__init__() + self.layers = _get_clones(decoder_layer, num_layers) + self.num_layers = num_layers + self.return_intermediate = return_intermediate + assert return_intermediate + # hack implementation for iterative bounding box refinement and two-stage Deformable DETR + self.bbox_embed = None + self.class_embed = None + self.use_dab = use_dab + self.d_model = d_model + self.query_dim = query_dim + if use_dab: + self.query_scale = MLP(d_model, d_model, d_model, 2) + self.ref_point_head = MLP(2 * d_model, d_model, d_model, 2) + + + def forward(self, tgt, reference_points, src, src_spatial_shapes, + src_level_start_index, src_valid_ratios, + query_pos=None, src_padding_mask=None): + output = tgt + if self.use_dab: + assert query_pos is None + + intermediate = [] + intermediate_reference_points = [reference_points] + for layer_id, layer in enumerate(self.layers): + # import ipdb; ipdb.set_trace() + if reference_points.shape[-1] == 4: + reference_points_input = reference_points[:, :, None] \ + * torch.cat([src_valid_ratios, src_valid_ratios], -1)[:, None] # bs, nq, 4, 4 + else: + assert reference_points.shape[-1] == 2 + reference_points_input = reference_points[:, :, None] * src_valid_ratios[:, None] + + if self.use_dab: + # import ipdb; ipdb.set_trace() + query_sine_embed = gen_sineembed_for_position(reference_points_input[:, :, 0, :]) # bs, nq, 256*2 + raw_query_pos = self.ref_point_head(query_sine_embed) # bs, nq, 256 + pos_scale = self.query_scale(output) if layer_id != 0 else 1 + query_pos = pos_scale * raw_query_pos + + output = layer(output, query_pos, reference_points_input, src, src_spatial_shapes, src_level_start_index, src_padding_mask) + + # hack implementation for iterative bounding box refinement + if self.bbox_embed is not None: + box_holder = self.bbox_embed(output) + box_holder[..., :self.query_dim] += inverse_sigmoid(reference_points) + new_reference_points = box_holder[..., :self.query_dim].sigmoid() + reference_points = new_reference_points.detach() + if layer_id != self.num_layers - 1: + intermediate_reference_points.append(new_reference_points) + + intermediate.append(output) + + return torch.stack(intermediate), torch.stack(intermediate_reference_points) + + +def _get_clones(module, N): + return nn.ModuleList([copy.deepcopy(module) for i in range(N)]) + + +def build_deforamble_transformer(args): + return DeformableTransformer( + d_model=args.hidden_dim, + nhead=args.nheads, + num_encoder_layers=args.enc_layers, + num_decoder_layers=args.dec_layers, + dim_feedforward=args.dim_feedforward, + dropout=args.dropout, + activation="relu", + return_intermediate_dec=True, + num_feature_levels=args.ddetr_num_feature_levels, + dec_n_points=args.ddetr_dec_n_points, + enc_n_points=args.ddetr_enc_n_points, + two_stage=args.ddetr_two_stage, + two_stage_num_proposals=args.num_queries, + use_dab=args.ddetr_use_dab, + high_dim_query_update=args.ddetr_high_dim_query_update, + no_sine_embed=args.ddetr_no_sine_embed) diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/transformer_vanilla.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/transformer_vanilla.py new file mode 100644 index 0000000..450885a --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/transformer_vanilla.py @@ -0,0 +1,102 @@ +# Copyright (c) Aishwarya Kamath & Nicolas Carion. Licensed under the Apache License 2.0. All Rights Reserved +# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved +""" +DETR Transformer class. + +Copy-paste from torch.nn.Transformer with modifications: + * positional encodings are passed in MHattention + * extra LN at the end of encoder is removed + * decoder returns a stack of activations from all decoding layers +""" +import torch +from torch import Tensor, nn +from typing import List, Optional + +from .utils import _get_activation_fn, _get_clones + + +class TextTransformer(nn.Module): + def __init__(self, num_layers, d_model=256, nheads=8, dim_feedforward=2048, dropout=0.1): + super().__init__() + self.num_layers = num_layers + self.d_model = d_model + self.nheads = nheads + self.dim_feedforward = dim_feedforward + self.norm = None + + single_encoder_layer = TransformerEncoderLayer(d_model=d_model, nhead=nheads, dim_feedforward=dim_feedforward, dropout=dropout) + self.layers = _get_clones(single_encoder_layer, num_layers) + + + def forward(self, memory_text:torch.Tensor, text_attention_mask:torch.Tensor): + """ + + Args: + text_attention_mask: bs, num_token + memory_text: bs, num_token, d_model + + Raises: + RuntimeError: _description_ + + Returns: + output: bs, num_token, d_model + """ + + output = memory_text.transpose(0, 1) + + for layer in self.layers: + output = layer(output, src_key_padding_mask=text_attention_mask) + + if self.norm is not None: + output = self.norm(output) + + return output.transpose(0, 1) + + + + +class TransformerEncoderLayer(nn.Module): + def __init__(self, d_model, nhead, dim_feedforward=2048, dropout=0.1, activation="relu", normalize_before=False): + super().__init__() + self.self_attn = nn.MultiheadAttention(d_model, nhead, dropout=dropout) + # Implementation of Feedforward model + self.linear1 = nn.Linear(d_model, dim_feedforward) + self.dropout = nn.Dropout(dropout) + self.linear2 = nn.Linear(dim_feedforward, d_model) + + self.norm1 = nn.LayerNorm(d_model) + self.norm2 = nn.LayerNorm(d_model) + self.dropout1 = nn.Dropout(dropout) + self.dropout2 = nn.Dropout(dropout) + + self.activation = _get_activation_fn(activation) + self.normalize_before = normalize_before + self.nhead = nhead + + def with_pos_embed(self, tensor, pos: Optional[Tensor]): + return tensor if pos is None else tensor + pos + + def forward( + self, + src, + src_mask: Optional[Tensor] = None, + src_key_padding_mask: Optional[Tensor] = None, + pos: Optional[Tensor] = None, + ): + # repeat attn mask + if src_mask.dim() == 3 and src_mask.shape[0] == src.shape[1]: + # bs, num_q, num_k + src_mask = src_mask.repeat(self.nhead, 1, 1) + + q = k = self.with_pos_embed(src, pos) + + src2 = self.self_attn(q, k, value=src, attn_mask=src_mask)[0] + + # src2 = self.self_attn(q, k, value=src, attn_mask=src_mask, key_padding_mask=src_key_padding_mask)[0] + src = src + self.dropout1(src2) + src = self.norm1(src) + src2 = self.linear2(self.dropout(self.activation(self.linear1(src)))) + src = src + self.dropout2(src2) + src = self.norm2(src) + return src + diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/unipose.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/unipose.py new file mode 100644 index 0000000..d05c94c --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/unipose.py @@ -0,0 +1,621 @@ +# ------------------------------------------------------------------------ +# ED-Pose +# Copyright (c) 2023 IDEA. All Rights Reserved. +# Licensed under the Apache License, Version 2.0 [see LICENSE for details] +# ------------------------------------------------------------------------ +# Modified from Deformable DETR (https://github.com/fundamentalvision/Deformable-DETR) +# Copyright (c) 2020 SenseTime. All Rights Reserved. +# ------------------------------------------------------------------------ +import os +import copy +import torch +import torch.nn.functional as F +from torch import nn +from typing import List + +from util.keypoint_ops import keypoint_xyzxyz_to_xyxyzz +from util.misc import NestedTensor, nested_tensor_from_tensor_list,inverse_sigmoid + +from .utils import MLP +from .backbone import build_backbone +from ..registry import MODULE_BUILD_FUNCS +from .mask_generate import prepare_for_mask, post_process +from .deformable_transformer import build_deformable_transformer + + +class UniPose(nn.Module): + """ This is the Cross-Attention Detector module that performs object detection """ + + def __init__(self, backbone, transformer, num_classes, num_queries, + aux_loss=False, iter_update=False, + query_dim=2, + random_refpoints_xy=False, + fix_refpoints_hw=-1, + num_feature_levels=1, + nheads=8, + # two stage + two_stage_type='no', # ['no', 'standard'] + two_stage_add_query_num=0, + dec_pred_class_embed_share=True, + dec_pred_bbox_embed_share=True, + two_stage_class_embed_share=True, + two_stage_bbox_embed_share=True, + decoder_sa_type='sa', + num_patterns=0, + dn_number=100, + dn_box_noise_scale=0.4, + dn_label_noise_ratio=0.5, + dn_labelbook_size=100, + use_label_enc=True, + + text_encoder_type='bert-base-uncased', + + binary_query_selection=False, + use_cdn=True, + sub_sentence_present=True, + num_body_points=68, + num_box_decoder_layers=2, + ): + """ Initializes the model. + Parameters: + backbone: torch module of the backbone to be used. See backbone.py + transformer: torch module of the transformer architecture. See transformer.py + num_classes: number of object classes + num_queries: number of object queries, ie detection slot. This is the maximal number of objects + Conditional DETR can detect in a single image. For COCO, we recommend 100 queries. + aux_loss: True if auxiliary decoding losses (loss at each decoder layer) are to be used. + + fix_refpoints_hw: -1(default): learn w and h for each box seperately + >0 : given fixed number + -2 : learn a shared w and h + """ + super().__init__() + self.num_queries = num_queries + self.transformer = transformer + self.num_classes = num_classes + self.hidden_dim = hidden_dim = transformer.d_model + self.num_feature_levels = num_feature_levels + self.nheads = nheads + self.use_label_enc = use_label_enc + if use_label_enc: + self.label_enc = nn.Embedding(dn_labelbook_size + 1, hidden_dim) + else: + raise NotImplementedError + self.label_enc = None + self.max_text_len = 256 + self.binary_query_selection = binary_query_selection + self.sub_sentence_present = sub_sentence_present + + # setting query dim + self.query_dim = query_dim + assert query_dim == 4 + self.random_refpoints_xy = random_refpoints_xy + self.fix_refpoints_hw = fix_refpoints_hw + + # for dn training + self.num_patterns = num_patterns + self.dn_number = dn_number + self.dn_box_noise_scale = dn_box_noise_scale + self.dn_label_noise_ratio = dn_label_noise_ratio + self.dn_labelbook_size = dn_labelbook_size + self.use_cdn = use_cdn + + + self.projection = MLP(512, hidden_dim, hidden_dim, 3) + + self.projection_kpt = MLP(512, hidden_dim, hidden_dim, 3) + + + device = "cuda" if torch.cuda.is_available() else "cpu" + # model, _ = clip.load("ViT-B/32", device=device) + # self.clip_model = model + # visual_parameters = list(self.clip_model.visual.parameters()) + # # + # for param in visual_parameters: + # param.requires_grad = False + + self.pos_proj = nn.Linear(hidden_dim, 768) + self.padding = nn.Embedding(1, 768) + + # prepare input projection layers + if num_feature_levels > 1: + num_backbone_outs = len(backbone.num_channels) + input_proj_list = [] + for _ in range(num_backbone_outs): + in_channels = backbone.num_channels[_] + input_proj_list.append(nn.Sequential( + nn.Conv2d(in_channels, hidden_dim, kernel_size=1), + nn.GroupNorm(32, hidden_dim), + )) + for _ in range(num_feature_levels - num_backbone_outs): + input_proj_list.append(nn.Sequential( + nn.Conv2d(in_channels, hidden_dim, kernel_size=3, stride=2, padding=1), + nn.GroupNorm(32, hidden_dim), + )) + in_channels = hidden_dim + self.input_proj = nn.ModuleList(input_proj_list) + else: + assert two_stage_type == 'no', "two_stage_type should be no if num_feature_levels=1 !!!" + self.input_proj = nn.ModuleList([ + nn.Sequential( + nn.Conv2d(backbone.num_channels[-1], hidden_dim, kernel_size=1), + nn.GroupNorm(32, hidden_dim), + )]) + + self.backbone = backbone + self.aux_loss = aux_loss + self.box_pred_damping = box_pred_damping = None + + self.iter_update = iter_update + assert iter_update, "Why not iter_update?" + + # prepare pred layers + self.dec_pred_class_embed_share = dec_pred_class_embed_share + self.dec_pred_bbox_embed_share = dec_pred_bbox_embed_share + # prepare class & box embed + _class_embed = ContrastiveAssign() + + + + _bbox_embed = MLP(hidden_dim, hidden_dim, 4, 3) + nn.init.constant_(_bbox_embed.layers[-1].weight.data, 0) + nn.init.constant_(_bbox_embed.layers[-1].bias.data, 0) + + _pose_embed = MLP(hidden_dim, hidden_dim, 2, 3) + _pose_hw_embed = MLP(hidden_dim, hidden_dim, 2, 3) + nn.init.constant_(_pose_embed.layers[-1].weight.data, 0) + nn.init.constant_(_pose_embed.layers[-1].bias.data, 0) + + if dec_pred_bbox_embed_share: + box_embed_layerlist = [_bbox_embed for i in range(transformer.num_decoder_layers)] + else: + box_embed_layerlist = [copy.deepcopy(_bbox_embed) for i in range(transformer.num_decoder_layers)] + if dec_pred_class_embed_share: + class_embed_layerlist = [_class_embed for i in range(transformer.num_decoder_layers)] + else: + class_embed_layerlist = [copy.deepcopy(_class_embed) for i in range(transformer.num_decoder_layers)] + + + if dec_pred_bbox_embed_share: + + pose_embed_layerlist = [_pose_embed for i in + range(transformer.num_decoder_layers - num_box_decoder_layers + 1)] + else: + pose_embed_layerlist = [copy.deepcopy(_pose_embed) for i in + range(transformer.num_decoder_layers - num_box_decoder_layers + 1)] + + pose_hw_embed_layerlist = [_pose_hw_embed for i in + range(transformer.num_decoder_layers - num_box_decoder_layers)] + + + self.num_box_decoder_layers = num_box_decoder_layers + self.bbox_embed = nn.ModuleList(box_embed_layerlist) + self.class_embed = nn.ModuleList(class_embed_layerlist) + self.num_body_points = num_body_points + self.pose_embed = nn.ModuleList(pose_embed_layerlist) + self.pose_hw_embed = nn.ModuleList(pose_hw_embed_layerlist) + + self.transformer.decoder.bbox_embed = self.bbox_embed + self.transformer.decoder.class_embed = self.class_embed + + self.transformer.decoder.pose_embed = self.pose_embed + self.transformer.decoder.pose_hw_embed = self.pose_hw_embed + + self.transformer.decoder.num_body_points = num_body_points + + + # two stage + self.two_stage_type = two_stage_type + self.two_stage_add_query_num = two_stage_add_query_num + assert two_stage_type in ['no', 'standard'], "unknown param {} of two_stage_type".format(two_stage_type) + if two_stage_type != 'no': + if two_stage_bbox_embed_share: + assert dec_pred_class_embed_share and dec_pred_bbox_embed_share + self.transformer.enc_out_bbox_embed = _bbox_embed + else: + self.transformer.enc_out_bbox_embed = copy.deepcopy(_bbox_embed) + + if two_stage_class_embed_share: + assert dec_pred_class_embed_share and dec_pred_bbox_embed_share + self.transformer.enc_out_class_embed = _class_embed + else: + self.transformer.enc_out_class_embed = copy.deepcopy(_class_embed) + + self.refpoint_embed = None + if self.two_stage_add_query_num > 0: + self.init_ref_points(two_stage_add_query_num) + + self.decoder_sa_type = decoder_sa_type + assert decoder_sa_type in ['sa', 'ca_label', 'ca_content'] + # self.replace_sa_with_double_ca = replace_sa_with_double_ca + if decoder_sa_type == 'ca_label': + self.label_embedding = nn.Embedding(num_classes, hidden_dim) + for layer in self.transformer.decoder.layers: + layer.label_embedding = self.label_embedding + else: + for layer in self.transformer.decoder.layers: + layer.label_embedding = None + self.label_embedding = None + + self._reset_parameters() + + def open_set_transfer_init(self): + for name, param in self.named_parameters(): + if 'fusion_layers' in name: + continue + if 'ca_text' in name: + continue + if 'catext_norm' in name: + continue + if 'catext_dropout' in name: + continue + if "text_layers" in name: + continue + if 'bert' in name: + continue + if 'bbox_embed' in name: + continue + if 'label_enc.weight' in name: + continue + if 'feat_map' in name: + continue + if 'enc_output' in name: + continue + + param.requires_grad_(False) + + # import ipdb; ipdb.set_trace() + + def _reset_parameters(self): + # init input_proj + for proj in self.input_proj: + nn.init.xavier_uniform_(proj[0].weight, gain=1) + nn.init.constant_(proj[0].bias, 0) + + def init_ref_points(self, use_num_queries): + self.refpoint_embed = nn.Embedding(use_num_queries, self.query_dim) + + if self.random_refpoints_xy: + # import ipdb; ipdb.set_trace() + self.refpoint_embed.weight.data[:, :2].uniform_(0, 1) + self.refpoint_embed.weight.data[:, :2] = inverse_sigmoid(self.refpoint_embed.weight.data[:, :2]) + self.refpoint_embed.weight.data[:, :2].requires_grad = False + + if self.fix_refpoints_hw > 0: + print("fix_refpoints_hw: {}".format(self.fix_refpoints_hw)) + assert self.random_refpoints_xy + self.refpoint_embed.weight.data[:, 2:] = self.fix_refpoints_hw + self.refpoint_embed.weight.data[:, 2:] = inverse_sigmoid(self.refpoint_embed.weight.data[:, 2:]) + self.refpoint_embed.weight.data[:, 2:].requires_grad = False + elif int(self.fix_refpoints_hw) == -1: + pass + elif int(self.fix_refpoints_hw) == -2: + print('learn a shared h and w') + assert self.random_refpoints_xy + self.refpoint_embed = nn.Embedding(use_num_queries, 2) + self.refpoint_embed.weight.data[:, :2].uniform_(0, 1) + self.refpoint_embed.weight.data[:, :2] = inverse_sigmoid(self.refpoint_embed.weight.data[:, :2]) + self.refpoint_embed.weight.data[:, :2].requires_grad = False + self.hw_embed = nn.Embedding(1, 1) + else: + raise NotImplementedError('Unknown fix_refpoints_hw {}'.format(self.fix_refpoints_hw)) + + def forward(self, samples: NestedTensor, targets: List = None, **kw): + """ The forward expects a NestedTensor, which consists of: + - samples.tensor: batched images, of shape [batch_size x 3 x H x W] + - samples.mask: a binary mask of shape [batch_size x H x W], containing 1 on padded pixels + + It returns a dict with the following elements: + - "pred_logits": the classification logits (including no-object) for all queries. + Shape= [batch_size x num_queries x num_classes] + - "pred_boxes": The normalized boxes coordinates for all queries, represented as + (center_x, center_y, width, height). These values are normalized in [0, 1], + relative to the size of each individual image (disregarding possible padding). + See PostProcess for information on how to retrieve the unnormalized bounding box. + - "aux_outputs": Optional, only returned when auxilary losses are activated. It is a list of + dictionnaries containing the two above keys for each decoder layer. + """ + + captions = [t['instance_text_prompt'] for t in targets] + bs=len(captions) + tensor_list = [tgt["object_embeddings_text"] for tgt in targets] + max_size = 350 + padded_tensors = [torch.cat([tensor, torch.zeros(max_size - tensor.size(0), tensor.size(1),device=tensor.device)]) if tensor.size(0) < max_size else tensor for tensor in tensor_list] + object_embeddings_text = torch.stack(padded_tensors) + + kpts_embeddings_text = torch.stack([tgt["kpts_embeddings_text"] for tgt in targets])[:, :self.num_body_points] + encoded_text=self.projection(object_embeddings_text) # bs, 81, 101, 256 + kpt_embeddings_specific=self.projection_kpt(kpts_embeddings_text) # bs, 81, 101, 256 + + + kpt_vis = torch.stack([tgt["kpt_vis_text"] for tgt in targets])[:, :self.num_body_points] + kpt_mask = torch.cat((torch.ones_like(kpt_vis, device=kpt_vis.device)[..., 0].unsqueeze(-1), kpt_vis), dim=-1) + + + num_classes = encoded_text.shape[1] # bs, 81, 101, 256 + text_self_attention_masks = torch.eye(num_classes).unsqueeze(0).expand(bs, -1, -1).bool().to(samples.device) + text_token_mask = torch.zeros(samples.shape[0],num_classes).to(samples.device)>0 + for i in range(bs): + text_token_mask[i,:len(captions[i])]=True + + position_ids = torch.zeros(samples.shape[0], num_classes).to(samples.device) + + for i in range(bs): + position_ids[i,:len(captions[i])]= 1 + + + text_dict = { + 'encoded_text': encoded_text, # bs, 195, d_model + 'text_token_mask': text_token_mask, # bs, 195 + 'position_ids': position_ids, # bs, 195 + 'text_self_attention_masks': text_self_attention_masks # bs, 195,195 + } + + + # import ipdb; ipdb.set_trace() + + if isinstance(samples, (list, torch.Tensor)): + samples = nested_tensor_from_tensor_list(samples) + features, poss = self.backbone(samples) + if os.environ.get("SHILONG_AMP_INFNAN_DEBUG") == '1': + import ipdb; + ipdb.set_trace() + + + srcs = [] + masks = [] + for l, feat in enumerate(features): + src, mask = feat.decompose() + srcs.append(self.input_proj[l](src)) + masks.append(mask) + assert mask is not None + + if self.num_feature_levels > len(srcs): + _len_srcs = len(srcs) + for l in range(_len_srcs, self.num_feature_levels): + if l == _len_srcs: + src = self.input_proj[l](features[-1].tensors) + else: + src = self.input_proj[l](srcs[-1]) + m = samples.mask + mask = F.interpolate(m[None].float(), size=src.shape[-2:]).to(torch.bool)[0] + pos_l = self.backbone[1](NestedTensor(src, mask)).to(src.dtype) + srcs.append(src) + masks.append(mask) + poss.append(pos_l) + + if self.label_enc is not None: + label_enc = self.label_enc + else: + raise NotImplementedError + label_enc = encoded_text + if self.dn_number > 0 or targets is not None: + input_query_label, input_query_bbox, attn_mask, attn_mask2, dn_meta = \ + prepare_for_mask(kpt_mask=kpt_mask) + else: + assert targets is None + input_query_bbox = input_query_label = attn_mask = attn_mask2 = dn_meta = None + + + hs, reference, hs_enc, ref_enc, init_box_proposal = self.transformer(srcs, masks, input_query_bbox, poss, + input_query_label, attn_mask, attn_mask2, + text_dict, dn_meta,targets,kpt_embeddings_specific) + + # In case num object=0 + if self.label_enc is not None: + hs[0] += self.label_enc.weight[0, 0] * 0.0 + + hs[0] += self.pos_proj.weight[0, 0] * 0.0 + hs[0] += self.pos_proj.bias[0] * 0.0 + hs[0] += self.padding.weight[0, 0] * 0.0 + + num_group = 50 + effective_dn_number = dn_meta['pad_size'] if self.training else 0 + outputs_coord_list = [] + outputs_class = [] + + + for dec_lid, (layer_ref_sig, layer_bbox_embed, layer_cls_embed, layer_hs) in enumerate( + zip(reference[:-1], self.bbox_embed, self.class_embed, hs)): + + + if dec_lid < self.num_box_decoder_layers: + layer_delta_unsig = layer_bbox_embed(layer_hs) + layer_outputs_unsig = layer_delta_unsig + inverse_sigmoid(layer_ref_sig) + layer_outputs_unsig = layer_outputs_unsig.sigmoid() + layer_cls = layer_cls_embed(layer_hs, text_dict) + outputs_coord_list.append(layer_outputs_unsig) + outputs_class.append(layer_cls) + + + else: + + layer_hs_bbox_dn = layer_hs[:, :effective_dn_number, :] + layer_hs_bbox_norm = layer_hs[:, effective_dn_number:, :][:, 0::(self.num_body_points + 1), :] + bs = layer_ref_sig.shape[0] + reference_before_sigmoid_bbox_dn = layer_ref_sig[:, :effective_dn_number, :] + reference_before_sigmoid_bbox_norm = layer_ref_sig[:, effective_dn_number:, :][:, + 0::(self.num_body_points + 1), :] + layer_delta_unsig_dn = layer_bbox_embed(layer_hs_bbox_dn) + layer_delta_unsig_norm = layer_bbox_embed(layer_hs_bbox_norm) + layer_outputs_unsig_dn = layer_delta_unsig_dn + inverse_sigmoid(reference_before_sigmoid_bbox_dn) + layer_outputs_unsig_dn = layer_outputs_unsig_dn.sigmoid() + layer_outputs_unsig_norm = layer_delta_unsig_norm + inverse_sigmoid(reference_before_sigmoid_bbox_norm) + layer_outputs_unsig_norm = layer_outputs_unsig_norm.sigmoid() + layer_outputs_unsig = torch.cat((layer_outputs_unsig_dn, layer_outputs_unsig_norm), dim=1) + layer_cls_dn = layer_cls_embed(layer_hs_bbox_dn, text_dict) + layer_cls_norm = layer_cls_embed(layer_hs_bbox_norm, text_dict) + layer_cls = torch.cat((layer_cls_dn, layer_cls_norm), dim=1) + outputs_class.append(layer_cls) + outputs_coord_list.append(layer_outputs_unsig) + + # update keypoints + outputs_keypoints_list = [] + outputs_keypoints_hw = [] + kpt_index = [x for x in range(num_group * (self.num_body_points + 1)) if x % (self.num_body_points + 1) != 0] + for dec_lid, (layer_ref_sig, layer_hs) in enumerate(zip(reference[:-1], hs)): + if dec_lid < self.num_box_decoder_layers: + assert isinstance(layer_hs, torch.Tensor) + bs = layer_hs.shape[0] + layer_res = layer_hs.new_zeros((bs, self.num_queries, self.num_body_points * 3)) + outputs_keypoints_list.append(layer_res) + else: + bs = layer_ref_sig.shape[0] + layer_hs_kpt = layer_hs[:, effective_dn_number:, :].index_select(1, torch.tensor(kpt_index, + device=layer_hs.device)) + delta_xy_unsig = self.pose_embed[dec_lid - self.num_box_decoder_layers](layer_hs_kpt) + layer_ref_sig_kpt = layer_ref_sig[:, effective_dn_number:, :].index_select(1, torch.tensor(kpt_index, + device=layer_hs.device)) + layer_outputs_unsig_keypoints = delta_xy_unsig + inverse_sigmoid(layer_ref_sig_kpt[..., :2]) + vis_xy_unsig = torch.ones_like(layer_outputs_unsig_keypoints, + device=layer_outputs_unsig_keypoints.device) + xyv = torch.cat((layer_outputs_unsig_keypoints, vis_xy_unsig[:, :, 0].unsqueeze(-1)), dim=-1) + xyv = xyv.sigmoid() + layer_res = xyv.reshape((bs, num_group, self.num_body_points, 3)).flatten(2, 3) + layer_hw = layer_ref_sig_kpt[..., 2:].reshape(bs, num_group, self.num_body_points, 2).flatten(2, 3) + layer_res = keypoint_xyzxyz_to_xyxyzz(layer_res) + outputs_keypoints_list.append(layer_res) + outputs_keypoints_hw.append(layer_hw) + + + if self.dn_number > 0 and dn_meta is not None: + outputs_class, outputs_coord_list = \ + post_process(outputs_class, outputs_coord_list, + dn_meta, self.aux_loss, self._set_aux_loss) + out = {'pred_logits': outputs_class[-1], 'pred_boxes': outputs_coord_list[-1], + 'pred_keypoints': outputs_keypoints_list[-1]} + + return out + + +@MODULE_BUILD_FUNCS.registe_with_name(module_name='UniPose') +def build_unipose(args): + + num_classes = args.num_classes + device = torch.device(args.device) + + backbone = build_backbone(args) + + transformer = build_deformable_transformer(args) + + try: + match_unstable_error = args.match_unstable_error + dn_labelbook_size = args.dn_labelbook_size + except: + match_unstable_error = True + dn_labelbook_size = num_classes + + try: + dec_pred_class_embed_share = args.dec_pred_class_embed_share + except: + dec_pred_class_embed_share = True + try: + dec_pred_bbox_embed_share = args.dec_pred_bbox_embed_share + except: + dec_pred_bbox_embed_share = True + + binary_query_selection = False + try: + binary_query_selection = args.binary_query_selection + except: + binary_query_selection = False + + use_cdn = True + try: + use_cdn = args.use_cdn + except: + use_cdn = True + + sub_sentence_present = True + try: + sub_sentence_present = args.sub_sentence_present + except: + sub_sentence_present = True + # print('********* sub_sentence_present', sub_sentence_present) + + model = UniPose( + backbone, + transformer, + num_classes=num_classes, + num_queries=args.num_queries, + aux_loss=True, + iter_update=True, + query_dim=4, + random_refpoints_xy=args.random_refpoints_xy, + fix_refpoints_hw=args.fix_refpoints_hw, + num_feature_levels=args.num_feature_levels, + nheads=args.nheads, + dec_pred_class_embed_share=dec_pred_class_embed_share, + dec_pred_bbox_embed_share=dec_pred_bbox_embed_share, + # two stage + two_stage_type=args.two_stage_type, + # box_share + two_stage_bbox_embed_share=args.two_stage_bbox_embed_share, + two_stage_class_embed_share=args.two_stage_class_embed_share, + decoder_sa_type=args.decoder_sa_type, + num_patterns=args.num_patterns, + dn_number=args.dn_number if args.use_dn else 0, + dn_box_noise_scale=args.dn_box_noise_scale, + dn_label_noise_ratio=args.dn_label_noise_ratio, + dn_labelbook_size=dn_labelbook_size, + use_label_enc=args.use_label_enc, + + text_encoder_type=args.text_encoder_type, + + binary_query_selection=binary_query_selection, + use_cdn=use_cdn, + sub_sentence_present=sub_sentence_present + ) + + return model + + +class ContrastiveAssign(nn.Module): + def __init__(self, project=False, cal_bias=None, max_text_len=256): + """ + :param x: query + :param y: text embed + :param proj: + :return: + """ + super().__init__() + self.project = project + self.cal_bias = cal_bias + self.max_text_len = max_text_len + + def forward(self, x, text_dict): + """_summary_ + + Args: + x (_type_): _description_ + text_dict (_type_): _description_ + { + 'encoded_text': encoded_text, # bs, 195, d_model + 'text_token_mask': text_token_mask, # bs, 195 + # True for used tokens. False for padding tokens + } + Returns: + _type_: _description_ + """ + assert isinstance(text_dict, dict) + + y = text_dict['encoded_text'] + + + max_text_len = y.shape[1] + + + + text_token_mask = text_dict['text_token_mask'] + + if self.cal_bias is not None: + raise NotImplementedError + return x @ y.transpose(-1, -2) + self.cal_bias.weight.repeat(x.shape[0], x.shape[1], 1) + res = x @ y.transpose(-1, -2) + res.masked_fill_(~text_token_mask[:, None, :], float('-inf')) + + # padding to max_text_len + new_res = torch.full((*res.shape[:-1], max_text_len), float('-inf'), device=res.device) + new_res[..., :res.shape[-1]] = res + + return new_res diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/utils.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/utils.py new file mode 100644 index 0000000..350d831 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/UniPose/utils.py @@ -0,0 +1,348 @@ +# ------------------------------------------------------------------------ +# ED-Pose +# Copyright (c) 2023 IDEA. All Rights Reserved. +# Licensed under the Apache License, Version 2.0 [see LICENSE for details] +# ------------------------------------------------------------------------ + +import copy +import torch +import random +from torch import nn, Tensor +import os +import numpy as np +import math +import torch.nn.functional as F +from torch import nn + + +def _get_clones(module, N, layer_share=False): + # import ipdb; ipdb.set_trace() + if layer_share: + return nn.ModuleList([module for i in range(N)]) + else: + return nn.ModuleList([copy.deepcopy(module) for i in range(N)]) + + +def get_sine_pos_embed( + pos_tensor: torch.Tensor, + num_pos_feats: int = 128, + temperature: int = 10000, + exchange_xy: bool = True, +): + """generate sine position embedding from a position tensor + Args: + pos_tensor (torch.Tensor): shape: [..., n]. + num_pos_feats (int): projected shape for each float in the tensor. + temperature (int): temperature in the sine/cosine function. + exchange_xy (bool, optional): exchange pos x and pos y. \ + For example, input tensor is [x,y], the results will be [pos(y), pos(x)]. Defaults to True. + Returns: + pos_embed (torch.Tensor): shape: [..., n*num_pos_feats]. + """ + scale = 2 * math.pi + dim_t = torch.arange(num_pos_feats, dtype=torch.float32, device=pos_tensor.device) + dim_t = temperature ** (2 * torch.div(dim_t, 2, rounding_mode="floor") / num_pos_feats) + + def sine_func(x: torch.Tensor): + sin_x = x * scale / dim_t + sin_x = torch.stack((sin_x[..., 0::2].sin(), sin_x[..., 1::2].cos()), dim=3).flatten(2) + return sin_x + + pos_res = [sine_func(x) for x in pos_tensor.split([1] * pos_tensor.shape[-1], dim=-1)] + if exchange_xy: + pos_res[0], pos_res[1] = pos_res[1], pos_res[0] + pos_res = torch.cat(pos_res, dim=-1) + return pos_res + + +def gen_encoder_output_proposals(memory: Tensor, memory_padding_mask: Tensor, spatial_shapes: Tensor, learnedwh=None): + """ + Input: + - memory: bs, \sum{hw}, d_model + - memory_padding_mask: bs, \sum{hw} + - spatial_shapes: nlevel, 2 + - learnedwh: 2 + Output: + - output_memory: bs, \sum{hw}, d_model + - output_proposals: bs, \sum{hw}, 4 + """ + N_, S_, C_ = memory.shape + base_scale = 4.0 + proposals = [] + _cur = 0 + for lvl, (H_, W_) in enumerate(spatial_shapes): + mask_flatten_ = memory_padding_mask[:, _cur:(_cur + H_ * W_)].view(N_, H_, W_, 1) + valid_H = torch.sum(~mask_flatten_[:, :, 0, 0], 1) + valid_W = torch.sum(~mask_flatten_[:, 0, :, 0], 1) + + # import ipdb; ipdb.set_trace() + + grid_y, grid_x = torch.meshgrid(torch.linspace(0, H_ - 1, H_, dtype=torch.float32, device=memory.device), + torch.linspace(0, W_ - 1, W_, dtype=torch.float32, device=memory.device)) + grid = torch.cat([grid_x.unsqueeze(-1), grid_y.unsqueeze(-1)], -1) # H_, W_, 2 + + scale = torch.cat([valid_W.unsqueeze(-1), valid_H.unsqueeze(-1)], 1).view(N_, 1, 1, 2) + grid = (grid.unsqueeze(0).expand(N_, -1, -1, -1) + 0.5) / scale + + if learnedwh is not None: + # import ipdb; ipdb.set_trace() + wh = torch.ones_like(grid) * learnedwh.sigmoid() * (2.0 ** lvl) + else: + wh = torch.ones_like(grid) * 0.05 * (2.0 ** lvl) + + # scale = torch.cat([W_[None].unsqueeze(-1), H_[None].unsqueeze(-1)], 1).view(1, 1, 1, 2).repeat(N_, 1, 1, 1) + # grid = (grid.unsqueeze(0).expand(N_, -1, -1, -1) + 0.5) / scale + # wh = torch.ones_like(grid) / scale + proposal = torch.cat((grid, wh), -1).view(N_, -1, 4) + proposals.append(proposal) + _cur += (H_ * W_) + # import ipdb; ipdb.set_trace() + output_proposals = torch.cat(proposals, 1) + output_proposals_valid = ((output_proposals > 0.01) & (output_proposals < 0.99)).all(-1, keepdim=True) + output_proposals = torch.log(output_proposals / (1 - output_proposals)) # unsigmoid + output_proposals = output_proposals.masked_fill(memory_padding_mask.unsqueeze(-1), float('inf')) + output_proposals = output_proposals.masked_fill(~output_proposals_valid, float('inf')) + + output_memory = memory + output_memory = output_memory.masked_fill(memory_padding_mask.unsqueeze(-1), float(0)) + output_memory = output_memory.masked_fill(~output_proposals_valid, float(0)) + + # output_memory = output_memory.masked_fill(memory_padding_mask.unsqueeze(-1), float('inf')) + # output_memory = output_memory.masked_fill(~output_proposals_valid, float('inf')) + + return output_memory, output_proposals + + +class RandomBoxPerturber(): + def __init__(self, x_noise_scale=0.2, y_noise_scale=0.2, w_noise_scale=0.2, h_noise_scale=0.2) -> None: + self.noise_scale = torch.Tensor([x_noise_scale, y_noise_scale, w_noise_scale, h_noise_scale]) + + def __call__(self, refanchors: Tensor) -> Tensor: + nq, bs, query_dim = refanchors.shape + device = refanchors.device + + noise_raw = torch.rand_like(refanchors) + noise_scale = self.noise_scale.to(device)[:query_dim] + + new_refanchors = refanchors * (1 + (noise_raw - 0.5) * noise_scale) + return new_refanchors.clamp_(0, 1) + + +def sigmoid_focal_loss(inputs, targets, num_boxes, alpha: float = 0.25, gamma: float = 2, no_reduction=False): + """ + Loss used in RetinaNet for dense detection: https://arxiv.org/abs/1708.02002. + Args: + inputs: A float tensor of arbitrary shape. + The predictions for each example. + targets: A float tensor with the same shape as inputs. Stores the binary + classification label for each element in inputs + (0 for the negative class and 1 for the positive class). + alpha: (optional) Weighting factor in range (0,1) to balance + positive vs negative examples. Default = -1 (no weighting). + gamma: Exponent of the modulating factor (1 - p_t) to + balance easy vs hard examples. + Returns: + Loss tensor + """ + prob = inputs.sigmoid() + ce_loss = F.binary_cross_entropy_with_logits(inputs, targets, reduction="none") + p_t = prob * targets + (1 - prob) * (1 - targets) + loss = ce_loss * ((1 - p_t) ** gamma) + + if alpha >= 0: + alpha_t = alpha * targets + (1 - alpha) * (1 - targets) + loss = alpha_t * loss + + if no_reduction: + return loss + + return loss.mean(1).sum() / num_boxes + + +class MLP(nn.Module): + """ Very simple multi-layer perceptron (also called FFN)""" + + def __init__(self, input_dim, hidden_dim, output_dim, num_layers): + super().__init__() + self.num_layers = num_layers + h = [hidden_dim] * (num_layers - 1) + self.layers = nn.ModuleList(nn.Linear(n, k) for n, k in zip([input_dim] + h, h + [output_dim])) + + def forward(self, x): + for i, layer in enumerate(self.layers): + x = F.relu(layer(x)) if i < self.num_layers - 1 else layer(x) + return x + + +def _get_activation_fn(activation, d_model=256, batch_dim=0): + """Return an activation function given a string""" + if activation == "relu": + return F.relu + if activation == "gelu": + return F.gelu + if activation == "glu": + return F.glu + if activation == "prelu": + return nn.PReLU() + if activation == "selu": + return F.selu + + raise RuntimeError(F"activation should be relu/gelu, not {activation}.") + + +def gen_sineembed_for_position(pos_tensor): + # n_query, bs, _ = pos_tensor.size() + # sineembed_tensor = torch.zeros(n_query, bs, 256) + scale = 2 * math.pi + dim_t = torch.arange(128, dtype=torch.float32, device=pos_tensor.device) + dim_t = 10000 ** (2 * (dim_t // 2) / 128) + x_embed = pos_tensor[:, :, 0] * scale + y_embed = pos_tensor[:, :, 1] * scale + pos_x = x_embed[:, :, None] / dim_t + pos_y = y_embed[:, :, None] / dim_t + pos_x = torch.stack((pos_x[:, :, 0::2].sin(), pos_x[:, :, 1::2].cos()), dim=3).flatten(2) + pos_y = torch.stack((pos_y[:, :, 0::2].sin(), pos_y[:, :, 1::2].cos()), dim=3).flatten(2) + if pos_tensor.size(-1) == 2: + pos = torch.cat((pos_y, pos_x), dim=2) + elif pos_tensor.size(-1) == 4: + w_embed = pos_tensor[:, :, 2] * scale + pos_w = w_embed[:, :, None] / dim_t + pos_w = torch.stack((pos_w[:, :, 0::2].sin(), pos_w[:, :, 1::2].cos()), dim=3).flatten(2) + + h_embed = pos_tensor[:, :, 3] * scale + pos_h = h_embed[:, :, None] / dim_t + pos_h = torch.stack((pos_h[:, :, 0::2].sin(), pos_h[:, :, 1::2].cos()), dim=3).flatten(2) + + pos = torch.cat((pos_y, pos_x, pos_w, pos_h), dim=2) + else: + raise ValueError("Unknown pos_tensor shape(-1):{}".format(pos_tensor.size(-1))) + return pos + + +def oks_overlaps(kpt_preds, kpt_gts, kpt_valids, kpt_areas, sigmas): + sigmas = kpt_preds.new_tensor(sigmas) + variances = (sigmas * 2) ** 2 + + assert kpt_preds.size(0) == kpt_gts.size(0) + kpt_preds = kpt_preds.reshape(-1, kpt_preds.size(-1) // 2, 2) + kpt_gts = kpt_gts.reshape(-1, kpt_gts.size(-1) // 2, 2) + + squared_distance = (kpt_preds[:, :, 0] - kpt_gts[:, :, 0]) ** 2 + \ + (kpt_preds[:, :, 1] - kpt_gts[:, :, 1]) ** 2 + # import pdb + # pdb.set_trace() + # assert (kpt_valids.sum(-1) > 0).all() + squared_distance0 = squared_distance / (kpt_areas[:, None] * variances[None, :] * 2) + squared_distance1 = torch.exp(-squared_distance0) + squared_distance1 = squared_distance1 * kpt_valids + oks = squared_distance1.sum(dim=1) / (kpt_valids.sum(dim=1) + 1e-6) + + return oks + + +def oks_loss(pred, + target, + valid=None, + area=None, + linear=False, + sigmas=None, + eps=1e-6): + """Oks loss. + Computing the oks loss between a set of predicted poses and target poses. + The loss is calculated as negative log of oks. + Args: + pred (torch.Tensor): Predicted poses of format (x1, y1, x2, y2, ...), + shape (n, 2K). + target (torch.Tensor): Corresponding gt poses, shape (n, 2K). + linear (bool, optional): If True, use linear scale of loss instead of + log scale. Default: False. + eps (float): Eps to avoid log(0). + Return: + torch.Tensor: Loss tensor. + """ + oks = oks_overlaps(pred, target, valid, area, sigmas).clamp(min=eps) + if linear: + loss = 1 - oks + else: + loss = -oks.log() + return loss + + +class OKSLoss(nn.Module): + """IoULoss. + Computing the oks loss between a set of predicted poses and target poses. + Args: + linear (bool): If True, use linear scale of loss instead of log scale. + Default: False. + eps (float): Eps to avoid log(0). + reduction (str): Options are "none", "mean" and "sum". + loss_weight (float): Weight of loss. + """ + + def __init__(self, + linear=False, + num_keypoints=17, + eps=1e-6, + reduction='mean', + loss_weight=1.0): + super(OKSLoss, self).__init__() + self.linear = linear + self.eps = eps + self.reduction = reduction + self.loss_weight = loss_weight + if num_keypoints == 68: + self.sigmas = np.array([ + .26, .25, .25, .35, .35, .79, .79, .72, .72, .62, .62, 1.07, + 1.07, .87, .87, .89, .89, .25, .25, .25, .25, .25, .25, .25, .25, + .25, .25, .25, .25, .25, .25, .25, .25, .25, .25, .25, .25, .25, + .25, .25, .25, .25, .25, .25, .25, .25, .25, .25, .25, .25, .25, .25, .25, .25, + .25, .25, .25, .25, .25, .25, .25, .25, .25, .25, .25, .25, .25, .25, + ], dtype=np.float32) / 10.0 + else: + raise ValueError(f'Unsupported keypoints number {num_keypoints}') + + def forward(self, + pred, + target, + valid, + area, + weight=None, + avg_factor=None, + reduction_override=None): + """Forward function. + Args: + pred (torch.Tensor): The prediction. + target (torch.Tensor): The learning target of the prediction. + valid (torch.Tensor): The visible flag of the target pose. + area (torch.Tensor): The area of the target pose. + weight (torch.Tensor, optional): The weight of loss for each + prediction. Defaults to None. + avg_factor (int, optional): Average factor that is used to average + the loss. Defaults to None. + reduction_override (str, optional): The reduction method used to + override the original reduction method of the loss. + Defaults to None. Options are "none", "mean" and "sum". + """ + assert reduction_override in (None, 'none', 'mean', 'sum') + reduction = ( + reduction_override if reduction_override else self.reduction) + if (weight is not None) and (not torch.any(weight > 0)) and ( + reduction != 'none'): + if pred.dim() == weight.dim() + 1: + weight = weight.unsqueeze(1) + return (pred * weight).sum() # 0 + if weight is not None and weight.dim() > 1: + # TODO: remove this in the future + # reduce the weight of shape (n, 4) to (n,) to match the + # iou_loss of shape (n,) + assert weight.shape == pred.shape + weight = weight.mean(-1) + loss = self.loss_weight * oks_loss( + pred, + target, + valid=valid, + area=area, + linear=self.linear, + sigmas=self.sigmas, + eps=self.eps) + return loss diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/__init__.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/__init__.py new file mode 100644 index 0000000..ab6c39b --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/__init__.py @@ -0,0 +1,16 @@ +# ------------------------------------------------------------------------ +# ED-Pose +# Copyright (c) 2023 IDEA. All Rights Reserved. +# Licensed under the Apache License, Version 2.0 [see LICENSE for details] +# ------------------------------------------------------------------------ +# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved +from .UniPose.unipose import build_unipose + +def build_model(args): + # we use register to maintain models from catdet6 on. + from .registry import MODULE_BUILD_FUNCS + + assert args.modelname in MODULE_BUILD_FUNCS._module_dict + build_func = MODULE_BUILD_FUNCS.get(args.modelname) + model = build_func(args) + return model diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/registry.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/registry.py new file mode 100644 index 0000000..f438c6e --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/models/registry.py @@ -0,0 +1,58 @@ +# -*- coding: utf-8 -*- +# @Author: Yihao Chen +# @Date: 2021-08-16 16:03:17 +# @Last Modified by: Shilong Liu +# @Last Modified time: 2022-01-23 15:26 +# modified from mmcv + +import inspect +from functools import partial + + +class Registry(object): + + def __init__(self, name): + self._name = name + self._module_dict = dict() + + def __repr__(self): + format_str = self.__class__.__name__ + '(name={}, items={})'.format( + self._name, list(self._module_dict.keys())) + return format_str + + def __len__(self): + return len(self._module_dict) + + @property + def name(self): + return self._name + + @property + def module_dict(self): + return self._module_dict + + def get(self, key): + return self._module_dict.get(key, None) + + def registe_with_name(self, module_name=None, force=False): + return partial(self.register, module_name=module_name, force=force) + + def register(self, module_build_function, module_name=None, force=False): + """Register a module build function. + Args: + module (:obj:`nn.Module`): Module to be registered. + """ + if not inspect.isfunction(module_build_function): + raise TypeError('module_build_function must be a function, but got {}'.format( + type(module_build_function))) + if module_name is None: + module_name = module_build_function.__name__ + if not force and module_name in self._module_dict: + raise KeyError('{} is already registered in {}'.format( + module_name, self.name)) + self._module_dict[module_name] = module_build_function + + return module_build_function + +MODULE_BUILD_FUNCS = Registry('model build functions') + diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/predefined_keypoints.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/predefined_keypoints.py new file mode 100644 index 0000000..c32c5ad --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/predefined_keypoints.py @@ -0,0 +1,56 @@ +person = {"keypoints":['nose', 'left eye', 'right eye', 'left ear', 'right ear', 'left shoulder', 'right shoulder', 'left elbow', 'right elbow', 'left wrist', 'right wrist', 'left hip', 'right hip', 'left knee', 'right knee', 'left ankle', 'right ankle'],"skeleton": [[16,14],[14,12],[17,15],[15,13],[12,13],[6,12],[7,13],[6,7],[6,8],[7,9],[8,10],[9,11],[2,3],[1,2],[1,3],[2,4],[3,5],[4,6],[5,7]]} + +face = {"keypoints": ['right cheekbone 1', 'right cheekbone 2', 'right cheek 1', 'right cheek 2', 'right cheek 3', 'right cheek 4', 'right cheek 5', 'right chin', 'chin center', 'left chin', 'left cheek 5', 'left cheek 4', 'left cheek 3', 'left cheek 2', 'left cheek 1', 'left cheekbone 2', 'left cheekbone 1', 'right eyebrow 1', 'right eyebrow 2', 'right eyebrow 3', 'right eyebrow 4', 'right eyebrow 5', 'left eyebrow 1', 'left eyebrow 2', 'left eyebrow 3', 'left eyebrow 4', 'left eyebrow 5', 'nasal bridge 1', 'nasal bridge 2', 'nasal bridge 3', 'nasal bridge 4', 'right nasal wing 1', 'right nasal wing 2', 'nasal wing center', 'left nasal wing 1', 'left nasal wing 2', 'right eye eye corner 1', 'right eye upper eyelid 1', 'right eye upper eyelid 2', 'right eye eye corner 2', 'right eye lower eyelid 2', 'right eye lower eyelid 1', 'left eye eye corner 1', 'left eye upper eyelid 1', 'left eye upper eyelid 2', 'left eye eye corner 2', 'left eye lower eyelid 2', 'left eye lower eyelid 1', 'right mouth corner', 'upper lip outer edge 1', 'upper lip outer edge 2', 'upper lip outer edge 3', 'upper lip outer edge 4', 'upper lip outer edge 5', 'left mouth corner', 'lower lip outer edge 5', 'lower lip outer edge 4', 'lower lip outer edge 3', 'lower lip outer edge 2', 'lower lip outer edge 1', 'upper lip inter edge 1', 'upper lip inter edge 2', 'upper lip inter edge 3', 'upper lip inter edge 4', 'upper lip inter edge 5', 'lower lip inter edge 3', 'lower lip inter edge 2', 'lower lip inter edge 1'], "skeleton": []} + +hand = {"keypoints":['wrist', 'thumb root', "thumb's third knuckle", "thumb's second knuckle", 'thumbโ€™s first knuckle', "forefinger's root", "forefinger's third knuckle", "forefinger's second knuckle", "forefinger's first knuckle", "middle finger's root", "middle finger's third knuckle", "middle finger's second knuckle", "middle finger's first knuckle", "ring finger's root", "ring finger's third knuckle", "ring finger's second knuckle", "ring finger's first knuckle", "pinky finger's root", "pinky finger's third knuckle", "pinky finger's second knuckle", "pinky finger's first knuckle"],"skeleton": []} + +animal_in_AnimalKindom = {"keypoints":['head mid top', 'eye left', 'eye right', 'mouth front top', 'mouth back left', 'mouth back right', 'mouth front bottom', 'shoulder left', 'shoulder right', 'elbow left', 'elbow right', 'wrist left', 'wrist right', 'torso mid back', 'hip left', 'hip right', 'knee left', 'knee right', 'ankle left ', 'ankle right', 'tail top back', 'tail mid back', 'tail end back'],"skeleton": [[1, 0], [2, 0], [3, 4], [3, 5], [4, 6], [5, 6], [0, 7], [0, 8], [7, 9], [8, 10], [9, 11], [10, 12], [0, 13], [13, 20], [20, 14], [20, 15], [14, 16], [15, 17], [16, 18], [17, 19], [20, 21], [21, 22]]} + +animal_in_AP10K = {"keypoints": ['left eye', 'right eye', 'nose', 'neck', 'root of tail', 'left shoulder', 'left elbow', 'left front paw', 'right shoulder', 'right elbow', 'right front paw', 'left hip', 'left knee', 'left back paw', 'right hip', 'right knee', 'right back paw'], "skeleton": [[1, 2], [1, 3], [2, 3], [3, 4], [4, 5], [4, 6], [6, 7], [7, 8], [4, 9], [9, 10], [10, 11], [5, 12], [12, 13], [13, 14], [5, 15], [15, 16], [16, 17]]} + +animal= {"keypoints": ['left eye', 'right eye', 'nose', 'neck', 'root of tail', 'left shoulder', 'left elbow', 'left front paw', 'right shoulder', 'right elbow', 'right front paw', 'left hip', 'left knee', 'left back paw', 'right hip', 'right knee', 'right back paw'], "skeleton": [[1, 2], [1, 3], [2, 3], [3, 4], [4, 5], [4, 6], [6, 7], [7, 8], [4, 9], [9, 10], [10, 11], [5, 12], [12, 13], [13, 14], [5, 15], [15, 16], [16, 17]]} + +animal_face = {"keypoints": ['right eye right', 'right eye left', 'left eye right', 'left eye left', 'nose tip', 'lip right', 'lip left', 'upper lip', 'lower lip'], "skeleton": []} + +fly = {"keypoints": ['head', 'eye left', 'eye right', 'neck', 'thorax', 'abdomen', 'foreleg right base', 'foreleg right first segment', 'foreleg right second segment', 'foreleg right tip', 'midleg right base', 'midleg right first segment', 'midleg right second segment', 'midleg right tip', 'hindleg right base', 'hindleg right first segment', 'hindleg right second segment', 'hindleg right tip', 'foreleg left base', 'foreleg left first segment', 'foreleg left second segment', 'foreleg left tip', 'midleg left base', 'midleg left first segment', 'midleg left second segment', 'midleg left tip', 'hindleg left base', 'hindleg left first segment', 'hindleg left second segment', 'hindleg left tip', 'wing left', 'wing right'], "skeleton": [[2, 1], [3, 1], [4, 1], [5, 4], [6, 5], [8, 7], [9, 8], [10, 9], [12, 11], [13, 12], [14, 13], [16, 15], [17, 16], [18, 17], [20, 19], [21, 20], [22, 21], [24, 23], [25, 24], [26, 25], [28, 27], [29, 28], [30, 29], [31, 4], [32, 4]]} + +locust = {"keypoints": ['head', 'neck', 'thorax', 'abdomen1', 'abdomen2', 'anttip left', 'antbase left', 'eye left', 'foreleg left base', 'foreleg left first segment', 'foreleg left second segment', 'foreleg left tip', 'midleg left base', 'midleg left first segment', 'midleg left second segment', 'midleg left tip', 'hindleg left base', 'hindleg left first segment', 'hindleg left second segment', 'hindleg left tip', 'anttip right', 'antbase right', 'eye right', 'foreleg right base', 'foreleg right first segment', 'foreleg right second segment', 'foreleg right tip', 'midleg right base', 'midleg right first segment', 'midleg right second segment', 'midleg right tip', 'hindleg right base', 'hindleg right first segment', 'hindleg right second segment', 'hindleg right tip'],"skeleton": [[2, 1], [3, 2], [4, 3], [5, 4], [7, 6], [8, 7], [10, 9], [11, 10], [12, 11], [14, 13], [15, 14],[16, 15], [18, 17], [19, 18], [20, 19], [22, 21], [23, 22], [25, 24], [26, 25], [27, 26],[29, 28], [30, 29], [31, 30], [33, 32], [34, 33], [35, 34]]} + +car ={"keypoints": ['right front wheel center', 'left front wheel center', 'right rear wheel center', 'left rear wheel center', 'front right', 'front left', 'back right', 'back left', 'none', 'roof front right', 'roof front left', 'roof back right', 'roof back left', 'none'],"skeleton": [[0, 2], [1, 3], [0, 1], [2, 3], [9, 11], [10, 12], [9, 10], [11, 12], [4, 0], [4, 9], [4, 5], [5, 1], [5, 10], [6, 2], [6, 11], [7, 3], [7, 12], [6, 7]]} + +short_sleeved_shirt = {'keypoints': ['upper center neckline', 'upper right neckline', 'lower right neckline', 'lower center neckline', 'lower left neckline', 'upper left neckline', 'right sleeve outside 1', 'right sleeve outside 2', 'right cuff outside', 'right cuff inside', 'right sleeve inside 2', 'right sleeve inside 1', 'right side 1', 'right side 2', 'right side 3', 'center hem', 'left side 3', 'left side 2', 'left side 1', 'left sleeve inside 1', 'left sleeve inside 2', 'left cuff inside', 'left cuff outside', 'left sleeve outside 2', 'left sleeve outside 1'], 'skeleton': []} + +long_sleeved_outwear={'keypoints': ['upper center neckline', 'lower right center neckline', 'lower right neckline', 'upper right neckline', 'lower left neckline', 'upper left neckline', 'right sleeve outside 1', 'right sleeve outside 2', 'right sleeve outside 3', 'right sleeve outside 4', 'right cuff outside', 'right cuff inside', 'right sleeve inside 1', 'right sleeve inside 2', 'right sleeve inside 3', 'right sleeve inside 4', 'right side outside 1', 'right side outside 2', 'right side outside 3', 'right side inside 3', 'left side outside 3', 'left side outside 2', 'left side outside 1', 'left sleeve inside 4', 'left sleeve inside 3', 'left sleeve inside 2', 'left sleeve inside 1', 'left cuff inside', 'left cuff outside', 'left sleeve outside 4', 'left sleeve outside 3', 'left sleeve outside 2', 'left sleeve outside 1', 'lower left center neckline', 'left side inside 1', 'left side inside 2', 'left side inside 3', 'right side inside 1', 'right side inside 2'], 'skeleton': []} + +short_sleeved_outwear={'keypoints': ['upper center neckline', 'lower right center neckline', 'lower right neckline', 'upper right neckline', 'lower left neckline', 'upper left neckline', 'right sleeve outside 1', 'right sleeve outside 2', 'right cuff outside', 'right cuff inside', 'right sleeve inside 2', 'right sleeve inside 1', 'right side outside 1', 'right side outside 2', 'right side outside 3', 'right side inside 3', 'left side outside 3', 'left side outside 2', 'left side outside 1', 'left sleeve inside 1', 'left sleeve inside 2', 'left cuff inside', 'left cuff outside', 'left sleeve outside 2', 'left sleeve outside 1', 'lower left center neckline', 'left side inside 1', 'left side inside 2', 'left side inside 3', 'right side inside 1', 'right side inside 2'], 'skeleton': []} + +sling={'keypoints': ['upper center neckline', 'upper right neckline', 'lower right neckline', 'lower center neckline', 'lower left neckline', 'upper left neckline', 'right sleeve', 'right side 1', 'right side 2', 'right side 3', 'center hem', 'left side 3', 'left side 2', 'left side 1', 'left sleeve'], 'skeleton': []} + +vest = {'keypoints': ['upper center neckline', 'upper right neckline', 'lower right neckline', 'lower center neckline', 'lower left neckline', 'upper left neckline', 'right sleeve', 'right side 1', 'right side 2', 'right side 3', 'center hem', 'left side 3', 'left side 2', 'left side 1', 'left sleeve'], 'skeleton': []} + +long_sleeved_dress={'keypoints': ['upper center neckline', 'upper right neckline', 'lower right neckline', 'lower center neckline', 'lower left neckline', 'upper left neckline', 'right sleeve outside 1', 'right sleeve outside 2', 'right sleeve outside 3', 'right sleeve outside 4', 'right cuff outside', 'right cuff inside', 'right sleeve inside 4', 'right sleeve inside 3', 'right sleeve inside 2', 'right sleeve inside 1', 'right side 1', 'right side 2', 'right side 3', 'right side 4', 'right side 5', 'center hem', 'left side 5', 'left side 4', 'left side 3', 'left side 2', 'left side 1', 'left sleeve inside 1', 'left sleeve inside 2', 'left sleeve inside 3', 'left sleeve inside 4', 'left cuff inside', 'left cuff outside', 'left sleeve outside 4', 'left sleeve outside 3', 'left sleeve outside 2', 'left sleeve outside 1'], 'skeleton': []} + +long_sleeved_shirt = {'keypoints': ['upper center neckline', 'upper right neckline', 'lower right neckline', 'lower center neckline', 'lower left neckline', 'upper left neckline', 'right sleeve outside 1', 'right sleeve outside 2', 'right sleeve outside 3', 'right sleeve outside 4', 'right cuff outside', 'right cuff inside', 'right sleeve inside 4', 'right sleeve inside 3', 'right sleeve inside 2', 'right sleeve inside 1', 'right side 1', 'right side 2', 'right side 3', 'center hem', 'left side 3', 'left side 2', 'left side 1', 'left sleeve inside 1', 'left sleeve inside 2', 'left sleeve inside 3', 'left sleeve inside 4', 'left cuff inside', 'left cuff outside', 'left sleeve outside 4', 'left sleeve outside 3', 'left sleeve outside 2', 'left sleeve outside 1'], 'skeleton': []} + +trousers = {'keypoints': ['right side outside 1', 'upper center', 'left side outside 1', 'right side outside 2', 'right side outside 3', 'right cuff outside', 'right cuff inside', 'right side inside 1', 'crotch', 'left side inside 1', 'left cuff inside', 'left cuff outside', 'left side outside 3', 'left side outside 2'], 'skeleton': []} + +sling_dress = {'keypoints': ['upper center neckline', 'upper right neckline', 'lower right neckline', 'lower center neckline', 'lower left neckline', 'upper left neckline', 'right side 1', 'right side 2', 'right side 3', 'right side 4', 'right side 5', 'right side 6', 'center hem', 'left side 6', 'left side 5', 'left side 4', 'left side 3', 'left side 2', 'left side 1'], 'skeleton': []} + +vest_dress = {'keypoints': ['upper center neckline', 'upper right neckline', 'lower right neckline', 'lower center neckline', 'lower left neckline', 'upper left neckline', 'right side 1', 'right side 2', 'right side 3', 'right side 4', 'right side 5', 'right side 6', 'center hem', 'left side 6', 'left side 5', 'left side 4', 'left side 3', 'left side 2', 'left side 1'], 'skeleton': []} + +skirt = {'keypoints': ['right side 1', 'upper center', 'left side 1', 'right side 2', 'right side 3', 'center hem', 'left side 3', 'left side 2'], 'skeleton': []} + +short_sleeved_dress = {'keypoints': ['upper center neckline', 'upper right neckline', 'lower right neckline', 'lower center neckline', 'lower left neckline', 'upper left neckline', 'right sleeve outside 1', 'right sleeve outside 2', 'right cuff outside', 'right cuff inside', 'right sleeve inside 1', 'right sleeve inside 2', 'left side 1', 'left side 2', 'left side 3', 'left side 4', 'left side 5', 'center hem', 'right side 5', 'right side 4', 'right side 3', 'right side 2', 'right side 1', 'left sleeve inside 2', 'left sleeve inside 1', 'left cuff inside', 'left cuff outside', 'left sleeve outside 2', 'left sleeve outside 1'], 'skeleton': []} + +shorts = {'keypoints': ['right side outside 1', 'upper center', 'left side outside 1', 'right side outside 2', 'right cuff outside', 'right cuff inside', 'crotch', 'left cuff inside', 'left cuff outside', 'left side outside 2'], 'skeleton': []} + +table = {'keypoints': ['desktop corner 1', 'desktop corner 2', 'desktop corner 3', 'desktop corner 4', 'table leg 1', 'table leg 2', 'table leg 3', 'table leg 4'], 'skeleton': []} + +chair = {'keypoints': ['legs righttopcorner', 'legs lefttopcorner', 'legs leftbottomcorner', 'legs rightbottomcorner', 'base righttop', 'base lefttop', 'base leftbottom', 'base rightbottom', 'headboard righttop', 'headboard lefttop'], 'skeleton': []} + +bed = {'keypoints': ['legs rightbottomcorner', 'legs righttopcorner', 'base rightbottom', 'base righttop', 'backrest righttop', 'legs leftbottomcorner', 'legs lefttopcorner', 'base leftbottom', 'base lefttop', 'backrest lefttop'], 'skeleton': []} + +sofa = {'keypoints': ['legs rightbottomcorner', 'legs righttopcorner', 'base rightbottom', 'base righttop', 'armrests rightbottomcorner', 'armrests righttopcorner', 'backrest righttop', 'legs leftbottomcorner', 'legs lefttopcorner', 'base leftbottom', 'base lefttop', 'armrests leftbottomcorner', 'armrests lefttopcorner', 'backrest lefttop'], 'skeleton': []} + +swivelchair = {'keypoints': ['rotatingbase 1', 'rotatingbase 2', 'rotatingbase 3', 'rotatingbase 4', 'rotatingbase 5', 'rotatingbase center', 'base center', 'base righttop', 'base lefttop', 'base leftbottom', 'base rightbottom', 'backrest righttop', 'backrest lefttop'], 'skeleton': []} + diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/transforms.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/transforms.py new file mode 100644 index 0000000..9155913 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/transforms.py @@ -0,0 +1,394 @@ +# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved +""" +Transforms and data augmentation for both image + bbox. +""" +import os +import sys +import random + +import PIL +import torch +import torchvision.transforms as T +import torchvision.transforms.functional as F + +sys.path.append(os.path.dirname(os.path.abspath(__file__))) +from util.box_ops import box_xyxy_to_cxcywh +from util.misc import interpolate + + +def crop(image, target, region): + cropped_image = F.crop(image, *region) + + if target is not None: + target = target.copy() + i, j, h, w = region + id2catname = target["id2catname"] + caption_list = target["caption_list"] + target["size"] = torch.tensor([h, w]) + + fields = ["labels", "area", "iscrowd", "positive_map","keypoints"] + + if "boxes" in target: + boxes = target["boxes"] + max_size = torch.as_tensor([w, h], dtype=torch.float32) + cropped_boxes = boxes - torch.as_tensor([j, i, j, i]) + cropped_boxes = torch.min(cropped_boxes.reshape(-1, 2, 2), max_size) + cropped_boxes = cropped_boxes.clamp(min=0) + area = (cropped_boxes[:, 1, :] - cropped_boxes[:, 0, :]).prod(dim=1) + target["boxes"] = cropped_boxes.reshape(-1, 4) + target["area"] = area + fields.append("boxes") + + if "masks" in target: + # FIXME should we update the area here if there are no boxes? + target['masks'] = target['masks'][:, i:i + h, j:j + w] + fields.append("masks") + + + # remove elements for which the boxes or masks that have zero area + if "boxes" in target or "masks" in target: + # favor boxes selection when defining which elements to keep + # this is compatible with previous implementation + if "boxes" in target: + cropped_boxes = target['boxes'].reshape(-1, 2, 2) + keep = torch.all(cropped_boxes[:, 1, :] > cropped_boxes[:, 0, :], dim=1) + else: + keep = target['masks'].flatten(1).any(1) + + for field in fields: + if field in target: + target[field] = target[field][keep] + + if os.environ.get('IPDB_SHILONG_DEBUG', None) == 'INFO': + # for debug and visualization only. + if 'strings_positive' in target: + target['strings_positive'] = [_i for _i, _j in zip(target['strings_positive'], keep) if _j] + + + if "keypoints" in target: + max_size = torch.as_tensor([w, h], dtype=torch.float32) + keypoints = target["keypoints"] + cropped_keypoints = keypoints.view(-1, 3)[:,:2] - torch.as_tensor([j, i]) + cropped_keypoints = torch.min(cropped_keypoints, max_size) + cropped_keypoints = cropped_keypoints.clamp(min=0) + cropped_keypoints = torch.cat([cropped_keypoints, keypoints.view(-1, 3)[:,2].unsqueeze(1)], dim=1) + target["keypoints"] = cropped_keypoints.view(target["keypoints"].shape[0], target["keypoints"].shape[1], 3) + + target["id2catname"] = id2catname + target["caption_list"] = caption_list + + return cropped_image, target + + +def hflip(image, target): + flipped_image = F.hflip(image) + + w, h = image.size + + if target is not None: + target = target.copy() + if "boxes" in target: + boxes = target["boxes"] + boxes = boxes[:, [2, 1, 0, 3]] * torch.as_tensor([-1, 1, -1, 1]) + torch.as_tensor([w, 0, w, 0]) + target["boxes"] = boxes + + if "masks" in target: + target['masks'] = target['masks'].flip(-1) + + + if "keypoints" in target: + dataset_name=target["dataset_name"] + if dataset_name == "coco_person" or dataset_name == "macaque": + flip_pairs = [[1, 2], [3, 4], [5, 6], [7, 8], + [9, 10], [11, 12], [13, 14], [15, 16]] + + elif dataset_name=="animalkindom_ak_P1_animal": + flip_pairs = [[1, 2], [4, 5],[7,8],[9,10],[11,12],[14,15],[16,17],[18,19]] + + elif dataset_name=="animalweb_animal": + flip_pairs = [[0, 3], [1, 2], [5, 6]] + + elif dataset_name=="face": + flip_pairs = [ + [0, 16], [1, 15], [2, 14], [3, 13], [4, 12], [5, 11], [6, 10], [7, 9], + [17, 26], [18, 25], [19, 24], [20, 23], [21, 22], + [31, 35], [32, 34], + [36, 45], [37, 44], [38, 43], [39, 42], [40, 47], [41, 46], + [48, 54], [49, 53], [50, 52], + [55, 59], [56, 58], + [60, 64], [61, 63], + [65, 67] + ] + + elif dataset_name=="hand": + flip_pairs = [] + + elif dataset_name=="foot": + flip_pairs = [] + + elif dataset_name=="locust": + flip_pairs = [[5, 20], [6, 21], [7, 22], [8, 23], [9, 24], [10, 25], [11, 26], [12, 27], [13, 28], [14, 29], [15, 30], [16, 31], [17, 32], [18, 33], [19, 34]] + + elif dataset_name=="fly": + flip_pairs = [[1, 2], [6, 18], [7, 19], [8, 20], [9, 21], [10, 22], [11, 23], [12, 24], [13, 25], [14, 26], [15, 27], [16, 28], [17, 29], [30, 31]] + + elif dataset_name == "ap_36k_animal" or dataset_name == "ap_10k_animal": + flip_pairs = [[0, 1],[5, 8], [6, 9], [7, 10], [11, 14], [12, 15], [13, 16]] + + + + keypoints = target["keypoints"] + keypoints[:,:,0] = w - keypoints[:,:, 0]-1 + for pair in flip_pairs: + keypoints[:,pair[0], :], keypoints[:,pair[1], :] = keypoints[:,pair[1], :], keypoints[:,pair[0], :].clone() + target["keypoints"] = keypoints + return flipped_image, target + + +def resize(image, target, size, max_size=None): + # size can be min_size (scalar) or (w, h) tuple + + def get_size_with_aspect_ratio(image_size, size, max_size=None): + w, h = image_size + if max_size is not None: + min_original_size = float(min((w, h))) + max_original_size = float(max((w, h))) + if max_original_size / min_original_size * size > max_size: + size = int(round(max_size * min_original_size / max_original_size)) + + if (w <= h and w == size) or (h <= w and h == size): + return (h, w) + + if w < h: + ow = size + oh = int(size * h / w) + else: + oh = size + ow = int(size * w / h) + + return (oh, ow) + + def get_size(image_size, size, max_size=None): + if isinstance(size, (list, tuple)): + return size[::-1] + else: + return get_size_with_aspect_ratio(image_size, size, max_size) + + size = get_size(image.size, size, max_size) + rescaled_image = F.resize(image, size) + + if target is None: + return rescaled_image, None + + ratios = tuple(float(s) / float(s_orig) for s, s_orig in zip(rescaled_image.size, image.size)) + ratio_width, ratio_height = ratios + + target = target.copy() + if "boxes" in target: + boxes = target["boxes"] + scaled_boxes = boxes * torch.as_tensor([ratio_width, ratio_height, ratio_width, ratio_height]) + target["boxes"] = scaled_boxes + + if "area" in target: + area = target["area"] + scaled_area = area * (ratio_width * ratio_height) + target["area"] = scaled_area + + + if "keypoints" in target: + keypoints = target["keypoints"] + scaled_keypoints = keypoints * torch.as_tensor([ratio_width, ratio_height, 1]) + target["keypoints"] = scaled_keypoints + + h, w = size + target["size"] = torch.tensor([h, w]) + + if "masks" in target: + target['masks'] = interpolate( + target['masks'][:, None].float(), size, mode="nearest")[:, 0] > 0.5 + + return rescaled_image, target + + +def pad(image, target, padding): + # assumes that we only pad on the bottom right corners + padded_image = F.pad(image, (0, 0, padding[0], padding[1])) + if target is None: + return padded_image, None + target = target.copy() + # should we do something wrt the original size? + target["size"] = torch.tensor(padded_image.size[::-1]) + if "masks" in target: + target['masks'] = torch.nn.functional.pad(target['masks'], (0, padding[0], 0, padding[1])) + return padded_image, target + + +class ResizeDebug(object): + def __init__(self, size): + self.size = size + + def __call__(self, img, target): + return resize(img, target, self.size) + + +class RandomCrop(object): + def __init__(self, size): + self.size = size + + def __call__(self, img, target): + region = T.RandomCrop.get_params(img, self.size) + return crop(img, target, region) + + +class RandomSizeCrop(object): + def __init__(self, min_size: int, max_size: int, respect_boxes: bool = False): + # respect_boxes: True to keep all boxes + # False to tolerence box filter + self.min_size = min_size + self.max_size = max_size + self.respect_boxes = respect_boxes + + def __call__(self, img: PIL.Image.Image, target: dict): + init_boxes = len(target["boxes"]) if (target is not None and "boxes" in target) else 0 + max_patience = 10 + for i in range(max_patience): + w = random.randint(self.min_size, min(img.width, self.max_size)) + h = random.randint(self.min_size, min(img.height, self.max_size)) + region = T.RandomCrop.get_params(img, [h, w]) + result_img, result_target = crop(img, target, region) + if target is not None: + if not self.respect_boxes or len(result_target["boxes"]) == init_boxes or i == max_patience - 1: + return result_img, result_target + return result_img, result_target + + +class CenterCrop(object): + def __init__(self, size): + self.size = size + + def __call__(self, img, target): + image_width, image_height = img.size + crop_height, crop_width = self.size + crop_top = int(round((image_height - crop_height) / 2.)) + crop_left = int(round((image_width - crop_width) / 2.)) + return crop(img, target, (crop_top, crop_left, crop_height, crop_width)) + + +class RandomHorizontalFlip(object): + def __init__(self, p=0.5): + self.p = p + + def __call__(self, img, target): + if random.random() < self.p: + return hflip(img, target) + return img, target + + +class RandomResize(object): + def __init__(self, sizes, max_size=None): + assert isinstance(sizes, (list, tuple)) + self.sizes = sizes + self.max_size = max_size + + def __call__(self, img, target=None): + size = random.choice(self.sizes) + return resize(img, target, size, self.max_size) + + +class RandomPad(object): + def __init__(self, max_pad): + self.max_pad = max_pad + + def __call__(self, img, target): + pad_x = random.randint(0, self.max_pad) + pad_y = random.randint(0, self.max_pad) + return pad(img, target, (pad_x, pad_y)) + + +class RandomSelect(object): + """ + Randomly selects between transforms1 and transforms2, + with probability p for transforms1 and (1 - p) for transforms2 + """ + def __init__(self, transforms1, transforms2, p=0.5): + self.transforms1 = transforms1 + self.transforms2 = transforms2 + self.p = p + + def __call__(self, img, target): + if random.random() < self.p: + return self.transforms1(img, target) + return self.transforms2(img, target) + + +class ToTensor(object): + def __call__(self, img, target): + return F.to_tensor(img), target + + +class RandomErasing(object): + + def __init__(self, *args, **kwargs): + self.eraser = T.RandomErasing(*args, **kwargs) + + def __call__(self, img, target): + return self.eraser(img), target + + +class Normalize(object): + def __init__(self, mean, std): + self.mean = mean + self.std = std + + def __call__(self, image, target=None): + image = F.normalize(image, mean=self.mean, std=self.std) + if target is None: + return image, None + target = target.copy() + h, w = image.shape[-2:] + if "boxes" in target: + boxes = target["boxes"] + boxes = box_xyxy_to_cxcywh(boxes) + boxes = boxes / torch.tensor([w, h, w, h], dtype=torch.float32) + target["boxes"] = boxes + + if "area" in target: + area = target["area"] + area = area / (torch.tensor(w, dtype=torch.float32)*torch.tensor(h, dtype=torch.float32)) + target["area"] = area + + if "keypoints" in target: + keypoints = target["keypoints"] + V = keypoints[:, :, 2] + V[V == 2] = 1 + Z=keypoints[:, :, :2] + Z = Z.contiguous().view(-1, 2 * V.shape[-1]) + Z = Z / torch.tensor([w, h] * V.shape[-1], dtype=torch.float32) + target["valid_kpt_num"] = V.shape[1] + Z_pad = torch.zeros(Z.shape[0],68 * 2 - Z.shape[1]) + V_pad = torch.zeros(V.shape[0],68 - V.shape[1]) + V=torch.cat([V, V_pad], dim=1) + Z=torch.cat([Z, Z_pad], dim=1) + all_keypoints = torch.cat([Z, V], dim=1) + target["keypoints"] = all_keypoints + + + return image, target + + +class Compose(object): + def __init__(self, transforms): + self.transforms = transforms + + def __call__(self, image, target): + for t in self.transforms: + image, target = t(image, target) + return image, target + + def __repr__(self): + format_string = self.__class__.__name__ + "(" + for t in self.transforms: + format_string += "\n" + format_string += " {0}".format(t) + format_string += "\n)" + return format_string diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/util/addict.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/util/addict.py new file mode 100644 index 0000000..55e02d1 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/util/addict.py @@ -0,0 +1,159 @@ +import copy + + +class Dict(dict): + + def __init__(__self, *args, **kwargs): + object.__setattr__(__self, '__parent', kwargs.pop('__parent', None)) + object.__setattr__(__self, '__key', kwargs.pop('__key', None)) + object.__setattr__(__self, '__frozen', False) + for arg in args: + if not arg: + continue + elif isinstance(arg, dict): + for key, val in arg.items(): + __self[key] = __self._hook(val) + elif isinstance(arg, tuple) and (not isinstance(arg[0], tuple)): + __self[arg[0]] = __self._hook(arg[1]) + else: + for key, val in iter(arg): + __self[key] = __self._hook(val) + + for key, val in kwargs.items(): + __self[key] = __self._hook(val) + + def __setattr__(self, name, value): + if hasattr(self.__class__, name): + raise AttributeError("'Dict' object attribute " + "'{0}' is read-only".format(name)) + else: + self[name] = value + + def __setitem__(self, name, value): + isFrozen = (hasattr(self, '__frozen') and + object.__getattribute__(self, '__frozen')) + if isFrozen and name not in super(Dict, self).keys(): + raise KeyError(name) + super(Dict, self).__setitem__(name, value) + try: + p = object.__getattribute__(self, '__parent') + key = object.__getattribute__(self, '__key') + except AttributeError: + p = None + key = None + if p is not None: + p[key] = self + object.__delattr__(self, '__parent') + object.__delattr__(self, '__key') + + def __add__(self, other): + if not self.keys(): + return other + else: + self_type = type(self).__name__ + other_type = type(other).__name__ + msg = "unsupported operand type(s) for +: '{}' and '{}'" + raise TypeError(msg.format(self_type, other_type)) + + @classmethod + def _hook(cls, item): + if isinstance(item, dict): + return cls(item) + elif isinstance(item, (list, tuple)): + return type(item)(cls._hook(elem) for elem in item) + return item + + def __getattr__(self, item): + return self.__getitem__(item) + + def __missing__(self, name): + if object.__getattribute__(self, '__frozen'): + raise KeyError(name) + return self.__class__(__parent=self, __key=name) + + def __delattr__(self, name): + del self[name] + + def to_dict(self): + base = {} + for key, value in self.items(): + if isinstance(value, type(self)): + base[key] = value.to_dict() + elif isinstance(value, (list, tuple)): + base[key] = type(value)( + item.to_dict() if isinstance(item, type(self)) else + item for item in value) + else: + base[key] = value + return base + + def copy(self): + return copy.copy(self) + + def deepcopy(self): + return copy.deepcopy(self) + + def __deepcopy__(self, memo): + other = self.__class__() + memo[id(self)] = other + for key, value in self.items(): + other[copy.deepcopy(key, memo)] = copy.deepcopy(value, memo) + return other + + def update(self, *args, **kwargs): + other = {} + if args: + if len(args) > 1: + raise TypeError() + other.update(args[0]) + other.update(kwargs) + for k, v in other.items(): + if ((k not in self) or + (not isinstance(self[k], dict)) or + (not isinstance(v, dict))): + self[k] = v + else: + self[k].update(v) + + def __getnewargs__(self): + return tuple(self.items()) + + def __getstate__(self): + return self + + def __setstate__(self, state): + self.update(state) + + def __or__(self, other): + if not isinstance(other, (Dict, dict)): + return NotImplemented + new = Dict(self) + new.update(other) + return new + + def __ror__(self, other): + if not isinstance(other, (Dict, dict)): + return NotImplemented + new = Dict(other) + new.update(self) + return new + + def __ior__(self, other): + self.update(other) + return self + + def setdefault(self, key, default=None): + if key in self: + return self[key] + else: + self[key] = default + return default + + def freeze(self, shouldFreeze=True): + object.__setattr__(self, '__frozen', shouldFreeze) + for key, val in self.items(): + if isinstance(val, Dict): + val.freeze(shouldFreeze) + + def unfreeze(self): + self.freeze(False) diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/util/box_ops.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/util/box_ops.py new file mode 100644 index 0000000..fff6624 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/util/box_ops.py @@ -0,0 +1,139 @@ +# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved +""" +Utilities for bounding box manipulation and GIoU. +""" +import torch, os +from torchvision.ops.boxes import box_area + + +def box_cxcywh_to_xyxy(x): + x_c, y_c, w, h = x.unbind(-1) + b = [(x_c - 0.5 * w), (y_c - 0.5 * h), + (x_c + 0.5 * w), (y_c + 0.5 * h)] + return torch.stack(b, dim=-1) + + +def box_xyxy_to_cxcywh(x): + x0, y0, x1, y1 = x.unbind(-1) + b = [(x0 + x1) / 2, (y0 + y1) / 2, + (x1 - x0), (y1 - y0)] + return torch.stack(b, dim=-1) + + +# modified from torchvision to also return the union +def box_iou(boxes1, boxes2): + area1 = box_area(boxes1) + area2 = box_area(boxes2) + + # import ipdb; ipdb.set_trace() + lt = torch.max(boxes1[:, None, :2], boxes2[:, :2]) # [N,M,2] + rb = torch.min(boxes1[:, None, 2:], boxes2[:, 2:]) # [N,M,2] + + wh = (rb - lt).clamp(min=0) # [N,M,2] + inter = wh[:, :, 0] * wh[:, :, 1] # [N,M] + + union = area1[:, None] + area2 - inter + + iou = inter / (union + 1e-6) + return iou, union + + +def generalized_box_iou(boxes1, boxes2): + """ + Generalized IoU from https://giou.stanford.edu/ + + The boxes should be in [x0, y0, x1, y1] format + + Returns a [N, M] pairwise matrix, where N = len(boxes1) + and M = len(boxes2) + """ + # degenerate boxes gives inf / nan results + # so do an early check + assert (boxes1[:, 2:] >= boxes1[:, :2]).all() + assert (boxes2[:, 2:] >= boxes2[:, :2]).all() + # except: + # import ipdb; ipdb.set_trace() + iou, union = box_iou(boxes1, boxes2) + + lt = torch.min(boxes1[:, None, :2], boxes2[:, :2]) + rb = torch.max(boxes1[:, None, 2:], boxes2[:, 2:]) + + wh = (rb - lt).clamp(min=0) # [N,M,2] + area = wh[:, :, 0] * wh[:, :, 1] + + return iou - (area - union) / (area + 1e-6) + + + +# modified from torchvision to also return the union +def box_iou_pairwise(boxes1, boxes2): + area1 = box_area(boxes1) + area2 = box_area(boxes2) + + lt = torch.max(boxes1[:, :2], boxes2[:, :2]) # [N,2] + rb = torch.min(boxes1[:, 2:], boxes2[:, 2:]) # [N,2] + + wh = (rb - lt).clamp(min=0) # [N,2] + inter = wh[:, 0] * wh[:, 1] # [N] + + union = area1 + area2 - inter + + iou = inter / union + return iou, union + + +def generalized_box_iou_pairwise(boxes1, boxes2): + """ + Generalized IoU from https://giou.stanford.edu/ + + Input: + - boxes1, boxes2: N,4 + Output: + - giou: N, 4 + """ + # degenerate boxes gives inf / nan results + # so do an early check + assert (boxes1[:, 2:] >= boxes1[:, :2]).all() + assert (boxes2[:, 2:] >= boxes2[:, :2]).all() + assert boxes1.shape == boxes2.shape + iou, union = box_iou_pairwise(boxes1, boxes2) # N, 4 + + lt = torch.min(boxes1[:, :2], boxes2[:, :2]) + rb = torch.max(boxes1[:, 2:], boxes2[:, 2:]) + + wh = (rb - lt).clamp(min=0) # [N,2] + area = wh[:, 0] * wh[:, 1] + + return iou - (area - union) / area + +def masks_to_boxes(masks): + """Compute the bounding boxes around the provided masks + + The masks should be in format [N, H, W] where N is the number of masks, (H, W) are the spatial dimensions. + + Returns a [N, 4] tensors, with the boxes in xyxy format + """ + if masks.numel() == 0: + return torch.zeros((0, 4), device=masks.device) + + h, w = masks.shape[-2:] + + y = torch.arange(0, h, dtype=torch.float) + x = torch.arange(0, w, dtype=torch.float) + y, x = torch.meshgrid(y, x) + + x_mask = (masks * x.unsqueeze(0)) + x_max = x_mask.flatten(1).max(-1)[0] + x_min = x_mask.masked_fill(~(masks.bool()), 1e8).flatten(1).min(-1)[0] + + y_mask = (masks * y.unsqueeze(0)) + y_max = y_mask.flatten(1).max(-1)[0] + y_min = y_mask.masked_fill(~(masks.bool()), 1e8).flatten(1).min(-1)[0] + + return torch.stack([x_min, y_min, x_max, y_max], 1) + +if __name__ == '__main__': + x = torch.rand(5, 4) + y = torch.rand(3, 4) + iou, union = box_iou(x, y) + import ipdb; ipdb.set_trace() diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/util/config.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/util/config.py new file mode 100644 index 0000000..2255307 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/util/config.py @@ -0,0 +1,428 @@ +# ========================================================== +# Modified from mmcv +# ========================================================== +import sys +import os.path as osp +import ast +import tempfile +import shutil +from importlib import import_module +from argparse import Action + +from .addict import Dict + +BASE_KEY = '_base_' +DELETE_KEY = '_delete_' +RESERVED_KEYS = ['filename', 'text', 'pretty_text', 'get', 'dump', 'merge_from_dict'] + + +def check_file_exist(filename, msg_tmpl='file "{}" does not exist'): + if not osp.isfile(filename): + raise FileNotFoundError(msg_tmpl.format(filename)) + +class ConfigDict(Dict): + + def __missing__(self, name): + raise KeyError(name) + + def __getattr__(self, name): + try: + value = super(ConfigDict, self).__getattr__(name) + except KeyError: + ex = AttributeError(f"'{self.__class__.__name__}' object has no " + f"attribute '{name}'") + except Exception as e: + ex = e + else: + return value + raise ex + + +class Config(object): + """ + config files. + only support .py file as config now. + + ref: mmcv.utils.config + + Example: + >>> cfg = Config(dict(a=1, b=dict(b1=[0, 1]))) + >>> cfg.a + 1 + >>> cfg.b + {'b1': [0, 1]} + >>> cfg.b.b1 + [0, 1] + >>> cfg = Config.fromfile('tests/data/config/a.py') + >>> cfg.filename + "/home/kchen/projects/mmcv/tests/data/config/a.py" + >>> cfg.item4 + 'test' + >>> cfg + "Config [path: /home/kchen/projects/mmcv/tests/data/config/a.py]: " + "{'item1': [1, 2], 'item2': {'a': 0}, 'item3': True, 'item4': 'test'}" + """ + @staticmethod + def _validate_py_syntax(filename): + with open(filename) as f: + content = f.read() + try: + ast.parse(content) + except SyntaxError: + raise SyntaxError('There are syntax errors in config ' + f'file {filename}') + + @staticmethod + def _file2dict(filename): + filename = osp.abspath(osp.expanduser(filename)) + check_file_exist(filename) + if filename.lower().endswith('.py'): + with tempfile.TemporaryDirectory() as temp_config_dir: + temp_config_file = tempfile.NamedTemporaryFile( + dir=temp_config_dir, suffix='.py') + temp_config_name = osp.basename(temp_config_file.name) + # close temp file before copy + temp_config_file.close() + shutil.copyfile(filename, + osp.join(temp_config_dir, temp_config_name)) + temp_module_name = osp.splitext(temp_config_name)[0] + sys.path.insert(0, temp_config_dir) + Config._validate_py_syntax(filename) + mod = import_module(temp_module_name) + sys.path.pop(0) + cfg_dict = { + name: value + for name, value in mod.__dict__.items() + if not name.startswith('__') + } + # delete imported module + del sys.modules[temp_module_name] + + + elif filename.lower().endswith(('.yml', '.yaml', '.json')): + from .slio import slload + cfg_dict = slload(filename) + else: + raise IOError('Only py/yml/yaml/json type are supported now!') + + cfg_text = filename + '\n' + with open(filename, 'r') as f: + cfg_text += f.read() + + # parse the base file + if BASE_KEY in cfg_dict: + cfg_dir = osp.dirname(filename) + base_filename = cfg_dict.pop(BASE_KEY) + base_filename = base_filename if isinstance( + base_filename, list) else [base_filename] + + cfg_dict_list = list() + cfg_text_list = list() + for f in base_filename: + _cfg_dict, _cfg_text = Config._file2dict(osp.join(cfg_dir, f)) + cfg_dict_list.append(_cfg_dict) + cfg_text_list.append(_cfg_text) + + base_cfg_dict = dict() + for c in cfg_dict_list: + if len(base_cfg_dict.keys() & c.keys()) > 0: + raise KeyError('Duplicate key is not allowed among bases') + # TODO Allow the duplicate key while warnning user + base_cfg_dict.update(c) + + base_cfg_dict = Config._merge_a_into_b(cfg_dict, base_cfg_dict) + cfg_dict = base_cfg_dict + + # merge cfg_text + cfg_text_list.append(cfg_text) + cfg_text = '\n'.join(cfg_text_list) + + return cfg_dict, cfg_text + + @staticmethod + def _merge_a_into_b(a, b): + """merge dict `a` into dict `b` (non-inplace). + values in `a` will overwrite `b`. + copy first to avoid inplace modification + + Args: + a ([type]): [description] + b ([type]): [description] + + Returns: + [dict]: [description] + """ + # import ipdb; ipdb.set_trace() + if not isinstance(a, dict): + return a + + b = b.copy() + for k, v in a.items(): + if isinstance(v, dict) and k in b and not v.pop(DELETE_KEY, False): + + if not isinstance(b[k], dict) and not isinstance(b[k], list): + # if : + # import ipdb; ipdb.set_trace() + raise TypeError( + f'{k}={v} in child config cannot inherit from base ' + f'because {k} is a dict in the child config but is of ' + f'type {type(b[k])} in base config. You may set ' + f'`{DELETE_KEY}=True` to ignore the base config') + b[k] = Config._merge_a_into_b(v, b[k]) + elif isinstance(b, list): + try: + _ = int(k) + except: + raise TypeError( + f'b is a list, ' + f'index {k} should be an int when input but {type(k)}' + ) + b[int(k)] = Config._merge_a_into_b(v, b[int(k)]) + else: + b[k] = v + + return b + + @staticmethod + def fromfile(filename): + cfg_dict, cfg_text = Config._file2dict(filename) + return Config(cfg_dict, cfg_text=cfg_text, filename=filename) + + + def __init__(self, cfg_dict=None, cfg_text=None, filename=None): + if cfg_dict is None: + cfg_dict = dict() + elif not isinstance(cfg_dict, dict): + raise TypeError('cfg_dict must be a dict, but ' + f'got {type(cfg_dict)}') + for key in cfg_dict: + if key in RESERVED_KEYS: + raise KeyError(f'{key} is reserved for config file') + + super(Config, self).__setattr__('_cfg_dict', ConfigDict(cfg_dict)) + super(Config, self).__setattr__('_filename', filename) + if cfg_text: + text = cfg_text + elif filename: + with open(filename, 'r') as f: + text = f.read() + else: + text = '' + super(Config, self).__setattr__('_text', text) + + + @property + def filename(self): + return self._filename + + @property + def text(self): + return self._text + + @property + def pretty_text(self): + + indent = 4 + + def _indent(s_, num_spaces): + s = s_.split('\n') + if len(s) == 1: + return s_ + first = s.pop(0) + s = [(num_spaces * ' ') + line for line in s] + s = '\n'.join(s) + s = first + '\n' + s + return s + + def _format_basic_types(k, v, use_mapping=False): + if isinstance(v, str): + v_str = f"'{v}'" + else: + v_str = str(v) + + if use_mapping: + k_str = f"'{k}'" if isinstance(k, str) else str(k) + attr_str = f'{k_str}: {v_str}' + else: + attr_str = f'{str(k)}={v_str}' + attr_str = _indent(attr_str, indent) + + return attr_str + + def _format_list(k, v, use_mapping=False): + # check if all items in the list are dict + if all(isinstance(_, dict) for _ in v): + v_str = '[\n' + v_str += '\n'.join( + f'dict({_indent(_format_dict(v_), indent)}),' + for v_ in v).rstrip(',') + if use_mapping: + k_str = f"'{k}'" if isinstance(k, str) else str(k) + attr_str = f'{k_str}: {v_str}' + else: + attr_str = f'{str(k)}={v_str}' + attr_str = _indent(attr_str, indent) + ']' + else: + attr_str = _format_basic_types(k, v, use_mapping) + return attr_str + + def _contain_invalid_identifier(dict_str): + contain_invalid_identifier = False + for key_name in dict_str: + contain_invalid_identifier |= \ + (not str(key_name).isidentifier()) + return contain_invalid_identifier + + def _format_dict(input_dict, outest_level=False): + r = '' + s = [] + + use_mapping = _contain_invalid_identifier(input_dict) + if use_mapping: + r += '{' + for idx, (k, v) in enumerate(input_dict.items()): + is_last = idx >= len(input_dict) - 1 + end = '' if outest_level or is_last else ',' + if isinstance(v, dict): + v_str = '\n' + _format_dict(v) + if use_mapping: + k_str = f"'{k}'" if isinstance(k, str) else str(k) + attr_str = f'{k_str}: dict({v_str}' + else: + attr_str = f'{str(k)}=dict({v_str}' + attr_str = _indent(attr_str, indent) + ')' + end + elif isinstance(v, list): + attr_str = _format_list(k, v, use_mapping) + end + else: + attr_str = _format_basic_types(k, v, use_mapping) + end + + s.append(attr_str) + r += '\n'.join(s) + if use_mapping: + r += '}' + return r + + cfg_dict = self._cfg_dict.to_dict() + text = _format_dict(cfg_dict, outest_level=True) + return text + + + def __repr__(self): + return f'Config (path: {self.filename}): {self._cfg_dict.__repr__()}' + + def __len__(self): + return len(self._cfg_dict) + + def __getattr__(self, name): + # # debug + # print('+'*15) + # print('name=%s' % name) + # print("addr:", id(self)) + # # print('type(self):', type(self)) + # print(self.__dict__) + # print('+'*15) + # if self.__dict__ == {}: + # raise ValueError + + return getattr(self._cfg_dict, name) + + def __getitem__(self, name): + return self._cfg_dict.__getitem__(name) + + def __setattr__(self, name, value): + if isinstance(value, dict): + value = ConfigDict(value) + self._cfg_dict.__setattr__(name, value) + + def __setitem__(self, name, value): + if isinstance(value, dict): + value = ConfigDict(value) + self._cfg_dict.__setitem__(name, value) + + def __iter__(self): + return iter(self._cfg_dict) + + def dump(self, file=None): + # import ipdb; ipdb.set_trace() + if file is None: + return self.pretty_text + else: + with open(file, 'w') as f: + f.write(self.pretty_text) + + def merge_from_dict(self, options): + """Merge list into cfg_dict + + Merge the dict parsed by MultipleKVAction into this cfg. + + Examples: + >>> options = {'model.backbone.depth': 50, + ... 'model.backbone.with_cp':True} + >>> cfg = Config(dict(model=dict(backbone=dict(type='ResNet')))) + >>> cfg.merge_from_dict(options) + >>> cfg_dict = super(Config, self).__getattribute__('_cfg_dict') + >>> assert cfg_dict == dict( + ... model=dict(backbone=dict(depth=50, with_cp=True))) + + Args: + options (dict): dict of configs to merge from. + """ + option_cfg_dict = {} + for full_key, v in options.items(): + d = option_cfg_dict + key_list = full_key.split('.') + for subkey in key_list[:-1]: + d.setdefault(subkey, ConfigDict()) + d = d[subkey] + subkey = key_list[-1] + d[subkey] = v + + cfg_dict = super(Config, self).__getattribute__('_cfg_dict') + super(Config, self).__setattr__( + '_cfg_dict', Config._merge_a_into_b(option_cfg_dict, cfg_dict)) + + # for multiprocess + def __setstate__(self, state): + self.__init__(state) + + + def copy(self): + return Config(self._cfg_dict.copy()) + + def deepcopy(self): + return Config(self._cfg_dict.deepcopy()) + + +class DictAction(Action): + """ + argparse action to split an argument into KEY=VALUE form + on the first = and append to a dictionary. List options should + be passed as comma separated values, i.e KEY=V1,V2,V3 + """ + + @staticmethod + def _parse_int_float_bool(val): + try: + return int(val) + except ValueError: + pass + try: + return float(val) + except ValueError: + pass + if val.lower() in ['true', 'false']: + return True if val.lower() == 'true' else False + if val.lower() in ['none', 'null']: + return None + return val + + def __call__(self, parser, namespace, values, option_string=None): + options = {} + for kv in values: + key, val = kv.split('=', maxsplit=1) + val = [self._parse_int_float_bool(v) for v in val.split(',')] + if len(val) == 1: + val = val[0] + options[key] = val + setattr(namespace, self.dest, options) + diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/util/keypoint_ops.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/util/keypoint_ops.py new file mode 100644 index 0000000..036d813 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/util/keypoint_ops.py @@ -0,0 +1,29 @@ +import torch, os + +def keypoint_xyxyzz_to_xyzxyz(keypoints: torch.Tensor): + """_summary_ + + Args: + keypoints (torch.Tensor): ..., 51 + """ + res = torch.zeros_like(keypoints) + num_points = keypoints.shape[-1] // 3 + Z = keypoints[..., :2*num_points] + V = keypoints[..., 2*num_points:] + res[...,0::3] = Z[..., 0::2] + res[...,1::3] = Z[..., 1::2] + res[...,2::3] = V[...] + return res + +def keypoint_xyzxyz_to_xyxyzz(keypoints: torch.Tensor): + """_summary_ + + Args: + keypoints (torch.Tensor): ..., 51 + """ + res = torch.zeros_like(keypoints) + num_points = keypoints.shape[-1] // 3 + res[...,0:2*num_points:2] = keypoints[..., 0::3] + res[...,1:2*num_points:2] = keypoints[..., 1::3] + res[...,2*num_points:] = keypoints[..., 2::3] + return res \ No newline at end of file diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/util/misc.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/util/misc.py new file mode 100644 index 0000000..a36413b --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/XPose/util/misc.py @@ -0,0 +1,701 @@ +# Copyright (c) Facebook, Inc. and its affiliates. All Rights Reserved +""" +Misc functions, including distributed helpers. + +Mostly copy-paste from torchvision references. +""" +import functools +import io +import os +import random +import subprocess +import time +from collections import OrderedDict, defaultdict, deque +import datetime +import pickle +from typing import Optional, List + +import json, time +import numpy as np +import torch +import torch.distributed as dist +from torch import Tensor + +import colorsys + +# needed due to empty tensor bug in pytorch and torchvision 0.5 +import torchvision +__torchvision_need_compat_flag = float(torchvision.__version__.split('.')[1]) < 7 +if __torchvision_need_compat_flag: + from torchvision.ops import _new_empty_tensor + from torchvision.ops.misc import _output_size + + +class SmoothedValue(object): + """Track a series of values and provide access to smoothed values over a + window or the global series average. + """ + + def __init__(self, window_size=20, fmt=None): + if fmt is None: + fmt = "{median:.4f} ({global_avg:.4f})" + self.deque = deque(maxlen=window_size) + self.total = 0.0 + self.count = 0 + self.fmt = fmt + + def update(self, value, n=1): + self.deque.append(value) + self.count += n + self.total += value * n + + def synchronize_between_processes(self): + """ + Warning: does not synchronize the deque! + """ + if not is_dist_avail_and_initialized(): + return + t = torch.tensor([self.count, self.total], dtype=torch.float64, device='cuda') + dist.barrier() + dist.all_reduce(t) + t = t.tolist() + self.count = int(t[0]) + self.total = t[1] + + @property + def median(self): + d = torch.tensor(list(self.deque)) + if d.shape[0] == 0: + return 0 + return d.median().item() + + @property + def avg(self): + d = torch.tensor(list(self.deque), dtype=torch.float32) + return d.mean().item() + + @property + def global_avg(self): + if os.environ.get("SHILONG_AMP", None) == '1': + eps = 1e-4 + else: + eps = 1e-6 + return self.total / (self.count + eps) + + @property + def max(self): + return max(self.deque) + + @property + def value(self): + return self.deque[-1] + + def __str__(self): + return self.fmt.format( + median=self.median, + avg=self.avg, + global_avg=self.global_avg, + max=self.max, + value=self.value) + +@functools.lru_cache() +def _get_global_gloo_group(): + """ + Return a process group based on gloo backend, containing all the ranks + The result is cached. + """ + + if dist.get_backend() == "nccl": + return dist.new_group(backend="gloo") + + return dist.group.WORLD + +def all_gather_cpu(data): + """ + Run all_gather on arbitrary picklable data (not necessarily tensors) + Args: + data: any picklable object + Returns: + list[data]: list of data gathered from each rank + """ + + world_size = get_world_size() + if world_size == 1: + return [data] + + cpu_group = _get_global_gloo_group() + + buffer = io.BytesIO() + torch.save(data, buffer) + data_view = buffer.getbuffer() + device = "cuda" if cpu_group is None else "cpu" + tensor = torch.ByteTensor(data_view).to(device) + + # obtain Tensor size of each rank + local_size = torch.tensor([tensor.numel()], device=device, dtype=torch.long) + size_list = [torch.tensor([0], device=device, dtype=torch.long) for _ in range(world_size)] + if cpu_group is None: + dist.all_gather(size_list, local_size) + else: + print("gathering on cpu") + dist.all_gather(size_list, local_size, group=cpu_group) + size_list = [int(size.item()) for size in size_list] + max_size = max(size_list) + assert isinstance(local_size.item(), int) + local_size = int(local_size.item()) + + # receiving Tensor from all ranks + # we pad the tensor because torch all_gather does not support + # gathering tensors of different shapes + tensor_list = [] + for _ in size_list: + tensor_list.append(torch.empty((max_size,), dtype=torch.uint8, device=device)) + if local_size != max_size: + padding = torch.empty(size=(max_size - local_size,), dtype=torch.uint8, device=device) + tensor = torch.cat((tensor, padding), dim=0) + if cpu_group is None: + dist.all_gather(tensor_list, tensor) + else: + dist.all_gather(tensor_list, tensor, group=cpu_group) + + data_list = [] + for size, tensor in zip(size_list, tensor_list): + tensor = torch.split(tensor, [size, max_size - size], dim=0)[0] + buffer = io.BytesIO(tensor.cpu().numpy()) + obj = torch.load(buffer) + data_list.append(obj) + + return data_list + + +def all_gather(data): + """ + Run all_gather on arbitrary picklable data (not necessarily tensors) + Args: + data: any picklable object + Returns: + list[data]: list of data gathered from each rank + """ + + if os.getenv("CPU_REDUCE") == "1": + return all_gather_cpu(data) + + + + world_size = get_world_size() + if world_size == 1: + return [data] + + # serialized to a Tensor + buffer = pickle.dumps(data) + storage = torch.ByteStorage.from_buffer(buffer) + tensor = torch.ByteTensor(storage).to("cuda") + + # obtain Tensor size of each rank + local_size = torch.tensor([tensor.numel()], device="cuda") + size_list = [torch.tensor([0], device="cuda") for _ in range(world_size)] + dist.all_gather(size_list, local_size) + size_list = [int(size.item()) for size in size_list] + max_size = max(size_list) + + # receiving Tensor from all ranks + # we pad the tensor because torch all_gather does not support + # gathering tensors of different shapes + tensor_list = [] + for _ in size_list: + tensor_list.append(torch.empty((max_size,), dtype=torch.uint8, device="cuda")) + if local_size != max_size: + padding = torch.empty(size=(max_size - local_size,), dtype=torch.uint8, device="cuda") + tensor = torch.cat((tensor, padding), dim=0) + dist.all_gather(tensor_list, tensor) + + data_list = [] + for size, tensor in zip(size_list, tensor_list): + buffer = tensor.cpu().numpy().tobytes()[:size] + data_list.append(pickle.loads(buffer)) # nosec B301 + + return data_list + + +def reduce_dict(input_dict, average=True): + """ + Args: + input_dict (dict): all the values will be reduced + average (bool): whether to do average or sum + Reduce the values in the dictionary from all processes so that all processes + have the averaged results. Returns a dict with the same fields as + input_dict, after reduction. + """ + world_size = get_world_size() + if world_size < 2: + return input_dict + with torch.no_grad(): + names = [] + values = [] + # sort the keys so that they are consistent across processes + for k in sorted(input_dict.keys()): + names.append(k) + values.append(input_dict[k]) + values = torch.stack(values, dim=0) + dist.all_reduce(values) + if average: + values /= world_size + reduced_dict = {k: v for k, v in zip(names, values)} + return reduced_dict + + +class MetricLogger(object): + def __init__(self, delimiter="\t"): + self.meters = defaultdict(SmoothedValue) + self.delimiter = delimiter + + def update(self, **kwargs): + for k, v in kwargs.items(): + if isinstance(v, torch.Tensor): + v = v.item() + assert isinstance(v, (float, int)) + self.meters[k].update(v) + + def __getattr__(self, attr): + if attr in self.meters: + return self.meters[attr] + if attr in self.__dict__: + return self.__dict__[attr] + raise AttributeError("'{}' object has no attribute '{}'".format( + type(self).__name__, attr)) + + def __str__(self): + loss_str = [] + for name, meter in self.meters.items(): + # print(name, str(meter)) + # import ipdb;ipdb.set_trace() + if meter.count > 0: + loss_str.append( + "{}: {}".format(name, str(meter)) + ) + return self.delimiter.join(loss_str) + + def synchronize_between_processes(self): + for meter in self.meters.values(): + meter.synchronize_between_processes() + + def add_meter(self, name, meter): + self.meters[name] = meter + + def log_every(self, iterable, print_freq, header=None, logger=None): + if logger is None: + print_func = print + else: + print_func = logger.info + + i = 0 + if not header: + header = '' + start_time = time.time() + end = time.time() + iter_time = SmoothedValue(fmt='{avg:.4f}') + data_time = SmoothedValue(fmt='{avg:.4f}') + space_fmt = ':' + str(len(str(len(iterable)))) + 'd' + if torch.cuda.is_available(): + log_msg = self.delimiter.join([ + header, + '[{0' + space_fmt + '}/{1}]', + 'eta: {eta}', + '{meters}', + 'time: {time}', + 'data: {data}', + 'max mem: {memory:.0f}' + ]) + else: + log_msg = self.delimiter.join([ + header, + '[{0' + space_fmt + '}/{1}]', + 'eta: {eta}', + '{meters}', + 'time: {time}', + 'data: {data}' + ]) + MB = 1024.0 * 1024.0 + for obj in iterable: + data_time.update(time.time() - end) + yield obj + # import ipdb; ipdb.set_trace() + iter_time.update(time.time() - end) + if i % print_freq == 0 or i == len(iterable) - 1: + eta_seconds = iter_time.global_avg * (len(iterable) - i) + eta_string = str(datetime.timedelta(seconds=int(eta_seconds))) + if torch.cuda.is_available(): + print_func(log_msg.format( + i, len(iterable), eta=eta_string, + meters=str(self), + time=str(iter_time), data=str(data_time), + memory=torch.cuda.max_memory_allocated() / MB)) + else: + print_func(log_msg.format( + i, len(iterable), eta=eta_string, + meters=str(self), + time=str(iter_time), data=str(data_time))) + i += 1 + end = time.time() + total_time = time.time() - start_time + total_time_str = str(datetime.timedelta(seconds=int(total_time))) + print_func('{} Total time: {} ({:.4f} s / it)'.format( + header, total_time_str, total_time / len(iterable))) + + +def get_sha(): + cwd = os.path.dirname(os.path.abspath(__file__)) + + def _run(command): + return subprocess.check_output(command, cwd=cwd).decode('ascii').strip() + sha = 'N/A' + diff = "clean" + branch = 'N/A' + try: + sha = _run(['git', 'rev-parse', 'HEAD']) + subprocess.check_output(['git', 'diff'], cwd=cwd) + diff = _run(['git', 'diff-index', 'HEAD']) + diff = "has uncommited changes" if diff else "clean" + branch = _run(['git', 'rev-parse', '--abbrev-ref', 'HEAD']) + except Exception: + pass + message = f"sha: {sha}, status: {diff}, branch: {branch}" + return message + + +def collate_fn(batch): + # import ipdb; ipdb.set_trace() + batch = list(zip(*batch)) + batch[0] = nested_tensor_from_tensor_list(batch[0]) + return tuple(batch) + + +def _max_by_axis(the_list): + # type: (List[List[int]]) -> List[int] + maxes = the_list[0] + for sublist in the_list[1:]: + for index, item in enumerate(sublist): + maxes[index] = max(maxes[index], item) + return maxes + + +class NestedTensor(object): + def __init__(self, tensors, mask: Optional[Tensor]): + self.tensors = tensors + self.mask = mask + if mask == 'auto': + self.mask = torch.zeros_like(tensors).to(tensors.device) + if self.mask.dim() == 3: + self.mask = self.mask.sum(0).to(bool) + elif self.mask.dim() == 4: + self.mask = self.mask.sum(1).to(bool) + else: + raise ValueError("tensors dim must be 3 or 4 but {}({})".format(self.tensors.dim(), self.tensors.shape)) + + def imgsize(self): + res = [] + for i in range(self.tensors.shape[0]): + mask = self.mask[i] + maxH = (~mask).sum(0).max() + maxW = (~mask).sum(1).max() + res.append(torch.Tensor([maxH, maxW])) + return res + + def to(self, device): + # type: (Device) -> NestedTensor # noqa + cast_tensor = self.tensors.to(device) + mask = self.mask + if mask is not None: + assert mask is not None + cast_mask = mask.to(device) + else: + cast_mask = None + return NestedTensor(cast_tensor, cast_mask) + + def to_img_list_single(self, tensor, mask): + assert tensor.dim() == 3, "dim of tensor should be 3 but {}".format(tensor.dim()) + maxH = (~mask).sum(0).max() + maxW = (~mask).sum(1).max() + img = tensor[:, :maxH, :maxW] + return img + + def to_img_list(self): + """remove the padding and convert to img list + + Returns: + [type]: [description] + """ + if self.tensors.dim() == 3: + return self.to_img_list_single(self.tensors, self.mask) + else: + res = [] + for i in range(self.tensors.shape[0]): + tensor_i = self.tensors[i] + mask_i = self.mask[i] + res.append(self.to_img_list_single(tensor_i, mask_i)) + return res + + @property + def device(self): + return self.tensors.device + + def decompose(self): + return self.tensors, self.mask + + def __repr__(self): + return str(self.tensors) + + @property + def shape(self): + return { + 'tensors.shape': self.tensors.shape, + 'mask.shape': self.mask.shape + } + + +def nested_tensor_from_tensor_list(tensor_list: List[Tensor]): + # TODO make this more general + if tensor_list[0].ndim == 3: + if torchvision._is_tracing(): + # nested_tensor_from_tensor_list() does not export well to ONNX + # call _onnx_nested_tensor_from_tensor_list() instead + return _onnx_nested_tensor_from_tensor_list(tensor_list) + + # TODO make it support different-sized images + max_size = _max_by_axis([list(img.shape) for img in tensor_list]) + # min_size = tuple(min(s) for s in zip(*[img.shape for img in tensor_list])) + batch_shape = [len(tensor_list)] + max_size + b, c, h, w = batch_shape + dtype = tensor_list[0].dtype + device = tensor_list[0].device + tensor = torch.zeros(batch_shape, dtype=dtype, device=device) + mask = torch.ones((b, h, w), dtype=torch.bool, device=device) + for img, pad_img, m in zip(tensor_list, tensor, mask): + pad_img[: img.shape[0], : img.shape[1], : img.shape[2]].copy_(img) + m[: img.shape[1], :img.shape[2]] = False + else: + raise ValueError('not supported') + return NestedTensor(tensor, mask) + + +# _onnx_nested_tensor_from_tensor_list() is an implementation of +# nested_tensor_from_tensor_list() that is supported by ONNX tracing. +@torch.jit.unused +def _onnx_nested_tensor_from_tensor_list(tensor_list: List[Tensor]) -> NestedTensor: + max_size = [] + for i in range(tensor_list[0].dim()): + max_size_i = torch.max(torch.stack([img.shape[i] for img in tensor_list]).to(torch.float32)).to(torch.int64) + max_size.append(max_size_i) + max_size = tuple(max_size) + + # work around for + # pad_img[: img.shape[0], : img.shape[1], : img.shape[2]].copy_(img) + # m[: img.shape[1], :img.shape[2]] = False + # which is not yet supported in onnx + padded_imgs = [] + padded_masks = [] + for img in tensor_list: + padding = [(s1 - s2) for s1, s2 in zip(max_size, tuple(img.shape))] + padded_img = torch.nn.functional.pad(img, (0, padding[2], 0, padding[1], 0, padding[0])) + padded_imgs.append(padded_img) + + m = torch.zeros_like(img[0], dtype=torch.int, device=img.device) + padded_mask = torch.nn.functional.pad(m, (0, padding[2], 0, padding[1]), "constant", 1) + padded_masks.append(padded_mask.to(torch.bool)) + + tensor = torch.stack(padded_imgs) + mask = torch.stack(padded_masks) + + return NestedTensor(tensor, mask=mask) + + +def setup_for_distributed(is_master): + """ + This function disables printing when not in master process + """ + import builtins as __builtin__ + builtin_print = __builtin__.print + + def print(*args, **kwargs): + force = kwargs.pop('force', False) + if is_master or force: + builtin_print(*args, **kwargs) + + __builtin__.print = print + + +def is_dist_avail_and_initialized(): + if not dist.is_available(): + return False + if not dist.is_initialized(): + return False + return True + + +def get_world_size(): + if not is_dist_avail_and_initialized(): + return 1 + return dist.get_world_size() + + +def get_rank(): + if not is_dist_avail_and_initialized(): + return 0 + return dist.get_rank() + + +def is_main_process(): + return get_rank() == 0 + + +def save_on_master(*args, **kwargs): + if is_main_process(): + torch.save(*args, **kwargs) + +def init_distributed_mode(args): + if 'WORLD_SIZE' in os.environ and os.environ['WORLD_SIZE'] != '': # 'RANK' in os.environ and + args.rank = int(os.environ["RANK"]) + args.world_size = int(os.environ['WORLD_SIZE']) + args.gpu = args.local_rank = int(os.environ['LOCAL_RANK']) + + # launch by torch.distributed.launch + # Single node + # python -m torch.distributed.launch --nproc_per_node=8 main.py --world-size 1 --rank 0 ... + # Multi nodes + # python -m torch.distributed.launch --nproc_per_node=8 main.py --world-size 2 --rank 0 --dist-url 'tcp://IP_OF_NODE0:FREEPORT' ... + # python -m torch.distributed.launch --nproc_per_node=8 main.py --world-size 2 --rank 1 --dist-url 'tcp://IP_OF_NODE0:FREEPORT' ... + # args.rank = int(os.environ.get('OMPI_COMM_WORLD_RANK')) + # local_world_size = int(os.environ['GPU_PER_NODE_COUNT']) + # args.world_size = args.world_size * local_world_size + # args.gpu = args.local_rank = int(os.environ['LOCAL_RANK']) + # args.rank = args.rank * local_world_size + args.local_rank + print('world size: {}, rank: {}, local rank: {}'.format(args.world_size, args.rank, args.local_rank)) + print(json.dumps(dict(os.environ), indent=2)) + elif 'SLURM_PROCID' in os.environ: + args.rank = int(os.environ['SLURM_PROCID']) + args.gpu = args.local_rank = int(os.environ['SLURM_LOCALID']) + args.world_size = int(os.environ['SLURM_NPROCS']) + + if os.environ.get('HAND_DEFINE_DIST_URL', 0) == '1': + pass + else: + import util.hostlist as uh + nodenames = uh.parse_nodelist(os.environ['SLURM_JOB_NODELIST']) + gpu_ids = [int(node[3:]) for node in nodenames] + fixid = int(os.environ.get('FIX_DISTRIBUTED_PORT_NUMBER', 0)) + # fixid += random.randint(0, 300) + port = str(3137 + int(min(gpu_ids)) + fixid) + args.dist_url = "tcp://{ip}:{port}".format(ip=uh.nodename_to_ip(nodenames[0]), port=port) + + print('world size: {}, world rank: {}, local rank: {}, device_count: {}'.format(args.world_size, args.rank, args.local_rank, torch.cuda.device_count())) + + + else: + print('Not using distributed mode') + args.distributed = False + args.world_size = 1 + args.rank = 0 + args.local_rank = 0 + return + + print("world_size:{} rank:{} local_rank:{}".format(args.world_size, args.rank, args.local_rank)) + args.distributed = True + torch.cuda.set_device(args.local_rank) + args.dist_backend = 'nccl' + print('| distributed init (rank {}): {}'.format(args.rank, args.dist_url), flush=True) + + torch.distributed.init_process_group( + backend=args.dist_backend, + world_size=args.world_size, + rank=args.rank, + init_method=args.dist_url, + ) + + print("Before torch.distributed.barrier()") + torch.distributed.barrier() + print("End torch.distributed.barrier()") + setup_for_distributed(args.rank == 0) + + +@torch.no_grad() +def accuracy(output, target, topk=(1,)): + """Computes the precision@k for the specified values of k""" + if target.numel() == 0: + return [torch.zeros([], device=output.device)] + maxk = max(topk) + batch_size = target.size(0) + + _, pred = output.topk(maxk, 1, True, True) + pred = pred.t() + correct = pred.eq(target.view(1, -1).expand_as(pred)) + + res = [] + for k in topk: + correct_k = correct[:k].view(-1).float().sum(0) + res.append(correct_k.mul_(100.0 / batch_size)) + return res + +@torch.no_grad() +def accuracy_onehot(pred, gt): + """_summary_ + + Args: + pred (_type_): n, c + gt (_type_): n, c + """ + tp = ((pred - gt).abs().sum(-1) < 1e-4).float().sum() + acc = tp / gt.shape[0] * 100 + return acc + + + + + +def interpolate(input, size=None, scale_factor=None, mode="nearest", align_corners=None): + # type: (Tensor, Optional[List[int]], Optional[float], str, Optional[bool]) -> Tensor + """ + Equivalent to nn.functional.interpolate, but with support for empty batch sizes. + This will eventually be supported natively by PyTorch, and this + class can go away. + """ + if __torchvision_need_compat_flag < 0.7: + if input.numel() > 0: + return torch.nn.functional.interpolate( + input, size, scale_factor, mode, align_corners + ) + + output_shape = _output_size(2, input, size, scale_factor) + output_shape = list(input.shape[:-2]) + list(output_shape) + return _new_empty_tensor(input, output_shape) + else: + return torchvision.ops.misc.interpolate(input, size, scale_factor, mode, align_corners) + + + +class color_sys(): + def __init__(self, num_colors) -> None: + self.num_colors = num_colors + colors=[] + for i in np.arange(0., 360., 360. / num_colors): + hue = i/360. + lightness = (50 + np.random.rand() * 10)/100. + saturation = (90 + np.random.rand() * 10)/100. + colors.append(tuple([int(j*255) for j in colorsys.hls_to_rgb(hue, lightness, saturation)])) + self.colors = colors + + def __call__(self, idx): + return self.colors[idx] + +def inverse_sigmoid(x, eps=1e-3): + x = x.clamp(min=0, max=1) + x1 = x.clamp(min=eps) + x2 = (1 - x).clamp(min=eps) + return torch.log(x1/x2) + +def clean_state_dict(state_dict): + new_state_dict = OrderedDict() + for k, v in state_dict.items(): + if k[:7] == 'module.': + k = k[7:] # remove `module.` + new_state_dict[k] = v + return new_state_dict \ No newline at end of file diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/__init__.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/__init__.py new file mode 100644 index 0000000..1680083 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/__init__.py @@ -0,0 +1,20 @@ +# coding: utf-8 +# pylint: disable=wrong-import-position +"""InsightFace: A Face Analysis Toolkit.""" +from __future__ import absolute_import + +try: + #import mxnet as mx + import onnxruntime +except ImportError: + raise ImportError( + "Unable to import dependency onnxruntime. " + ) + +__version__ = '0.7.3' + +from . import model_zoo +from . import utils +from . import app +from . import data + diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/app/__init__.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/app/__init__.py new file mode 100644 index 0000000..cc57461 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/app/__init__.py @@ -0,0 +1 @@ +from .face_analysis import * diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/app/common.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/app/common.py new file mode 100644 index 0000000..82ca987 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/app/common.py @@ -0,0 +1,49 @@ +import numpy as np +from numpy.linalg import norm as l2norm +#from easydict import EasyDict + +class Face(dict): + + def __init__(self, d=None, **kwargs): + if d is None: + d = {} + if kwargs: + d.update(**kwargs) + for k, v in d.items(): + setattr(self, k, v) + # Class attributes + #for k in self.__class__.__dict__.keys(): + # if not (k.startswith('__') and k.endswith('__')) and not k in ('update', 'pop'): + # setattr(self, k, getattr(self, k)) + + def __setattr__(self, name, value): + if isinstance(value, (list, tuple)): + value = [self.__class__(x) + if isinstance(x, dict) else x for x in value] + elif isinstance(value, dict) and not isinstance(value, self.__class__): + value = self.__class__(value) + super(Face, self).__setattr__(name, value) + super(Face, self).__setitem__(name, value) + + __setitem__ = __setattr__ + + def __getattr__(self, name): + return None + + @property + def embedding_norm(self): + if self.embedding is None: + return None + return l2norm(self.embedding) + + @property + def normed_embedding(self): + if self.embedding is None: + return None + return self.embedding / self.embedding_norm + + @property + def sex(self): + if self.gender is None: + return None + return 'M' if self.gender==1 else 'F' diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/app/face_analysis.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/app/face_analysis.py new file mode 100644 index 0000000..aa5128b --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/app/face_analysis.py @@ -0,0 +1,110 @@ +# -*- coding: utf-8 -*- +# @Organization : insightface.ai +# @Author : Jia Guo +# @Time : 2021-05-04 +# @Function : + + +from __future__ import division + +import glob +import os.path as osp + +import numpy as np +import onnxruntime +from numpy.linalg import norm + +from ..model_zoo import model_zoo +from ..utils import ensure_available +from .common import Face + + +DEFAULT_MP_NAME = 'buffalo_l' +__all__ = ['FaceAnalysis'] + +class FaceAnalysis: + def __init__(self, name=DEFAULT_MP_NAME, root='~/.insightface', allowed_modules=None, **kwargs): + onnxruntime.set_default_logger_severity(3) + self.models = {} + self.model_dir = ensure_available('models', name, root=root) + onnx_files = glob.glob(osp.join(self.model_dir, '*.onnx')) + onnx_files = sorted(onnx_files) + for onnx_file in onnx_files: + model = model_zoo.get_model(onnx_file, **kwargs) + if model is None: + print('model not recognized:', onnx_file) + elif allowed_modules is not None and model.taskname not in allowed_modules: + print('model ignore:', onnx_file, model.taskname) + del model + elif model.taskname not in self.models and (allowed_modules is None or model.taskname in allowed_modules): + # print('find model:', onnx_file, model.taskname, model.input_shape, model.input_mean, model.input_std) + self.models[model.taskname] = model + else: + print('duplicated model task type, ignore:', onnx_file, model.taskname) + del model + assert 'detection' in self.models + self.det_model = self.models['detection'] + + + def prepare(self, ctx_id, det_thresh=0.5, det_size=(640, 640)): + self.det_thresh = det_thresh + assert det_size is not None + # print('set det-size:', det_size) + self.det_size = det_size + for taskname, model in self.models.items(): + if taskname=='detection': + model.prepare(ctx_id, input_size=det_size, det_thresh=det_thresh) + else: + model.prepare(ctx_id) + + def get(self, img, max_num=0): + bboxes, kpss = self.det_model.detect(img, + max_num=max_num, + metric='default') + if bboxes.shape[0] == 0: + return [] + ret = [] + for i in range(bboxes.shape[0]): + bbox = bboxes[i, 0:4] + det_score = bboxes[i, 4] + kps = None + if kpss is not None: + kps = kpss[i] + face = Face(bbox=bbox, kps=kps, det_score=det_score) + for taskname, model in self.models.items(): + if taskname=='detection': + continue + model.get(img, face) + ret.append(face) + return ret + + def draw_on(self, img, faces): + import cv2 + dimg = img.copy() + for i in range(len(faces)): + face = faces[i] + box = face.bbox.astype(np.int) + color = (0, 0, 255) + cv2.rectangle(dimg, (box[0], box[1]), (box[2], box[3]), color, 2) + if face.kps is not None: + kps = face.kps.astype(np.int) + #print(landmark.shape) + for l in range(kps.shape[0]): + color = (0, 0, 255) + if l == 0 or l == 3: + color = (0, 255, 0) + cv2.circle(dimg, (kps[l][0], kps[l][1]), 1, color, + 2) + if face.gender is not None and face.age is not None: + cv2.putText(dimg,'%s,%d'%(face.sex,face.age), (box[0]-1, box[1]-4),cv2.FONT_HERSHEY_COMPLEX,0.7,(0,255,0),1) + + #for key, value in face.items(): + # if key.startswith('landmark_3d'): + # print(key, value.shape) + # print(value[0:10,:]) + # lmk = np.round(value).astype(np.int) + # for l in range(lmk.shape[0]): + # color = (255, 0, 0) + # cv2.circle(dimg, (lmk[l][0], lmk[l][1]), 1, color, + # 2) + return dimg diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/data/__init__.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/data/__init__.py new file mode 100644 index 0000000..665c59e --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/data/__init__.py @@ -0,0 +1,2 @@ +from .image import get_image +from .pickle_object import get_object diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/data/image.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/data/image.py new file mode 100644 index 0000000..6d32c4b --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/data/image.py @@ -0,0 +1,27 @@ +import cv2 +import os +import os.path as osp +from pathlib import Path + +class ImageCache: + data = {} + +def get_image(name, to_rgb=False): + key = (name, to_rgb) + if key in ImageCache.data: + return ImageCache.data[key] + images_dir = osp.join(Path(__file__).parent.absolute(), 'images') + ext_names = ['.jpg', '.png', '.jpeg'] + image_file = None + for ext_name in ext_names: + _image_file = osp.join(images_dir, "%s%s"%(name, ext_name)) + if osp.exists(_image_file): + image_file = _image_file + break + assert image_file is not None, '%s not found'%name + img = cv2.imread(image_file) + if to_rgb: + img = img[:,:,::-1] + ImageCache.data[key] = img + return img + diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/data/images/Tom_Hanks_54745.png b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/data/images/Tom_Hanks_54745.png new file mode 100644 index 0000000000000000000000000000000000000000..906315d13fa29bb3a5ded3e162592f2c7f041b23 GIT binary patch literal 12123 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 Ttb&1Uc?^h#p87jgyXgM`<&#U{ literal 0 HcmV?d00001 diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/data/images/mask_black.jpg b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/data/images/mask_black.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0eab0df555c23f1e033537fe39f3c0c8303dd369 GIT binary patch literal 21308 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 VVn>NjzJFOvl65=JpMS2~|Jlz7LHPgx literal 0 HcmV?d00001 diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/data/images/mask_blue.jpg b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/data/images/mask_blue.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f71336b9a0d3038ebd84e6995ebfbe54946fcbb4 GIT binary patch literal 44728 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 literal 0 HcmV?d00001 diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/data/images/mask_green.jpg b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/data/images/mask_green.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ac2ad55f4fc580c915dfa4c157ca3bfc84e453f4 GIT binary patch literal 6116 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 AxBvhE literal 0 HcmV?d00001 diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/data/images/mask_white.jpg b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/data/images/mask_white.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2148ab2d09fdee6e3f59315470e98ecfc54339e4 GIT binary patch literal 78905 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 R1g2ow-wIx== 0 + #assert label > self.last_label + assert len(imgs) > 0 + label = self.wlabel + for img in imgs: + idx = self.widx + image_meta = {'image_index': idx, 'image_classes': [label]} + header = mx.recordio.IRHeader(0, label, idx, 0) + if isinstance(img, np.ndarray): + s = mx.recordio.pack_img(header,img,quality=95,img_fmt='.jpg') + else: + s = mx.recordio.pack(header, img) + self.writer.write_idx(idx, s) + self.meta.append(image_meta) + self.widx += 1 + self.max_label = label + self.wlabel += 1 + + + def add_image(self, img, label): + #!!! img should be BGR!!!! + #assert label >= 0 + #assert label > self.last_label + idx = self.widx + header = mx.recordio.IRHeader(0, label, idx, 0) + if isinstance(label, list): + idlabel = label[0] + else: + idlabel = label + image_meta = {'image_index': idx, 'image_classes': [idlabel]} + if isinstance(img, np.ndarray): + s = mx.recordio.pack_img(header,img,quality=95,img_fmt='.jpg') + else: + s = mx.recordio.pack(header, img) + self.writer.write_idx(idx, s) + self.meta.append(image_meta) + self.widx += 1 + self.max_label = max(self.max_label, idlabel) + + def close(self): + with open(osp.join(self.path, 'train.meta'), 'wb') as pfile: + pickle.dump(self.meta, pfile, protocol=pickle.HIGHEST_PROTOCOL) + print('stat:', self.widx, self.wlabel) + with open(os.path.join(self.path, 'property'), 'w') as f: + f.write("%d,%d,%d\n" % (self.max_label+1, self.image_size[0], self.image_size[1])) + f.write("%d\n" % (self.widx)) + diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/model_zoo/__init__.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/model_zoo/__init__.py new file mode 100644 index 0000000..225623d --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/model_zoo/__init__.py @@ -0,0 +1,6 @@ +from .model_zoo import get_model +from .arcface_onnx import ArcFaceONNX +from .retinaface import RetinaFace +from .scrfd import SCRFD +from .landmark import Landmark +from .attribute import Attribute diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/model_zoo/arcface_onnx.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/model_zoo/arcface_onnx.py new file mode 100644 index 0000000..b537ce2 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/model_zoo/arcface_onnx.py @@ -0,0 +1,92 @@ +# -*- coding: utf-8 -*- +# @Organization : insightface.ai +# @Author : Jia Guo +# @Time : 2021-05-04 +# @Function : + +from __future__ import division +import numpy as np +import cv2 +import onnx +import onnxruntime +from ..utils import face_align + +__all__ = [ + 'ArcFaceONNX', +] + + +class ArcFaceONNX: + def __init__(self, model_file=None, session=None): + assert model_file is not None + self.model_file = model_file + self.session = session + self.taskname = 'recognition' + find_sub = False + find_mul = False + model = onnx.load(self.model_file) + graph = model.graph + for nid, node in enumerate(graph.node[:8]): + #print(nid, node.name) + if node.name.startswith('Sub') or node.name.startswith('_minus'): + find_sub = True + if node.name.startswith('Mul') or node.name.startswith('_mul'): + find_mul = True + if find_sub and find_mul: + #mxnet arcface model + input_mean = 0.0 + input_std = 1.0 + else: + input_mean = 127.5 + input_std = 127.5 + self.input_mean = input_mean + self.input_std = input_std + #print('input mean and std:', self.input_mean, self.input_std) + if self.session is None: + self.session = onnxruntime.InferenceSession(self.model_file, None) + input_cfg = self.session.get_inputs()[0] + input_shape = input_cfg.shape + input_name = input_cfg.name + self.input_size = tuple(input_shape[2:4][::-1]) + self.input_shape = input_shape + outputs = self.session.get_outputs() + output_names = [] + for out in outputs: + output_names.append(out.name) + self.input_name = input_name + self.output_names = output_names + assert len(self.output_names)==1 + self.output_shape = outputs[0].shape + + def prepare(self, ctx_id, **kwargs): + if ctx_id<0: + self.session.set_providers(['CPUExecutionProvider']) + + def get(self, img, face): + aimg = face_align.norm_crop(img, landmark=face.kps, image_size=self.input_size[0]) + face.embedding = self.get_feat(aimg).flatten() + return face.embedding + + def compute_sim(self, feat1, feat2): + from numpy.linalg import norm + feat1 = feat1.ravel() + feat2 = feat2.ravel() + sim = np.dot(feat1, feat2) / (norm(feat1) * norm(feat2)) + return sim + + def get_feat(self, imgs): + if not isinstance(imgs, list): + imgs = [imgs] + input_size = self.input_size + + blob = cv2.dnn.blobFromImages(imgs, 1.0 / self.input_std, input_size, + (self.input_mean, self.input_mean, self.input_mean), swapRB=True) + net_out = self.session.run(self.output_names, {self.input_name: blob})[0] + return net_out + + def forward(self, batch_data): + blob = (batch_data - self.input_mean) / self.input_std + net_out = self.session.run(self.output_names, {self.input_name: blob})[0] + return net_out + + diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/model_zoo/attribute.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/model_zoo/attribute.py new file mode 100644 index 0000000..40c34de --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/model_zoo/attribute.py @@ -0,0 +1,94 @@ +# -*- coding: utf-8 -*- +# @Organization : insightface.ai +# @Author : Jia Guo +# @Time : 2021-06-19 +# @Function : + +from __future__ import division +import numpy as np +import cv2 +import onnx +import onnxruntime +from ..utils import face_align + +__all__ = [ + 'Attribute', +] + + +class Attribute: + def __init__(self, model_file=None, session=None): + assert model_file is not None + self.model_file = model_file + self.session = session + find_sub = False + find_mul = False + model = onnx.load(self.model_file) + graph = model.graph + for nid, node in enumerate(graph.node[:8]): + #print(nid, node.name) + if node.name.startswith('Sub') or node.name.startswith('_minus'): + find_sub = True + if node.name.startswith('Mul') or node.name.startswith('_mul'): + find_mul = True + if nid<3 and node.name=='bn_data': + find_sub = True + find_mul = True + if find_sub and find_mul: + #mxnet arcface model + input_mean = 0.0 + input_std = 1.0 + else: + input_mean = 127.5 + input_std = 128.0 + self.input_mean = input_mean + self.input_std = input_std + #print('input mean and std:', model_file, self.input_mean, self.input_std) + if self.session is None: + self.session = onnxruntime.InferenceSession(self.model_file, None) + input_cfg = self.session.get_inputs()[0] + input_shape = input_cfg.shape + input_name = input_cfg.name + self.input_size = tuple(input_shape[2:4][::-1]) + self.input_shape = input_shape + outputs = self.session.get_outputs() + output_names = [] + for out in outputs: + output_names.append(out.name) + self.input_name = input_name + self.output_names = output_names + assert len(self.output_names)==1 + output_shape = outputs[0].shape + #print('init output_shape:', output_shape) + if output_shape[1]==3: + self.taskname = 'genderage' + else: + self.taskname = 'attribute_%d'%output_shape[1] + + def prepare(self, ctx_id, **kwargs): + if ctx_id<0: + self.session.set_providers(['CPUExecutionProvider']) + + def get(self, img, face): + bbox = face.bbox + w, h = (bbox[2] - bbox[0]), (bbox[3] - bbox[1]) + center = (bbox[2] + bbox[0]) / 2, (bbox[3] + bbox[1]) / 2 + rotate = 0 + _scale = self.input_size[0] / (max(w, h)*1.5) + #print('param:', img.shape, bbox, center, self.input_size, _scale, rotate) + aimg, M = face_align.transform(img, center, self.input_size[0], _scale, rotate) + input_size = tuple(aimg.shape[0:2][::-1]) + #assert input_size==self.input_size + blob = cv2.dnn.blobFromImage(aimg, 1.0/self.input_std, input_size, (self.input_mean, self.input_mean, self.input_mean), swapRB=True) + pred = self.session.run(self.output_names, {self.input_name : blob})[0][0] + if self.taskname=='genderage': + assert len(pred)==3 + gender = np.argmax(pred[:2]) + age = int(np.round(pred[2]*100)) + face['gender'] = gender + face['age'] = age + return gender, age + else: + return pred + + diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/model_zoo/inswapper.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/model_zoo/inswapper.py new file mode 100644 index 0000000..f321c62 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/model_zoo/inswapper.py @@ -0,0 +1,114 @@ +import time +import numpy as np +import onnxruntime +import cv2 +import onnx +from onnx import numpy_helper +from ..utils import face_align + + + + +class INSwapper(): + def __init__(self, model_file=None, session=None): + self.model_file = model_file + self.session = session + model = onnx.load(self.model_file) + graph = model.graph + self.emap = numpy_helper.to_array(graph.initializer[-1]) + self.input_mean = 0.0 + self.input_std = 255.0 + #print('input mean and std:', model_file, self.input_mean, self.input_std) + if self.session is None: + self.session = onnxruntime.InferenceSession(self.model_file, None) + inputs = self.session.get_inputs() + self.input_names = [] + for inp in inputs: + self.input_names.append(inp.name) + outputs = self.session.get_outputs() + output_names = [] + for out in outputs: + output_names.append(out.name) + self.output_names = output_names + assert len(self.output_names)==1 + output_shape = outputs[0].shape + input_cfg = inputs[0] + input_shape = input_cfg.shape + self.input_shape = input_shape + # print('inswapper-shape:', self.input_shape) + self.input_size = tuple(input_shape[2:4][::-1]) + + def forward(self, img, latent): + img = (img - self.input_mean) / self.input_std + pred = self.session.run(self.output_names, {self.input_names[0]: img, self.input_names[1]: latent})[0] + return pred + + def get(self, img, target_face, source_face, paste_back=True): + face_mask = np.zeros((img.shape[0], img.shape[1]), np.uint8) + cv2.fillPoly(face_mask, np.array([target_face.landmark_2d_106[[1,9,10,11,12,13,14,15,16,2,3,4,5,6,7,8,0,24,23,22,21,20,19,18,32,31,30,29,28,27,26,25,17,101,105,104,103,51,49,48,43]].astype('int64')]), 1) + aimg, M = face_align.norm_crop2(img, target_face.kps, self.input_size[0]) + blob = cv2.dnn.blobFromImage(aimg, 1.0 / self.input_std, self.input_size, + (self.input_mean, self.input_mean, self.input_mean), swapRB=True) + latent = source_face.normed_embedding.reshape((1,-1)) + latent = np.dot(latent, self.emap) + latent /= np.linalg.norm(latent) + pred = self.session.run(self.output_names, {self.input_names[0]: blob, self.input_names[1]: latent})[0] + #print(latent.shape, latent.dtype, pred.shape) + img_fake = pred.transpose((0,2,3,1))[0] + bgr_fake = np.clip(255 * img_fake, 0, 255).astype(np.uint8)[:,:,::-1] + if not paste_back: + return bgr_fake, M + else: + target_img = img + fake_diff = bgr_fake.astype(np.float32) - aimg.astype(np.float32) + fake_diff = np.abs(fake_diff).mean(axis=2) + fake_diff[:2,:] = 0 + fake_diff[-2:,:] = 0 + fake_diff[:,:2] = 0 + fake_diff[:,-2:] = 0 + IM = cv2.invertAffineTransform(M) + img_white = np.full((aimg.shape[0],aimg.shape[1]), 255, dtype=np.float32) + bgr_fake = cv2.warpAffine(bgr_fake, IM, (target_img.shape[1], target_img.shape[0]), borderValue=0.0) + img_white = cv2.warpAffine(img_white, IM, (target_img.shape[1], target_img.shape[0]), borderValue=0.0) + fake_diff = cv2.warpAffine(fake_diff, IM, (target_img.shape[1], target_img.shape[0]), borderValue=0.0) + img_white[img_white>20] = 255 + fthresh = 10 + fake_diff[fake_diff=fthresh] = 255 + img_mask = img_white + mask_h_inds, mask_w_inds = np.where(img_mask==255) + mask_h = np.max(mask_h_inds) - np.min(mask_h_inds) + mask_w = np.max(mask_w_inds) - np.min(mask_w_inds) + mask_size = int(np.sqrt(mask_h*mask_w)) + k = max(mask_size//10, 10) + #k = max(mask_size//20, 6) + #k = 6 + kernel = np.ones((k,k),np.uint8) + img_mask = cv2.erode(img_mask,kernel,iterations = 1) + kernel = np.ones((2,2),np.uint8) + fake_diff = cv2.dilate(fake_diff,kernel,iterations = 1) + + face_mask = cv2.erode(face_mask,np.ones((11,11),np.uint8),iterations = 1) + fake_diff[face_mask==1] = 255 + + k = max(mask_size//20, 5) + #k = 3 + #k = 3 + kernel_size = (k, k) + blur_size = tuple(2*i+1 for i in kernel_size) + img_mask = cv2.GaussianBlur(img_mask, blur_size, 0) + k = 5 + kernel_size = (k, k) + blur_size = tuple(2*i+1 for i in kernel_size) + fake_diff = cv2.blur(fake_diff, (11,11), 0) + ##fake_diff = cv2.GaussianBlur(fake_diff, blur_size, 0) + # print('blur_size: ', blur_size) + # fake_diff = cv2.blur(fake_diff, (21, 21), 0) # blur_size + img_mask /= 255 + fake_diff /= 255 + # img_mask = fake_diff + img_mask = img_mask*fake_diff + img_mask = np.reshape(img_mask, [img_mask.shape[0],img_mask.shape[1],1]) + fake_merged = img_mask * bgr_fake + (1-img_mask) * target_img.astype(np.float32) + fake_merged = fake_merged.astype(np.uint8) + return fake_merged diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/model_zoo/landmark.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/model_zoo/landmark.py new file mode 100644 index 0000000..598b4b2 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/model_zoo/landmark.py @@ -0,0 +1,114 @@ +# -*- coding: utf-8 -*- +# @Organization : insightface.ai +# @Author : Jia Guo +# @Time : 2021-05-04 +# @Function : + +from __future__ import division +import numpy as np +import cv2 +import onnx +import onnxruntime +from ..utils import face_align +from ..utils import transform +from ..data import get_object + +__all__ = [ + 'Landmark', +] + + +class Landmark: + def __init__(self, model_file=None, session=None): + assert model_file is not None + self.model_file = model_file + self.session = session + find_sub = False + find_mul = False + model = onnx.load(self.model_file) + graph = model.graph + for nid, node in enumerate(graph.node[:8]): + #print(nid, node.name) + if node.name.startswith('Sub') or node.name.startswith('_minus'): + find_sub = True + if node.name.startswith('Mul') or node.name.startswith('_mul'): + find_mul = True + if nid<3 and node.name=='bn_data': + find_sub = True + find_mul = True + if find_sub and find_mul: + #mxnet arcface model + input_mean = 0.0 + input_std = 1.0 + else: + input_mean = 127.5 + input_std = 128.0 + self.input_mean = input_mean + self.input_std = input_std + #print('input mean and std:', model_file, self.input_mean, self.input_std) + if self.session is None: + self.session = onnxruntime.InferenceSession(self.model_file, None) + input_cfg = self.session.get_inputs()[0] + input_shape = input_cfg.shape + input_name = input_cfg.name + self.input_size = tuple(input_shape[2:4][::-1]) + self.input_shape = input_shape + outputs = self.session.get_outputs() + output_names = [] + for out in outputs: + output_names.append(out.name) + self.input_name = input_name + self.output_names = output_names + assert len(self.output_names)==1 + output_shape = outputs[0].shape + self.require_pose = False + #print('init output_shape:', output_shape) + if output_shape[1]==3309: + self.lmk_dim = 3 + self.lmk_num = 68 + self.mean_lmk = get_object('meanshape_68.pkl') + self.require_pose = True + else: + self.lmk_dim = 2 + self.lmk_num = output_shape[1]//self.lmk_dim + self.taskname = 'landmark_%dd_%d'%(self.lmk_dim, self.lmk_num) + + def prepare(self, ctx_id, **kwargs): + if ctx_id<0: + self.session.set_providers(['CPUExecutionProvider']) + + def get(self, img, face): + bbox = face.bbox + w, h = (bbox[2] - bbox[0]), (bbox[3] - bbox[1]) + center = (bbox[2] + bbox[0]) / 2, (bbox[3] + bbox[1]) / 2 + rotate = 0 + _scale = self.input_size[0] / (max(w, h)*1.5) + #print('param:', img.shape, bbox, center, self.input_size, _scale, rotate) + aimg, M = face_align.transform(img, center, self.input_size[0], _scale, rotate) + input_size = tuple(aimg.shape[0:2][::-1]) + #assert input_size==self.input_size + blob = cv2.dnn.blobFromImage(aimg, 1.0/self.input_std, input_size, (self.input_mean, self.input_mean, self.input_mean), swapRB=True) + pred = self.session.run(self.output_names, {self.input_name : blob})[0][0] + if pred.shape[0] >= 3000: + pred = pred.reshape((-1, 3)) + else: + pred = pred.reshape((-1, 2)) + if self.lmk_num < pred.shape[0]: + pred = pred[self.lmk_num*-1:,:] + pred[:, 0:2] += 1 + pred[:, 0:2] *= (self.input_size[0] // 2) + if pred.shape[1] == 3: + pred[:, 2] *= (self.input_size[0] // 2) + + IM = cv2.invertAffineTransform(M) + pred = face_align.trans_points(pred, IM) + face[self.taskname] = pred + if self.require_pose: + P = transform.estimate_affine_matrix_3d23d(self.mean_lmk, pred) + s, R, t = transform.P2sRt(P) + rx, ry, rz = transform.matrix2angle(R) + pose = np.array( [rx, ry, rz], dtype=np.float32 ) + face['pose'] = pose #pitch, yaw, roll + return pred + + diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/model_zoo/model_store.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/model_zoo/model_store.py new file mode 100644 index 0000000..50bb85d --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/model_zoo/model_store.py @@ -0,0 +1,103 @@ +""" +This code file mainly comes from https://github.com/dmlc/gluon-cv/blob/master/gluoncv/model_zoo/model_store.py +""" +from __future__ import print_function + +__all__ = ['get_model_file'] +import os +import zipfile +import glob + +from ..utils import download, check_sha1 + +_model_sha1 = { + name: checksum + for checksum, name in [ + ('95be21b58e29e9c1237f229dae534bd854009ce0', 'arcface_r100_v1'), + ('', 'arcface_mfn_v1'), + ('39fd1e087a2a2ed70a154ac01fecaa86c315d01b', 'retinaface_r50_v1'), + ('2c9de8116d1f448fd1d4661f90308faae34c990a', 'retinaface_mnet025_v1'), + ('0db1d07921d005e6c9a5b38e059452fc5645e5a4', 'retinaface_mnet025_v2'), + ('7dd8111652b7aac2490c5dcddeb268e53ac643e6', 'genderage_v1'), + ] +} + +base_repo_url = 'https://insightface.ai/files/' +_url_format = '{repo_url}models/{file_name}.zip' + + +def short_hash(name): + if name not in _model_sha1: + raise ValueError( + 'Pretrained model for {name} is not available.'.format(name=name)) + return _model_sha1[name][:8] + + +def find_params_file(dir_path): + if not os.path.exists(dir_path): + return None + paths = glob.glob("%s/*.params" % dir_path) + if len(paths) == 0: + return None + paths = sorted(paths) + return paths[-1] + + +def get_model_file(name, root=os.path.join('~', '.insightface', 'models')): + r"""Return location for the pretrained on local file system. + + This function will download from online model zoo when model cannot be found or has mismatch. + The root directory will be created if it doesn't exist. + + Parameters + ---------- + name : str + Name of the model. + root : str, default '~/.mxnet/models' + Location for keeping the model parameters. + + Returns + ------- + file_path + Path to the requested pretrained model file. + """ + + file_name = name + root = os.path.expanduser(root) + dir_path = os.path.join(root, name) + file_path = find_params_file(dir_path) + #file_path = os.path.join(root, file_name + '.params') + sha1_hash = _model_sha1[name] + if file_path is not None: + if check_sha1(file_path, sha1_hash): + return file_path + else: + print( + 'Mismatch in the content of model file detected. Downloading again.' + ) + else: + print('Model file is not found. Downloading.') + + if not os.path.exists(root): + os.makedirs(root) + if not os.path.exists(dir_path): + os.makedirs(dir_path) + + zip_file_path = os.path.join(root, file_name + '.zip') + repo_url = base_repo_url + if repo_url[-1] != '/': + repo_url = repo_url + '/' + download(_url_format.format(repo_url=repo_url, file_name=file_name), + path=zip_file_path, + overwrite=True) + with zipfile.ZipFile(zip_file_path) as zf: + zf.extractall(dir_path) + os.remove(zip_file_path) + file_path = find_params_file(dir_path) + + if check_sha1(file_path, sha1_hash): + return file_path + else: + raise ValueError( + 'Downloaded file has different hash. Please try again.') + diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/model_zoo/model_zoo.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/model_zoo/model_zoo.py new file mode 100644 index 0000000..c90b791 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/model_zoo/model_zoo.py @@ -0,0 +1,97 @@ +# -*- coding: utf-8 -*- +# @Organization : insightface.ai +# @Author : Jia Guo +# @Time : 2021-05-04 +# @Function : + +import os +import os.path as osp +import glob +import onnxruntime +from .arcface_onnx import * +from .retinaface import * +#from .scrfd import * +from .landmark import * +from .attribute import Attribute +from .inswapper import INSwapper +from ..utils import download_onnx + +__all__ = ['get_model'] + + +class PickableInferenceSession(onnxruntime.InferenceSession): + # This is a wrapper to make the current InferenceSession class pickable. + def __init__(self, model_path, **kwargs): + super().__init__(model_path, **kwargs) + self.model_path = model_path + + def __getstate__(self): + return {'model_path': self.model_path} + + def __setstate__(self, values): + model_path = values['model_path'] + self.__init__(model_path) + +class ModelRouter: + def __init__(self, onnx_file): + self.onnx_file = onnx_file + + def get_model(self, **kwargs): + session = PickableInferenceSession(self.onnx_file, **kwargs) + # print(f'Applied providers: {session._providers}, with options: {session._provider_options}') + inputs = session.get_inputs() + input_cfg = inputs[0] + input_shape = input_cfg.shape + outputs = session.get_outputs() + + if len(outputs)>=5: + return RetinaFace(model_file=self.onnx_file, session=session) + elif input_shape[2]==192 and input_shape[3]==192: + return Landmark(model_file=self.onnx_file, session=session) + elif input_shape[2]==96 and input_shape[3]==96: + return Attribute(model_file=self.onnx_file, session=session) + elif len(inputs)==2 and input_shape[2]==128 and input_shape[3]==128: + return INSwapper(model_file=self.onnx_file, session=session) + elif input_shape[2]==input_shape[3] and input_shape[2]>=112 and input_shape[2]%16==0: + return ArcFaceONNX(model_file=self.onnx_file, session=session) + else: + #raise RuntimeError('error on model routing') + return None + +def find_onnx_file(dir_path): + if not os.path.exists(dir_path): + return None + paths = glob.glob("%s/*.onnx" % dir_path) + if len(paths) == 0: + return None + paths = sorted(paths) + return paths[-1] + +def get_default_providers(): + return ['CUDAExecutionProvider', 'CoreMLExecutionProvider', 'CPUExecutionProvider'] + +def get_default_provider_options(): + return None + +def get_model(name, **kwargs): + root = kwargs.get('root', '~/.insightface') + root = os.path.expanduser(root) + model_root = osp.join(root, 'models') + allow_download = kwargs.get('download', False) + download_zip = kwargs.get('download_zip', False) + if not name.endswith('.onnx'): + model_dir = os.path.join(model_root, name) + model_file = find_onnx_file(model_dir) + if model_file is None: + return None + else: + model_file = name + if not osp.exists(model_file) and allow_download: + model_file = download_onnx('models', model_file, root=root, download_zip=download_zip) + assert osp.exists(model_file), 'model_file %s should exist'%model_file + assert osp.isfile(model_file), 'model_file %s should be a file'%model_file + router = ModelRouter(model_file) + providers = kwargs.get('providers', get_default_providers()) + provider_options = kwargs.get('provider_options', get_default_provider_options()) + model = router.get_model(providers=providers, provider_options=provider_options) + return model diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/model_zoo/retinaface.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/model_zoo/retinaface.py new file mode 100644 index 0000000..fc4ad91 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/model_zoo/retinaface.py @@ -0,0 +1,301 @@ +# -*- coding: utf-8 -*- +# @Organization : insightface.ai +# @Author : Jia Guo +# @Time : 2021-09-18 +# @Function : + +from __future__ import division +import datetime +import numpy as np +import onnx +import onnxruntime +import os +import os.path as osp +import cv2 +import sys + +def softmax(z): + assert len(z.shape) == 2 + s = np.max(z, axis=1) + s = s[:, np.newaxis] # necessary step to do broadcasting + e_x = np.exp(z - s) + div = np.sum(e_x, axis=1) + div = div[:, np.newaxis] # dito + return e_x / div + +def distance2bbox(points, distance, max_shape=None): + """Decode distance prediction to bounding box. + + Args: + points (Tensor): Shape (n, 2), [x, y]. + distance (Tensor): Distance from the given point to 4 + boundaries (left, top, right, bottom). + max_shape (tuple): Shape of the image. + + Returns: + Tensor: Decoded bboxes. + """ + x1 = points[:, 0] - distance[:, 0] + y1 = points[:, 1] - distance[:, 1] + x2 = points[:, 0] + distance[:, 2] + y2 = points[:, 1] + distance[:, 3] + if max_shape is not None: + x1 = x1.clamp(min=0, max=max_shape[1]) + y1 = y1.clamp(min=0, max=max_shape[0]) + x2 = x2.clamp(min=0, max=max_shape[1]) + y2 = y2.clamp(min=0, max=max_shape[0]) + return np.stack([x1, y1, x2, y2], axis=-1) + +def distance2kps(points, distance, max_shape=None): + """Decode distance prediction to bounding box. + + Args: + points (Tensor): Shape (n, 2), [x, y]. + distance (Tensor): Distance from the given point to 4 + boundaries (left, top, right, bottom). + max_shape (tuple): Shape of the image. + + Returns: + Tensor: Decoded bboxes. + """ + preds = [] + for i in range(0, distance.shape[1], 2): + px = points[:, i%2] + distance[:, i] + py = points[:, i%2+1] + distance[:, i+1] + if max_shape is not None: + px = px.clamp(min=0, max=max_shape[1]) + py = py.clamp(min=0, max=max_shape[0]) + preds.append(px) + preds.append(py) + return np.stack(preds, axis=-1) + +class RetinaFace: + def __init__(self, model_file=None, session=None): + import onnxruntime + self.model_file = model_file + self.session = session + self.taskname = 'detection' + if self.session is None: + assert self.model_file is not None + assert osp.exists(self.model_file) + self.session = onnxruntime.InferenceSession(self.model_file, None) + self.center_cache = {} + self.nms_thresh = 0.4 + self.det_thresh = 0.5 + self._init_vars() + + def _init_vars(self): + input_cfg = self.session.get_inputs()[0] + input_shape = input_cfg.shape + #print(input_shape) + if isinstance(input_shape[2], str): + self.input_size = None + else: + self.input_size = tuple(input_shape[2:4][::-1]) + #print('image_size:', self.image_size) + input_name = input_cfg.name + self.input_shape = input_shape + outputs = self.session.get_outputs() + output_names = [] + for o in outputs: + output_names.append(o.name) + self.input_name = input_name + self.output_names = output_names + self.input_mean = 127.5 + self.input_std = 128.0 + #print(self.output_names) + #assert len(outputs)==10 or len(outputs)==15 + self.use_kps = False + self._anchor_ratio = 1.0 + self._num_anchors = 1 + if len(outputs)==6: + self.fmc = 3 + self._feat_stride_fpn = [8, 16, 32] + self._num_anchors = 2 + elif len(outputs)==9: + self.fmc = 3 + self._feat_stride_fpn = [8, 16, 32] + self._num_anchors = 2 + self.use_kps = True + elif len(outputs)==10: + self.fmc = 5 + self._feat_stride_fpn = [8, 16, 32, 64, 128] + self._num_anchors = 1 + elif len(outputs)==15: + self.fmc = 5 + self._feat_stride_fpn = [8, 16, 32, 64, 128] + self._num_anchors = 1 + self.use_kps = True + + def prepare(self, ctx_id, **kwargs): + if ctx_id<0: + self.session.set_providers(['CPUExecutionProvider']) + nms_thresh = kwargs.get('nms_thresh', None) + if nms_thresh is not None: + self.nms_thresh = nms_thresh + det_thresh = kwargs.get('det_thresh', None) + if det_thresh is not None: + self.det_thresh = det_thresh + input_size = kwargs.get('input_size', None) + if input_size is not None: + if self.input_size is not None: + print('warning: det_size is already set in detection model, ignore') + else: + self.input_size = input_size + + def forward(self, img, threshold): + scores_list = [] + bboxes_list = [] + kpss_list = [] + input_size = tuple(img.shape[0:2][::-1]) + blob = cv2.dnn.blobFromImage(img, 1.0/self.input_std, input_size, (self.input_mean, self.input_mean, self.input_mean), swapRB=True) + net_outs = self.session.run(self.output_names, {self.input_name : blob}) + + input_height = blob.shape[2] + input_width = blob.shape[3] + fmc = self.fmc + for idx, stride in enumerate(self._feat_stride_fpn): + scores = net_outs[idx] + bbox_preds = net_outs[idx+fmc] + bbox_preds = bbox_preds * stride + if self.use_kps: + kps_preds = net_outs[idx+fmc*2] * stride + height = input_height // stride + width = input_width // stride + K = height * width + key = (height, width, stride) + if key in self.center_cache: + anchor_centers = self.center_cache[key] + else: + #solution-1, c style: + #anchor_centers = np.zeros( (height, width, 2), dtype=np.float32 ) + #for i in range(height): + # anchor_centers[i, :, 1] = i + #for i in range(width): + # anchor_centers[:, i, 0] = i + + #solution-2: + #ax = np.arange(width, dtype=np.float32) + #ay = np.arange(height, dtype=np.float32) + #xv, yv = np.meshgrid(np.arange(width), np.arange(height)) + #anchor_centers = np.stack([xv, yv], axis=-1).astype(np.float32) + + #solution-3: + anchor_centers = np.stack(np.mgrid[:height, :width][::-1], axis=-1).astype(np.float32) + #print(anchor_centers.shape) + + anchor_centers = (anchor_centers * stride).reshape( (-1, 2) ) + if self._num_anchors>1: + anchor_centers = np.stack([anchor_centers]*self._num_anchors, axis=1).reshape( (-1,2) ) + if len(self.center_cache)<100: + self.center_cache[key] = anchor_centers + + pos_inds = np.where(scores>=threshold)[0] + bboxes = distance2bbox(anchor_centers, bbox_preds) + pos_scores = scores[pos_inds] + pos_bboxes = bboxes[pos_inds] + scores_list.append(pos_scores) + bboxes_list.append(pos_bboxes) + if self.use_kps: + kpss = distance2kps(anchor_centers, kps_preds) + #kpss = kps_preds + kpss = kpss.reshape( (kpss.shape[0], -1, 2) ) + pos_kpss = kpss[pos_inds] + kpss_list.append(pos_kpss) + return scores_list, bboxes_list, kpss_list + + def detect(self, img, input_size = None, max_num=0, metric='default'): + assert input_size is not None or self.input_size is not None + input_size = self.input_size if input_size is None else input_size + + im_ratio = float(img.shape[0]) / img.shape[1] + model_ratio = float(input_size[1]) / input_size[0] + if im_ratio>model_ratio: + new_height = input_size[1] + new_width = int(new_height / im_ratio) + else: + new_width = input_size[0] + new_height = int(new_width * im_ratio) + det_scale = float(new_height) / img.shape[0] + resized_img = cv2.resize(img, (new_width, new_height)) + det_img = np.zeros( (input_size[1], input_size[0], 3), dtype=np.uint8 ) + det_img[:new_height, :new_width, :] = resized_img + + scores_list, bboxes_list, kpss_list = self.forward(det_img, self.det_thresh) + + scores = np.vstack(scores_list) + scores_ravel = scores.ravel() + order = scores_ravel.argsort()[::-1] + bboxes = np.vstack(bboxes_list) / det_scale + if self.use_kps: + kpss = np.vstack(kpss_list) / det_scale + pre_det = np.hstack((bboxes, scores)).astype(np.float32, copy=False) + pre_det = pre_det[order, :] + keep = self.nms(pre_det) + det = pre_det[keep, :] + if self.use_kps: + kpss = kpss[order,:,:] + kpss = kpss[keep,:,:] + else: + kpss = None + if max_num > 0 and det.shape[0] > max_num: + area = (det[:, 2] - det[:, 0]) * (det[:, 3] - + det[:, 1]) + img_center = img.shape[0] // 2, img.shape[1] // 2 + offsets = np.vstack([ + (det[:, 0] + det[:, 2]) / 2 - img_center[1], + (det[:, 1] + det[:, 3]) / 2 - img_center[0] + ]) + offset_dist_squared = np.sum(np.power(offsets, 2.0), 0) + if metric=='max': + values = area + else: + values = area - offset_dist_squared * 2.0 # some extra weight on the centering + bindex = np.argsort( + values)[::-1] # some extra weight on the centering + bindex = bindex[0:max_num] + det = det[bindex, :] + if kpss is not None: + kpss = kpss[bindex, :] + return det, kpss + + def nms(self, dets): + thresh = self.nms_thresh + x1 = dets[:, 0] + y1 = dets[:, 1] + x2 = dets[:, 2] + y2 = dets[:, 3] + scores = dets[:, 4] + + areas = (x2 - x1 + 1) * (y2 - y1 + 1) + order = scores.argsort()[::-1] + + keep = [] + while order.size > 0: + i = order[0] + keep.append(i) + xx1 = np.maximum(x1[i], x1[order[1:]]) + yy1 = np.maximum(y1[i], y1[order[1:]]) + xx2 = np.minimum(x2[i], x2[order[1:]]) + yy2 = np.minimum(y2[i], y2[order[1:]]) + + w = np.maximum(0.0, xx2 - xx1 + 1) + h = np.maximum(0.0, yy2 - yy1 + 1) + inter = w * h + ovr = inter / (areas[i] + areas[order[1:]] - inter) + + inds = np.where(ovr <= thresh)[0] + order = order[inds + 1] + + return keep + +def get_retinaface(name, download=False, root='~/.insightface/models', **kwargs): + if not download: + assert os.path.exists(name) + return RetinaFace(name) + else: + from .model_store import get_model_file + _file = get_model_file("retinaface_%s" % name, root=root) + return retinaface(_file) + + diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/model_zoo/scrfd.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/model_zoo/scrfd.py new file mode 100644 index 0000000..674db4b --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/model_zoo/scrfd.py @@ -0,0 +1,348 @@ +# -*- coding: utf-8 -*- +# @Organization : insightface.ai +# @Author : Jia Guo +# @Time : 2021-05-04 +# @Function : + +from __future__ import division +import datetime +import numpy as np +import onnx +import onnxruntime +import os +import os.path as osp +import cv2 +import sys + +def softmax(z): + assert len(z.shape) == 2 + s = np.max(z, axis=1) + s = s[:, np.newaxis] # necessary step to do broadcasting + e_x = np.exp(z - s) + div = np.sum(e_x, axis=1) + div = div[:, np.newaxis] # dito + return e_x / div + +def distance2bbox(points, distance, max_shape=None): + """Decode distance prediction to bounding box. + + Args: + points (Tensor): Shape (n, 2), [x, y]. + distance (Tensor): Distance from the given point to 4 + boundaries (left, top, right, bottom). + max_shape (tuple): Shape of the image. + + Returns: + Tensor: Decoded bboxes. + """ + x1 = points[:, 0] - distance[:, 0] + y1 = points[:, 1] - distance[:, 1] + x2 = points[:, 0] + distance[:, 2] + y2 = points[:, 1] + distance[:, 3] + if max_shape is not None: + x1 = x1.clamp(min=0, max=max_shape[1]) + y1 = y1.clamp(min=0, max=max_shape[0]) + x2 = x2.clamp(min=0, max=max_shape[1]) + y2 = y2.clamp(min=0, max=max_shape[0]) + return np.stack([x1, y1, x2, y2], axis=-1) + +def distance2kps(points, distance, max_shape=None): + """Decode distance prediction to bounding box. + + Args: + points (Tensor): Shape (n, 2), [x, y]. + distance (Tensor): Distance from the given point to 4 + boundaries (left, top, right, bottom). + max_shape (tuple): Shape of the image. + + Returns: + Tensor: Decoded bboxes. + """ + preds = [] + for i in range(0, distance.shape[1], 2): + px = points[:, i%2] + distance[:, i] + py = points[:, i%2+1] + distance[:, i+1] + if max_shape is not None: + px = px.clamp(min=0, max=max_shape[1]) + py = py.clamp(min=0, max=max_shape[0]) + preds.append(px) + preds.append(py) + return np.stack(preds, axis=-1) + +class SCRFD: + def __init__(self, model_file=None, session=None): + import onnxruntime + self.model_file = model_file + self.session = session + self.taskname = 'detection' + self.batched = False + if self.session is None: + assert self.model_file is not None + assert osp.exists(self.model_file) + self.session = onnxruntime.InferenceSession(self.model_file, None) + self.center_cache = {} + self.nms_thresh = 0.4 + self.det_thresh = 0.5 + self._init_vars() + + def _init_vars(self): + input_cfg = self.session.get_inputs()[0] + input_shape = input_cfg.shape + #print(input_shape) + if isinstance(input_shape[2], str): + self.input_size = None + else: + self.input_size = tuple(input_shape[2:4][::-1]) + #print('image_size:', self.image_size) + input_name = input_cfg.name + self.input_shape = input_shape + outputs = self.session.get_outputs() + if len(outputs[0].shape) == 3: + self.batched = True + output_names = [] + for o in outputs: + output_names.append(o.name) + self.input_name = input_name + self.output_names = output_names + self.input_mean = 127.5 + self.input_std = 128.0 + #print(self.output_names) + #assert len(outputs)==10 or len(outputs)==15 + self.use_kps = False + self._anchor_ratio = 1.0 + self._num_anchors = 1 + if len(outputs)==6: + self.fmc = 3 + self._feat_stride_fpn = [8, 16, 32] + self._num_anchors = 2 + elif len(outputs)==9: + self.fmc = 3 + self._feat_stride_fpn = [8, 16, 32] + self._num_anchors = 2 + self.use_kps = True + elif len(outputs)==10: + self.fmc = 5 + self._feat_stride_fpn = [8, 16, 32, 64, 128] + self._num_anchors = 1 + elif len(outputs)==15: + self.fmc = 5 + self._feat_stride_fpn = [8, 16, 32, 64, 128] + self._num_anchors = 1 + self.use_kps = True + + def prepare(self, ctx_id, **kwargs): + if ctx_id<0: + self.session.set_providers(['CPUExecutionProvider']) + nms_thresh = kwargs.get('nms_thresh', None) + if nms_thresh is not None: + self.nms_thresh = nms_thresh + det_thresh = kwargs.get('det_thresh', None) + if det_thresh is not None: + self.det_thresh = det_thresh + input_size = kwargs.get('input_size', None) + if input_size is not None: + if self.input_size is not None: + print('warning: det_size is already set in scrfd model, ignore') + else: + self.input_size = input_size + + def forward(self, img, threshold): + scores_list = [] + bboxes_list = [] + kpss_list = [] + input_size = tuple(img.shape[0:2][::-1]) + blob = cv2.dnn.blobFromImage(img, 1.0/self.input_std, input_size, (self.input_mean, self.input_mean, self.input_mean), swapRB=True) + net_outs = self.session.run(self.output_names, {self.input_name : blob}) + + input_height = blob.shape[2] + input_width = blob.shape[3] + fmc = self.fmc + for idx, stride in enumerate(self._feat_stride_fpn): + # If model support batch dim, take first output + if self.batched: + scores = net_outs[idx][0] + bbox_preds = net_outs[idx + fmc][0] + bbox_preds = bbox_preds * stride + if self.use_kps: + kps_preds = net_outs[idx + fmc * 2][0] * stride + # If model doesn't support batching take output as is + else: + scores = net_outs[idx] + bbox_preds = net_outs[idx + fmc] + bbox_preds = bbox_preds * stride + if self.use_kps: + kps_preds = net_outs[idx + fmc * 2] * stride + + height = input_height // stride + width = input_width // stride + K = height * width + key = (height, width, stride) + if key in self.center_cache: + anchor_centers = self.center_cache[key] + else: + #solution-1, c style: + #anchor_centers = np.zeros( (height, width, 2), dtype=np.float32 ) + #for i in range(height): + # anchor_centers[i, :, 1] = i + #for i in range(width): + # anchor_centers[:, i, 0] = i + + #solution-2: + #ax = np.arange(width, dtype=np.float32) + #ay = np.arange(height, dtype=np.float32) + #xv, yv = np.meshgrid(np.arange(width), np.arange(height)) + #anchor_centers = np.stack([xv, yv], axis=-1).astype(np.float32) + + #solution-3: + anchor_centers = np.stack(np.mgrid[:height, :width][::-1], axis=-1).astype(np.float32) + #print(anchor_centers.shape) + + anchor_centers = (anchor_centers * stride).reshape( (-1, 2) ) + if self._num_anchors>1: + anchor_centers = np.stack([anchor_centers]*self._num_anchors, axis=1).reshape( (-1,2) ) + if len(self.center_cache)<100: + self.center_cache[key] = anchor_centers + + pos_inds = np.where(scores>=threshold)[0] + bboxes = distance2bbox(anchor_centers, bbox_preds) + pos_scores = scores[pos_inds] + pos_bboxes = bboxes[pos_inds] + scores_list.append(pos_scores) + bboxes_list.append(pos_bboxes) + if self.use_kps: + kpss = distance2kps(anchor_centers, kps_preds) + #kpss = kps_preds + kpss = kpss.reshape( (kpss.shape[0], -1, 2) ) + pos_kpss = kpss[pos_inds] + kpss_list.append(pos_kpss) + return scores_list, bboxes_list, kpss_list + + def detect(self, img, input_size = None, max_num=0, metric='default'): + assert input_size is not None or self.input_size is not None + input_size = self.input_size if input_size is None else input_size + + im_ratio = float(img.shape[0]) / img.shape[1] + model_ratio = float(input_size[1]) / input_size[0] + if im_ratio>model_ratio: + new_height = input_size[1] + new_width = int(new_height / im_ratio) + else: + new_width = input_size[0] + new_height = int(new_width * im_ratio) + det_scale = float(new_height) / img.shape[0] + resized_img = cv2.resize(img, (new_width, new_height)) + det_img = np.zeros( (input_size[1], input_size[0], 3), dtype=np.uint8 ) + det_img[:new_height, :new_width, :] = resized_img + + scores_list, bboxes_list, kpss_list = self.forward(det_img, self.det_thresh) + + scores = np.vstack(scores_list) + scores_ravel = scores.ravel() + order = scores_ravel.argsort()[::-1] + bboxes = np.vstack(bboxes_list) / det_scale + if self.use_kps: + kpss = np.vstack(kpss_list) / det_scale + pre_det = np.hstack((bboxes, scores)).astype(np.float32, copy=False) + pre_det = pre_det[order, :] + keep = self.nms(pre_det) + det = pre_det[keep, :] + if self.use_kps: + kpss = kpss[order,:,:] + kpss = kpss[keep,:,:] + else: + kpss = None + if max_num > 0 and det.shape[0] > max_num: + area = (det[:, 2] - det[:, 0]) * (det[:, 3] - + det[:, 1]) + img_center = img.shape[0] // 2, img.shape[1] // 2 + offsets = np.vstack([ + (det[:, 0] + det[:, 2]) / 2 - img_center[1], + (det[:, 1] + det[:, 3]) / 2 - img_center[0] + ]) + offset_dist_squared = np.sum(np.power(offsets, 2.0), 0) + if metric=='max': + values = area + else: + values = area - offset_dist_squared * 2.0 # some extra weight on the centering + bindex = np.argsort( + values)[::-1] # some extra weight on the centering + bindex = bindex[0:max_num] + det = det[bindex, :] + if kpss is not None: + kpss = kpss[bindex, :] + return det, kpss + + def nms(self, dets): + thresh = self.nms_thresh + x1 = dets[:, 0] + y1 = dets[:, 1] + x2 = dets[:, 2] + y2 = dets[:, 3] + scores = dets[:, 4] + + areas = (x2 - x1 + 1) * (y2 - y1 + 1) + order = scores.argsort()[::-1] + + keep = [] + while order.size > 0: + i = order[0] + keep.append(i) + xx1 = np.maximum(x1[i], x1[order[1:]]) + yy1 = np.maximum(y1[i], y1[order[1:]]) + xx2 = np.minimum(x2[i], x2[order[1:]]) + yy2 = np.minimum(y2[i], y2[order[1:]]) + + w = np.maximum(0.0, xx2 - xx1 + 1) + h = np.maximum(0.0, yy2 - yy1 + 1) + inter = w * h + ovr = inter / (areas[i] + areas[order[1:]] - inter) + + inds = np.where(ovr <= thresh)[0] + order = order[inds + 1] + + return keep + +def get_scrfd(name, download=False, root='~/.insightface/models', **kwargs): + if not download: + assert os.path.exists(name) + return SCRFD(name) + else: + from .model_store import get_model_file + _file = get_model_file("scrfd_%s" % name, root=root) + return SCRFD(_file) + + +def scrfd_2p5gkps(**kwargs): + return get_scrfd("2p5gkps", download=True, **kwargs) + + +if __name__ == '__main__': + import glob + detector = SCRFD(model_file='./det.onnx') + detector.prepare(-1) + img_paths = ['tests/data/t1.jpg'] + for img_path in img_paths: + img = cv2.imread(img_path) + + for _ in range(1): + ta = datetime.datetime.now() + #bboxes, kpss = detector.detect(img, 0.5, input_size = (640, 640)) + bboxes, kpss = detector.detect(img, 0.5) + tb = datetime.datetime.now() + print('all cost:', (tb-ta).total_seconds()*1000) + print(img_path, bboxes.shape) + if kpss is not None: + print(kpss.shape) + for i in range(bboxes.shape[0]): + bbox = bboxes[i] + x1,y1,x2,y2,score = bbox.astype(np.int) + cv2.rectangle(img, (x1,y1) , (x2,y2) , (255,0,0) , 2) + if kpss is not None: + kps = kpss[i] + for kp in kps: + kp = kp.astype(np.int) + cv2.circle(img, tuple(kp) , 1, (0,0,255) , 2) + filename = img_path.split('/')[-1] + print('output:', filename) + cv2.imwrite('./outputs/%s'%filename, img) + diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/utils/__init__.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/utils/__init__.py new file mode 100644 index 0000000..6960431 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/utils/__init__.py @@ -0,0 +1,6 @@ +from __future__ import absolute_import + +from .storage import download, ensure_available, download_onnx +from .filesystem import get_model_dir +from .filesystem import makedirs, try_import_dali +from .constant import * diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/utils/constant.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/utils/constant.py new file mode 100644 index 0000000..8860ff0 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/utils/constant.py @@ -0,0 +1,3 @@ + +DEFAULT_MP_NAME = 'buffalo_l' + diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/utils/download.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/utils/download.py new file mode 100644 index 0000000..01fe82f --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/utils/download.py @@ -0,0 +1,67 @@ +""" +This code file mainly comes from https://github.com/dmlc/gluon-cv/blob/master/gluoncv/utils/download.py +""" +import os +import hashlib +import requests +from tqdm import tqdm + +def download_file(url, path=None, overwrite=False): + """Download an given URL + Parameters + ---------- + url : str + URL to download + path : str, optional + Destination path to store downloaded file. By default stores to the + current directory with same name as in url. + overwrite : bool, optional + Whether to overwrite destination file if already exists. + sha1_hash : str, optional + Expected sha1 hash in hexadecimal digits. Will ignore existing file when hash is specified + but doesn't match. + Returns + ------- + str + The file path of the downloaded file. + """ + if path is None: + fname = url.split('/')[-1] + else: + path = os.path.expanduser(path) + if os.path.isdir(path): + fname = os.path.join(path, url.split('/')[-1]) + else: + fname = path + + if overwrite or not os.path.exists(fname): + dirname = os.path.dirname(os.path.abspath(os.path.expanduser(fname))) + if not os.path.exists(dirname): + os.makedirs(dirname) + + print('Downloading %s from %s...' % (fname, url)) + r = requests.get(url, stream=True) + if r.status_code != 200: + raise RuntimeError("Failed downloading url %s" % url) + total_length = r.headers.get('content-length') + with open(fname, 'wb') as f: + if total_length is None: # no content length header + for chunk in r.iter_content(chunk_size=1024): + if chunk: # filter out keep-alive new chunks + f.write(chunk) + else: + total_length = int(total_length) + for chunk in tqdm(r.iter_content(chunk_size=1024), + total=int(total_length / 1024. + 0.5), + unit='KB', + unit_scale=False, + dynamic_ncols=True): + f.write(chunk) + + if sha1_hash and not check_sha1(fname, sha1_hash): + raise UserWarning('File {} is downloaded but the content hash does not match. ' \ + 'The repo may be outdated or download may be incomplete. ' \ + 'If the "repo_url" is overridden, consider switching to ' \ + 'the default repo.'.format(fname)) + + return fname diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/utils/face_align.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/utils/face_align.py new file mode 100644 index 0000000..226628b --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/utils/face_align.py @@ -0,0 +1,103 @@ +import cv2 +import numpy as np +from skimage import transform as trans + + +arcface_dst = np.array( + [[38.2946, 51.6963], [73.5318, 51.5014], [56.0252, 71.7366], + [41.5493, 92.3655], [70.7299, 92.2041]], + dtype=np.float32) + +def estimate_norm(lmk, image_size=112,mode='arcface'): + assert lmk.shape == (5, 2) + assert image_size%112==0 or image_size%128==0 + if image_size%112==0: + ratio = float(image_size)/112.0 + diff_x = 0 + else: + ratio = float(image_size)/128.0 + diff_x = 8.0*ratio + dst = arcface_dst * ratio + dst[:,0] += diff_x + tform = trans.SimilarityTransform() + tform.estimate(lmk, dst) + M = tform.params[0:2, :] + return M + +def norm_crop(img, landmark, image_size=112, mode='arcface'): + M = estimate_norm(landmark, image_size, mode) + warped = cv2.warpAffine(img, M, (image_size, image_size), borderValue=0.0) + return warped + +def norm_crop2(img, landmark, image_size=112, mode='arcface'): + M = estimate_norm(landmark, image_size, mode) + warped = cv2.warpAffine(img, M, (image_size, image_size), borderValue=0.0) + return warped, M + +def square_crop(im, S): + if im.shape[0] > im.shape[1]: + height = S + width = int(float(im.shape[1]) / im.shape[0] * S) + scale = float(S) / im.shape[0] + else: + width = S + height = int(float(im.shape[0]) / im.shape[1] * S) + scale = float(S) / im.shape[1] + resized_im = cv2.resize(im, (width, height)) + det_im = np.zeros((S, S, 3), dtype=np.uint8) + det_im[:resized_im.shape[0], :resized_im.shape[1], :] = resized_im + return det_im, scale + + +def transform(data, center, output_size, scale, rotation): + scale_ratio = scale + rot = float(rotation) * np.pi / 180.0 + #translation = (output_size/2-center[0]*scale_ratio, output_size/2-center[1]*scale_ratio) + t1 = trans.SimilarityTransform(scale=scale_ratio) + cx = center[0] * scale_ratio + cy = center[1] * scale_ratio + t2 = trans.SimilarityTransform(translation=(-1 * cx, -1 * cy)) + t3 = trans.SimilarityTransform(rotation=rot) + t4 = trans.SimilarityTransform(translation=(output_size / 2, + output_size / 2)) + t = t1 + t2 + t3 + t4 + M = t.params[0:2] + cropped = cv2.warpAffine(data, + M, (output_size, output_size), + borderValue=0.0) + return cropped, M + + +def trans_points2d(pts, M): + new_pts = np.zeros(shape=pts.shape, dtype=np.float32) + for i in range(pts.shape[0]): + pt = pts[i] + new_pt = np.array([pt[0], pt[1], 1.], dtype=np.float32) + new_pt = np.dot(M, new_pt) + #print('new_pt', new_pt.shape, new_pt) + new_pts[i] = new_pt[0:2] + + return new_pts + + +def trans_points3d(pts, M): + scale = np.sqrt(M[0][0] * M[0][0] + M[0][1] * M[0][1]) + #print(scale) + new_pts = np.zeros(shape=pts.shape, dtype=np.float32) + for i in range(pts.shape[0]): + pt = pts[i] + new_pt = np.array([pt[0], pt[1], 1.], dtype=np.float32) + new_pt = np.dot(M, new_pt) + #print('new_pt', new_pt.shape, new_pt) + new_pts[i][0:2] = new_pt[0:2] + new_pts[i][2] = pts[i][2] * scale + + return new_pts + + +def trans_points(pts, M): + if pts.shape[1] == 2: + return trans_points2d(pts, M) + else: + return trans_points3d(pts, M) + diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/utils/filesystem.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/utils/filesystem.py new file mode 100644 index 0000000..01e3851 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/utils/filesystem.py @@ -0,0 +1,157 @@ +""" +This code file mainly comes from https://github.com/dmlc/gluon-cv/blob/master/gluoncv/utils/filesystem.py +""" +import os +import os.path as osp +import errno + + +def get_model_dir(name, root='~/.insightface'): + root = os.path.expanduser(root) + model_dir = osp.join(root, 'models', name) + return model_dir + +def makedirs(path): + """Create directory recursively if not exists. + Similar to `makedir -p`, you can skip checking existence before this function. + + Parameters + ---------- + path : str + Path of the desired dir + """ + try: + os.makedirs(path) + except OSError as exc: + if exc.errno != errno.EEXIST: + raise + + +def try_import(package, message=None): + """Try import specified package, with custom message support. + + Parameters + ---------- + package : str + The name of the targeting package. + message : str, default is None + If not None, this function will raise customized error message when import error is found. + + + Returns + ------- + module if found, raise ImportError otherwise + + """ + try: + return __import__(package) + except ImportError as e: + if not message: + raise e + raise ImportError(message) + + +def try_import_cv2(): + """Try import cv2 at runtime. + + Returns + ------- + cv2 module if found. Raise ImportError otherwise + + """ + msg = "cv2 is required, you can install by package manager, e.g. 'apt-get', \ + or `pip install opencv-python --user` (note that this is unofficial PYPI package)." + + return try_import('cv2', msg) + + +def try_import_mmcv(): + """Try import mmcv at runtime. + + Returns + ------- + mmcv module if found. Raise ImportError otherwise + + """ + msg = "mmcv is required, you can install by first `pip install Cython --user` \ + and then `pip install mmcv --user` (note that this is unofficial PYPI package)." + + return try_import('mmcv', msg) + + +def try_import_rarfile(): + """Try import rarfile at runtime. + + Returns + ------- + rarfile module if found. Raise ImportError otherwise + + """ + msg = "rarfile is required, you can install by first `sudo apt-get install unrar` \ + and then `pip install rarfile --user` (note that this is unofficial PYPI package)." + + return try_import('rarfile', msg) + + +def import_try_install(package, extern_url=None): + """Try import the specified package. + If the package not installed, try use pip to install and import if success. + + Parameters + ---------- + package : str + The name of the package trying to import. + extern_url : str or None, optional + The external url if package is not hosted on PyPI. + For example, you can install a package using: + "pip install git+http://github.com/user/repo/tarball/master/egginfo=xxx". + In this case, you can pass the url to the extern_url. + + Returns + ------- + + The imported python module. + + """ + try: + return __import__(package) + except ImportError: + try: + from pip import main as pipmain + except ImportError: + from pip._internal import main as pipmain + + # trying to install package + url = package if extern_url is None else extern_url + pipmain(['install', '--user', + url]) # will raise SystemExit Error if fails + + # trying to load again + try: + return __import__(package) + except ImportError: + import sys + import site + user_site = site.getusersitepackages() + if user_site not in sys.path: + sys.path.append(user_site) + return __import__(package) + return __import__(package) + + +def try_import_dali(): + """Try import NVIDIA DALI at runtime. + """ + try: + dali = __import__('nvidia.dali', fromlist=['pipeline', 'ops', 'types']) + dali.Pipeline = dali.pipeline.Pipeline + except ImportError: + + class dali: + class Pipeline: + def __init__(self): + raise NotImplementedError( + "DALI not found, please check if you installed it correctly." + ) + + return dali diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/utils/storage.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/utils/storage.py new file mode 100644 index 0000000..5bf37e2 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/utils/storage.py @@ -0,0 +1,52 @@ + +import os +import os.path as osp +import zipfile +from .download import download_file + +BASE_REPO_URL = 'https://github.com/deepinsight/insightface/releases/download/v0.7' + +def download(sub_dir, name, force=False, root='~/.insightface'): + _root = os.path.expanduser(root) + dir_path = os.path.join(_root, sub_dir, name) + if osp.exists(dir_path) and not force: + return dir_path + print('download_path:', dir_path) + zip_file_path = os.path.join(_root, sub_dir, name + '.zip') + model_url = "%s/%s.zip"%(BASE_REPO_URL, name) + download_file(model_url, + path=zip_file_path, + overwrite=True) + if not os.path.exists(dir_path): + os.makedirs(dir_path) + with zipfile.ZipFile(zip_file_path) as zf: + zf.extractall(dir_path) + #os.remove(zip_file_path) + return dir_path + +def ensure_available(sub_dir, name, root='~/.insightface'): + return download(sub_dir, name, force=False, root=root) + +def download_onnx(sub_dir, model_file, force=False, root='~/.insightface', download_zip=False): + _root = os.path.expanduser(root) + model_root = osp.join(_root, sub_dir) + new_model_file = osp.join(model_root, model_file) + if osp.exists(new_model_file) and not force: + return new_model_file + if not osp.exists(model_root): + os.makedirs(model_root) + print('download_path:', new_model_file) + if not download_zip: + model_url = "%s/%s"%(BASE_REPO_URL, model_file) + download_file(model_url, + path=new_model_file, + overwrite=True) + else: + model_url = "%s/%s.zip"%(BASE_REPO_URL, model_file) + zip_file_path = new_model_file+".zip" + download_file(model_url, + path=zip_file_path, + overwrite=True) + with zipfile.ZipFile(zip_file_path) as zf: + zf.extractall(model_root) + return new_model_file diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/utils/transform.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/utils/transform.py new file mode 100644 index 0000000..06531d2 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/dependencies/insightface/utils/transform.py @@ -0,0 +1,116 @@ +import cv2 +import math +import numpy as np +from skimage import transform as trans + + +def transform(data, center, output_size, scale, rotation): + scale_ratio = scale + rot = float(rotation) * np.pi / 180.0 + #translation = (output_size/2-center[0]*scale_ratio, output_size/2-center[1]*scale_ratio) + t1 = trans.SimilarityTransform(scale=scale_ratio) + cx = center[0] * scale_ratio + cy = center[1] * scale_ratio + t2 = trans.SimilarityTransform(translation=(-1 * cx, -1 * cy)) + t3 = trans.SimilarityTransform(rotation=rot) + t4 = trans.SimilarityTransform(translation=(output_size / 2, + output_size / 2)) + t = t1 + t2 + t3 + t4 + M = t.params[0:2] + cropped = cv2.warpAffine(data, + M, (output_size, output_size), + borderValue=0.0) + return cropped, M + + +def trans_points2d(pts, M): + new_pts = np.zeros(shape=pts.shape, dtype=np.float32) + for i in range(pts.shape[0]): + pt = pts[i] + new_pt = np.array([pt[0], pt[1], 1.], dtype=np.float32) + new_pt = np.dot(M, new_pt) + #print('new_pt', new_pt.shape, new_pt) + new_pts[i] = new_pt[0:2] + + return new_pts + + +def trans_points3d(pts, M): + scale = np.sqrt(M[0][0] * M[0][0] + M[0][1] * M[0][1]) + #print(scale) + new_pts = np.zeros(shape=pts.shape, dtype=np.float32) + for i in range(pts.shape[0]): + pt = pts[i] + new_pt = np.array([pt[0], pt[1], 1.], dtype=np.float32) + new_pt = np.dot(M, new_pt) + #print('new_pt', new_pt.shape, new_pt) + new_pts[i][0:2] = new_pt[0:2] + new_pts[i][2] = pts[i][2] * scale + + return new_pts + + +def trans_points(pts, M): + if pts.shape[1] == 2: + return trans_points2d(pts, M) + else: + return trans_points3d(pts, M) + +def estimate_affine_matrix_3d23d(X, Y): + ''' Using least-squares solution + Args: + X: [n, 3]. 3d points(fixed) + Y: [n, 3]. corresponding 3d points(moving). Y = PX + Returns: + P_Affine: (3, 4). Affine camera matrix (the third row is [0, 0, 0, 1]). + ''' + X_homo = np.hstack((X, np.ones([X.shape[0],1]))) #n x 4 + P = np.linalg.lstsq(X_homo, Y)[0].T # Affine matrix. 3 x 4 + return P + +def P2sRt(P): + ''' decompositing camera matrix P + Args: + P: (3, 4). Affine Camera Matrix. + Returns: + s: scale factor. + R: (3, 3). rotation matrix. + t: (3,). translation. + ''' + t = P[:, 3] + R1 = P[0:1, :3] + R2 = P[1:2, :3] + s = (np.linalg.norm(R1) + np.linalg.norm(R2))/2.0 + r1 = R1/np.linalg.norm(R1) + r2 = R2/np.linalg.norm(R2) + r3 = np.cross(r1, r2) + + R = np.concatenate((r1, r2, r3), 0) + return s, R, t + +def matrix2angle(R): + ''' get three Euler angles from Rotation Matrix + Args: + R: (3,3). rotation matrix + Returns: + x: pitch + y: yaw + z: roll + ''' + sy = math.sqrt(R[0,0] * R[0,0] + R[1,0] * R[1,0]) + + singular = sy < 1e-6 + + if not singular : + x = math.atan2(R[2,1] , R[2,2]) + y = math.atan2(-R[2,0], sy) + z = math.atan2(R[1,0], R[0,0]) + else : + x = math.atan2(-R[1,2], R[1,1]) + y = math.atan2(-R[2,0], sy) + z = 0 + + # rx, ry, rz = np.rad2deg(x), np.rad2deg(y), np.rad2deg(z) + rx, ry, rz = x*180/np.pi, y*180/np.pi, z*180/np.pi + return rx, ry, rz + diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/face_analysis_diy.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/face_analysis_diy.py new file mode 100644 index 0000000..f13a659 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/face_analysis_diy.py @@ -0,0 +1,79 @@ +# coding: utf-8 + +""" +face detectoin and alignment using InsightFace +""" + +import numpy as np +from .rprint import rlog as log +from .dependencies.insightface.app import FaceAnalysis +from .dependencies.insightface.app.common import Face +from .timer import Timer + + +def sort_by_direction(faces, direction: str = 'large-small', face_center=None): + if len(faces) <= 0: + return faces + + if direction == 'left-right': + return sorted(faces, key=lambda face: face['bbox'][0]) + if direction == 'right-left': + return sorted(faces, key=lambda face: face['bbox'][0], reverse=True) + if direction == 'top-bottom': + return sorted(faces, key=lambda face: face['bbox'][1]) + if direction == 'bottom-top': + return sorted(faces, key=lambda face: face['bbox'][1], reverse=True) + if direction == 'small-large': + return sorted(faces, key=lambda face: (face['bbox'][2] - face['bbox'][0]) * (face['bbox'][3] - face['bbox'][1])) + if direction == 'large-small': + return sorted(faces, key=lambda face: (face['bbox'][2] - face['bbox'][0]) * (face['bbox'][3] - face['bbox'][1]), reverse=True) + if direction == 'distance-from-retarget-face': + return sorted(faces, key=lambda face: (((face['bbox'][2]+face['bbox'][0])/2-face_center[0])**2+((face['bbox'][3]+face['bbox'][1])/2-face_center[1])**2)**0.5) + return faces + + +class FaceAnalysisDIY(FaceAnalysis): + def __init__(self, name='buffalo_l', root='~/.insightface', allowed_modules=None, **kwargs): + super().__init__(name=name, root=root, allowed_modules=allowed_modules, **kwargs) + + self.timer = Timer() + + def get(self, img_bgr, **kwargs): + max_num = kwargs.get('max_face_num', 0) # the number of the detected faces, 0 means no limit + flag_do_landmark_2d_106 = kwargs.get('flag_do_landmark_2d_106', True) # whether to do 106-point detection + direction = kwargs.get('direction', 'large-small') # sorting direction + face_center = None + + bboxes, kpss = self.det_model.detect(img_bgr, max_num=max_num, metric='default') + if bboxes.shape[0] == 0: + return [] + ret = [] + for i in range(bboxes.shape[0]): + bbox = bboxes[i, 0:4] + det_score = bboxes[i, 4] + kps = None + if kpss is not None: + kps = kpss[i] + face = Face(bbox=bbox, kps=kps, det_score=det_score) + for taskname, model in self.models.items(): + if taskname == 'detection': + continue + + if (not flag_do_landmark_2d_106) and taskname == 'landmark_2d_106': + continue + + # print(f'taskname: {taskname}') + model.get(img_bgr, face) + ret.append(face) + + ret = sort_by_direction(ret, direction, face_center) + return ret + + def warmup(self): + self.timer.tic() + + img_bgr = np.zeros((512, 512, 3), dtype=np.uint8) + self.get(img_bgr) + + elapse = self.timer.toc() + log(f'FaceAnalysisDIY warmup time: {elapse:.3f}s') diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/filter.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/filter.py new file mode 100644 index 0000000..a8e27ca --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/filter.py @@ -0,0 +1,19 @@ +# coding: utf-8 + +import torch +import numpy as np +from pykalman import KalmanFilter + + +def smooth(x_d_lst, shape, device, observation_variance=3e-7, process_variance=1e-5): + x_d_lst_reshape = [x.reshape(-1) for x in x_d_lst] + x_d_stacked = np.vstack(x_d_lst_reshape) + kf = KalmanFilter( + initial_state_mean=x_d_stacked[0], + n_dim_obs=x_d_stacked.shape[1], + transition_covariance=process_variance * np.eye(x_d_stacked.shape[1]), + observation_covariance=observation_variance * np.eye(x_d_stacked.shape[1]) + ) + smoothed_state_means, _ = kf.smooth(x_d_stacked) + x_d_lst_smooth = [torch.tensor(state_mean.reshape(shape[-2:]), dtype=torch.float32, device=device) for state_mean in smoothed_state_means] + return x_d_lst_smooth diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/helper.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/helper.py new file mode 100644 index 0000000..dda9a69 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/helper.py @@ -0,0 +1,199 @@ +# coding: utf-8 + +""" +utility functions and classes to handle feature extraction and model loading +""" + +import os +import os.path as osp +import torch +from collections import OrderedDict +import numpy as np +from scipy.spatial import ConvexHull # pylint: disable=E0401,E0611 +from typing import Union +import cv2 + +from ..modules.spade_generator import SPADEDecoder +from ..modules.warping_network import WarpingNetwork +from ..modules.motion_extractor import MotionExtractor +from ..modules.appearance_feature_extractor import AppearanceFeatureExtractor +from ..modules.stitching_retargeting_network import StitchingRetargetingNetwork + + +def tensor_to_numpy(data: Union[np.ndarray, torch.Tensor]) -> np.ndarray: + """transform torch.Tensor into numpy.ndarray""" + if isinstance(data, torch.Tensor): + return data.data.cpu().numpy() + return data + +def calc_motion_multiplier( + kp_source: Union[np.ndarray, torch.Tensor], + kp_driving_initial: Union[np.ndarray, torch.Tensor] +) -> float: + """calculate motion_multiplier based on the source image and the first driving frame""" + kp_source_np = tensor_to_numpy(kp_source) + kp_driving_initial_np = tensor_to_numpy(kp_driving_initial) + + source_area = ConvexHull(kp_source_np.squeeze(0)).volume + driving_area = ConvexHull(kp_driving_initial_np.squeeze(0)).volume + motion_multiplier = np.sqrt(source_area) / np.sqrt(driving_area) + # motion_multiplier = np.cbrt(source_area) / np.cbrt(driving_area) + + return motion_multiplier + +def suffix(filename): + """a.jpg -> jpg""" + pos = filename.rfind(".") + if pos == -1: + return "" + return filename[pos + 1:] + + +def prefix(filename): + """a.jpg -> a""" + pos = filename.rfind(".") + if pos == -1: + return filename + return filename[:pos] + + +def basename(filename): + """a/b/c.jpg -> c""" + return prefix(osp.basename(filename)) + + +def remove_suffix(filepath): + """a/b/c.jpg -> a/b/c""" + return osp.join(osp.dirname(filepath), basename(filepath)) + + +def is_image(file_path): + image_extensions = ('.jpg', '.jpeg', '.png', '.gif', '.bmp', '.tiff', '.webp') + return file_path.lower().endswith(image_extensions) + + +def is_video(file_path): + if file_path.lower().endswith((".mp4", ".mov", ".avi", ".webm")) or osp.isdir(file_path): + return True + return False + + +def is_template(file_path): + if file_path.endswith(".pkl"): + return True + return False + + +def mkdir(d, log=False): + # return self-assined `d`, for one line code + if not osp.exists(d): + os.makedirs(d, exist_ok=True) + if log: + print(f"Make dir: {d}") + return d + + +def squeeze_tensor_to_numpy(tensor): + out = tensor.data.squeeze(0).cpu().numpy() + return out + + +def dct2device(dct: dict, device): + for key in dct: + if isinstance(dct[key], torch.Tensor): + dct[key] = dct[key].to(device) + else: + dct[key] = torch.tensor(dct[key]).to(device) + return dct + + +def concat_feat(kp_source: torch.Tensor, kp_driving: torch.Tensor) -> torch.Tensor: + """ + kp_source: (bs, k, 3) + kp_driving: (bs, k, 3) + Return: (bs, 2k*3) + """ + bs_src = kp_source.shape[0] + bs_dri = kp_driving.shape[0] + assert bs_src == bs_dri, 'batch size must be equal' + + feat = torch.cat([kp_source.view(bs_src, -1), kp_driving.view(bs_dri, -1)], dim=1) + return feat + + +def remove_ddp_dumplicate_key(state_dict): + state_dict_new = OrderedDict() + for key in state_dict.keys(): + state_dict_new[key.replace('module.', '')] = state_dict[key] + return state_dict_new + + +def load_model(ckpt_path, model_config, device, model_type): + model_params = model_config['model_params'][f'{model_type}_params'] + + if model_type == 'appearance_feature_extractor': + model = AppearanceFeatureExtractor(**model_params).to(device) + elif model_type == 'motion_extractor': + model = MotionExtractor(**model_params).to(device) + elif model_type == 'warping_module': + model = WarpingNetwork(**model_params).to(device) + elif model_type == 'spade_generator': + model = SPADEDecoder(**model_params).to(device) + elif model_type == 'stitching_retargeting_module': + # Special handling for stitching and retargeting module + config = model_config['model_params']['stitching_retargeting_module_params'] + checkpoint = torch.load(ckpt_path, map_location=lambda storage, loc: storage) + + stitcher = StitchingRetargetingNetwork(**config.get('stitching')) + stitcher.load_state_dict(remove_ddp_dumplicate_key(checkpoint['retarget_shoulder'])) + stitcher = stitcher.to(device) + stitcher.eval() + + retargetor_lip = StitchingRetargetingNetwork(**config.get('lip')) + retargetor_lip.load_state_dict(remove_ddp_dumplicate_key(checkpoint['retarget_mouth'])) + retargetor_lip = retargetor_lip.to(device) + retargetor_lip.eval() + + retargetor_eye = StitchingRetargetingNetwork(**config.get('eye')) + retargetor_eye.load_state_dict(remove_ddp_dumplicate_key(checkpoint['retarget_eye'])) + retargetor_eye = retargetor_eye.to(device) + retargetor_eye.eval() + + return { + 'stitching': stitcher, + 'lip': retargetor_lip, + 'eye': retargetor_eye + } + else: + raise ValueError(f"Unknown model type: {model_type}") + + model.load_state_dict(torch.load(ckpt_path, map_location=lambda storage, loc: storage)) + model.eval() + return model + + +def load_description(fp): + with open(fp, 'r', encoding='utf-8') as f: + content = f.read() + return content + + +def is_square_video(video_path): + video = cv2.VideoCapture(video_path) + + width = int(video.get(cv2.CAP_PROP_FRAME_WIDTH)) + height = int(video.get(cv2.CAP_PROP_FRAME_HEIGHT)) + + video.release() + # if width != height: + # gr.Info(f"Uploaded video is not square, force do crop (driving) to be True") + + return width == height + +def clean_state_dict(state_dict): + new_state_dict = OrderedDict() + for k, v in state_dict.items(): + if k[:7] == 'module.': + k = k[7:] # remove `module.` + new_state_dict[k] = v + return new_state_dict diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/human_landmark_runner.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/human_landmark_runner.py new file mode 100644 index 0000000..62c3b96 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/human_landmark_runner.py @@ -0,0 +1,95 @@ +# coding: utf-8 + +import os.path as osp +import cv2; cv2.setNumThreads(0); cv2.ocl.setUseOpenCL(False) +import torch +import numpy as np +import onnxruntime +from .timer import Timer +from .rprint import rlog +from .crop import crop_image, _transform_pts + + +def make_abs_path(fn): + return osp.join(osp.dirname(osp.realpath(__file__)), fn) + + +def to_ndarray(obj): + if isinstance(obj, torch.Tensor): + return obj.cpu().numpy() + elif isinstance(obj, np.ndarray): + return obj + else: + return np.array(obj) + + +class LandmarkRunner(object): + """landmark runner""" + + def __init__(self, **kwargs): + ckpt_path = kwargs.get('ckpt_path') + onnx_provider = kwargs.get('onnx_provider', 'cuda') # ้ป˜่ฎค็”จcuda + device_id = kwargs.get('device_id', 0) + self.dsize = kwargs.get('dsize', 224) + self.timer = Timer() + + if onnx_provider.lower() == 'cuda': + self.session = onnxruntime.InferenceSession( + ckpt_path, providers=[ + ('CUDAExecutionProvider', {'device_id': device_id}) + ] + ) + elif onnx_provider.lower() == 'mps': + self.session = onnxruntime.InferenceSession( + ckpt_path, providers=[ + 'CoreMLExecutionProvider' + ] + ) + else: + opts = onnxruntime.SessionOptions() + opts.intra_op_num_threads = 4 # ้ป˜่ฎค็บฟ็จ‹ๆ•ฐไธบ 4 + self.session = onnxruntime.InferenceSession( + ckpt_path, providers=['CPUExecutionProvider'], + sess_options=opts + ) + + def _run(self, inp): + out = self.session.run(None, {'input': inp}) + return out + + def run(self, img_rgb: np.ndarray, lmk=None): + if lmk is not None: + crop_dct = crop_image(img_rgb, lmk, dsize=self.dsize, scale=1.5, vy_ratio=-0.1) + img_crop_rgb = crop_dct['img_crop'] + else: + # NOTE: force resize to 224x224, NOT RECOMMEND! + img_crop_rgb = cv2.resize(img_rgb, (self.dsize, self.dsize)) + scale = max(img_rgb.shape[:2]) / self.dsize + crop_dct = { + 'M_c2o': np.array([ + [scale, 0., 0.], + [0., scale, 0.], + [0., 0., 1.], + ], dtype=np.float32), + } + + inp = (img_crop_rgb.astype(np.float32) / 255.).transpose(2, 0, 1)[None, ...] # HxWx3 (BGR) -> 1x3xHxW (RGB!) + + out_lst = self._run(inp) + out_pts = out_lst[2] + + # 2d landmarks 203 points + lmk = to_ndarray(out_pts[0]).reshape(-1, 2) * self.dsize # scale to 0-224 + lmk = _transform_pts(lmk, M=crop_dct['M_c2o']) + + return lmk + + def warmup(self): + self.timer.tic() + + dummy_image = np.zeros((1, 3, self.dsize, self.dsize), dtype=np.float32) + + _ = self._run(dummy_image) + + elapse = self.timer.toc() + rlog(f'LandmarkRunner warmup time: {elapse:.3f}s') diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/io.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/io.py new file mode 100644 index 0000000..42b2d61 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/io.py @@ -0,0 +1,117 @@ +# coding: utf-8 + +import os.path as osp +import imageio +import numpy as np +import pickle +import cv2; cv2.setNumThreads(0); cv2.ocl.setUseOpenCL(False) + +from .helper import mkdir, suffix + + +def load_image_rgb(image_path: str): + if not osp.exists(image_path): + raise FileNotFoundError(f"Image not found: {image_path}") + img = cv2.imread(image_path, cv2.IMREAD_COLOR) + return cv2.cvtColor(img, cv2.COLOR_BGR2RGB) + + +def load_video(video_info, n_frames=-1): + reader = imageio.get_reader(video_info, "ffmpeg") + + ret = [] + for idx, frame_rgb in enumerate(reader): + if n_frames > 0 and idx >= n_frames: + break + ret.append(frame_rgb) + + reader.close() + return ret + + +def contiguous(obj): + if not obj.flags.c_contiguous: + obj = obj.copy(order="C") + return obj + + +def resize_to_limit(img: np.ndarray, max_dim=1920, division=2): + """ + ajust the size of the image so that the maximum dimension does not exceed max_dim, and the width and the height of the image are multiples of n. + :param img: the image to be processed. + :param max_dim: the maximum dimension constraint. + :param n: the number that needs to be multiples of. + :return: the adjusted image. + """ + h, w = img.shape[:2] + + # ajust the size of the image according to the maximum dimension + if max_dim > 0 and max(h, w) > max_dim: + if h > w: + new_h = max_dim + new_w = int(w * (max_dim / h)) + else: + new_w = max_dim + new_h = int(h * (max_dim / w)) + img = cv2.resize(img, (new_w, new_h)) + + # ensure that the image dimensions are multiples of n + division = max(division, 1) + new_h = img.shape[0] - (img.shape[0] % division) + new_w = img.shape[1] - (img.shape[1] % division) + + if new_h == 0 or new_w == 0: + # when the width or height is less than n, no need to process + return img + + if new_h != img.shape[0] or new_w != img.shape[1]: + img = img[:new_h, :new_w] + + return img + + +def load_img_online(obj, mode="bgr", **kwargs): + max_dim = kwargs.get("max_dim", 1920) + n = kwargs.get("n", 2) + if isinstance(obj, str): + if mode.lower() == "gray": + img = cv2.imread(obj, cv2.IMREAD_GRAYSCALE) + else: + img = cv2.imread(obj, cv2.IMREAD_COLOR) + else: + img = obj + + # Resize image to satisfy constraints + img = resize_to_limit(img, max_dim=max_dim, division=n) + + if mode.lower() == "bgr": + return contiguous(img) + elif mode.lower() == "rgb": + return contiguous(img[..., ::-1]) + else: + raise Exception(f"Unknown mode {mode}") + + +def load(fp): + suffix_ = suffix(fp) + + if suffix_ == "npy": + return np.load(fp) + elif suffix_ == "pkl": + return pickle.load(open(fp, "rb")) # nosec B301 + else: + raise Exception(f"Unknown type: {suffix}") + + +def dump(wfp, obj): + wd = osp.split(wfp)[0] + if wd != "" and not osp.exists(wd): + mkdir(wd) + + _suffix = suffix(wfp) + if _suffix == "npy": + np.save(wfp, obj) + elif _suffix == "pkl": + pickle.dump(obj, open(wfp, "wb")) + else: + raise Exception("Unknown type: {}".format(_suffix)) diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/resources/clip_embedding_68.pkl b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/resources/clip_embedding_68.pkl new file mode 100644 index 0000000000000000000000000000000000000000..d69ca7f8481d3d87ee079bfb51f96d98b68961cc GIT binary patch literal 71352 zcmdSAWp~_2)HNDrMmu0i+inn*R8qIY%;>NavztUEmDKHk!_3UdgeEkT zWWt$blH1SwtaU%!_ZM7!P_I^>>QXJ~>~qdOyA~GPx}tcY|8uM@H#KGQ@G;cjX;a50 zPf1-{W$@&Y!={Z*9x-_8$O%(YCJ&y@rfx~Kt}Xw+W>Z2RLr0HHU0Z2za>~#VgGWtH z89#W~tf?cXgshr>DORY^!Xm57B>zln^*w5wr%O1sut>*OMMLL#lL}e;R0>TwadOJk zl;J7KgQt(2JY{Ukgh_=%27Sthen}oXb!zg+!6PS(7&~;rq#`T(lnGs&I&0#{!BfW0 z9yw)F(Rq`KS^NCYeNP#aGI{Ex;_Zv{DH{4VcEZ$2CE6G36PmnGa>|6!lS;NPHf>sH zPHUf%|6}~Ww>+uP@c*-fGHr$?kLv!v*UC&P{C_3^fZ%NS_j+F~g^g7+Rm1 zRJ3EEBAupAD%LghX9Fh{`v2M%9!eD|60!~*)zH|ikLWJ9#gc+s$s-OF_Y@We+V>b6 zbGCaEIg559p@5b2n#{QR|8j@XFTIEMNR>p7Pzl}9e$zA6l2i+60lt$HYpaOX7$<>c zdC#1idGlP|-~`y!ItsQXEuNv;uiP+r-dv!4Lz&bkr4!ukz3$40`ID(__(3;3h6suy z%>i-ErAzMF(M#Z8C?an-4CjX9>w$raPS4r)SSzj7X5R>Z`KBx1)UygF;ewxVxH!n( zDeo;ij%~)Y1KWg`@DVZEm}R;=cM)rA%2f>H2Zzgd6dHe0>cA!Z3U7IRwl^Z!!V(e8 zrlthOs{QO6y=dNQ1zizR0lj9 z%mjnLJ)=GmFP)TMQ43V$*Q|dSu~=Xlv4ypGuAO<>*UVQ=t&Ae|T~hb0JGptxUtom# z){*V`7k@Oy$KRzdm?|M@Wo>EN0_OqpsOz5km>2;_JW5`!&e2z)K?xahrZGdVXueB3 z$C%Ejj0nCZdr-NkdAMQPFLtJ4u=gUbqG94it+CFYF@Q1^-Oa;6L%+;$A&3P(#4Q`PBa6Y%r z53?A%)x|^``hN5wriy1=u7(QBjYTiHP#(g!P%hwIteg?CoyLb+HbU=UQuVox%9P5N#Iso-MCmb^ocB5r=Twj7E5zdJZ-)W7N5Hmc1a~ z;f8d+-^(<}4MRKF#ik#$(`B$&T;+eO-jpiS7nygGP5ppwI~R}#g%`vDvJo+6uRz_? zzp@|FZQy;@^t@+qfY!s_QJoX>BPSwYfZpaxdkMXn<7CVWwHjDVy#o7DJtkk=$o_58 z?(^Ig$7A(S8Utq-P9a)m)6_+AkfGrxd(w$ zzWo_z;QH9R=r?Xl&c}bGjV0|g17g{--s60P*xc2LtG}-XZP(wRuR0bVu~9igi5cK? z>@i|~!X8e?V_|ppxj3DQfE~~xeIS3)#WM#$o)V`f1dB_1wA5v(-BQ~ZYF{{n7|T;b zr}l-Hr>Vc=v?`KL+Af%`#;dR@_(W8t-L?sJ7Vzf%o)Z4<=ugp>@UI#=A-X< zRCjcjPnAXs-Pv&S1GB_gV4aVBXsA8{0r`sat`?R*%-IahwHmxiyBwqTKw`DH7>Uj7#<#kD3H7b`nfVCn4v{$@DKEA8Bx{*=_>i&sH@N5f5{7cPkd2Q7VOFvp_|walVR~y3Q~k&dQbW@ zaf0r~b)tjrwL&A-#{Z5Rl8+gN%E(*9^d=457wiSi@nG#WtOR=yhQgX%%@O2$EymLY zPt(m!(HpBXBxfGnfqjVJG;T zt7AZ&n8UW#z{6A^OYuF^qMbr&PJU5`wN?XZCT@*OE0Ki8E~jTRA9L!dRlr_+68FDM%_q{8V`CFIt`7Gl;tS;WupKqac%8#|*L=DI|YfvK6ouqL4Cs%)f(!Z{VQ;oJu2osEQUvUjx$X`Nq&ZVC_A0Vh5ea-zll|dH5Lo)-n|y$vz_t;fIMMV^nK3atHOnu`=(G z{bX(vwFI26*F1bhdd^fp$;LnFF@ah38pcb0skM0Ejarh;QXgic%h_jks#$7OGQbN=5-y5M1O~ z$A#3E`GW5+m$5q}byV5yhj{pda4 zB>0=5>E=Qu-Uzgmk4Y(fO%(+{`)W&BVy3)Bd7`b+D-g$tZ@4{3+Iz}8&G;+spYw%HuZ1vFAuG%2s&urj!426 zF~zi_>Eb(lOj+%DuZ_r=8?%g`rM}nuF<85RO7bO{Iq@$7m(0$v4Vtd!cy{8(m`*4o zd{@`GZf#qPO2ia$^hG1(i-HCfZ>)1MC{1m{l6lf-FYidm)Q0M@al4GmO8JA8a*H{u zfxo=N-5=C(f-c(xGUWdWpsTZ%tvFt(UC=Yt^-^iqKbnxg+Zl^q+Nuj@>B5c}-#x0h zI}aAO2jio~L-s!GO;!W=Lp*|%O~!CHQ? zewX2h@AOa(G2e3%g{ka2SlPZh{}O0Ge$BJdpGb@iumnuOv06F)EaxExD=}t6bEkc| z_A{$=$p0^jJGH{DR&jPF%P5vumbye{1jfO+&XYI`lf>zOO+%h@{0(7*_)IB=2eBx~ z^COiaatXuF0m=^!!m7$}W~W>#cu+}l6!=!^#f3y=Jmt^7$Sx&c2l~p(;yQ8vQ0K{~ zGRAf|B9}o4^fBT)mk2w!+uM6Z4HOs^@`~IN9M_IhO|>yf0`*ACru_CF`at%Nz$30J zYZY%P1@!vpi`J*W#!My&en;$oLd(cg`N%ORx}>~5*;O_8HINnPrjB6VB2()nVk|h;TR*~ly}VeTNd)_0sjTOqqAd@uV`i~Mqld7) z^rKpNy$xrXOl%gk?nq#@M$SgZOIJlt8)~!|qj@qX}`_;x}=Jae_Ps zF4F$ujtCMQhkBtsQYLdn@cCNkr=>b-Rd^j2$R7i{SY4?k*F#0&5ZglP-JU<{9wJ)> zTR4(oH~kV@A!8Ih7cL8IC0nY;*kf9UynWurMs0ns+!?TNAYLXk10$U!h)BnM=Ab`| z&(iks&fpX#o_Wt#=heUt>6Nsbcgz0;6`#}FS1OQqDhAr6r4aqeF~&A#Tx~f!j)_xC z7!SxSUs>{Rz8$^aoCZ#-XFOYRWfA2^L&TS+YudAvSR+Y%Y57}3Xs7qJZ<5dj?o~h8 zt7-z-&->KOQrC#Huv0!FGFpl^VA;dhR|A?sJl6`)19+PH6@N0&G;jb8P+#cn-E(m= zb|skn3U!>zbQeRfvIoTt(O$_v1RLxp_I5r1b*UG)v-vHQ>J|p0v~`G7pX9An=N`P^ z9q+74#iCV?8fLwit;ps2%ofK$SK(%Muo|bcfv^6;q|U$4kx>@(w$^0FOLvJ>YAmsI zZzazd{p;T6(wHaZ1?qF+4}B3RVYana1J~G%+G_a-Dpa4gHA*;Jg!#NtT|%FA1tqY=mtnU0qAhy$l=k*TDq$Mr$*+px}UO zpY(>^!9N16xaGMu+4o?aP$>JR{w+8szK3nRvKW3A=LPyP({k>h#nD^%Y;uyXp&V;u z;rG(kz@^;Y>Mkh-A$-YIS$xVT7)ugM$L-gczy{D2_Rt5a%hiQ}nYd?cPuFs^MkAD5 zJq>im=h*^l8ZjVnhi{K!*ncd4;nrF${{U@!T>bdpV&UK~XOTMFD{I=Xte;Ym{58~m zx-q=T-;2D0F5wT%AgxnuXL&9$gmC3709kOOe;_aTdhu6eL243J39pkWJI@vvGn}7b zF4NgFG#Fs6iZ@_e)H#mV}r)9tF{P^(<8knq0xZ=Z}~!qqqNn9xbPFOJRcC zAh--I@gw<^M#Gz69atXhWA4V=(D-OZ$x!S%hsL38xEAY{n%J(nEp!e;x(=*E$Fc8h zommT~lOxoldSf&$Hq7YBStb6+3MR5{MQNtqOM0$b?B~%X@`1a*Ib5wT#4t@QkE31# z()t1?;+{gCP+9m3W@>>l#q<$cN%lS5hh~|D(0jGIbs`>)Z{x$Bc~*nifkv}`kY>$0 zRw>Q`;l8$@hb7HDg&zW(?qOj+is26_Zv@ryw&JjWMh zNM~)^CqT)`d}Xt+Fk!_3&_AJZuz{y6eh7LRHO%qw41QrduO%{X#2dIeIiARtrcf8; zL%!u|G@gP;4riTFd-&sg)q^iV9qAJNRqkAQs>$>7*d+{whWW<(X8S8T^1)Z8L(Urf zoqZp+Pia5}%zAVdv(x;dJ@<4sO0w;vI=L74uh8uULTafEO{g6AGT4Scg-3Z?=!ANc z-7NRgAGx<=^p3`F@VGb-geOE@$fy=k$N*bmN46D6l}i%uLtP zQD^08?q_Ah!P+9_{D)qMELLb9jiI$L*AKR@&f~A}9NR_}^-+O-o}2a$yrC~Q`hhaB zv)S=Jw;hw)9P2VX?kDhtyDe1@b>;`c@6;*!5MNcksSdJ>dQ--4{AX;xZ24H+3%0!6*`pCZ*`?CuK;@ivq3*Nfy{<821p9-$93*t|Mx$IFPZ_h8C$X{;z6&oo}hwpqB1HI{~d2h7I zSy%a4|ydt97@(j_V}W2%d2c$f%L$ z(Ke+eDKCP_)Hbp_tR?J;S&Uj62bkqrv)cWoS)_+}pZf(|hULV5{C2;UAFGb_SB>we z?-yh2Ss-Avaejc2U~BH;AjQ-Wd48exEAtvivMv%RBF5;&hH`lr8MP9vW5U1&Fhbkr zi8R*KOJyZjYxI?2!so}VQ5kJ0zQ$IC-IX@66J4dWSWi)Q^VWyqk1v@4x0-01;?6U#wN5SK22Vt_SD;=GH4_&&rXz2*o*id zQWb#1Q?zy;-{$)(EY0vu^p~ru>(#XhY&gGMZDcM%ztqz4AMkuU124>L z7OOjYpi}H`vSeggo7=t&M(+F0Fmd}mm-%)~RE4p8wwaMtN~f74>esx^>0j_P{fIo! zpUq4S&J%WnQ1-$fq5C;wEj~~nx97vmBYdH-a_sN~NAQ!!r&ndC7(uf(l<-h{W&IeF z=R1u*I%*NUZvFVr%tWbQMhRNv(&S@-vhJt^{W+4Be6GstvqxG=g-BQ4udn04CX^vB*!#AwUqoMg5soD{W?_lZ`% zm-^gex7X8W$OUd6C~eLYG=4a<-j@{2p}+bY!)fZ&wTGBwqK(jm%D|_XZt_kj+OWC+ ztYuDvlKR}dqqtYzHuj-w4)QWRqV`AMP?u{Ha257X?ibo>54b+6FQvcPm8qSx>KYZO zzu+K#xw*(V=RJe%;xcYHY@v(_X3K5;IZ|=GfGf`a362M&0*rAV9gdqKUldR2@6>N< zQNzPdP+HsG=ai-?R`6JOhggq!1D22}md0?pI0c>8dEXMT1h0a@ z?kHk6UrC(-`zIddhXWtn$+Y5!5HqZjKl@ToO2K8JKxO@$&r+fs^;3lQGFwQ{su9Us3h zT`^W`Po?5n5lpq<5TRx$8rTGlF6sI!M`DXA?_qQEBp+=X$;?dv!A|1)kf*wgc=I#6 z$SAd=7T(YJ#f3&$vR|}E_E7&RJ;lXn7apz+XCGx$SAKX_dibEkp7lTR;5@$@J|NH6Is%8n z18k}T=xu4g@d)<{6hrO7bM*pBQU{5GT>ao2?^I`9CQEBW4>!hGbu`G;mg}L@_$}f;5p}ZBwWRxu3i@Vei~G);mat&)96@IrEE;Q2eM4 zF;5>xUo&p+><7lMi!@o9fIcPEvaRwYI_#j9S}8A*yv;69eg`^vVJNC{?18*JWU$5| zzPr*-E(RJ}vzaldgl{(-2V1fKcv{6Kb2|$7gp1NW@Pg;r2Hbe>I?xDg5E_K9)T`t# zwvpr2FJiYV#dCt+Ym7}y zBByH|0vt0G?$&p!qHGH^!*{GpT|ZQ}R!N?Rx3b6dT<)Un9Z^2;51)z%c71$5W45+N z{Gz^!)50o_g(z=a0Gpt z`04A0kGhZP8;QN@R%$}Vm5~2G3}O8dB681aP$_l+ZiBr-3fjqR4dtTUqx<5cS|4^k zzZgZD0hFTIVt?YY_&MI0F~DBc(GK~*5l7pYF~nan=h%1ogPARn%cO05J#fjI2}=Yf z^ZhtTn{?K>epwnlI^B)fwq_{Kt(ntkf)K`kK!bou4NDgiaU$!E*coi zPl3b8&Y4GHeQ0Ob+FRqY)D#n8cfg7MVnp>QYNq$C9;Q@3m}KEyqd|F`L$o)YZilwe zSqoIa|DnRLH9O8fCKUfq`@WJ}_{Umv6H;xc3fy4X;%#H&=x*6x>fYc!Nzw6f>Thl@ zGrATDSm$H48F~_GIr^x==Fd_~Sp@c=&GL10H{lv(&1_E$V$wqO;sVEM?ylT4@HNAU z{7g8L7Tu8?M0Dm4N$)&On5D!3<`^0$o`Qv;2cT*Sd5_&#&@bV)@&sIf_1Qn!7(WkO zOi_W$ZH6JWVU7W(AIkecZ48>U!WXtI`|^f4m9WXyot8C#jCU;%$s z?FZk+-p8fT27e`Oh$z;}^;ZkdaZSu^LmX76My?iX=FhaHJCdMFD6scdcN<-)H~J^X zp!A7^9J}4K0?dGERcw58ZZUoqn(tj4PidK`epVuQZ0r`QIFqSHVoLBaT2{3ZuXQFFQ^Z-&!8nk(v^dG z<`TR{^LgJ(FEi_5QEe;_#?QgO>REpak4{1`%{~y8_01>$VIcV-Ya!WbcMl^j)OKE|6=m89Jy7%L zsyGZ|<~|J9pO_Nrgq^+%_^Dja7@jjVt}FAmk_T2>SLGF>tg&{s)ILAc);7;42uZ-| zdBnqDN9nZI&oNnlMauD8LR>o|{%0G@6b()d@t7OA3w$J1#d*|Q8E#ZxzzfDK#a@MQcmB615SH5o@B^x*^{Waatq9PZfW9 zss~EJL*5Z&Q{P1UD{~OPkg?I#ad^}S-zoohVmN!7xf{O#w_*pS=V=G+z092~5#kI# zsTcflMjCtGI>?(IVm<7_7}Q9E2{#?*gX8$d#=i7A_?~z)BJu{B>ZIp zp{-|!QQT?cZ_^oJ&*6QL43VQf_7FWo(XC~`s@~y~a1q?cSIgH_9eUtjwQEAM%Ha&| zr&>`;GJFXiKoL&HC54CJqS9K53>LAKhMbc$cH&g_EL+)fCit)JHqKGpX#%f;q!p)?GSgAe#U%u70nZxy$M6bt6U!SRzg#?i^T zJ9dpN2!Hx=*}meRTB^~+Tbu{lRuG{s57f0k2J`Km^!4OISRP|}r&t(GwMVL^80m;Y zXY`HcpRQ8UW_ph%C#vi$abKX6_RRN0-xv5L=i%>KO+yft23wfP+OL2dc|@PURoV4H zOg67ll)M94C`FU4E7+cbj zV{3%I;w#KIy|Yo3tL{uNx)8%Ok`M6$LQ`>z8KbpOhmebRhjGvO`{;Pw@%#rQ;*)F> zd^O=CI8ZxGk5o4rnZ#G4uuzsZ?yyZQ7G@83DIg;E}!R(poV zgj!c=ZxSfYC-^O?zX zv(To5i!XAwY6Vi)oDDU$3V$(vX_47py-TfTDl3Aih)J>49g%drY!7vA{$SFo*%Xcoqo=m+F7I1)n&b%|G21iOKja}*!rZsa^d=M|99r*Zx zitZ?3yse(Lf-bM`uG~@W0-wNY@Eytn?YVC1Vf{{E39FNh;c#QJbf(;`w7bqCnJ>&S z+MrN7m%$p-6O`?*qDoc%0&71AVeK!q!XO4j#fFRUWh>=aS8X zB@2eZr?r!aB77yTH<1-rk?hNEqOImn_hPfM_C**4=E_Y}Uw(Zi9(-cnSP!s-SU!AE z+rmU;AZJYARe?8I5ZNS^~PJwy3H??(gZ6z}JNI8Vg+u9qp z;DMNGdYrGY-c%gKJ`o3qSQuYw2j^sEOBE&fD_5W7YNQ=$y2=v)Fs6 zB>2pAW4G$R^*>dUo#Wz|*Gwhh49@0d=L9@BHzEH7cZ^);4AOO@!@YlK>l~+CrCd!s z`+biwaEE6B?UrgoDQb$kM^>4vxR2&Q^A>F6q3!F48f^8v>VfldO<}(HntLISA!`yg zHH_$Oyq0${EvL`-=4Vdl$FYC0 z9*C)EuD>*fNX_jLaR{F9o(cYCpCe8!n91E?rmFG8J8G)pqjHEdXp6cy@JjDTT@gk( zlEE3Hh0>2HgI2k2SyCC13i^9X^`yn@Lus#U)4K)_`nLj7Kd7|GZe#Qn`?8{yQY!^# zNQdY*Y31+>W2u(Ow&Zs6v3fCXq^Fl$BRJT0IoO1ms-*GvKn-=XG)8zPCee>`*0|a@ z=OLO;@D8*+X8Hr*87ntcD^00LZNyKebndiZF>eoMf4#1u+WN6@l5b(9 z;b{;>tj7Do+j-v7t=Q(;LtICCWUS?GFkNtawuh578$m0Kc1>Y^`*FhSyaD@Kx%L@N zL8N@yy9llkK1dslcQ}D9@9G5FdQzw{6!yiyD#}CKmH0J+3z) zvfw(sxjagJEG@4)|G+VcPnfCB(I}>(?}SvK)pKRTqihSGF07(c&|Rrhuu;8T+)rj< zc5k@|_k}1ao~@?lxX2agxLLuF;T!3U_5^RTHx@pzE$b8((ug;{2I_14g)M{@;P*;x z-xrG8bjd!ven<4DGCI1Q=+`QXRoL-xwLILQ@MBtpkC6nj87Fc=fIm_7;>VI3l>n{^ zeZo@u9<>st(H=);L2u!nbp{ne5H=&Oka!P1x3wesD#z4_;B&Epkf|ndneNzNao=Rv zBXe;`yW^$Y#s|6R&hEIEr?ClhYS{?Hp%gvb<+j`<+-Ol^UFLGU5%{g|mxh?1%*|SZ z;3Yj9yPVm9lg15%&8=jYP-g>>U*x}W5l>S?gZGK|ax;RXiWuwAYyCB`eC#0`NGfLML`VT(0NU(%ABti89Yg(nX#}*%qpBnzQ`Rd$K_Qd z3iLk4V|W=}!Huk6*>z$kbzjbBZ5I=CPDxz~T&{;GSve0+YBlS&GD~}RvzZAkL%oo8 z)V!SD`cAG8e<}BfObL`90~vrhN{tBb=zoUq(G}JZwddOAF{gT}Gdxw@7u; z7AD5PIm}CL1#HQ`U}h72PzkmW)83b&Jo7D-i*xR^$%p?8RZNAAS~#0tm{*N!tBsHz z5MzVgaX*l%aC8OSM1F@_Nw*D`@UPS*^#t7q^kais5d`Df!4Wa#gO}8!j$UAeIhe5- z_mn!`Hsnsv5AjFlbmnjLK|AO9%Q(xF;K!#*QYl)?nZx`x!-clN<<_6N2BtAxss8>g zj(40YR5NZ1Db62YG#nhg-hZDc>+FqlfZYy+7TP%e6Wn3;4>4!u*paw`UyiM-H`b;b zMWv-8iz`Z3Y{1o*yP#f?IeYvYMUas+>B4^KMssQ7KLrCe9;C4NDB zBW&74v4~KH$)s7_pV?Qt`=L6nrT!+U26*8bW)H^H0-5|Y>qWJp+Q1C+?t)#2(#k(< z)BJ_7PtB?tAQy41>|ex0?Um!c-cJ_xT~>cdN2p`3Kvad4~oI`5|%oklYOOHd`LHgU#4+9;fxYioqOi1bPOub@W5p)m`UMEErBpxPB~ z1GP9C7@$=ZE+#Hvi_;0t^r&&p=S(P-TA~E#50RX7N46g-2TM*}&#!Us8M9 z5_1Mc&BlvCv~^AJ4z)cY!cm8<6uX|OOy~Qq>GvV*mko$w7Vf} zUhOIGdyKZBWjI@LXer<_?(Es2EVcDd?;3k3)Y-@s8j*XgH{k`UhdPIEU~cjD4LpvY ziBGWg{De7ErR)jTpRB0ch3n~ct#kMU`#i1zdl{aVI)n4L0-q6uz&Pi9!x9(~h-J#C z&$W1=YoM(!Ss5W+kS`b}v7Ww99;TM!@8mObs_`4IAUFHZQq8!F+A{SB-9y@}jmq^A z7mdbzZDI~_N8C!$V1hc3yUCvs&x7k`68R$b4|GtQ5z4?T`!>fFjh{`7G2ZYid_l=& zb2&G-g5IBw|Acn#;J(uExBsyeL6nh~h6~IHbG>(f{Sdv#c>(^w%Q=U>nn18BuiA^| zeTN$?(*zfs8A!4<3=|6v)+(TRZ2FD?mXEQ$bk)1^;6U+sh#{Ph)6_CXGww7QJIvBTNmT+wd zAA1_6;Q5jV4A-~V|I&)p86IBbnj9 zvFFCm%l(jJfo0@LXumfJ6`>BH3~>>^3Y28WU~7DS)VBiC)mT1&uCRAqG}S1I5Ux>4C!=|Kvtlwn-J(jrj+-JyF}V683@YaJreljb_?j7$>EOedEwPbx~BFUdo>< zEQo&z{x*Y&d+SX^^-&fn!UIaC?T9=t$Vj@kTfzi#jCl)J#E+PXc^oXpq}h9$b)YB> z6j=LBX>#DYR0b6l@93hfWblYEiz>|Czz$zsM}_=qo1ZfnbQRp_fp!|b(M-IC9hTk- zY!Ahdtl+L^s_{bFOHbH)xSEcCo+{E*3G65WT{BiuV?lhjBLM^?{i zY6V~4y+;nfATdW>%#RCowg2EsYSRQWu{(H0-WEn?40O(9jxo1LjmT2Y=2^6-VrlDi z{-(Rykq#b?U744O3gR45Y>1qK^mrC(AG(LL*^rzecbzb_QCPmWK4 z_2@6k4p`T0WT68C2@0{yR^Li}d_^)~o!;5LkUVGi#PFw=?t)C!cYHb(VfIMHo= ziOiqW5+leT@RyZ7k!yv3tE1dAr>d)Cy|MeMz>vx|tFHB|`-{H^^%x)a{+BwDQCwf) z5TiXzM#?C%ZT+H*TwCn|8%}_~30{6`lZx z@F>*7D8lZd);f#A9!7IV8#XhvDW)<$Y*O4AVi&j^)kg{Qh3k+mCq41b0bj^0a$emZ zd^2T2NX=1#xy9DDTG_?0HSXe{&rZ}`_7-?TW~*2Ztks^)x;fq5EuaBKOL2Jl|9tm6|as) z``AOSTlA~U=WGq3lH;fvQhEobx>dHjWs33!Ov^9eqVgD&NW`+&iK-#JUrpk@(Mq|W z|48koKDMsbJbsVRXwwsL*gTpj<_$pKRhAwLf6HAQ=R!~4kk+Tg@v{Sp22}j@?&+rSXK|Wr3C&F?vt-Tv|;hRcT~!cj#>r2gHQZH z)J|v7Cha6H!;Q$e%FM+)_^lmbJGoF%9<#iFnid0gWB*JF+=Z~dkpn52J?HlJMI~{cMgrN zN^8|N(uKGJ$4qlU$p1TQe>hfpVrWitYI8!{w2I`UdZT5(osQWrty3G5?Qmf*oAzdP zVDs4P%oO>!HXC*GHY1Po4Rb2VGa*Bk*FqgX@SVBE*)?4_oahImn8rety1SiD<`BD+ z7~qhUWxfRT#y`^9l|Pot9hsc77IaCkjjCCO$I`p!VV+HQ^a$=ERwT3{&$7|BY*3OL zn$y4-;QFPP^tW~u#`6FW!$X-$DcDxphAT$j^rz-%C|{pw)Qb`4@QQf` zv)O;Ri@u%gJmWSTWvK?HIxiZd%#UWM?~Hu7F8@0aW-TQ9eb2R*+|@GOW^uSN{IJ4CkB{2bDU!h zNo$R@{b)b8%SzPUox6i7V*2fv?>YK2@HBYSM9qBq$XV<~`9PSyL?1)C zj3b_H)^vKW>m=-LeBgem=RFJI9%x!jTWS6@vzM<1w*{(DK9diIZ%HF7_Y5ALVFg@k_i|F%EK)3JuqwkEtkxW)Q8Z0 zMc}yv`jG;)plW5|u~JCct`C9brv%PT476Fy}0YJ zx+$s>+yIY;v>(sub0LjT2knw$i-+Vl+lO2K^Q})yfIxhU&U(+Ny~!_HIsY@>2M&SR z_({yc+^9oUT}kp*HH6Zx&eZVuVVq6qNX|q%)jfefw)@#&{B&g#+bDkzNBN#1r`->> zQX9n5+7F_M`BA!>Um87DOV#VCUG(1&@~sm^p{f&uO+_ly zM{P=dHNW9K+Dm%4*8w{)i*3kcVOO!a@X313J0g%G<)aF|iTY}r7}z6xB!7XH#y(GX z$HU;YcnqF{62ga2CKrz)v>o^-`_+AwDUADo_o4WI$LAMLsLP!;@UM5TZIC{~z8IEd z6eJ4$`2w+Hy&vXHt_ZBpuLf&#ZrX0Eg+NVqKVHhNv&K+-dL)@oz7>Z%C)UYi&-)5< zGm*npkGn}cW4=W_pcTZaKVT~SQ<@;Y4yl!*nZj^;?nM83^LzX}FqZq`*r=EFwn3YW z^)Qor;Tet7Jl(Z9@-VfIuch7XNH<9{6_3{f#KK*}sYz(A)>&&{O!l15c_uct?nrGM zQgOu-i$W`z&%E*6V6#~VP?SU30W{sypDr&<&$RgKz)?g=?E)`>BA|e~pcQjoNqhpT zk|{z%_he^f`X1YyC~24F1h1+dk(v-$O5t0h|_GtaVP z@gBaSHJrS`-(+%OL+%^bN_@+fHCw{PnR|ikTwrW6ubHzLA3BeR^6LX(_E@F2?_c>N zwphk7J*b)V46PsWh}vl67^T1@Zw~d7bLuXXZ)g15)t}0;obPxp--)oZqnu`W;E$S_a-{L7nWf(L06wxY|qgpzby28DOEG=ENHtGBB za(jJ+d;%%^&UwEPO^koNfH+LgaXp5`jjHesQhW}W0soF}>F62iHqHzAzc+B0`ejrJ z_Qig+DO=Hd(|XrR>zWu_aL}Iy^Qj*COl_j^h5br>a=zxC8V~I*P#zt#m%#hXIoutp zHy9JPLCLp#*EY~qr9C;*xh+(H+OcP*;8h>WQFs&miQ8$*WLUUSFPuIPbkHqydmLdc zoArx1p*4z2)=IcmtF?0ubLmjT8@1!adE%0O3-uzi+)rWQc-C55ER}Nw?)0_N7&ouh zBz9^Y{rS9yHJJvuxph=@`$LDENlLEzihbcaNH>euSW0+KTt_#R%7LztQ`j@HIm%I1 z4|eC~_yqLaeg|};NNFe<6Z^s#B%RA|f>`7WuZ?u^y)dZOUNFsko4CY%1x-g&nAOmw z4zwHU^57Y9qw>O4iAH8U1EUvAIe&fVrH9#Xnb)`$;%Xs|$j&VY_{|8?UrgJk3#yLp>u*_y=RVU$tIO8FajfjWDjZSfI@hxO zJpTF?PU`+$8V3P!D)GYAml;y7-I6l^|D{no$)$)K(JLH_an6)it`QIgHvl z@ilz1#ri(7nA|JG(Lcsb*+0qi-kt1Nwj-0QUPc-^xyQq7;p6jK`4HEfyoLVZ1@Mf1 z#*)kgjk;@1n8}79cp~sK6SUZzM3ajAV%>;JoAq%^fqLwi;K|T?g7zu z&og`vxMD5AfetmHvaK_iXOChFxDxJlMmN_-t(;iZW!2__4c-ds3R^2!Rql_uu;P1$ z##Tkm@Nn~)x&}Q2Rg5yezWxi2P2O5LdC-y1JO6d$P?tCd(;97n>+zb{2`02!(L?&I z?@wcv_O4ovC&*^vA8;#Cf~+MRpj(BMvv;@{?|XKqu^PIwd$4<)yg`|l&1%d>MBx?u z#lUsz1F^Gjja-0#S{0@ivzPg(4F#)xVyV^aCcg&X>@${Or~hD7k76* z=)qmT`F{6DdgaQ@v-f(|x|eT)EslC5WKya05w;?BP8(pu9K|HBR73ttaIvkecl~c2 zKh<$YBDWde6K(HY;xDBksK|h%H5ItFPj-l-1ZT znbwciaG@9JvG5R*VX7}Z!#=2`VFW!&_Obi=al zJh}tfz>X%0*_%@D=!dL=JZ8%>UBnnB(%gdlrW`UR&>B8q&6Ag-lk7{BFe=l?8+W41 z36uGFJOeGg{UEuO#634a4|WsXA`nrSiT&`OFsCVd${^kv6Zshz90G_HV;X%n1`*AMxFr(7MW8T?I2CVC{5S3yimS{Gspms|XDW>P*J zObuWFaCVYv6paq35+@bLark zk#49gBHNm)+TP)5>R;?Ke271g^Zm)vS@od2Ojt-hXYMO&nN0GhGZDLkt|O{t^#h~i zd!Q(E5O>?%%>Tfd&~UM(L_6=Xb@jS|hinVE4qrxTEC$8%j&YbxDNCff-M(&km|7w9 zKjOQ$a{0kbk0e#COD&Xgq$265Frcsiw4$pJZ?UUlQ&r{`nNFI&8Sk-lZUIw*DyFL4fot*@3H%l`l9i@V#mocd<~rAUZj}#HTLdU8OI<~ zA^t%Q;9faNzZ!cEDa-g_aYu#x5z;SXWA{lh(=TK>Set+Cc?bluIX*9MCvNjpJkZT~ zAEukLu?^G#>OaIE80U<$bp!vi<`kB7R3?j=f8!B&C2ayel&Yq_lx~6{#G$C;;$n4f z=&WV4O4X%}e0)b?EnmvjiAb|i+L7kx(6f#~`e|%3Ge-L={lBx~iQGuoPuF(Vl}bsm z@E}>j@LD24O&kwb6D}fxx(?2GG0zrxU8t)6w>QaqN^L>6Wq)C1_I$<~<2&`8(niNL zD%??!Sk=hSBw-62v1}v}ZJTeLR@QTM9Thl&sUcmU$Hr|Vv*eEUt%d{Qo9&X^8M|*? zphQy_bd^?UKYxMq60zvJ$cctC_qw+SsK8&PTLmubb1*5`!qUh%t$oXxZaIp#Ls#Hy zl6$hHu<9@ahQoQxBs#<4lm@!mOLc-Ed4+EwIz8lN_qsk%yVy9GO5pJUSj*CnZZ4kH z&9)_SMQc-a8GYVf#f4}+_11bT19Wr17o(ny2kJcAvE;AdC~UcN3k8VM;8Q_qu+~3~ z2EV$i#y0`)s(H|4qJKgmy^*eL zdC6_E_CuOmy~eKSSwW+urj{7Pi&mwmrLQgM1ZAZ+S6llVT&)?qWCzry1fuAYh6}l$ zd6>Bs=%cn0KZ7Pp8o8UfMMo&ZxU1qoDu=0+yb9I~#2TvEb9hyb)Qj*a-WvQSHp7pa z!|}cBT3<)3o4$m|2AQ%*-ZUj6+tB$&GNZHl6<4Kl{<~6bt%s5&bfJ=+(J-CqNrk(< zV;ymX%#MFWb&;yj;d(0Z!1jbW173z&N>!v3=NoQ*=%V+h@LBS5=j0AjFS(B+7o8$+ zBJO)DvO699R5EmnSnD5{yM`%?Q(|56y5N_HFTs5o_~;Fc*$PRIeb ziGNa9+f^b-eL+^@e>lf;x837apL{rJnmCBw&o_cK{OK;k@2KB~$BZ3_OWq<62D@Ct z#QDlt`&{%Xa2+V)Y=qRYoZ|i9kbM`~4x&sFsG!VKd#dxSl@N{b=K2UU)E7S?vY3fT zrds8faW|9Gu#oZs{o(z#bBWSAzVD^F3ach%I~EGl?Z?P?b-DeWe8jSdyp~*oUdUPbCG>H3jbKPf z7blCo(7pDDhF|1^P?w_}mmFQWM@k#@4p;>Ske$e1Fi)=R+$HT5j{7CLn7^HCDO|H+ zHaXXJ*hk{mXhNC7?G0X#2Kib_Q!MTB))T!$mte?T8eamt!zaY`?47C<)bzI`j)CFlc-;s%iiSZX`PBsOW;Xk;Mp}EdRY^LEFQ-f84LFx}t zQ|l(zjyp;~&=~6k^O1YbElQR&MxRccGgPYQL}kOPNMh+ z5;RAm`z6Zhm#tJeWCJ>wnk6`qM#4a_*m?nPWNRV1@t^!~`!GL(E+^mXEp3nW&v9Y; zRDKVqDgEMadItIsTP|^iBm7-}T^S$j=lg}@Oq7zQR;GB)ffu;~kkrzczw1@nhN!`JMJ6sw>D3EsK7 zNALNn2vX8FOAGpqlo_b(KC7jK+V1-kxW*J<52bP7fyR@^#nLI|(U-%HoxC0FbPX3nie|mx_yy<#&7C$R2`M8U1E1`psc@LW3;@sNka|x&V|{3! z#r)mzFR?3B0`DluWZzf&{Kk|MtVagz>wb~E=&No(Rq`7D_`w9o=Blslc+9>vs`>>sXa zsJC`0@Wa%gU=r9Ls0b&kzxdMPp3r7a!by4$6-!L!$Afde1#qo=#(m5eM_hFtzzAZP zk_ZNH^<87&R3jO*5VjKAQR9;1#JOTmELmFMU!e{{n~4*!wcAvAG6CnGce6v$M69!#0X}rm`HYUK7>Ab5yWj{0|!u=iIhqR&wS5w z?jTb+Oh1Tx5Rck=fTFaCcb}8RNuKd z*k9Tp*5M`ww@@LXsn*k=rQAbmud_r&>4>s~h?1587x=92-cBp+ zqq``a|Dfv9Dv|f)DpA*whZ5#IBM&DdkVoiy@((`&@d=GUjHLqJ9@!&4#RFW5HN_W$ zH6%aiBa@%$)69HmE4MGWS;>s4kdy4|ko1=SioADjvI zx;${dI-04L8%FZ3nF;>|I9WEXbiO;5Z?_w@o~1X6Ifg$fU}zcUed&26od<}JoDGOjMRJh% z*!9uzNxf~GW06P$(Cnx-Y<2{6jO znXCg%jGdaI_|%eGcG69BB2y;+IQ}xk;;juIT{FBkIVpG~^N?|4QsmXhpWsU0cIkAC z7cOLXJ4;zhdOoTf(~jW1l=(_EVn5M}8)$FfEUiRJ4`F$7w75XsU|SAL(YwX9*l~Wa zsb}F!sPKMsyQo2=Q~g)^ml-V87CUl1=+bNl*CA*zImojWE(M~AV$2R@xzK%ku6*7nikLOS z^BzADs;O>H>VlVopOl8w(aek6T1e><^II_Gy0N)=v)dlHUdDZ3>{fmlSyQWK$& zc?Z8n`56L6a5&yaD6jW-w(%Dlcc_x$6hS8Y5^c2p^5evjP<)GWXA9x;`?zx|s)1D4?)a}MpiDc7Nc zq~!8}R_tM+R%naw5PYJQ(O!DX#TN?2$+6xQ$$<;n?!SK)SXr zw0fV_`<_{kvr;zLsEs6(q)V>Th^+mydz!0+KTlnOUGYVL#s>IQ)kf$SnK9^V+aS8B zxXKzKh8NJ%Vd7_Wd-Fm#7d)fWz+s}dadXee+rw^=IWk!d7uU(PC?OgJxABoFJ_l*+ zvI0~Lch@$Z`PLwzw!tmasV)uNO@74vU- zIo@3^g%o24=I@lFOx0ms_KI^S!uv4wVA>e8y@Dud#CkHEdz5s6StnPQx~Tu*!whGB zx?NQkfdbi!C-4Jy+Y0lkh0z_XN6?yvv!qn8p0-sR6L^+?G;=#x#!gZm!m~m@VPfc1 zFw)q!o~Je&^Pi_S_|L$(%3R+>&oZLWnTZ2@rhJzQacQny@QR#~C@I^!jMw)?>oS*ASH^^D-Um~;?BZZpiY=otb z%ICPcVn5`tZ7DwtMr+3b0u*vO*;IWcU1Ne`tk}=vqupFco%(dvuqCA^7ZntBd)Y*O(UkRd|DQqRFdf|S!IQKI0 zufHvNiyKX<(r!Uwj>EV9w#*QvdGI3MncE!t)Vt~=(r4%(Uh`yWm@`sg z2|KdafsqxYGsYHV0%)7`FHYGOivJ_3^X-uezAe~J@}^$T`a_rFTN!kW!GTinP2858 z1?&O4KvrR$d1JwRS>Oh;G{Mr_TpX}+eKQp3!XNdODYqR-5yw=E!6IN%UYX=lgL3aV+{VC)zw>!}jfzdQUYfdZboCOhCHNDm6V)bk!r&6jcU7?EYW1y$oc8Pp$fJ9FF~C`H%JoFe z(!bFoakB%^7X@E#Rq;ZjPq+g{y*RS^#vyOaOf(+RU$gw2)Rj%Sw5mT0P@cRS0_Q!;Xb zm8Gsi7>mml6w-Dm z3U;JDkbVL{mn7Cx@318N187V|CJSPrG6U_S?MAzU<3(q&@v)Q8I5FA+$V}j6HYctV z=M`3g$IT0ovTVM?Bi6&W%S+i*=VbM4!CPjF@-Qa>5AYrJuFe@^IYTcRAr2EOlB>vT zYCWk~c3n`GZh)t#6VU`0EkBh@>2~6nR9x{B6U8wgg60cb2C69ONnx-`vRQ4YwICTe z)5cnxNVv1Q@)U1@EJNo|jpeoYUhzLlF+tLYnx&^ikl%z13|7L9kXd>%q3Z847lcB= z<=hB0X!$q4md|cFM0U>#D_9DKN*{zyzM8~E`jtYc%fPIh8+f*>m4t?RIdSiN{D*T& z67a3$mjf?v;sDz~8@+sy{S0t<_HYl};c}%AlT}UaqV?5om-mxZ&HsV{$_?i! zzM$|}bFSP~mV%9)%ar5# z19($ZRpZkXGZ>K4U8*lHEl40!sagkiI{(3gEHWUM9Ka@Mh0nhEcSueC$! zM)5cLKx{#6&D|n*3f)xRcsuKdjC4pZ@RN+N4OL1yS4ii@Am_nQ;T?X+^?4^x{0}<7 zu;5!49SoOOiiG+|@-G3<&%-ZfbIvWuc=IhpH{)*K|YR!K&if>P`8ha}KY{ z9i=~D0(ZH_#kVd}V*1)7^`9;HUB5 z{3PMHCamBI9n*R zfcppP?8(pyZ3=l4jxjVQAmlnfNG0jUNFFBR^ON`6*}!3HrsF;OfLqM2cc7ff|AGx8 ztW;xtx}#NLXKrpN8D6T}Ne1Tq)rUK7=lRk5QfJRjYddX@Ww@m{R@&K5DS~UjQE66g zyA+4|$2hgF%vwghbPe-A7J75hU`XBlY{$$sp+?9CgL1mVQk+GGApV&?}Xs4E5;Zm8NxsRUC&hm@95nEc4M-T20k5;g6UIM;CIXPAB(etJK~@4y8PNZ#EJRCC6%UmR<0nr4V-F{*zN3NzO#_ zIX_fAk~YU6K#Yc`eM24Bm?uXj|p{8PLa5s41FYRla>iY!a@YdUjC0uHWM4kljK0l9rz7j zDg24)NOvkq$20JuLW)o>IgzMC^ar0k^;u5urDWpOEhjT$v66f&*doVD`{)MBQ2qzA zQgjy#q4N0wS~KS%!^h5wN7(nd?+Juht5$~nI4AxH)VA(W)6nY7aizXQ=)>sS;wYFv ztrAOs=E&&KOzZs6w_tlXAh;^zHHaI-jXICBpr&}-`BXXpsv;j>`BP$l@n{7Cx8f=A6kj(X1GCFQ1DOIV_{aaP4* z!Cn~Lyu+{;$d^{@g3A^b&@NB`M7daYwr3jKQ=M%aM>eBRb2_oY9HV)(s{7_zjxZWI zTf9jEbt-kzw#c=Cz_lch<+{$*RjZ=O!G+)wcY`@4pHU4Ot?xmg86^n{zCNpyk)3Hw zefAv^j=@#NjZy_k;I@eR3$O?N6Fr_3EWf*sh(0alfs%< zll)pZQe{r?Gm|BsmQVO^JEuTRUjbcmrdmq5t;B#vDW#;LVr$PaBAP03ptftjb!+g6 z-^E-aAUcl$a5SLTGxl<(F?~J|NptF`|S0s=OeRv{-W{T%R}y zo(xum{EFHwrCthv)_J0c8bWOL6XM^||-K9IQ>+9z((h7m>CJ}o-)iE;p339KjT zxRdhU=u^nIwZ|bP&`;7E_*#CYomW4KV{Bi9THrtT2)RQjQK`o6(tpbJ$wpuub=Y3f z*u_r}{n8qtA$~#Vhi`Q4NnAwSQch60>~q&0wxqnDzYAxx^+6QdPuw65M5f8ymN}s- zL@&n*+u#f{cF=hKyCN%v0`F2{WYQ_BrqJ5Am2SdiBhL~{o|jn_Z7tlrs4CJR)?@CT z6tEX($EqjgaONag3*U!9wT*n-*?}*q9FQU44Lal&|32g*-VD1Z#uF3hM5VpKrnSng z%zn9Ha1}QIj|c&EOJF8$5xeoj4Zq=TZ!y?~U+l2E%UCX(E)*O@tFZOSvIPV1O*G3- zp*J#*q`~rjrM!JkUSG%moXg;Nt%$gbwYO;AVxh)}MJ%4#jm}SVX$;+mSW4U=E#6nz z83a#kC8t*T7rKZh;&=002Y%Cni#fH8qZ7aN%YnqLhGBUTIl#vY@ z=$o6YXcv=CTgIWCoi1f9l)-Z`DK9Byy!s9n&@pkbq~vPl9V=J^HNk9~V&uL$gl^ao z%U<%dX*k~6^C6?HcG2i&xUOFpU+{&tGGa%%G+qy@JKsCKjpm&O)=0o3c@8s4Bvg0Y~Ct2Z|_XF9K_^X;vuI`m>gPdtIl z(=xTT`wC(nF$E+koFluy7$BI(xVjUzP!B54)iT&jz2{iYwWL>bqnHQsO|>(#nYH-R zjD#secJ^NuQpJ*FoTsz!6c!r(?+E%B5hLAB9B(k7B;^nptK61asMD#M_#5NDuae?% zJf#k*UBNl&5&a)avwbALxFfl7U@!Acsw__oY;iV)cl8$VyR<;fQ50n;D3S6*ydl2| zOeCjM^$t{WO-17U4gCw4V#p)nt#X&q(8uyNxI_h(I^7(`Nk6o)?dVSv9hlkJ%ih8x7lU{9%nqW z{n>G!{3?C%ZLVobdTFi2|5o=Z_vn69G@giGHaw6wojtfOGA6wPLGgmi?M}uj5w{3J z+JKLxUrOhF^|>n2_P|GJi@yR}3qPSz>eRqwELYmj<)Rlh?f%#A4kxX5&16|o!T88p`rK^3brN4cSp$0~2)$o;=jtuc#*G44Ql-nmJ(#O-P zglLdR{*M?y#RY5$AILdmE3%UL4V;A^<_{+{qvsS=A}C@9|4z7={2aFtw?JyJ6Zc*} zEp5U7RId>@iFV?qQA1?Sc>Yu1Q!&#yReb9nKy?(7wO`J$zLN%J<{(=(DB<0RdoT%h zWV7%|Al9y^XB~HFyV76QL+xloC4?ceq)3A}Uh={8D%U4mm;8-Hf(t*@Un1LJvbv55ZK4Ewl{f-v?Ewr4{f-b4uw@u+z8}F5MtwwW#+9J#v^_$BPZJ?;wPU2ZM$ma8j4_{$ncr-F9mO1}OU41b(A2(Bb0 z8OUp412TblOQ zje1I{s93=(*CAf{RKFbrOm(J>jF=EQ5C456(k-FbnV*LaeqY?I$u#c`5JA zn2Mhg)5syt>Y*CqS?w12X8Sg+ldqxT1{KA1L^LPaR_T98kNt|{n&Y^%60Q+4v={1W zaS{@g;z4!)BdLv651#U~p^s8+L*a6PW{zjZBp$5%P=2yK@mb<-qQC2lJ%DOPjJ+;)W@p| z5$-m0L+*;zYZ~m!NOm~7_>Ym3WYwSOJDk+oP^Q+Y@k$~y9xqLdMbgy>W11}&Z_1;j zvp^Kjx?ZeC@u&D*{F_vRh^9A6Te;!hYKqPllb;2%xD2$lHbkxF6Y%-cF18e|pw;{X zjjFa!_AK{-g3$@rz0V!(tvvoRSPx%DyTvVFG&91`H|$DZvmKe}nCzSkt81(AS=ip> zW_)kWin3DM^)EnS+Hh?aNCe%9|ADdv!_f;=S0aW;*$ttUXvOz4*b7RLLLMhb{yOVQ ziXkuH3&BrIdaz!hM?6AYF=1>f`c-U67RtK#lNOBK@C|1pv8g2r)DoW=^FI{)SH`8j z!k{1^&KbF%8_E#=6j_@7ZvCx3Lc^IF%2zoj^aV^2=RrT&QG88hIGXE^a*u|Zu+Jf= zh=m4g3RMYiaZ~~ZC)T-G{!Z0I>?lb@1iGRpxVI$bNGB==!zs?2n6skL_hMYud~C-(dIIFFW=o%~ez4(vt~n8`BBafPnrj=0~ngNrb$5 zf}s__q;Ufi^qn4vu+Po&{XuO^pD<7TFO7MY?E)& z9DWYuijl77@Qsdp*7;JD`)YOJom4?-FK)4q34Eo?q}b>u28rMpzkWkqnjl4%GWJD# z2@^fimCmj6O_DyUk+zK7oWKNe2GvZbNi0s=TY#=~F2={f>yC!9&Mi>-+B@4zXej;w z)U&23w%`gi+$*buq5Qv*F?O7THM*8AX-kP(6qkKfUhn>=;03uz8R<%7(%5QLxs?9) zT&X?U+cL{>Rx7S72bn|;5(#jkmrI~W5tViq6Z#_&w!UD5!PZD5k4O|B!ZsyWQxmW3EGF(yFB+W|T|r~d zBXx*W%uzyHBV=+-^m1ITxdd$KUcvn5|3#jY7g+vL2FOjNTA(~1347pm&<>`#nV+b5 z_@Fs()E0lktI0j^6tSn;7(LHVMC0S%7^LM`*_&J(YISlA*YB@L@FEy>WZYYPwbi8Rvo}IRIWkENih@X*9;K4 zAk~ik=y1~=m<`HxVi?hlI`12TPgB;3pYc})9qtM_j<^ISt1Xo4a4TO70I6bdq_OY* zmtR23#44q@ZsH5D3Ct&MGgXQ{$@TZ|a;+pH`PYRJ0WG3$%H71d|G{h+mw1 zsIu0=^1^ynd<3?}TowC+GWZ4ZVe@pUt|i?O%XCyz+y+O2) z19W+9NbXoILhlpoZYT-^;4i~fct|Toj6ogr6go!z<}ZRZEj_Ica82$XxIx~?zk-~n zkKlde+VXeaDnBrIce@x1Zk7g+Da?27D*fJH)|zZEA~zU~Sk~Zk_Z-fYS6SaeDYlt< zbE&wPB|DL_w3}$pwio{+8^}Z8J5Y!0O6^x$aqGZ?JWh%yZ-Gz58oEI20`FTUgU|3- z@?ucl{wVpa^oq%(=5Z6{>p4FIYo!%x{d_0;LRd^y)2Ea6DP3!^!ked8e-;>d{Mur)Y_&Cq|3d9JP0d!E-^bxp|=pbjP-WGW(O9>F&?)NX`(f zhx0ivt7qvZ%ntC;`%`@)R(064-a-nSsNZ6D*&<=Fn99zq07d;)ip-zoWAa|PI|W%( zX<(#k`eq%B&!Ygm)7;`n7K@-|_cpw=(b(p9>sq%nrzDSjdKaP8_KW;Tc*n+Y zr3$O!|0MHePozz1b)*iP_x8O(2ED9 zQm_`FUC;2PTCczr`3LeBWN05q!)Xsjv4^DV#0{~(v8f&k_V6Q=72=$z3vdbhh#Vko zCtQgptYd7JR!$z3v=eG?4?QsmGOHFqLZv zddM%l&xxDzOCif}>Tgj>=o`4BXm2Ki%cag5?!y6rU9QXcQ0{SI1bokw;A^{2!@j{P z+y|we(8zLKT^^flu(u8dy;_X+lfHwF;G9M>X*dx_uMI$Ig|i~{k_?w$lKnwLbg9

E%u|A{}HvqOYdCw`9oxuAh+xqHM!P#y0<-EH1pI%+NJIBCqL7w!e>7~@7dh`J|7 z%fC^pK1Mpkyxf=QBM+SK5IvfN$fV|*0 z@~UGRalvtnNz|Jn3t^k6X;OqiW=qm@;YA~V^czeTS};T5L$IA_E#Ae^z)-5QLhN3v zzQz;XyR;6jwrn-Jfo9)UM(bpBC*YC}+Z(NmYlsKh4#JDv20Q4Hs@1m+K99*sK#Z26 zyGDBWN7PfKDr30P<;k*3>?S*~ouDr>4lgIV$Yf?cJDa%?>|n2MsGPg~^4mC%}kVWM!=_cNjDZ{1I>Ai$PyPr5}j% zVV2EqBsTil`hipN)}#i~J*FBcC6tusBs>Vn(mZv(JKw)kBmts-Cx=B=-B$tIYUt=m zkhQ&)E^w;yGAYbz)#7m;Y_V>Yv$&=z5;I?oq3_`zq@O&4PB-2j=d{y=K$eJIA)oOL z_s*hR(BZNe-CYS(^^|Egixi1w#FxR|Xm-U9jGj-V9W@Id=z3zPK)dsX2n5pKJO%7U z0r#9NCFgS(K1?~Kcfxnke}($^tDSXoI-r%*7uo^r8Wl|1RCo;R!;L1u{a$C;f+Y1> zZZff(f#P^|H66ip0p$ucW~PZj$a zO*1Zo7+njSo?vpPfQic6=8YZo#2+xn9)+8QWVH~z#{a;cNAIJp(kHo=d$m}OUvFeP zY3nzxWT73mLJLz8A&rco*-}+*tbI?|4o9i2$$zB(8HKDzZLJMIi(%wKD`Iu|a$ugQ z!+gRfu9ioECax=ltj!N3!weLm4{NUpgFp!?dM=7d#9*;4v0CX3x=5v!YSI`7sxiD~ zG*d1oGRy<8)&=RI=~8@r6|@PR$;84(#7F!Y+1kGm-zMja7JNSaK_RJr!~yUXrYjMK z<2s8<7xM#K$-UC3KuLNtxm&^YcS2jNB{PRxPkjO}f|rA5T?kQvtG(y5QpGuzE8(65 z;{y)vj`B_DZRw=$&mE)hfi=X~P#3K-y$6dDZ^^~TXZQ~=J=+F4J8w|oL=AZw6$j>{ z1GG(eEYlx05#KuRhJLHz)(C5!bRX#12gF6-3|57D*W4{FOm2%bVM?kM{R3bRdKXwo z&6V29_3U+YQas9(+JBqA2F@7G3N^B6>?S#19%sz|5{2EkrPNs5oRKP<R6xjn(hd{N)tl6La&sMN~_=l-3iM{-Apk=5gbK!E+6e%DjtN> zjRZomU?z3I%HkZ-fwAZp3>MP;q&Z?Mqi3eMo(fCTex)aUlWojghkd{=<2+a!Y2X1= zj3Q*dgKvrM)xT(zi^yq77t@C2*3-DqTwj#f117=}s*`A<<>TA%#&kRSJ6z`*1SeW5 z+ae5FFPk4CQ{63WT@C*3dTFIx6g(!?#n#gSWByl^+ma-+jPGbb@LR)gvYZnen<`HX5}tXp02U;TwrPxXhP;JaiEMCd!IQM=Rjbt1gZ z*Vq*0ae`NB%GZP|lar7rZ3kvhNUY!G^k9KneM=WLM2{iDj1%QI$8q)$zgaCJe-qnk zPn1suuGVTuZGrclm*`gpSO|vb7s8&j`G=N2mThySV2&*HKYEv|gzv|eN;bbZqzs|D$ z?!sYqh;RWWS<{6N`bKQI+<`uej>4X*HEbT~Kkbp_H!QCvQkSH1;Hq(FU1*Sox+7Px z-e|hOfX3nlc!}&K)>4Wa`pbQa)5iO680telJyxqu{V_JIW!Ok*8L>fZiyJ*SppKL) zo8|4;cjMl^mhgxdh}5_$*jwM`&`fbrv<=%q|D<0kOQ^EMAaZfOh8>c-iH-0AI#;<* zT_Wy*3dZ~|sb&bzC`OF(&n6~|OW9Wj$u(O!8yYO|_%>#0;HTlPNzNPTUg$cGf8)Lt zW*Q{YF#eLMCH(5C5eS0~xS#g-YQ5yS_=S=NTH}BUOY=)(JkXlK+*JSd zwuU8{7%-bCFBQpKk#c%2-`=@u|7iL?xSQltyXLv@spM?=mYOMk(>Jj5san_?f1VsC z4|080k0#d!r!8mJjwTn<`SJ@q3Rz(8%#4K_Br#N52e7Pih%Hlyz)sSNxCyu&&Lc19 zFUr_2hN)(_4|MiCB2AX|WD*i!D(Phrx7;h|u`tR|J6h_m6ds^Z06~soP8r;Jg#0Ah ztlxcQz<7B=!dBRlbYzgBsV+6gOlPYXJQ>=p(1-le;#OEyX{;s@&(tuY8QzG-=z8iz z&o1SP!8oc88Y>l(YLW8`N?Q)mo$&8Qk@@G~KItsZ8E^7I#7=1>(TyI%6@mNy{T4Um z@KX3Hr2;?S-%{KksHPtzzaiK4=i&pQf*kHR3CCRrh?&47i|~wPF1P{9?Jh%ivj&rwD*w{0$T@6tc~|n4+;FLvnj>#sR|7^F z{&1hul;3>cR%Ea%mXOt1AWa?0+tlLJ2H)wpQAi(4vQ-L2Cz?Vs*-e=2OraBC6QrS- zs^$_tuDrpq%i%gomCc0hrZo_pV`@yS&)WmC$P(f@KjJwBKVVQh?I@sPt;;rmpg|z*P{HPd@k3}#zdC;JtIjNCx}h%t3~Znd8ywkqVu`bzvnJP6_K9Smrn1C$Hs+Jw%t&Z2lN9Nv z!M<*R%@96Bo77}>sn8tMNcy5?37ZO@IZxuBnT{cAno8{w`f9Hn-|=zWCRoZjL#peZ zDaX4eb1iu*wnD8=7RjBYMZ^!bQXysRHYee&sRqG0aI=K5bD;&Sg^yGZbJsFjSc-#+ zoK;m3r4=?z2qRy_orFjHI5E_RaWMGOwtmS-C0;%e^~x{n5R5Vrt5ayd(Zh!m?PV`3Y}tvR>F2QUZNxfEMU~A zs~}=a-d?Pm`#e!8p%8CH&7%bB5VaIHxyP=V4L9m8&mORX+QnUD`UzW&uJmhdxt2@$ z1tWccBSXq&Y)KFC=U^8;f=hE>@xC;zY&_l0Xt~> zymjfbMs4$gvdE9+40aB*PS%bq$HhVTH*E&m5VZ~6Oi!kx1%KcqH%WXfpXSDyZD9St zd84nj8LX~62{6<_rL$*`+qC}6v;})e1?9usHvyHVm1fTJ|HLFoPaPSCfb|m2VSi!$ zh;uL;R?)iEi&E<|SivC>Ms!gtIVR;#1kG~7fGB>Udy67}%IGW9cg6-ZUl7X1y6mrP z+;lJ3d6X#I1?w%`f&a3PToj!KI%RKE0@_tP2%@Hm*hx#MBJ_u2NzQMmZ3Pn!(k4gO zqgpWgshtw5WDxtrs)#G~5o!MW(f@F&y=mr2*vMc&dSEisMoiL8v58>leXwM(0ObwM zH9xW!C|X(T`0C#6&C%18CRh!*weN$i8xt88n&8C8!acE-m?42ItT7cEU&*M+^>Tz# zwO#+Zds#|Fj92f$J}QtWDt%YK!wG9c=aow_utu!KjUr-OE_V2<531 z>TeU0r2-aWq~683k4-hE(#~LPk(`$0@~?z&UP+^%|2Wd`4-qx!SVyi;k20e->3S zlk?35DdzIYLxVa z`YP8mcG#v<@!r`6qSOn0GRq756MT}*dJI<$oZY8t@>^j zOW1nwsL@Lg70ZL3d=DZ49$`b}_H-K_C(4>-3M$~esh9XyVKWmedBJAbMe8jbFifhm z(M9Byj}<%z|A{*T4?tb- zGHD$r8v$igpmX4W<%6-@dnWJ!Z>UFkhvei(OhKNbKW%@(FXjPbtvg1^#P6b7JyYqO z&@M0?_sEm#|LN&K#=#ZD?|oz1*g0~IOh23Ki$|%PBO}wKX8cIR!_DHmDciNq z;I2_$+ky7oN3^Kjj&vW5h3xql#zogoc!B7ZSVq0+>m+If3x6IZV=UEp%XC9Y#9#J{l4 zr?0S+r2z7FRAs-#{IYD-T8X=j-kyI^`t?1P1M`t`X*f5X$us|_Iz)}G4!%*Hv1if- z%Pc7JpG93yqh7^^sHMeb>N=sHK2D8*6I{Q+LMmG5M1FSpzpr1YU+Ien{y>hsumsa zlke;)|t*(N0J?{xpnnn6C z&;~Yh)UjXmwt#+NvoFYCS!nEl{TwTVAZ#(aTFJ4?z8*@J%4s`^%hYY7dguk@E6~ZADR84<7NAh$vYOEQ;M7#t47#buH24 z@R$Ya!@QHm$=D|7tdDDy9B;6#se9gmbg27-URV7W%>M< zTP01siSOStQ~K)cX3R6onhWJb<`LhAyKa^1j&?=Pc+@=$ASrg;uCcj>!|ZjUDG$Mth$c|-Bn*h1u$8Y9o=D+tR`O2Y@` z13#UaZd>T+qBk`UHX_t2!V(MSOXSCJ>%=s+ebP9kyffE(mVK|bR0f#opeNUheV~q1 z>w)V5k{nFeFSa1h(icyDaJKN9I)i45dre+h<~Ov}jwzr(uWA_yucO;nY55zE=br&7 zS-sx{+vO0$LEC-D#^fCSdMm)q(^XxjhG2UMHbzVSZeV&D(GJ27AM zS*r7!iK5gB939Z|svD)F4R>?4vk;|E6vOCJN&(R#aE+@$k5u#cbv_?=$-96~C(g;? zau)Zuen=8RcnaI9xG4%E<1eMwKT4l2%e=q_!PdM`B9O|Gx+tUJTC1-e^peL>-B6s&z zR_T}M60WSj6FH4-3QsEixoBrN{a)x2ml!I#gYB~oS~2%Y>N8N!b(DCyqQ^$`k&DgVan;cFKfzc9V*VvPz!Dv^K!0wmzhP1W+fL}`_Y1k?G1aaX^RtcJB5RP&YM~AE?Zgn{ z85O4VQ~o6u$T0=`$Qpv35!kx+6Q-he%d^Ap#1iee`3Mp1RB7Qt2=56SNF8F=Hou8-*o`+11dxf%8`$>&-*u>Xt z2{%uf01uGwRV%~ui{XDL0A`rf!4t%@@U2%U&ef@pG5T} z2y8x2yH><@RsEjUAcS4c?ExuD#Xv0A+MB3nkhC~{#|B3&WiuO^G{B9xNj496*gj8w zV;o?XA#eUw^!qjhT{W6JOOGyY2qtp}vEG_hi*tXn1dMTTiZ3$IG`6wxn2*$INEx0T zR5kcRwmBJZQ|fr;EF@e!NM2z+*68M6mo%?d27h`AP?;!Myf&cnWQOCSpJZ+fI z+Qh`Vj$&@9S=(rdU&D8@QE?NQsc^Y4*I4QB#OY#hJ=k(6CQpRWl)@p3iZYwUEaz*J zW@;K;OSFaTFRse{=C%qok+ORscxrE}UB=&|O=?^Gp)ySw?jA3?a*o;t6igSBJe!e+ z_@W~k@@zSH+K%}fcrjxFcRgyJDai?R2ktdng(>Y1OIk+N_BA&}u?G1+rG<8YYY8LV zmGoT+uX3089uqF38*+Rf75ftF+`rI&fmK4dA53d(7d$Ku5rT~K*e!jEKL-R;Oxar9u$dCrrS zQm1GEwLJTiucfR4KCYSC((FsmK!m#~e0S5UHgd zXT|-9^>Cr&6Sy!CiH*fy5O#$k221h3!Aa3d_%>g z8zt2e7BFa6&xMJ3QdfTx*a8C78>AJU3F=56>ECqg!ZUmjH)QP~-xXH`qc|~(c zZ35-9MmskN`@GNHr+p{!CUBgP;h5|Ru+91U?$7?NV7MG9wBgGmZs2eKQGbQFx8?=0 zIIuLU4tx|bC9b+V6*-NrXTC!eowdev;+7(%U2z<>Jdw*gmzsmIqp(AxN*sgb5e-Y<_iZCGXDa$*g^C=boZ*@hhlsFi+_1rfAiCkL82=ug4}3)tRm^o&If{WgB^e!EZ~hQA{Z8^!z!R zB_>>j;D-3tS;eG;0=^zydv`js9464Ku(`F`DyK6zyoFLP@RLqwo#GCnKXUylco1DD z;1t>ix{BqMp7w39$P&QYILk_!y_@u_7S_XZ0&b*(DpUtJS?|W}Hh#j2 z`f%4nI%IFQZ>H}*_BXvd^Q*gw@|7t$FaTgg)ZT{lI$}b4k(6qt&}-42cCdQV>;m6{ zB;ve6xvm&7_>^6B#9;Y|bDym~wh`~itb_YJPt-SrX^HSo&@abiIb?N|XBxbd)Fy8~ zT|wWgoQ{&T3RG1tRJ*3}hMm^o9e+i97^3s+Q}2m(UmL18@RBXBB2g8#%koqnWABYJ z&sg`iC;}ek_sT1SWqIA&wmnn!i~}x zkgl)@c2;lOJNc(7%TXTueQh%r<}<12Mn&Q~ZzAGCSQL;m9lMa-m%5Mqt6u&mYjTl# zn0A{SM-HPM);V!cu^XU`5bAj285rC-<`DL3cf2xRj8y;QdxNg|?a@8#C3lP`BOe;~ z)lFnIc-?s?Z7=qMj*>#9UTklEqCOI~G4e7J)DQY{p^n^I_|x8i-c8i;*29)6N7rwDBK>+3qcMD_Y-Q%Eof8h4 zHPF=KvN~OzjXCMk#ya|))L!hTs^Usm)g0&Ou1*%Jnpen8>T`S_@@3y(rZ}3aFSLNC z8*xTF8`DwAkmlp9kc!@BeXI0wrp3M?Lg@amyXCHj2ls?O+4b~U@Ls*A;?yIfHnu^X z#zvAk{*7F<0*;ZCe_VH{BJB|wr9@DUupe>*Ul>)F3e``;7p`yEep`w;(Vxit#~dME z(bx6(0Kv@{ydWHKtSk>EgUMssEqe>8YoI1o4;xGU%l7tb@E^H_`H(1-I;w&aOAL^c zQr97()QGI%>Je_0J*hAgWz$LEsBzb75q`51d_iOo-C58Rit0Y~k8?Nzend*#LO5b? zDMy(Ue!p`z-2(eB?Y0Oln)e@dC|#hT37=V{-SxIFs=_VF_fntD%+ij z#Cl2_Jr8ZC&2_#efu;H|bs3*vyUXo>{S(JxoJ}&ausz-h&PZ&CoPDGP)C>=e%Tn{?V$XP{V;Gk%6P8!Ho~oa6UNJK zda}7H=@~YUYHXe$hJ!eHzGVp*E$1r@lyTew>8-aaSZ|JqEdw=0bhp)V3r4Utl~Uv& zYB;qlHyM$Oa{Z6g)=(Bla-Q_ot_kvc={@q9pqadF5SLGtz|;QyU7jiEF7 zfp(SsDp&Qn*%YQ0+iHt3@fpq+@xm7~4^)$Tb3lqfF`q9Z;3jTF%p8Crn`f zgNKwi{2|Q(=fDne6I35J!FGj>rpv@!5r=`E?6V!F(8ZWQ%puPh?%alE19p*C*UeG+ zdUx)4ieYFYUw_5`;T#r&2K5!2E*g-T7Hp&uG^+EbK(Es7uM~l%#9mRMej>F)!EniCgu6YFn)b2ZI*n%lvqvNOFNuC!V+cbeLSzODTk)6^vO>26T;4m`|VO%FB? z#0>Qx0i2?!fuI3s05chWHTFj$9 zq52!0^(HXLscFedydm*JQB@zJ%~Jcjm#Lh2m|EeOOpOu#R;@AvXvf3wY{dzdt}84MB+#r+AwrSa+%`2n{@y5MdTq-3%qRzej=WEgL>H2+XVg4bQ`xcK1b-m*#q`2q54Oi^nS<+(ztGwkQz30{H- z#3yZ}|HujBe_M~BZNdy+L$*3>!rP36>POq!K-v5tIzv1UC(^4C#qv<@Lh)PtZneFb zE;rG}sF`^SiC;1i+m2nx_vZ&uzu^?%#;o9JT|(xW|FFKfhpo7@(sK*6VcHu#G@ibs zNRCDz7(QUC7`?OuJg%+O$HNGFe|0?9B+kR2ee{km0tMc%M}&{U9+*OGAj=qC!W){y z7?*yvs*kDxXRr;`r!jRSQnWsSwzvqo$tBtsa^AMm!h0nQ#6%>6_Nea-&q>F>N|+~f|k4`DFdS^CBWjG0`H zHP5n28Y(;@_qpD@R&_44d3kPRLCl&rs*RCCb2r z*ZDUBWtlXTD~mcyyPDGz=4!K?o49oh0j}i?=6tF<+ijdinvpKpJ@v0Vi{#z^$aRw} zWU}BdN-++yO{HOMqP4p5!Zs7ozB)=r&t>%;r%T_QZ;j!;dXA>_OxG}WBm7Q1vwe#D zC3o_~VMpcifkpImc8#wLrLjTABdmn};upN<{THP-@(F82<9GB?do^cS`6IShk#!9k z%m8%_a<=Y;e~5db7o0)&|5SY@H`8cq)Yj?=pO~Y0>8@kqV9=bVBVz?oSmBS}~K20J+?~REU?~JMY-qVJB@KW;g63 zP1VYfN!Utn3gX%9a6DBmc}l@+NjaX1%pd{hpp2T(@*0HbPPIx!rc zRJUqBr1MCj=nFIi7nF*0q5WR=66t|GP0xZS-Bj#6Sj1OWMjJs`zBEL)8A<95+b`}T zQG?hE%YeV}`7i|TR}RuY8LK$geLc0V_ci#WGy(7726c_?m#HWwI=eaQ|F{g#TWV>p zD2~i&y`zt(v{F{sW?z-No7%1q)lc#%XzP`ZdZTY-SMnqE-@YZb?bI>g&3x?0b#>ZM zIcmA>O58kQn7COx%pYPu#Qvh|qfDWyj+>Sp2B&7>lD@#XF!v4Cjj13f%E`=YR4|_HK8(_{n}AiY0?L61W7;}$neyH+=CG1Pl>?>hi|kAC zFF1~x9l%|zJDg43(7IvU8m<9b=!WP84G^xVGd<&l9^@SA19vrPob-@SWNJ9a z01CUu42WOHx6y(5hifJEB#@-&OFcpzZwwD~gG=L+nON;J zu>tD}_N!g3%|Rnue|8|(#%Kh`sv#(8`>nH=>Ch60b!w7Y*r+qT5oROOZyjGN6}q3p zuI3y5n$p&57-Pvi^&9z`-ON;B+BiBXxAZPvg|f8^p|eSro~ic;@LYA*ZjcBPKsP0sI7I!W)x~R} z^FD~|f%hkIaLb6y+vAefQs- zLkUS-MSR10na9XyzW&bZ7@0kR-2ywv!El`;MI*Hd@C&$LY}3~IP)3pulehbSQ-b3_ zL=7oUo2FH>pDCWe$5RBFb|~J8jEh;K&U5C!OKQ_0XrY}`4S(BZIgiWmKFG}KapJ3z67Pyo3`5Flx`iYo~ zT;}Vz8Nz8#7W>14=3O0WwEEkQ|T;IoU}CX zjOVc)j_vG`&@RSB`ZYg0HprMO=LGLJx=F8`rHi-Ksit1C%@OKA1|DUK_zGq|T!wm! zig9<){_ie*J%3a~zMJOs;3@jY%rpn$wplZi^%rZ%uU2|P=+4~&T~`XcHy-3C)?llk8}nWYT3jkSU_dQ z@5w*myaR87|G0o&iryRk2wc{7a?Q!9(s*sAl!YzDjNDbAoMkuBH-HFt2#xpLSgs>q zVr-+xSd>9ds?mA}_j06#@WU;>Y^)qzpKNUZpII5DiFRY%_zWXK`;OQNg$jtR9r;G+1%HQM*ax=C}U+cVN%MDbg_bSJ=nz3G@CcG$T2vovuzBfA`$kF@x zgL+iPDB&0LkFo;C%n&#yqGwS%;NIDVX^X0BuGyGSOv@g<6OVz|CscC_S_GbDw zs#sc?P)Q3%-A4;h5vk%QD1a-)Hk7;T^NASNDQL!0Y(1C9lrUwHN9m>55L7f;#8~~K zG*&*%pRIkI->fuG9Emlto;2o=6NH}55th=@V73U>P@Zc=jzX2zkLzc_c_SLm5QFsf z;v}VlzZ0G37!!tzyOlBO5bK@dL_Qnw`j&Z0`|{~924!YDE%Z2)HPS>ogGI9oi|Prunz2Vy_VDqwwAjiAK=$OWl%bzJa&#=P4#!%Rj)k3-z@il zZqZf%68}g2Av{s1!?uAs`bw&?<6ml{>M?(EgBVTCQu_$Kh|bPpOE}o4JMPLpTqEJhEz+CJAqaKMAY!hOP!UE}iR>X+_UPW-2r>r)ztnt~F0N>MDN{#3Us*2i`D{(LJO!U@-)nVP3 zaL~eA3w9$;;oG+R^G>oosWP^2_zXCX&I8@e?P{b@9i)49@iu#^QbnCFw*nWq{uZzP z)Y^|4?Y+n#%4%Q+(i@F%;9U7#E|gEbz%e@RnNe998$8b_L0qEeMXjOl?8mwH6#QLcc z5!+!<)R*w#E|MFkoBUi7&5e;~mB9vcRd-IK&)A01i>3E?Xlj`1@!Rnupu6X{GK(Lk zf8xqeWz1Pxp&A@B)o3A2M~NL@x#4&_=^@+QpyX^b4{Pt<%PgjcK~Wp6%bZFr)?1pt zJaw=VV~mK#C*mF|h(Wvb7#uj2o`~UpS$VwwM_e8jFJ$LCxd+()^kIP_E?;52w=MA~ zvu2Gmk?RcW(h2BBIykOc>`7}=K0^D9pAq*udle=lN*K;HvP!~C!Rahwo`rqZ zO{T!;WW3bl>`jzPTsBorEuqK2F3NM&YMx{$@R!)jH`Cu2^_gE4Km9^pskUD*f0chm@a2fmoGWAm6p_-J>d>=^2Zr(gUn&lDw& z-bz`Vh%ll?5)FBY+w5C!sS0j`R%U>o>PaN_(FJTIy$7pLzlD!MZ9dl;EgiGYcKmY8 z&4Wr8Xj)p!r9pEl4ok;2x##)ouzt3N_C~vA^i~EN8*Lkf@k(_vg!Lh%_bY= zd~N-uEd!XO{9&$as%FBmHZbrP$6J;qtfu4h`#HLi9l*-0lVUrnjW9XDQmnY*KvShN zGa2>}i`A;yI;=p9Gt$Fnn4!W`>MeK8*M;gvUu0gYkJ&ohCb*UE&3@N5g$C21uc8u)a1z|4Dw)vZ)8^D|H!lkeC|b z=UuYTNMdJF$M%6a?E6| z0QthVGgj{`tV?u%bCqwLaZ0UfW^&2+Nj@E(Pbk8ZsaF1(L__HeABFYO_JKvPhw(#w z>fE6#@>tUkP6|J?WOc99R4T95Gip(Z&M|B)d4PUR$x#;<$MO4YALME5U28IPoa_U2 z=P+u!#VckSt*B4@A*mbjg3K>)V;1BN+o2tDhU?9v8~E?gU*R{`{{mj>0$i_kGvAPX zoLdkFbB!66v^;h--Ojujv4F0j6)`F7bFH*6yx}eGQ(8Z97u~^}kGYf_`9S<JHs0Ro}Y}gHH)Qe zxr+LP50I1b$$D?uq+Y8BxzqY}G0wgqP&Ka&d&qM|SMct+7u0dMTfIph!o!8s{3_yh z_dDO1=$O3CzL!h~t|7O=+8V}#3Un>bL3um`sB2|ptL2cSx@vHpNiXaxrBG{?+K!fB zIZP+!=?|rO4qcrM|1tgE8(Jss8LBW9Y}cY!=-WVfP7`=_KfDyz(jKOlMV#U|P)``> zJ7C+d{GhjahYPax80;MALw5sdaH@WphWQ<`-XUemO{pV(2tN)cdf1%5j2~ z7J}t~g8vvRKz(L57|D#$H_@FbRkZQpNeu$e9p8z8jv@GSHCrdB?%a8RDY;@Y-CF}l zm$<5^AEDCkeY@nP=2Y`6ei}S9(|t{iH!***6o^+EljW={$bDLSB~|PTn^85`BZwU} zaIQQ&j0XkM86~5fr@#M=a$Wrmld(qJFruRKIxOLn+4fp(=6iS)Uqf)8@Co~%!CcZt15oy*0UWwC}#Dk;n*?4xO+uDe!SCeU4C z_V^p~Tkw4Pb{Jw4A_s3Xe6XXY^OQc(5^taCSpt5FM;fL3Sq4viPuZi6YNt^~O{c(X z>P>9*f-t(B7Ovf;?>JF!s|_^1^A+`M#j6dncY<|cy!VB%#8=MOByO6xB|ksmB=SEm zr^56$e#Lb)uDkV!Rt3&;ROfDS$GDeB-*m>jj;XOhRA+Y_gOXIV;LMJNkNHX1K6V}I zH2NDaxXxfIhcww*A;_g?i_l!?-XvPMW=3nrdG{WD6?2`wEH{t8q(Db6U_tYn^9 z(%D(mHvN#(P5P``q*dlj`W^3;TaZEun9pK1(KFR`%z5U%`kz2V_To2&4iIWGPIC+KQrRG~ z#J}3*f@rph(gFx%8Zl5ZAqA8C51<=96t93ZCOdnf=Ft4;{8ux_Q67}&-56d8{Nf@= zpVC@sO=Y>Yg|vz}W>q(E8tNqtxD z@PiQBq!f7oRn5+hv1$zbVZL<(?E~nID4U2K7!sm)0Fhj<@>!_~KUfJI*WUP`v6I~> z&GUZ2J}Td+#<@A(l~Fg~M$}E#1PW{bn=wCf`*&JjRyPR`^m2Z)-R9FHPoQd)fi>hBA=1MN`854p z-AX^;#}wVgC)0C%F$!&tH~%7TgS+N2&mCAT<|-2lP6-34BN5N>fqDpX&`j3HP%mkq z^*6o}KnvA3I|EE`<}O44bVE!ZOsW3$A|*~%9LzH~-M<4(6B|Iy4*ffv9(js5lJS6= zL^@X$1{2Bt5azG!OYRe9uDnc5hCu|umBCrZ6R7eFn2p+NCNAO@=T%#R6}dI3rP_n6 zL_+tR(rerL+IkCz%+c|~3i>K3Fi-ECzcwnLk~61Jmm?F!`f3SMNwhJC(*51j@J;mU z*qiI5 zy{)M)R1wYXwvph7XR4ZwRDpx|ozytPslS(JVe!U9ahQ||Chm zcf>blD%}hY(q(NL$|%36HZ?Kt0;04z%@a-ylHQYp*(rwKR~~KV`@mMzNNvM@*WSuh zb@y`dCYMI^hvNe>SE4!VkYscqRvzy>!i5=YseQ^iYGlp=Yb>D>DpH=)CQK|LKPds}i898l;pCZM_=MSGyG;J8wlhzwk$OeV zY8jfV3)Tf6shoJII{( zfccJ_ie^%)>4wTLw1qiNEL9&X!)+z@DoQ!}m-^d2+*ZfGM_uTshhN>1<2{YYm))(k zz!Q6SW*=TZCr?;Rop!z2w>Pt|ED)oqvCeleSM7u$YacgMutsHrx9kn0g(E31gpw%& z^ke>{2Q!zArr-xRl1$S_lUp1MoJ!gi&j!dw1uM6yKd6_s$JhyBum3eYgej*Y{ep2# zX^1ocoM)Tzkp6}!>&=x%)~+Iz*PD8ZlF8n}mE6V5=1eWKEZY$hOhvpW$fGMWy~rg0 zPzLDz)$R6&N~Cg-s*cTc9GCVhGgzCF6Bv(jKx@0Ed7F_T3A5VF31ox6;sXf;bKc$A zIR%>zR$KPTBN?|c52f|CQU~nMP*WHdHd2l%_0_icW4X7n-C{9L3J0h!{37>73efEk z|Gy>J#*Tu|=?+YD?Qbkr&T=l6D>hyxB&*ZO=4Pl_#~_H)@JE9>`e5Y6Uf_qY2~1-v zdt4Y9xI@20)ov0@`qU9^6K9jzipYWdYR_cM9)G zmF@_Vk&Awe^)8nHw;)GQM4+yxj?tH%ip_zQ!Oj97Q8r;XMe;UI1y$zmd8|CU+==BVg zMueDPkTt6P=?b2}^AA?e(1Ltczb>b13)8YyehLKWLk9j-7)X zwqtG4h1K{Et{&i_zQs4dD33Uer9cAqr=Ec~x6M|j`G-Vpk}iU`h`-b>em;D{hBEo; zdTh0L+5td$uUr34Ph=kG+5V0A5iT7prY_lsyKh)Wv*GAAx*Cp^|AFoJb1@(JUt&l? z3ci@`5*SEzQ{o*ftg}2DxC9;7{!u?VZ73Nv&HTlbS1EYcqv}<>PUV~FA}Hit?5`|^ zi-crlN^xnvI(9_)mFgQR7?Da0>huXPo<1=WoSXqUBH*c|x~ z*le}M)znTc!m~uP2oCQh(G{4_2E5Cd+w?QMmN;ELq?HQXlOMufawH>yW)iQKf_wDk zfdYRD+kpQQ|DaYa*yE^?-$h8v+mRP4u5;R{lh&c;RJj!B1n=n>=x!@l#%75OUduJUerrjI2+IAS-o|Y5D69ya&=JuR&_&g(bGgg|5YKT*`` zAbrPP^D=zRZPSCOeg3iz2)DWGg56v)&4B*;2AkcWz)rEXbj?_%<;yPhH}QSsf=hhx`WBu2lc1Y8mkZA zY6YIYMzY#lsA5?XBS_5?q}*452E=nMLjQz4ix>$tVVpY7S=RA|AL8)%1il)&PfVt6 zGVi7CV4OYxhFUTT3Eqsk!~UV?DT9o)Oc+hEnza<1X5SVQsdn`TSyRN;9Hr$t+v7)I zIOvRKU90h`sdb!?Qp|#rgqg4=-+J2s z$Ghy?&Re!ZiU_#LGfFMT^VIL+8}7DVMaNZZ!YSpN5@}YaM@tRSw06Go-ODHza|GU- zzejdgYQrX;UdpoKpFqQgDSzeTB%+B@XJBr^N(=Ev4>1nDC2#P9V_NLJMWhB=uqrnm zZgodHCHN_wx)DTsSHq--tCf<$h>aUcvJ@vYElaY^Q691_Ry^bCa z+h#S0xy$~H+a-k&-?c$vA8nl&ff5=w2ktO0Q5FOanqxz4`SKKrFI7-(}cf6F4L(P`u-j4JW(KJ9@wHKlvy-BZdLm?(ix7Q3@ zkjpx65q3?p-nINCezF2#Bj(Kvj}xR*wsR>x)q1h%Vh=o(UBM0I`-lV8l^mKXa8|St z3k9Ev3*u8IQ@TWqW{T#2`He#ovoRkL_p;P=-`@#RRz5snK z82vB&n>|f=Y%&~cz7hKG3spR}^00vIZoeOY&pJ)m!IZL0mpfyV;31ECcROygd;VbI@Ev^K?EuqZRtL(zEh9@Bz@!Y;Uw?D$pZAb*iGanJmLzl7{h> zla>@N;t^iRxrceGRFDK}JAa6|pLpbCPcZ ztRpQ2cR+hJ4ES<8W0~UH_@(MBxEa$yBMIq*sXa)cVRhCbS_!MwAbEmO3LZ!2zo{Tg zOZ1I|)kGR3n8BUW2VgS-lhFk4s;4;!=1x;C@Q)6$7e*rZOQ|U@FuTL<$^;F`e~J3w zsPhcW=ca%Ma#N}tHGtF61bQsqJG?ferE5g(^fl@LTM}L;wYxuDsZuyR>s76f^6-3* zU8PFkjF(vx4`1;0TopbMzvjUc<7G6Rm1F=R!v(M~tJl@SP_E z6&Qyp(V_bG-1qu-H1|v{{@~i@V7Yii_?+hdmwqVq<@)1mBj3m_cB;H-ca+>UP#WaW z#bAy`Tb^Kl(Jhq8>)yK$#)fYvr0v`3yF)k5FK)L{}uoZiXe!gFn^`=s)Tdu$wx z*-O8%)G=;amq;s}VQOzT1gEm1;S}Z|WnnV#NAL|C?e0uJCBx<2Ot6sS%~8*1rsjU+ z>oJwJhW66nZ~k!H081%2z?pZTg0r)>fr#bWQNt|X^>pt{-wodoSDGf7(_jKKk_@u@ zl-B+R)K)Fem!Yf&6|hpqC~Vr!a^?_)6DNAKtikehqo~op&S=(9_8M1{#uGQ#^8Q`$ zy?dG(@|0z1Fz$lV-4deFX z9ta_xk@l|cp5PYT-QC^Y-Q7t-JR>btZ8O2$-C0}~S=?<|PMwR~a*@#8Rp0l%&%<3r z^W+pd+$>`?;VQ=7(`R~)HRf-asgLz{;a{7J z$Xu$P5aqkd-8GT`rR!Qh2hw4Ti>oMf);oxagbw}?VrXwdF7vPZ95Iv)kIJtt&fXF+ z$=FO3w69CU z{M>)_1xi!uMM}J#&h>L)_MfAR5zXFm?_@5}Y3K>I4wvE{a2e4Tybg<|Ij@VG$Sc%417$ugN8afa_6Cv z2)Wxw?LlVTad?H%az2@hiHms}db-)Gj3vKktqNeyo3#e*OuUeLNM68y3bm{D9(_=b zXOzRcsV*kNZBnaMKMD7{T=qVP5LFv>Ku6*D%wvHDm;(JQT?jpu{?A*PW7NZl-|fZus3;Q zNX|GH;<;7q zL)?SS@2Vi&cVB06`SXm+R}U4!e7J_n7h@i($PW=K@C3spZsJ+vw7)ew4DDem`QnU& z>TsPxHRSEw>6-7+Tww`CN@J~~@7A3l(??KN-Z8dR)(opGwMV%GFX-b{pKwJj8KjJMuq(Q&mghU7 z{CRWo#?upwT=6A$hEU8Ly@m|+mXbLZCo&Cv5lzEHZ ztJc-)2kVHRv!`3zbGt|vdCMFxoeo5M!pZy3P>#Z4V3pCC*(BNS)4^)` z6$H>>!G+JRL7)T|S)au#+y`$ddx*Ok(@8q&jzT+qrKw16Hbd}N^b7hQS(mpfM{5pd z9Qx*%>Uqb||FUjc5~yiEjh(_BlJ_W+;5Ttq@QJS~&$*}jkn@u^4$Y^sQr5zspt!JK zmhDV*Uh?tJnORz0dsiTlXdo=5*x0`U$| zLZ3LBNm94q^Rr**bA2W+@seK?8*c5{h=%EtgRAXzpswA{ObZ=z7liv9bKiHyj7uQ%vN%J}QqtXUN z-qvc{|AA`3PL3%8G*1fs(&NxZcRldcrDH?PHt>pUZvM@-!n65q7NyToTM`B1$AahZ zfcm=D%4{n5MJN+@0J9HTFdeXg@lyj^$$>hq4o?&4Z%Ms{Z*7Q|tsNB@7b|6CIflud-+SU*K4@hp#9%Hon8*{3^l4m8YvGTA;LXP43LT zM@yMBZ!u%1`U{mp&E#HO!>Tp(k-{iSlKeQi9OPd|-ZTb77kN%RAe7Cjj8BG8xVk@0 z8e=^Re8l|Z^#Y7*t0!@@jc+jx1NVY9HI|-gv==Mt<3p5hnLsKi7B^C$U;AZlHy<10 z;jSIUm?oj>)^4*kaY!mB9S4Y+fPaIBF@*<|O)&`4M$RyF*QwQ(6~S3o)Ho3NpO5THY97yn%WAcC||& zQahy&q&LE3V`Q+hSTHlz5`E32y<7!rn-uatlrB+6wk$!%?4qQW`4@Q-o0a;)^=fi- zR%R4AI&NmdBK-C4CXeD`$ioZ~_e{7>PXdM5kSPFft`f)(hB0?z2Ly(}YG9U8mgS{g z?!m!(`fzjr^%m-DrP*r03Kq9g#hYB|uyA{{a~xAddQ7x|4}F`M6F5O%g-h4}((5YA z?=f7EQPHNse^$EVKX#mYRPF}_X?{41 zGZiJfC!mUAK79oL);JB`8V9^J#CtoG)Q^zDyWfpA0Kcp#YhGvru}WP=h}E{@$W}SF zG<$~_gdT{~?6Mv|k-}cie&sq~#DHGdh3wN_z%a9p|EExu*#LG}E>tdk8Rw9v#7!fL z7*mDv@SEO*S_7NdZ9%bMs`G*1w8BL?Ybado=nURCpHd9^3_7@an{8M{nPNAyLb@j3 zCLTvG1S{Zlbw;g5{+o7FA-CpX`z(E(?y~iC!Zec-CKGL>nk2Us~z1ZxOptborb$H(};OQK2IL!?Rq>rbtI)p$XV;p0E;ZFEKNiC&U?(lsEh! zp}jKFl^DBDh#|asUg!f8#qOtMy;;U9P{O&6=?D6;OY!rsqVL>rxukg!j^M_L@!SFC zgGUCf^`hPdEQcC0#eCoN#<04cf=(*QT$5-5WeaJ{O)<(AbR@$#79a&iq*64SXG>WxD4vziLelv=UV z!8$Zct6`NeOB*9lA-OA6G*sDYfN7rxBvULUEZEQ?sW9^%jm}Hp*2f<)uP{!vJf!hn z{-U5LkL*l+E_{vFLX&HxpABW@RiP*8g{AFWEozr}67@&9p>@ndVTrCCUt%?WA0t**o;YPYzZOo6j~EFHyW zFm3pf`fy`|GEx0Uex0z1s%flGZkAU^m$QyoVc;L@f;*M%?3;m!WVZM|ctW|w9deHi zTq6`T58Wik>>L8;f+L`}f2rNqDB+pRH(_pRo$THL*%c-HVdkez2sZNVQ%BM_K>MVU z)jm3&`yOZiR1aqiQJn7Epn_1tb(fBotNAX#x5ABs7ic%g1q;joEG{2n3j+Wbx@Oxo z^(f|CMh7y$_H55>Mmap(&>_5k#!%Q zN(-78_~g#NDEMnhpdxl$U*IE_(k zj8<4qCWko2S@&I&%o6d5vVUI{ZoOD8P&aM?s$g9KU)i9iuPBp?B3^3zNiQp^t zU2q!1%@i#*AA8l)O9(gqg!f|8U=H(C>!L5foT_Kgt%zJX_h8sbc*r!89#}W!DFCK@ zGuOc*RGipaoDk6TWznyMN(W|1Bk=8@29+R~V1lEQ5ylQP_wVTJ|Hr;dgfnTnM=Y<; z2;TEe5jrVp@p)h$YNdTOHKVXT9gX$hBxePk)>ZQXk>4{>90m#zoszmT12A!830K;6 z$DG4Tc#~DxJf@xy#>ubkKWL~jRUe5aaNUgyp{{uk=|!lLbcL@>jWMgjDR6CQIL<;$ zOxPqAb4P+T>Ko<0PU)R7i}jsSOFk#3>ix)xu%$UXxL9yxBv~hRjFFzQTg)+%=4*76WWK1qWQMg_{H>0I4Kh=*=DYJ}u8WB=4Oa7Q;4V@V*ou*rh2HcBK8eXS zAM*=xJ1TVm%bbZ<{azFY3Y+`5T(L5d7F>xi6A@`bM|Br-jlUQyX8tR-;sVa{R&Uox zvY*(WECwt1M>GGjnapEu0Ger}DxCICuH@`PWf^TUUxw!D3$o|hlfe&b8j;FQ2{iV; zQ2!Nw1urTzClb7}k~xZgqDA!oatfknd=8L&*>(~0iNpZR=Rt?8Pkz%GBiv$je|m73 z+Dj|N78W`tWo|>!iC#IqHrx_jI_t7~6ZS+lCXO+r%=?SL=K_DI8hL^*2J)L<;3>b# z-r|EW-BHT^h=$-~r%h~L~lsZX$XZW{j?ohQzyzcE#@h5w^) zkH)MKYXu5R$64XPIY)kSt8pLvf>ZT{BxYPY`zorWu(A(#|Lo1MbU*& z0-#;TO_HV5!FF+rGS)>PI+4c&yhhmvRv4XP+&J{a}Pf|1H zs}avmQh7NamE@{m{cz>CuDUgO^}c$XU%cRTI_m1c`kz2>{XKQXTEuJDa*$83FyB(L zw~-Bk6@{wCbu|pk5l;B>lh2bQ#Z^>GeNt#Q>1M`Jf__tJ2f|~cNlN(4w#^;}>tWwU zhrlPJBK9a87Mrt0*qfdy0%_!BzhYNFFWFz|rEi4C&?;C`sl}D4(EvsWc}zVi$@cg= zfnQnM%nI5kx*>l44+P?k7DSZjJdiA1woa<6h{D1hU^`bDYnam}yP%wM$v)>U%P!KN z2nS)+kec2>D5m(sUW0A=R|QxKS}I3i2J3ojk`+y}Qh9L_xaDe`w1ioNqVs-p zhltvyhaahy*BGcUcR zyyK=gGhrXdueMT3n4giQPvVNG-LiJcetkQ21M}El+x5hsKHX}Vn@0$0g@1KY3`vI#_Uz|(d3)65-n zI6u=DuYAGtl)0{E-Y$AQ@X^@BCQ9LswZZCWgnmH3CA3CP_A$RGxWd>eo?!1(t8XEa zCkBYM*lDnr+=h9}Tw)G$w_%p?F>qAtsa}h0OZtr!+rNiK8MU(8+NFVJwIqwM)zb<` z@6b}j_MxV5B)5gQ9w^CP#k(bq?w?&j59e!wPu|m3S<{x-E;z`Op2>>cX8>GFHh z6YY@tUB8)p6((T<&ui9Umk(}b7A~Pv{${Y zQ-n`%Ogv!z@&9JlxE;!KF@SnX)%|(K`>5i2NHp|xF4cGq{?jXED`G=$JKrlk0qzJM zvE1T0ycazb+C#O`DiWO?t6`ecU`w%?^cuKXnry$3){zzXUS89YYvk~2Q8MwD@>O$N z8@%0w7`g>N45wq?Zw}+WD(xc~a)wz}Xoe;kvF=7lvySo8?A(MU!UPj{l_IZ0m~{no zan7Uq;C#g@XKSknGgAIz|6>M?^8U|EvC6sNFgm5|NyNmEU~%!E=r`6J<|Fwr2BV$K z_5jk2JgwND#tO!z6!l-!F0%@{!tOU(Y7!i^uK}^Z^M^ZNW%8@6%3!c-JpG#~?rzBq zjI`k>|LG~`C3;V&b%{0t7?r-%)Y%jex-dl};Wm!tt zq25v|yN08e;D=dBSwnH6T5EGWUrHJ#urS@+ zl~g5R33u70Xx)6l@oCl7Rv|#3AS7_7%QX}2 z+g(&IV3&1Ot$EGtAgv^eIDcup`No%QOEOM@C6C88)DGsV4K;DnCQ&`j+@!ad$;|lO zo%q-Ox6Ej4n>mS&c~?6}Vk^TGb{4p&W3Gd%fDm%64^HJ?fD6fg(?hvBaVgk5c9Qwm ztjC@;#|hOON%*hO!o<0M`d?5?FM|zz(>;Hqj*jnq2koXwtJ^I_#`ID~r^g8brq-7f zN7Ec^gebOKA|@$}8^&oJlQ4bk3?_di8>4Ewx2lc34r0 z!`;U+#LC^NRu*?&$)pZZTg>82*?tjhJX6i9JlK{U+`mN7pn{r>hgZT&K4gMhJq6~+fsj*f#>X}^m&?8?O z+sH8uMJTTVwl>$_+$_M%$UE#?#23&BpCh&xJShC7FVfr9IwP<1CkVyu4gpJPBoEs8 z2dwpP)h}|L(O~C)aGWc~u9s!tt%hKIM$dhE^jfN@u?1Tp3{SY3pV`QFXMXRh#ScLmJM&Jnu@ozGpBX`@LNa%<@lFOIlE)tYCAj*=ALJw?eN&na3$Ie$M63Go=Fp3qu95 zl3DEepEQ{nNUo)ex>r_kE)? zJjpM{t-uF>V`|F3d=hpAuf(msCdwdsp16#4QOUJhg7)eHUr(~9>0-AbKD$e7Q$13- zWiH@HDv!|@vcF>$e?s5odkenCen!W&Cjz$a^s(VjacW`M}Z z3{@7+nJtKi@ptUnERQZ3?C_m)Y8=6sDj$%>%HF_Mg?-^23#?ps%qWn18IB zE(Iq9#)I3;uB1(jU)vVS1ar5a(yuU^v`46bna??q-xvL_z1R4hc|Rjv;puw%-QfMu zD88C82DBDm5u*RI`!853SX#(MIm9B*e6D$=8>p2}H)k5j_I>7WZIQCjH3MP~C7xpb z4Lb;rqB~}{_1+XWX7xr%Aklqa#3UncBWtcXm99h7AZG>#30Hi8QnsH{`^4VOUbOqN zS(q74d;2#x6d+_Ic8@BkqETYV1vjU~u@+8*o~nS#Rk&4QYB-g3cK_E{u( z`o)!U*`T5QL;H&x%}-K#1m`KyIvU!9}8Q62hMCKeUo zMub+|^_BW&A@MN0j{aeI^wv>A-3`uLv*B<$lK$=fk1gS-tR9GM9av$UC2MfM(uSFn zO%=C7C21(L!d$O^bTts$66><#LJl;~{Vc)7?MRx*USrG3Q@*J93dVFi=1?^q%3f&A#|XRZNM{6y^;!g8l=a!&O2tv#oX39xY8V z+r=hQH^?4J8_#Ar0`#)3E1Tke_?CokF;d}~+yuH8k)WOupA(7fRQfvnL73U~JuQ_1 ze4NpP2}hLD2lI?q1YT&bl)aUpz#6M~hb1XO$ z?9Y<0( z{?R}2pRGmM44_zZrP&ZE2Yt=?0^(6@cwftxiJhul;-S|c9AMs6SI9G%!deF1Rt(&(l34aXe(%>CBp@6W&t z`NhtaOcP_Xm4)w>$2@hVL^j=dn7)o%(b48k++=udt`)mN4lTrdk_;nKt?00X3S5>w zFVqa2;|jUTnio_83`bpXI;}KjN%mBW;2Z5XzIQwBKL z9Bwx_bRX>psV+5RxA(5NF`^eL2Sg_=4P-CN<*igRl^#nDr-)#f*i0_PIK9hY)m;ax ztaW`cACq_7dqGLZSI|9XxtNch&JFRdh2sItt`#UG;B~5Vq}E+K&u>9RKt*ACbai_- zoNB++3VT|+KVw4b2)h$(2qyBGzT&~3@HNFtxDP;F^AaF`+;id=*~B<+9#R`AkCpc5 zHk%34St0bvnx$+u{|J6m2|$CZR7~&Joc_T!EeQG&26o>BA0ME z3019D<^ka^E=5|*;O?b9)p1QoaUIJk66&ZgBJN_|2udo;4x_{T+p|l^%hRXG?b&)l zQS!IePyL{#)QHtaGfxi|N&DmC5~iBdlsj4)!N&EpPdhGJ70ltFhm&@lQ+_hTePe>> zVRe=UJ=JB*SJi;;U@u22@|R<&l_C!av`1ItSo1b4XOB|XD_*J*@~C^@60L?%(421# z2;P-QlS?>G*Jf&JhoxkHGqAv#f}QJ7-kf{LaKTdYUxbqwEE{4DIRiHrcEFNUBX7Di zM83(t(_2xKP&{0Z8LqwkJz!JKYxT13U_O-3MC1@VMR=tDrxY}1>h*$MaaKK(i{@9`FU+%Yfcq1NyDV~|eh<7*OtoOf zJfo*k0XrfasB^(7OORecQP~qSh_530-H-6*SB+k(rt0%^vZrl?*nC7{NB7+L?z9kNuFUWmT5u!jmYA6S;8XlhV=Y5nix) z_PWq;u!k!}3vT8xDhaB%aOlFwd z*h|Xg+$IUBx(IX42K*?sJ?{8Y&XIhUzRgF2#Y8gPje985q&~tp?rhd{_aXkm{vbYQ zHP;LAQ>5+S`Ihm@CG5VNMe@%6!9wH~YJkOo!FEn?8B>8Rgle*9g@xFsR~#nVH|_dx zA>5-!*&Y+Oik#`-m+%M(RBF@;Z@Md3w^AxmdlD?fc{cHfWD|D_eWTi zR^9Fbi`%at;VE3BD!~b)eI6|Yo%wXNaA=LzjG?84+V1GTa{uO5WwxZ((65YfIAPmK zrsNX(2v&s~*|gAJtF7G1$QC-_{7fl!EP9pONqYdgT0UhQy@8lbG$ivAb-e198Ci4D z049RJo>kCdjNjPnT2~s!gj@ae`a}tFM4Ydt9{jErCCbIlU{jLDG9{Ur@;mRn01g_$ zNUobufh~s?Xyet@_-k+;tt~^H48IYYWI3G8h1Jm`QM%a5^~>!&w6 zSOwW!Az%icutm{lsKRI;>Do;kH`c1n&dUl?Qka?h&1gDcyDyF z?guAHs#)0mkqIMS$YUf)O#-p@a;-7Z&tKgOjFTwZmqGQR4y(Tf2eFJR$rQwip!-`d zN#6oa{*3X6-h-BEJ%mim3=$mllD^| z1gGrJ2DPPbu~V=CG{QE(OSV)ZA^pq9j-Kom`iHs7;O$(@EtnwXLtV6$dj}= zO~hxjJ@-WG<*i5z(*qi7Uguh=myCk+_So7W9UWC~f{SDoGzo?=b)_{zSuW1uh%XLK z?Jo!(S=-=ozM@oE7+&#Dz$4Z+Br-Yy|0bxduJe}7KelRwR!{>l75FPtU7V>;MmcK5 zVE>r@-V)eB zFsS`XKaQ%aSB+&_xY1Ua8(TapJ@8IE8$L-FfaTmMwrBZ3MN60`$+xLTMGs37s^(uqC7-yZIsdrXcwHR^c=OWScAI3@=QGZ zP9KOnj_q<)z(+j~C$x)dHHC%pR=-RBjBZ;;tnOg0z09m=H%;*F&ULlU_@$L*p1X_3 zJCfUK#h5d}=O8LKo9#ms!D&;{y;Ztp|z8$ z7VD*k27d`Xln=~u#~f5Y@^#d2M-emNYEIBXZtNJLc=Ty8mwCx|tcf%gboQO}Z52vz z)w~sTr@9b~MY(LU&?M%YbslG$ziA^q{Uh6v?SyQrn=udjv%jgIgB)-4m*2)%MjgCko}zIh4j;#Lbd6@C2xAo%P?Q zbk{9%y$c&jbKA%5$*F@TGk>^)IfX10#fop)y3%s0lhqE5Ar1?UxOs6ELK76hb<#PO z$w;ct3?zK=MPEL(kna@S&gH`!LWllH`KIl1WNA<7rU%oA08xinXcd*$!)poiqZn&0 zIUM)-j)Pn7fn*0vY-yI07>q)XxmlosZ#Y{B#=-`O%(*~TbHBlN$hL}(4kpAHg^+FM z2A22>B}nj(_7ojbHsN+$DQj5hytK_c>E>AnF+@En{vF5#o9t+<1hq~Ea(^RDKczk+ zM&S$tep1N?+%0-GBmipLu1%Ar)w23)$&1HC+ooP3aMgF06N>uflN+HK+ZjDgVk)lNl96V$elPAEsPB&bQlctjmSM3mWBe+yNnX@^#gPYDbL?fB|?oVJR=3DCw#$lzW z!wGOPBRb1j+qn#Dxje{~wy!ofTFB8cS4^23>hyFc`BtE8dn88c|Fv4F(ZEmz+&iE6I zRFt3D3KD3Y?dN$coHGAHwWH>1SA3u4!sbGyINYvw3bX?iwog}1NC`}L&l`($zUA-H zP0Y&(`4lmiZ>?ErQ90B3J_r8B`_Qd%4--OQA6MSnPk+nh_mA+e@?JHcG7agc0lzpU zFb>~*dJBKc;cN_-;O&^U%pMoaf`!cUY8kd@XoeYM<)sPYXirb>I@vbq3zMf#$zu~@ zo#R8F7(-o&J?YC413Kmuwci-U1Fh7d#xn5Jcw)^8?%{vwYs9AFJ?5cR0@YL2;{Bgf z8AG=rmqk|==O%PShh@t*(f`Fg5;k^bW>wb@Vfs*nMFhv;O-Hz0)N6qtKhG>EE!UoT zDmeCVbI^T@Vdp55e6P#`;&_}nWTB-eRslWh`SkoRyp;yQal zAHhuAodg$&eR;Q8Ij5659oxv$DIQGoKQ|`JWl(ZX24}#*OrG#5bksT{RdJwQcg-ZG zFF8Rpi34(i<5Y~vpT_%x#pW&4)xFz4I8c%ALsnFtIC|v$PY$KM#B7W`q4TcFAS?FU zj#YFwak6zHVA0>n?ywQ@9^FM19DNeXVI$Xe&=9o>9?tIJStxDY{1d&j59S12N2Jm0 z-h_qb>MG-`UepHACaIG@ff?p^E788yyHfonlP!9_xQltn)XZ+-pQ&%-mmdl;zl2L{ zXFb{VkM$2rQe#cUNm{jyvDt^SH({?=e&!$Thq*+rDb54)VF56Wy2TX5%#TZ8qxL^* z3w$5QGIjC~T<0jMFQ#)0KSKo!ocsMW>Z zf=*&O-7GT-T@Ia)OQ~DQDg??b=&lL&u!C|}z)IpVdxKP;Z11Y26v2s!du&J3B%7vd z@VvE0O%OZculaSmhny3ClH5$pQVVnY%{QQpoS-;X|A%?igZY)#Doz#{Em>%+baxH$ ztrk4YTQ)@_ssAZ`t-*8+?{<4^u$y(;!O>y9KA0{`!|9$blyS9TU#MMamUs zyG`&-$$!Mw$6cu4AsIGs#c#n0$!;$B+V)*_CCJNQfY|`HO0X*h5WwwHaxW00{ zB4=$ilh`y@Kkb9q!)w}unf<~ge_8e!JITjHPq#~kdh0#R6lFhKFQl5~%{9(iLQl^z zZZI=5sW!D-UYR%1!MR3aGT2yN87j`bQqE(a_{pq%qBFJ>%21OsX5@Aw;^6Ga<2kS3cejR9t50#~`iNtN z)zSYP>|l?YwWZx!fkY)*;UeL1YZ{|y)x0jbrM59oaM74rxF9ase(kd0Ao^GC zV0YwJAN5(dNWWnB>QmS+S;bL*%+t*@dd2o2vzfk_gk$qfWyuJs2T(*{2cCYsVBGlm zZ(vB{iKmw3(BGIuXNtvRKh#%yuDZxVX#C?=N>e`GG=I-9ZF zN9(ElO?*_bcg_OyjqTOH;5%m-Bi>jYs^vc?KPN{;U3RT-c3}_Woyb_371Qi6&r+&e zTthWXa~cNM*d)mFSp_hq=tiKPIDva7bg*9pX6&3nb#vcSComUGFUVHT$%|7RzTRjx z`@nq9RTC?~Bf=V-c-b2$AR=lHH$h$Q%vD3yRw6#CdNa8aLmUB^-;JfKJ;} zvD+gSw8)Ld{ojLBE`#UNd|_p!yxiDMR?msh>tS`=81R6|Wvh8^iXY5b`ni}^>LRs_ zS|8_s3(5J_x4w4#|KbYBU&NAZB~K-LO56`HhJI`wL8LEI`o#~11H*SmE$8MP2nl=5 z0>qZg;&}SCE}ex(*x#~K&CBgz9%KelN%-CEP48e=WU_>D{#tBVE>(W*m|`Cf?tw#1 zMonXT1sh>vPgHa>;TL9FAEf&wHD{3AG4Hr@mMeegF=r}-I#w?X!$5I=U8{^~dzWfg z&3Al#GtKHB{D*si81XoME9O~`pp>;R6ym(vMrJzsGyQ|m6>s*|D+{w~`kuIEYAB&! z2GHv}y&7Q^5B3DlBdXeWy~n{ycDOl8TCV;t@oB7!-vL)yZz%^Hm>p@=5)*UF!gb~p z?xXLzYf{d9`-5vM6lgtqw^PiRN}dt^VJ@(_NaUvao1&efz`rquNB!q)$!@UDFw=R5 zoTWEV%Ag22mK9MVTS(X+nrQwI_k>L#dYIvipX9{{gi~3Z5FgWs&&QVH1vA3vLv~T? zEySFOhCIqDN>qF$K4TvuO|FlA>6 zoTCtNH~*eJCosq}O4^<(m~ZVoobb%=YqaTs((Ih$!nDH@{ic+ z&X3_fiV|lrv2;Xq%bY8)Gymk!O8O~iff;OTBBoeN*e=u&Bdg*ybCFTYKh8@kTZ|y4 zk(id-=r1DB68*=2At$qk5K#XDd8mf9O-;u1z9qy*ZL0GYj3#r<9sCWi7v6`R?5@IA zElu;8L!^|ffpEFjowVduiO205#3;+F?lvE|&*t3HEWSqWW8XGCMHww6m?@%>m8z4D z^8N+lB7YX1`$TZNtyc;!9ZqSdRJDrQkB}W)!Ob^z=xah=-*`ELn(27u7>1w!EN*>F zBejb7&e|hc#JtEO3REfm2{*&YB#P%2RViz*-ziRKUkVNFC9>`OL^AFS?L5=jY7cI! zUzN0g7Knl4SeMm^+ai>L-Gy%IZK8$xMYxZ$hgniMOPImJR z;>ybZ!V6-u@!g7|^Ce*7tNS5*B&RW>f{>ev>3H6p%H|>e4XV7UG8yTUO`Sh%A>Sa^ z*?oh-BSF(^^QW~ueGs*TStgYeC*kDwMbLylVM@jtOoodM76tzXPvj_UTZzIO(JZ;D z&?O@PkK3=YOO60>*=OQb3wOz6W-=GXUsH<8dB%70T5f{=4e~S%dJsq1*HQ9>hl5)bC zs#JH>(26^o#@EtYIwrv)mK00^Yqp%SD*HZx946dMklw0dqUc=C=RwALOdW(9vTIl~ zMJjL`wzKYG0_W1W;a=PBO*e%d=(P@PtxX+IB#MQY7dSPM%!*kz&>-;w|IFwaZ^ln% zPgtATzqwC=WRy?2gL=qc*}|wZ(^$9@iZ=60_aghc7Z~rEa^!ykB3md6)m* zuVMDmv13Z3Fbn3GJHK)^+s-SmWcr#}3Y8lA={nA7t_F^0)Nf(GWoqS_Am!0NGpt@u zAMY*_ehu3V27(}p4+fQa9!|>5`e=T!NBMR+#!AKbx$!m4*WNwW-_&r>E-6AONVWAB z!3K@5k&-(s<^?rT_`vj|ywSTeenXpoc&H(r3!bvCQFy#!J>b%r;bys5WVX{Q$$tlM zjMkjYmW5j_pFT>Q3RSB&2uo&o>^ZqEyYy z5EIkgW}g(s_e#i94zmr-&+ICzyf#*voU&6{Z|$)NOn+hd8hS%xeTesF$`7bD#2&{| zM~KbfhR45GdWxELQrhUM6ZfySLCdc%;{wKbG9l-il43Pewg~OnH$oe1rCpqGi+oF1 z%KzA9mLFJ};`DdzAK^Y(m%F2q&R5!8yDU|}_t`ds zU#-3FK1{N=63(1wpc{DN)zdyt6?McK`pNm%^UDwQcuTRLcI39zj^q3^o`{({@U$-tJr+iYEZ@bBfn8lKL;vGO>b034)E8fb zI5+zSEU(-nZYbp)oYvmeGvNxVet$MIp*STh6*adkzF^Hh@c~~4`wn>pg_!Qd@Yp$V$I^BPMVUve4e@+n_dn>P zIFBD2eyxj|t z*nF@O-r-E6pI+MezwnyYe7-MOg}U2uFwzqt75DyUHndOq3pzSTZP{}>MjNAYYuHVh z^`L$dzI705woOs@M&p4A`zzjZcLDeCiER^ctK1r88e95sDqUEx*qZQqW*O@u`-+@} z%0vvXS|OJ&%G*+@Xq4lsp$q0RJxiJe954zfWFmVFc9!1(7v@A34y=|(n_rwS)FzI5 zaz8Q+Q%GrVJyZ@gv^8Ogdj!KaIGdxxwJn zJvqnqHp(DrsaZv88Ix`n$U2<6U!04M{x$Ip$i)= z4zv!+h3QRHd)GTPkCp7Lyane4CMuJaqUtsJoY9ht!Lzn)V3@L(+yje?Cew-eE|-mt zN85uVne_CK{n%b@H+B``4g~(+A$3hV0Bkd4FUMrQ`^G8kg65Lk9+XLjdIT|0IR7>r&unxH08W4SSCVs0$xJ-^?b5A$U{ zpEKvY@B4oq?>6R3>@RJC-ho@Vj|sy$0_B+lVwn9LCDInYDgGz@5^# z3`R0t$pS@meWaQE*CE-E1=&)Gd|e&vzaV80)m$U2XGNv-BcpiT|Mh{s^}~%e8ud>1 zrh!eEhiIvb)?cf4tm%oDONtJ>A9(P{bz`*Pfdd&yCwXRFL!QPb*6FU2vx>oZA ze^%1LGhc&x+j_p8}JYxe@S=q{do)bf3U>`69KF(pXq~4nb_h!?FkDXY2yH#t5x{6pFQ2IJ;U6W@<0NbWX9S&==iddW<{+@1K-vH6e$TNuF^^dh7r) zGG#S^vN`sRF76(zq~feThG^i=>6Ni_ zG)im2-^4UwlGH*S<9GYhn|c{ts1%Be{spNCE2TzXk#Us1rRFFz3_^5T zy180VV5*|VA}5h3a9bFRIs7~oYYmH^iY^xoZ4|p$t?@cQgu2k^@0nv?Lsl}C{vavV zW*~19@8hG%Ihw&7sVg>rCYPzbqQ*0M+Is2^8L8gjWY87Qmu9i)_6O7lU^Se-MYT_8 zv-1xl&&X5Cg`mWC-#H{p*ro<0-S8eV`Z2#*gY~&=8 zSXs2T5jkoG{i9l-zK%^kI)zJS7dUm+qMVWK6w6Mt@8XL03S>If19A*QYR_vGY^(m1 zP4R~bDe;{-PW=EoBP6m_=v=Kpe}o6w;cTi{MpU!gTqEtz$(QtbPkw!#-h&BswJPBt z2Ghwxb9k*|*m|y;QZ7e(UJFISRB@~MZNx2xBL*m;mN`S@YGPvSWo9KPcb?>i;7egX z*n)&X!{1BWHX<5Xg+v{@Pj%LpiPgk6Y#u#8x@Nw>l9j1q$B@T*2TEGqYC79jo$cSr zI2cm?o^BTK@^TEC&Q${yb=umMj0Ei;0Bp+tZCZu}8$PZ@+6?udg8&WNZ#jY0S- z=`Zg#=_?e$uf{&m8dVxQ9W!2DP8G?yic4S5m1>u0m;GBT-aFS@;Vscq*o|@;Stjsd0eH0fit2XYGhf_EiMpu!udmTHyC_f!T_&aa3$M(3J(sN0$D?g&Ry0!^Hk z+tp^e#r=optU7`nBsUszKIB=I@C`1Dr&wkLmCWMrO5ZNS4xMFxm>8xS9yy`7e_nujQ>`~VZ)dX zp#&*K@8Xj%8!i#+jQ8Z#Lsj7&*Oi6=^l}SMWgc9t1i*dwPbyfm$eC2I=tg^x@$eMb z9nWC?5CVK-tXqV+(fNo6&t*I6W=g0Fw_FF`C7_L`kxcS2{~QHYJ&B~&$qDMaN{hHs9f9Y{KIyEU zY`QM}PKHng+9U5nNJB{jk>+dKPRA=yZ+-#(!Y8XY9GjsHLf417UWWD-juPFCLa+5e zsIv+%vdOW@Nt?2X4sQ>#od|M-+iY~D7HTb1T~dHOGHRUk2G+@B>51_UIbYqQOf_o6 zUo7bjx2&(s_o*=R4@jE4w$_Ae{*#cWwySzBazV`2?=v50x5b`dnz~5eD){VA$y-dm z|A;T7^i%9BA{37!_NvdB>ya(iLy}D$SihQy(0-sUQ@fNIu>Zda*S*E8o9o6L@wte# zklH?j8sQG{4>PvQ0mAR`y}@`ajL%V%lLiT0jVtsk^Fh4|{UK6U%UKkj{d(bt*=LcH z^mb_?dPg2>>P!q%u2U9GRKN6eK5FA;v-LGs*u(Ia{E|A&sP>KAqS!W4rsh#!s0S0D zXbadDonn*y=~CUkRor=XJU&H8Wis#({epfU8qPl>YF-^oQ(me>L_!EvUZEGzY? z*~f3mI!*6|RbVKb zv+1qACm;=gdZoY&?T@@8K=!w{InaL@7q1_-}F6nwmgR!b>NA8 zcESnbi857drboL_K17RPyVngP+vRQXkNCalGO<-X5;sX0%luaJntWq^pE?GsEW8DC z1yG)P6QAx-7|2fa`Z0{OYkkm{)CM72vb%d~OWlR`Mba6}!~LvNs>aM014YU(cWXxH zv&{`VAbBd?hTu8G3hK0BlT*x5uIHZa-d5^dOclk#|9_C6OU1NbtCD)rS$vm-EW%2A zR7P5Bb;5pKE^*a7(tW_Y#lvd3R3UW&oYnp#9p<*!7g3w*vvnPI9$q=p&G|@?QgWc5 znq0n~7?QFIzrpg#K^06wRW`-&Y`VC6-e{H#1HU4l7qQx#Qxe;Zn-qlcSb1zw}@#VUCmGw-&@)# ztW@E>K);iC$on_BkGiAzrFTIW_C3&KnWE2e#447kw_&C{RVj2#)xz1m#twn22mEN_ zSKR{A_m;%XliK7H_KN*}q>y~$eGTp9{T*qhAee?cVPUi?-*CILfdvI}6L3pqMh=B( z%^=e_=Q}&Jn7@J^su@U~#BbVwd{f+k&hww4BP@Xy0ahhx^uBx0Nd!6Caa zCYYRaPQ#FM9AJPUZhzmqyJyetU$FW?I#qh4QmDFh?{jN@>5Vzo692uesFXfoQpzYQ zc}n`|)X5uG)JUE*eCU+Xsl$@fhmW5;VN&u`cEkD&<`tFy6E-<`7&3DBh85M4Qzr}= zmONt8gmKA3XQU6G9E@u5p>&B7^Fx+ZNd1=C`rpVg?ymKy`5~R2l?v|Xq?IuDtrl!@ z;-m@b6H+FmCQltcY4Yd^C;t zlSj`SJ~^$_oV3#BzM;X&$)hGrN>2;z5Yo3)urzvndRmzdrTYdOFOfQ7{K&Mj9ZFA` z5^U4lx9oof|L2j@N~HYvD^zGZBy~iO|I}4TE7`YvFeHIa;8}ro(rF=m%LL0QQ-%#m zq|-`uDiP8-J*{-N;JpT>mH59xOAet*gam_wTTL`N_dUAFt&g36Tg$`tgt|)#1Fc#5 z8rNn|D=t>Ol2FV_S{-^!;umf|`l0ny??6d(3)RpK^{0J0EK4Ox^Y9HZNjP8;*o&uAz0LFo*(doDY3q94;?x{v9OM-c&W zxG})gLONGCGim{NiNXs~Ks_!6U-l1FH2bVg_tf%g82dta>7A;4h9?zH!o}Y}ia5yH zx!^TBhHXx_XEq5>!5w0xKErUjZz9(6D_7ND6iAV8D0cioX#f`Ri#?UKnV#@KQfzo2 zkDBZs4P|Y$dc%2}ZHw;dsjce+57oPpAoQZ8R7ae` zOlJl$xAa6JUOFm2qvk>6Q_XkvI4saj*pg~I*WNhpZSJiEtD^{Qo77|DR&Eack{JeH z+w$CB@Oyn+{7w5A0}_&2(UPgobL=4xI&Z;y#4v`$BjiPJmbMfPO30CS>eJ+^#+%Gj zwBd-%3Flj~dzG`Qn;WYBV5ciOdn@818Y-Suo9a$(I6W3CN_#TF*(q*3y_V_fzK^M9_Iqc$^)5m%W_eK%8w$k30 zMWu>Gr_n#<4T(+2P__%0aoM2+>*?OzHwTt)(c~85iEkffchHr?X$*!~= z9-+cOpTc%rSMyMLwz)png&F4`tj^%xvX!-qg^ytcaWJ<@Z-U3bQ=pL%4QJbPt;I#Q zLSQfQdFV#@bw5g?XDhwcsHbp!T$Og0rH(y2AZB)5ln1Eu%HJ9gThhYcd(sGiEo6p^L;d>?^}w zc$&K)>FO=Bj322nJNrQ=U0!aZ$N10LW-#-Zf5nsH1hBXKGf4mzUWwSoLuCr|HT3KSDe2!u*m>V}0Ix^L)EqC?3bU@Y1Y z+;u3qXv2~f6@xIBIy@ykh;l(>t=MJKu;G)24{JF(B|Qk1mhKzUgIA3TF^>vu@gesA zQ{ZHIIspj0@c#g3jsFKY|99wr0cVZ>0Ou{~40x>mU0}v1kV(tiBgV`ns}t@0VM4l* z!S$_MA|Y(&Ks_ls(b*w#npln52mc^Cpy>(s^(xv*aGl$#W^k$ay!0>mcLa}K(b&{b z^XspLQ|uA$GaW)L&{MZPFMMx=<-862qD{edY%j$JWPEmV!ZkRREr*-ZRpD=rTyHJU z1LC{ZR$FN-5yr4RwKhsCzLvVssHI!fvPxrdopO$P4aU3LQ+uU-@CXBo=QyrWcg(D0 z%X{PgOh^-- zjR%vTMzh?gN+U zLi|>(hzO=8F(u-Xe2jXSeGF9BN#}AYPczxy>tRZNkY=u`H02I?uS8XIjlsK2JsXZ9 zE5og~xjosJOyk*DT=C+73c$RDU}Y+3raouRi=rh;VqB+H+C57T`yLUNKV+~<`0 z)MmI&=x*o4aDJ5D3IfLyDO8PdU!om)0dMt8l`GQY)XoaaH*!AL{+6HNW@st=j=xwN z$R}2`f#K%X_DYu8Vhlb?G?tcvIR8qb1gOSTAwrqW!~i zbQn!xGV&vs3PMwjbXS2@m>cAGb6KrB@yEWrEYe>ZvYYv)4Pn_q734|n9>i5X2TZMO{J8{)9@98QQ#HpUL;!>^L_MY@~ z>9aD+JcX)2kI{M=^KC0~WyU3N#x4H{d!hJ>iRTs*hvnPxW+qt~3u)X;PvUNyuW-MB zRoca9xBWG~Dl!!}`VJdA3SJ@~nF-o#s;UgtJ2+0;$X)9TJbEMgrQTmYNAtcUpT@DFH-`p8tVU-Mh@GIO9&Br$>ExT>~|{TbJQJ6lkcu-V&=&&Sp2 z{g4rk=ZyE1h}nwEptc6#Xi0z6I>0v^sctZa=rh%|l5g!eC4t?+pCR86Z(s#wC()uf z#_2BTEnP8|Mp>~0?>;ZB;9;4N8EFkJx>xv$} zj=q`*4LFGmITy}{pXCVWMO$e&vFKr|a$J96oPRnVL;!fg{)Rtjyi>2C(ZXtYRi8yX z(YIPlBHcaCa+&K})P|dnKE$0MAIMqiLoGtyj_2cL=I(luaKo3RHN=bMG9GWyM|G(9 z5!B*35IOh>7fV~UwMv9?n)H}6$eG@e%)s~sd>S6&fJ#4fkt(Hsk#2KSl*8yNTbb-< z9TNG%IKX7n$4n6g^*Pm212gn^PkB5t_BU}YubaMj=QG=E71%FvxvVFAAx%ZbIu3;Y z5LZVPMEsTaXW{a=YH*L^n};y(0tvWC>gSk{cSSRyZ}ciH$?Hs@JbvRZ;G1YDua5EJCwOxKY#C76Ie(NhzTSAmgdkqy*~ai zeHpD5wulG7Lv{fy=e@2jq-#j0Im%HUQOHJoAsV__@`gB%DaZC!CeROBg==RVC*!~J zBN#xRiyvh1vXtpD9;qxOj~Z(5Yt7$JkT*zo&T(CZ*o>`k;wsC!-jzm_`tuEjs| z)Xsm2%EwG~Kf=5>-xN<&;C_M8dM^8G{1C#+@6f;KHED-fmFvk4bvG{X68-5+YAN*N zU;N*gJ+?aLW>ihM-#Ux2={>zSh;ix-Cc24BkHVvh3ug3 zmbb#QH7_Y$YHo)0?OhxF#Wu(F`QGX!tT`?-BAB915|;DzoF--_u~?d9+(HBJMy?z) z&AXAAKrV&fh)cWg^H;!7aL(TgkMlK zclyNh=vS$pZPUvl&ueiZdh&}+vIYeWKQUo*T+xBl#Z?u>B z9Yla}ft8jyQk~*dkRD$%`UF(@`o3_qTVKr|iZWAMa}N5Qrr#2h_`L-o(MPn4ya#1y zCFKW16wZhX(HHPhMbF_f{XW0WSJV7M`CaM=u2F)wng3x+Nx4BvxSHj@vI*A!H@GFZ z7ym1L7CePWouM&kvwKzjm7o!^1Dy7!+iN4m`2$STBd96Va?Q|7`mwdAT*Z8ZYD^5q z=V6MPi3jScT%F#D){fIR^q;bqe?$`M1lQ;~!)ceE$+d=mTXWreup4c4 zev;?X2hlCA*3RVxb%@eJcV?Wa5p~i!kAEMSMVBc&s{N(RD45ANQ$M(#5!)Ob)5KRg z$T516rR716zY8s14@HcTqXz8eJNUf-||*u&M2_DcQVEkyJ(8 z11ANdK_g*2E@cc9zpBeI%KsuXm2cCl*ggcX-rIT_!?;)R%gyKPiBW@Wpz=-T4`Z9v ztrc^9(OZ5nSCUDweZkpGO(?4>xe>MYU1sBb6@|9y4J{9FI0QE)HpMR^?+`Ct-5vK^ ze#F)Id7xQB3fq8PAgqi_Vxzg|`TJlkDbn8*gqmXZ4aPm$5L5{w{kb-jNijVP>|(B? zwn`R@xQdiWeTi&Oe1#ulJK0z35_3lwglqF3)JXD}d?Dc*UFm3z=>=;-BedViBPt_&NtUxMYiuzDJcjbjIa?i4F#5qhW zT#xR;&k%CWO$1Ri(bedAY!q+=d&LGRK{#S~-Dki99eRG%$JTkV#Lly?~i&|>_YG2Dgz+35$;vso-ZZr{T`i8nkA3(?1kItj9eT`1iZ)`&cVcsmh zqDO;J>|n#OS7!s$8%{DW^B>rLLVLuQ%J;$_+~l3r&@0DFPALN3^n~+bW9?sjhfP+$ z1ujMxs?W56C?1|fHu|vkPW{|arVZy}QxkZJT!`vtJ{9g*Cd=oU9J-b}j4w-Hbu@#= z-P8SF)#ltBzCM1(R3e?onR607N%KvYTZ@#8fqx}5q;4zwVAAmIY5`evw1>a2{Pql(22I> zzOkE(-%UGWX9)?;mGnH#;J)bns6+at++SlyG9%b`LE-#PJr8JlqB#d2Kr&z3Plt_; z+E6nPxdG<6yGEAlvKxPzPHxP78Oj0)Yk9n zYp5mS6B}Y$`tFJsw3z%Vcyi!8?PV9zGYjq;2ONX}@FDgATnA?f5p14%$Xg84^Ve!t za9dtOhm(DcZsH#2B+mic76|y>J|?HHr8@T=jHC|`O^Il}A0BM2Z$E?jdH+TW6I|Ng zXrJr7;ABsWU&s>NYr>8v@?+pvU72xnrPDIf%w=6`1g*!t;{ch;h7In$MLwh+9~ ze0l3gc$>N?cP@pg(!m5@F7SmLvVmL2M?Gu!9;BJHjDvPY2tXQs%)-rhZbN$j(Q-cCXUOQrU`Rp~w_2G> zC3z(Mv3}dt5ib(o2mkRwy1qYJ?B;$EVe3{>(tf1|c3PLNnq6?V@zh0$kwsahZ+Z>{7@&5Y+%B<_GxU>&BPv$6S==-b&qZ)9Bu9_RN^ zs%<&Uyde+q zqoP)XZpq!55x$*)KbcFeZdgP0^pe)rjwcc2=r0Ae#6r%$ccb$krjPv>{x4=NF);c8 zE(84b=KR0b5=DPYSJ@n;iSVl&8F;$Q?&|^{LzX|FCQ>fZqzyE@Oy9t9hA0Ztk14hB z95O)v#>T1hS{ZaTVzK{YL0rCIGz@fNw%`puM%RR<))4Y}H3pR+OI}x-@sGt3mL~KDyeO)-`b^FDmvkK2Z~~2JU3W zI_7{Q@$Yzu2SWgk=MD5d{2?xDKwQS>JB6_KSE#63c1 zQA2H8q{eK674UlX6cbICR%>w8<%V(1!KSDWe2(i|RA+ENYA3YZFvZe8zpU96h=G-v zJ9H&}JeVm?!;qHT7xIr2`!KKgxCKlLFt1fL5HC!ztOga$XJ|#dz<%JnNORp6wB~$) zQd*U%-o?-9lbnLy;f7j>`Wj5q`o?yG7Nff?aRj@M`r#|~Tw_P;Ia(|Bru_uhUft|( z9}z1yQNpb?L4r!?(@{zFpS8bC0CDmOa2rl@k+`H)@nohd-uN=1)*n z#FzLrL&YOYYhnXVG&X>S;4pjI+u1)>EsMKzl^mTTEAxW_ZoVQtweTr*0QRFlf$RQ? z=#?0u6;W-dO^P5+0GV7(-xibvKDuA}LxJI2q}}to=!JAElZhK(pCdh@dnHZ;BlS+s zO7sXLlPG5MJ({_ZW0{bZy}e*9GZeqo${Kgn&T=g_Tf1hhYYf2)#YTJjq&@Ir+=s~#>mgj#awraQVNxU@w6|(Vt zBComn!w+;kn8uB^4<@(9`_&}qR|IDZBv}LSELq#NpLvr_I=9!$Gc}{%@iHz!{u7yKx&_0s*qIn(r`?bI92nN9CN(Ow*j~OLT!wadZ7t?3r^;Ms)Xjo=MpZ9AI;&9!nWETHo_Ps^ ztGUwHUpC7vi4o$9{U*3QXi8Y%Yj?I<39PpEz_r~=aDkEGz34$q6mkfC>;YU=?CN~w zd%>+|E8*W68;*dpSf(Ib>xvH+Y>F;N4n{J54)4kJl)GwUSG4w*jO{@)!)2jH7^#?s$+!**n>_abRyHj)YVdS3NbTHnYZMmn8H1;!33umL! z`e@~TA;BaVZ(Wmx2lSDG&ueCBU$9Qh0FWMqRUw1`wTS!!|)jCpXewdM-3C3zzgy( z=!2eVv=W}?K0(8k3~4*KN6q11+jn>$!Sjg2>l|O?!Dyy$7oEDFHp$(&-tFEA(l*D{?w3W7iQ(Rg4vWSW| z3Ju-MtQVOO#~Ajfx|WReE;5SsY;}&`;@ZN-&e(KPI=2Yl7*`UrR1BfCb~nkIsRjMH%dTb=naH9V2>-KPh%qBEB`ll zw^%vuqwHobXy5Tp^f#TN)ncauKL0RsTC!0kJQ1BH82zOX$Ayw#V~f;Hxoh-Q@(}uv zeGC6@d`o2>Gc{1rcNZOHNPdOCIa305bcD!$Hq^XcxC$;6deNVFvh_?>xXJDJ2qE+c z`jIPEe_*=I7julbkR8F#qhr|4;1tYu_l3RKB4sSKR$6WQuI}O|@^ug+?Jg{$HBGm^ z09AsfZweiTOUl>z9fc|2DxYpF#myZ&^IS$j4)IOQ1#{_gCeCu5_<)|%9i6g1)|y3j z(Vl2eFhy699tN51V|9hLdc$(4#BR3KhavnDwxx81U8VZz4#amjO`L7}*KWzXtYPpT zG7)#lc~QKPpfBZmxn3&G=xTxSID#!;9{H9lo%PdFJp83#IeWd;n!H;~oZ6VF0{*l< z;wo|jK{-cVbXjdG-OUtj@o>@p7owkEhWF z*q6GiU|GVy;SJe~+$HUY?F*W%rP1M)x54vxDZ5|%WW5(;T!+;LdINP2>gH{%uaiVe zJ8Q07JICc8;DDx@o)`9|Vk~xn6L2)^51cmHV6WIe@cTj^?b0T>Y6?HK%Fa%v&dgO) z6z*oT!8|aHKFl3QL-{^|l9mG?3dhL__@nx#JC*3XkR`v~YY>(yID8B?v{1sYQ{sQZ9JXb$#u0}Tx`Wc_~K~k4ry0Lw@?e=>4 z4FWOzu)<2%gjZ4?dn3N3f0=v;OjcurHrAf%8n}QDYG}HdcbD@#v1r#*&|5EOY|~F8 z4s|1-TtWQ2a~Rh>F`Y>b_Kj}JO06j!OKkD1Cnj(t+lBkU9wQ~AioY+SWG_{VyspO* z&-_c23*nXaOmumJS)(sXZRxFEfz7ga2`ZXI7v8zp*^e8ktW-z)8xm8E{d_y4O>QFB ziJeoRnz!dSrMr0&&=>znE}QNj&%<8!EayY6mhBBUl5L86!ZCHD8eIZJnyJM(1kvqkfgtgH}<~8QC?68Vni&@2-hD-Q2zDR%H!WldR z5wS^#jJv8##`EA=I7ePA`7P~=h8P=-sX4LEokBHE7T33`M>T^~(H_xlX=0n#AZTPU3v=cSXGhv--P)2L8+Vo;fW zbZ>>drCj?D^qcKE--r0q4?X8lmYfcPBc4g-4+JLZ-JOkzRfTnMXUQABSa?%7U)yIs zX^rG$`XqRW=E}cH&(K=A3jKoXqn1;T2VCmWEIam-!DTe@Ci-1$T4ty(oA0e(3oFeG z(jLQJQfE})s|P1)h;+jQn0 z9$*v^rE^@CI7|`I4V&S0u&mIG|K>AM@dekJ9POuk0vr;Tql#!5O)0x=b>!BbZ^|pW zKOCTBY3tz|SP5?r>Vt`Jynh|PMV^Dwm@#m%*x9j7_pqb%1`$7DN9q;&Y3a%qqEpp? zDHW{~lJc868^P7`KKnQI8n}c?a00doeGR(SAz^^$E-?~XjbXaOxJpjYJsMjSWxXZG z$8VE%iUC_`<~r9rp41M3-u@)v66v#4kNZnzgY1UJJ7~ldt9OiL`Ng1dtP^A#643)@ zvybTX9ZRXl`b|*6lcW-41hrW00j~HR?s(u)SMtxOjT$C@(2Gf((%>k5B=f>BvvQEP zjyKk!hHiI;2S@JSdZ z#xq_#ojj*6(+~S%_WViPgvWBB=ea!3sL54jOC;oi`j(Ng)rC{UHF0E~;;%qY3p%)@ zepI|+9Yc;%|B)_AKh4m$)+pouS9nZM^^KKZ(03eDsXv5b<}3YKzUZrjkMQ%9%Gw-p z0domt+6TG=iPOz&-P8Fmnf1Cze6wTO>wU9-!3 zuc`*s!I5BRnO@9UF`qoXcO)39e^GAPO9;P!3QKiS zHettPy1iZp9Scyf0a+&h1pUnZNq#PE$4j+}a3}wl9cj0%%h^0;zB&P<*m^rcU41RH zRZSni&f{A_4l_CjJnmJ(jq3pK75+Kgl+$yq^JMK^V@#%V2-@3Xx-dSfa2g?;#&@(qqcht;Q1jrMi22_VCrso$}Q>OP`L zZi@Vz8LoHoUkv(ISD7@pnR;X|Z7^`Puqw!E6PQYdH@Z+?qy3;Nt1aLQJjB*So?##3 zd!wm_FE&7oQ+j$n;GOE1hNXfdxU~2r@KUhi$@v*_P_mh{uQbk5R6E16KZIlle0ja3m3|R8qH(Z2eSEA)-y%~c?p=cVmg`} mD(qv=v%9>=*sgEUKg$1W;Z*tmbK%s|QI-Ga;;2O%sQ&?}+K|Km literal 0 HcmV?d00001 diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/resources/lip_array.pkl b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/resources/lip_array.pkl new file mode 100644 index 0000000000000000000000000000000000000000..61fe803f2326624d775674a72e1318f57577d5b1 GIT binary patch literal 658 zcmV;D0&V?(1eJ#Z00000004{?Zgp*Nc`jpba%C=Ub!>ELVRCX|d6bL{Uvgz*Z*FsR za&=>Ll#`T<1#We1aCwxB2X16xa&lpLl#`T80ELu80b-Pglv0!^O94v(OBG84hm>do zj0I$Ld2nTvla!1CW;m3Ih=-I?lqgFBi~&59PEJlr|NsC0O8@`=|4RULlwyfO_yGU_ zXJl&hWycu5&$adRjlVBHN<&#J$OQ$zJKqEUQCBNJQdDi9q^v$aZJ}h~E4%7G%QLVC z^HddL8 zdp+GgTJL>|*eL@){4LEY{no#};&edbT`SbSE<+Plb=TcKem=6taHi$H1T}y?tvJpX<^-HH{ydL-40tfQCCMX>u76PqgPs5g@DGH&8W%U zXvVgKB-?gFLA9kP6yHliAbB5Isc9IW=`>NRN0Xx4U?E=Euc-Z+$kle_-5` z2&$E=c>Na>2knpj&47A>K5O<|33JBskZ8~i;lNq zQ+YohxtG6hYD@giu!kPM6||kH-rB5OgunmkL~yT+uV4xbo0^7b1o8X*NzX175tnCX zl10|>0S?D8*_=I=ZA04IU9QeHiNziTrqPDbtI)cop~2EO@fWPNu|rxi6C9snqL%v`K-#f1Pj0@icF}qvkQSH zkB*lgDZntjULG5xJcZYLCH1lt?qL|OcPYAa!twF0&Ea%T1OmS2FAiEqH(+BcIM-}8 zdzbi~j}~Hg^ll;?CPE=`rpP)vfXfv1_o%(R7~5QpR1~-gf>7p{Rfvs&y-QJhW)Rza z6%k0@##7HC>joP8dk8?e4g636Ym!yH#brE%SQY~7w M)pb?FmDg_n1%!;u`2YX_ literal 0 HcmV?d00001 diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/retargeting_utils.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/retargeting_utils.py new file mode 100644 index 0000000..ae2e5f5 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/retargeting_utils.py @@ -0,0 +1,24 @@ + +""" +Functions to compute distance ratios between specific pairs of facial landmarks +""" + +import numpy as np + + +def calculate_distance_ratio(lmk: np.ndarray, idx1: int, idx2: int, idx3: int, idx4: int, eps: float = 1e-6) -> np.ndarray: + return (np.linalg.norm(lmk[:, idx1] - lmk[:, idx2], axis=1, keepdims=True) / + (np.linalg.norm(lmk[:, idx3] - lmk[:, idx4], axis=1, keepdims=True) + eps)) + + +def calc_eye_close_ratio(lmk: np.ndarray, target_eye_ratio: np.ndarray = None) -> np.ndarray: + lefteye_close_ratio = calculate_distance_ratio(lmk, 6, 18, 0, 12) + righteye_close_ratio = calculate_distance_ratio(lmk, 30, 42, 24, 36) + if target_eye_ratio is not None: + return np.concatenate([lefteye_close_ratio, righteye_close_ratio, target_eye_ratio], axis=1) + else: + return np.concatenate([lefteye_close_ratio, righteye_close_ratio], axis=1) + + +def calc_lip_close_ratio(lmk: np.ndarray) -> np.ndarray: + return calculate_distance_ratio(lmk, 90, 102, 48, 66) diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/rprint.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/rprint.py new file mode 100644 index 0000000..c43a42f --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/rprint.py @@ -0,0 +1,16 @@ +# coding: utf-8 + +""" +custom print and log functions +""" + +__all__ = ['rprint', 'rlog'] + +try: + from rich.console import Console + console = Console() + rprint = console.print + rlog = console.log +except: + rprint = print + rlog = print diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/timer.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/timer.py new file mode 100644 index 0000000..3570fa4 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/timer.py @@ -0,0 +1,29 @@ +# coding: utf-8 + +""" +tools to measure elapsed time +""" + +import time + +class Timer(object): + """A simple timer.""" + + def __init__(self): + self.total_time = 0. + self.calls = 0 + self.start_time = 0. + self.diff = 0. + + def tic(self): + # using time.time instead of time.clock because time time.clock + # does not normalize for multithreading + self.start_time = time.time() + + def toc(self, average=True): + self.diff = time.time() - self.start_time + return self.diff + + def clear(self): + self.start_time = 0. + self.diff = 0. diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/video.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/video.py new file mode 100644 index 0000000..2e34e6d --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/video.py @@ -0,0 +1,218 @@ +# coding: utf-8 + +""" +Functions for processing video + +ATTENTION: you need to install ffmpeg and ffprobe in your env! +""" + +import os.path as osp +import numpy as np +import subprocess +import imageio +import cv2 +from rich.progress import track + +from .rprint import rlog as log +from .rprint import rprint as print +from .helper import prefix + + +def exec_cmd(cmd): + return subprocess.run(cmd, shell=True, check=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) + + +def images2video(images, wfp, **kwargs): + fps = kwargs.get('fps', 30) + video_format = kwargs.get('format', 'mp4') # default is mp4 format + codec = kwargs.get('codec', 'libx264') # default is libx264 encoding + quality = kwargs.get('quality') # video quality + pixelformat = kwargs.get('pixelformat', 'yuv420p') # video pixel format + image_mode = kwargs.get('image_mode', 'rgb') + macro_block_size = kwargs.get('macro_block_size', 2) + ffmpeg_params = ['-crf', str(kwargs.get('crf', 18))] + + writer = imageio.get_writer( + wfp, fps=fps, format=video_format, + codec=codec, quality=quality, ffmpeg_params=ffmpeg_params, pixelformat=pixelformat, macro_block_size=macro_block_size + ) + + n = len(images) + for i in track(range(n), description='Writing', transient=True): + if image_mode.lower() == 'bgr': + writer.append_data(images[i][..., ::-1]) + else: + writer.append_data(images[i]) + + writer.close() + + +def video2gif(video_fp, fps=30, size=256): + if osp.exists(video_fp): + d = osp.split(video_fp)[0] + fn = prefix(osp.basename(video_fp)) + palette_wfp = osp.join(d, 'palette.png') + gif_wfp = osp.join(d, f'{fn}.gif') + # generate the palette + cmd = f'ffmpeg -i "{video_fp}" -vf "fps={fps},scale={size}:-1:flags=lanczos,palettegen" "{palette_wfp}" -y' + exec_cmd(cmd) + # use the palette to generate the gif + cmd = f'ffmpeg -i "{video_fp}" -i "{palette_wfp}" -filter_complex "fps={fps},scale={size}:-1:flags=lanczos[x];[x][1:v]paletteuse" "{gif_wfp}" -y' + exec_cmd(cmd) + return gif_wfp + else: + raise FileNotFoundError(f"video_fp: {video_fp} not exists!") + + +def merge_audio_video(video_fp, audio_fp, wfp): + if osp.exists(video_fp) and osp.exists(audio_fp): + cmd = f'ffmpeg -i "{video_fp}" -i "{audio_fp}" -c:v copy -c:a aac "{wfp}" -y' + exec_cmd(cmd) + print(f'merge {video_fp} and {audio_fp} to {wfp}') + else: + print(f'video_fp: {video_fp} or audio_fp: {audio_fp} not exists!') + + +def blend(img: np.ndarray, mask: np.ndarray, background_color=(255, 255, 255)): + mask_float = mask.astype(np.float32) / 255. + background_color = np.array(background_color).reshape([1, 1, 3]) + bg = np.ones_like(img) * background_color + img = np.clip(mask_float * img + (1 - mask_float) * bg, 0, 255).astype(np.uint8) + return img + + +def concat_frames(driving_image_lst, source_image_lst, I_p_lst): + # TODO: add more concat style, e.g., left-down corner driving + out_lst = [] + h, w, _ = I_p_lst[0].shape + source_image_resized_lst = [cv2.resize(img, (w, h)) for img in source_image_lst] + + for idx, _ in track(enumerate(I_p_lst), total=len(I_p_lst), description='Concatenating result...'): + I_p = I_p_lst[idx] + source_image_resized = source_image_resized_lst[idx] if len(source_image_lst) > 1 else source_image_resized_lst[0] + + if driving_image_lst is None: + out = np.hstack((source_image_resized, I_p)) + else: + driving_image = driving_image_lst[idx] + driving_image_resized = cv2.resize(driving_image, (w, h)) + out = np.hstack((driving_image_resized, source_image_resized, I_p)) + + out_lst.append(out) + return out_lst + + +class VideoWriter: + def __init__(self, **kwargs): + self.fps = kwargs.get('fps', 30) + self.wfp = kwargs.get('wfp', 'video.mp4') + self.video_format = kwargs.get('format', 'mp4') + self.codec = kwargs.get('codec', 'libx264') + self.quality = kwargs.get('quality') + self.pixelformat = kwargs.get('pixelformat', 'yuv420p') + self.image_mode = kwargs.get('image_mode', 'rgb') + self.ffmpeg_params = kwargs.get('ffmpeg_params') + + self.writer = imageio.get_writer( + self.wfp, fps=self.fps, format=self.video_format, + codec=self.codec, quality=self.quality, + ffmpeg_params=self.ffmpeg_params, pixelformat=self.pixelformat + ) + + def write(self, image): + if self.image_mode.lower() == 'bgr': + self.writer.append_data(image[..., ::-1]) + else: + self.writer.append_data(image) + + def close(self): + if self.writer is not None: + self.writer.close() + + +def change_video_fps(input_file, output_file, fps=20, codec='libx264', crf=12): + cmd = f'ffmpeg -i "{input_file}" -c:v {codec} -crf {crf} -r {fps} "{output_file}" -y' + exec_cmd(cmd) + + +def get_fps(filepath, default_fps=25): + try: + fps = cv2.VideoCapture(filepath).get(cv2.CAP_PROP_FPS) + + if fps in (0, None): + fps = default_fps + except Exception as e: + log(e) + fps = default_fps + + return fps + + +def has_audio_stream(video_path: str) -> bool: + """ + Check if the video file contains an audio stream. + + :param video_path: Path to the video file + :return: True if the video contains an audio stream, False otherwise + """ + if osp.isdir(video_path): + return False + + cmd = [ + 'ffprobe', + '-v', 'error', + '-select_streams', 'a', + '-show_entries', 'stream=codec_type', + '-of', 'default=noprint_wrappers=1:nokey=1', + f'"{video_path}"' + ] + + try: + # result = subprocess.run(cmd, capture_output=True, text=True) + result = exec_cmd(' '.join(cmd)) + if result.returncode != 0: + log(f"Error occurred while probing video: {result.stderr}") + return False + + # Check if there is any output from ffprobe command + return bool(result.stdout.strip()) + except Exception as e: + log( + f"Error occurred while probing video: {video_path}, " + "you may need to install ffprobe! (https://ffmpeg.org/download.html) " + "Now set audio to false!", + style="bold red" + ) + return False + + +def add_audio_to_video(silent_video_path: str, audio_video_path: str, output_video_path: str): + cmd = [ + 'ffmpeg', + '-y', + '-i', f'"{silent_video_path}"', + '-i', f'"{audio_video_path}"', + '-map', '0:v', + '-map', '1:a', + '-c:v', 'copy', + '-shortest', + f'"{output_video_path}"' + ] + + try: + exec_cmd(' '.join(cmd)) + log(f"Video with audio generated successfully: {output_video_path}") + except subprocess.CalledProcessError as e: + log(f"Error occurred: {e}") + + +def bb_intersection_over_union(boxA, boxB): + xA = max(boxA[0], boxB[0]) + yA = max(boxA[1], boxB[1]) + xB = min(boxA[2], boxB[2]) + yB = min(boxA[3], boxB[3]) + interArea = max(0, xB - xA + 1) * max(0, yB - yA + 1) + boxAArea = (boxA[2] - boxA[0] + 1) * (boxA[3] - boxA[1] + 1) + boxBArea = (boxB[2] - boxB[0] + 1) * (boxB[3] - boxB[1] + 1) + iou = interArea / float(boxAArea + boxBArea - interArea) + return iou diff --git a/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/viz.py b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/viz.py new file mode 100644 index 0000000..59443cb --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/liveportrait/src/utils/viz.py @@ -0,0 +1,19 @@ +# coding: utf-8 + +import cv2; cv2.setNumThreads(0); cv2.ocl.setUseOpenCL(False) + + +def viz_lmk(img_, vps, **kwargs): + """ๅฏ่ง†ๅŒ–็‚น""" + lineType = kwargs.get("lineType", cv2.LINE_8) # cv2.LINE_AA + img_for_viz = img_.copy() + for pt in vps: + cv2.circle( + img_for_viz, + (int(pt[0]), int(pt[1])), + radius=kwargs.get("radius", 1), + color=(0, 255, 0), + thickness=kwargs.get("thickness", 1), + lineType=lineType, + ) + return img_for_viz diff --git a/usecases/ai/digital-avatar/backend/liveportrait/main.py b/usecases/ai/digital-avatar/backend/liveportrait/main.py new file mode 100644 index 0000000..7ca59f9 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/main.py @@ -0,0 +1,92 @@ +from fastapi.middleware.cors import CORSMiddleware +from contextlib import asynccontextmanager +from fastapi import FastAPI, UploadFile, File, APIRouter +import uvicorn +import os +import logging + +import tyro +from liveportrait.src.config.argument_config import ArgumentConfig +from liveportrait.src.config.inference_config import InferenceConfig +from liveportrait.src.config.crop_config import CropConfig +from liveportrait.src.live_portrait_pipeline import LivePortraitPipeline +from pydantic import BaseModel +from typing import Optional + +import torch +import json + +from liveportrait.intel_xpu.xpu_override import xpu_override +xpu_override() + +logger = logging.getLogger('uvicorn.error') +LIVEPORTRAIT=None + +def partial_fields(target_class, kwargs): + return target_class(**{k: v for k, v in kwargs.items() if hasattr(target_class, k)}) + +@asynccontextmanager +async def lifespan(app: FastAPI): + global LIVEPORTRAIT + args = tyro.cli(ArgumentConfig) + # specify configs for inference + inference_cfg = partial_fields(InferenceConfig, args.__dict__) + crop_cfg = partial_fields(CropConfig, args.__dict__) + LIVEPORTRAIT = LivePortraitPipeline( + inference_cfg=inference_cfg, + crop_cfg=crop_cfg + ) + args.source="assets/image.png" + args.driving="assets/idle.mp4" + args.output_dir="assets" + + LIVEPORTRAIT.execute(args) + yield + + +allowed_cors = json.loads(os.getenv("ALLOWED_CORS", '["http://localhost"]')) +app = FastAPI(lifespan=lifespan) +app.add_middleware( + CORSMiddleware, + allow_origins=allowed_cors, + allow_credentials=True, + allow_methods=['*'], + allow_headers=['*'], +) + +@app.get('/healthcheck', status_code=200) +def get_healthcheck(): + return 'OK' + +class InferenceRequest(BaseModel): + source: str = "assets/image.png" + driving: str = "assets/idle.mp4" + +router = APIRouter(prefix="/v1", + responses={404: {"description": "Unable to find route"}}) + +@router.post("/inference") +async def inference(data: Optional[InferenceRequest]= None): + global LIVEPORTRAIT + args = tyro.cli(ArgumentConfig) + + if data is not None: + args.source=data.source + args.driving=data.driving + else: + args.source="assets/image.png" + args.driving="assets/idle.mp4" + args.output_dir="assets" + args.output_name="video" + + LIVEPORTRAIT.execute(args) + +app.include_router(router) + +if __name__ == "__main__": + uvicorn.run( + "main:app", + host=os.environ.get('SERVER_HOST', "0.0.0.0"), + port=int(os.environ.get('SERVER_PORT', "8012")), + reload=os.environ.get('SERVER_RELOAD', False) + ) \ No newline at end of file diff --git a/usecases/ai/digital-avatar/backend/liveportrait/requirements.txt b/usecases/ai/digital-avatar/backend/liveportrait/requirements.txt new file mode 100644 index 0000000..66921bd --- /dev/null +++ b/usecases/ai/digital-avatar/backend/liveportrait/requirements.txt @@ -0,0 +1,21 @@ +--pre +--extra-index-url https://download.pytorch.org/whl/nightly/xpu +torch==2.6.0.dev20241115+xpu +torchvision +torchaudio +transformers==4.46.2 + +tyro==0.8.14 +opencv-python==4.10.* +imageio==2.36.0 +scipy==1.14.1 +onnxruntime-gpu==1.20.0 +onnx==1.17.0 +requests==2.32.3 +tqdm==4.67.0 +scikit-image==0.24.0 +pykalman==0.9.7 +pyyaml==6.0.2 +imageio[ffmpeg]==2.36.0 + +fastapi[standard] \ No newline at end of file diff --git a/usecases/ai/digital-avatar/backend/wav2lip/.dockerignore b/usecases/ai/digital-avatar/backend/wav2lip/.dockerignore new file mode 100644 index 0000000..0f31a95 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/wav2lip/.dockerignore @@ -0,0 +1,4 @@ +__pycache__ +*env +cache +checkpoints \ No newline at end of file diff --git a/usecases/ai/digital-avatar/backend/wav2lip/Dockerfile b/usecases/ai/digital-avatar/backend/wav2lip/Dockerfile new file mode 100644 index 0000000..d34800d --- /dev/null +++ b/usecases/ai/digital-avatar/backend/wav2lip/Dockerfile @@ -0,0 +1,77 @@ +FROM debian:12-slim + +ARG DEBIAN_FRONTEND=noninteractive +ARG RENDER_GROUP_ID +RUN apt-get update \ + && apt-get upgrade -y \ + && apt-get install --no-install-recommends -y \ + sudo \ + wget \ + ca-certificates \ + ffmpeg \ + libsm6 \ + libxext6 \ + curl \ + git \ + build-essential \ + libssl-dev \ + zlib1g-dev \ + libbz2-dev \ + libreadline-dev \ + libsqlite3-dev \ + llvm \ + libncursesw5-dev \ + xz-utils \ + tk-dev \ + libxml2-dev \ + libxmlsec1-dev \ + libffi-dev \ + liblzma-dev \ + && addgroup --system intel --gid 1000 \ + && adduser --system --ingroup intel --uid 1000 --home /home/intel intel \ + && echo "intel ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers.d/intel \ + && groupadd -g ${RENDER_GROUP_ID} render \ + && usermod -aG render intel \ + && rm -rf /var/lib/apt/lists/* \ + && mkdir -p /usr/src \ + && chown -R intel:intel /usr/src + +# Intel GPU Driver +RUN apt-get update && apt-get install -y gnupg + +RUN wget -qO - https://repositories.intel.com/gpu/intel-graphics.key | \ + gpg --yes --dearmor --output /usr/share/keyrings/intel-graphics.gpg && \ + echo "deb [arch=amd64,i386 signed-by=/usr/share/keyrings/intel-graphics.gpg] https://repositories.intel.com/gpu/ubuntu jammy client" | \ + tee /etc/apt/sources.list.d/intel-gpu-jammy.list && \ + apt update && \ + apt-get install -y --no-install-recommends libze1 intel-level-zero-gpu intel-opencl-icd clinfo libze-dev intel-ocloc + + +USER intel +WORKDIR /usr/src/app + +# Set environment variables for pyenv +ENV PYENV_ROOT="/usr/src/app/.pyenv" +ENV PATH="$PYENV_ROOT/bin:$PYENV_ROOT/shims:$PATH" + +# Install pyenv +RUN curl https://pyenv.run | bash \ + && echo 'export PYENV_ROOT="$PYENV_ROOT"' >> ~/.bashrc \ + && echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc \ + && echo 'eval "$(pyenv init --path)"' >> ~/.bashrc \ + && echo 'eval "$(pyenv init -)"' >> ~/.bashrc \ + && . ~/.bashrc \ + && pyenv install 3.10.15 \ + && pyenv global 3.10.15 + +RUN python3 -m pip install --upgrade pip +COPY ./backend/wav2lip/requirements.txt . +RUN python3 -m pip install --no-cache-dir -r requirements.txt + +COPY --chown=intel ./backend/wav2lip . +COPY --chown=intel ./weights/wav2lip_gan.pth ./setup/ +COPY --chown=intel ./assets/*.png ./assets/*.mp4 ./wav2lip/assets/ +RUN python3 setup/download_model.py + +HEALTHCHECK --interval=30s --timeout=180s --start-period=60s --retries=5 \ + CMD sh -c 'PORT=${SERVER_PORT:-8011} && wget --no-verbose -O /dev/null --tries=1 http://localhost:$PORT/healthcheck || exit 1' \ No newline at end of file diff --git a/usecases/ai/digital-avatar/backend/wav2lip/main.py b/usecases/ai/digital-avatar/backend/wav2lip/main.py new file mode 100644 index 0000000..15137ee --- /dev/null +++ b/usecases/ai/digital-avatar/backend/wav2lip/main.py @@ -0,0 +1,84 @@ +from fastapi.middleware.cors import CORSMiddleware +from contextlib import asynccontextmanager +from fastapi.responses import FileResponse +from fastapi import FastAPI, UploadFile, File, APIRouter +import tempfile +import uvicorn +import os +import shutil +import logging +from starlette.background import BackgroundTasks +from wav2lip.ov_wav2lip import OVWav2Lip +import wave +import numpy as np +import json + +logger = logging.getLogger('uvicorn.error') +WAV2LIP=None +@asynccontextmanager +async def lifespan(app: FastAPI): + global WAV2LIP + WAV2LIP = OVWav2Lip(device="CPU", avatar_path="assets/video.mp4") + + print("warming up") + temp_filename = "empty.wav" + with wave.open(temp_filename, "w") as wf: + wf.setnchannels(1) # mono + wf.setsampwidth(2) # 2 bytes per sample + wf.setframerate(16000) # 16 kHz + wf.writeframes(np.zeros(16000 * 2, dtype=np.int16).tobytes()) # 1 second of silence + + result= WAV2LIP.inference(temp_filename) + if os.path.exists(result): + os.remove(result) + os.remove(temp_filename) + yield + + +allowed_cors = json.loads(os.getenv("ALLOWED_CORS", '["http://localhost"]')) +app = FastAPI(lifespan=lifespan) +app.add_middleware( + CORSMiddleware, + allow_origins=allowed_cors, + allow_credentials=True, + allow_methods=['*'], + allow_headers=['*'], +) + +@app.get('/healthcheck', status_code=200) +def get_healthcheck(): + return 'OK' + +router = APIRouter(prefix="/v1", + responses={404: {"description": "Unable to find route"}}) + +@router.post("/inference") +async def inference(bg_task: BackgroundTasks, file: UploadFile=File(...) ): + async def remove_file(file_name): + if os.path.exists(file_name): + try: + os.remove(file_name) + except: + logger.error(f"File: {file_name} not available") + + global WAV2LIP + if not file.filename.endswith(".wav"): + return "Only .wav files are allowed" + + with tempfile.NamedTemporaryFile(suffix=".wav") as temp_audio: + temp_audio_path = temp_audio.name + with open(temp_audio_path, "wb") as f: + shutil.copyfileobj(file.file, f) + result = WAV2LIP.inference(temp_audio_path) + print(result, flush=True) + return FileResponse(result, media_type="video/mp4", background=bg_task.add_task(remove_file, result)) + +app.include_router(router) + +if __name__ == "__main__": + uvicorn.run( + "main:app", + host=os.environ.get('SERVER_HOST', "0.0.0.0"), + port=int(os.environ.get('SERVER_PORT', "8011")), + reload=True + ) \ No newline at end of file diff --git a/usecases/ai/digital-avatar/backend/wav2lip/requirements.txt b/usecases/ai/digital-avatar/backend/wav2lip/requirements.txt new file mode 100644 index 0000000..71b4e63 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/wav2lip/requirements.txt @@ -0,0 +1,8 @@ +numpy==1.26.4 +opencv-python==4.10.* +librosa==0.10.2 +tqdm==4.67.0 +torch==2.3.0 +openvino==2024.4.0 + +fastapi[standard]==0.115.4 \ No newline at end of file diff --git a/usecases/ai/digital-avatar/backend/wav2lip/setup/download_model.py b/usecases/ai/digital-avatar/backend/wav2lip/setup/download_model.py new file mode 100644 index 0000000..bc241a4 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/wav2lip/setup/download_model.py @@ -0,0 +1,70 @@ +import os +import sys + +sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', 'wav2lip'))) + +import requests +from tqdm import tqdm +import numpy as np +import openvino as ov +from pathlib import Path +import torch +from face_detection.detection.sfd.net_s3fd import s3fd +from models import Wav2Lip +from torch.utils.model_zoo import load_url +import shutil + +def _load(checkpoint_path): + checkpoint = torch.load(checkpoint_path, + map_location=lambda storage, loc: storage) + return checkpoint + +def load_model(path): + model = Wav2Lip() + print("Load checkpoint from: {}".format(path) ) + checkpoint = _load(path) + s = checkpoint["state_dict"] + new_s = {} + for k, v in s.items(): + new_s[k.replace('module.', '')] = v + model.load_state_dict(new_s) + + return model.eval() + +if __name__ == "__main__": + models_urls = { + 's3fd': 'https://www.adrianbulat.com/downloads/python-fan/s3fd-619a316812.pth'} + path_to_detector = "wav2lip/checkpoints/face_detection.pth" + path_to_wav2lip = "setup/wav2lip_gan.pth" + + OV_FACE_DETECTION_MODEL_PATH = Path("wav2lip/checkpoints/face_detection.xml") + OV_WAV2LIP_MODEL_PATH = Path("wav2lip/checkpoints/wav2lip_gan.xml") + + # Convert Face Detection Model + print("Convert Face Detection Model ...") + if not os.path.isfile(path_to_detector): + model_weights = load_url(models_urls['s3fd']) + else: + model_weights = torch.load(path_to_detector) + face_detector = s3fd() + face_detector.load_state_dict(model_weights) + + if not OV_FACE_DETECTION_MODEL_PATH.exists(): + face_detection_dummy_inputs = torch.FloatTensor(np.random.rand(1, 3, 768, 576)) + face_detection_ov_model = ov.convert_model(face_detector, example_input=face_detection_dummy_inputs) + ov.save_model(face_detection_ov_model, OV_FACE_DETECTION_MODEL_PATH) + print("Converted face detection OpenVINO model: ", OV_FACE_DETECTION_MODEL_PATH) + + print("Convert Wav2Lip Model ...") + if not OV_WAV2LIP_MODEL_PATH.exists(): + if not os.path.isfile(path_to_wav2lip): + raise Exception("Wav2Lip model not found") + wav2lip = load_model(path_to_wav2lip) + img_batch = torch.FloatTensor(np.random.rand(123, 6, 96, 96)) + mel_batch = torch.FloatTensor(np.random.rand(123, 1, 80, 16)) + + if not OV_WAV2LIP_MODEL_PATH.exists(): + example_inputs = {"audio_sequences": mel_batch, "face_sequences": img_batch} + wav2lip_ov_model = ov.convert_model(wav2lip, example_input=example_inputs) + ov.save_model(wav2lip_ov_model, OV_WAV2LIP_MODEL_PATH) + print("Converted face detection OpenVINO model: ", OV_FACE_DETECTION_MODEL_PATH) \ No newline at end of file diff --git a/usecases/ai/digital-avatar/backend/wav2lip/setup/wav2lip_gan.pth b/usecases/ai/digital-avatar/backend/wav2lip/setup/wav2lip_gan.pth new file mode 100644 index 0000000..e69de29 diff --git a/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/README.md b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/README.md new file mode 100644 index 0000000..170b618 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/README.md @@ -0,0 +1,188 @@ +# **Wav2Lip**: *Accurately Lip-syncing Videos In The Wild* +This sample based on orginal [wav2lip repo](https://github.com/Rudrabha/Wav2Lip) to introduce how to deploy wav2lip pipeline with OpenVINO as follow +- Support Pytorch model to OpenVINO model conversion +- Build wav2lip pipeline with OpenVINO +#### 1. Setup envirnoment +```bash +conda create -n wav2lip python=3.8 +conda activate wav2lip +pip install -r requirments.txt +sudo apt-get install ffmpeg +``` +#### 2. Download Wav2lip model from [Link](https://iiitaphyd-my.sharepoint.com/:u:/g/personal/radrabha_m_research_iiit_ac_in/Eb3LEzbfuKlJiR600lQWRxgBIY27JZg80f7V9jtMfbNDaQ?e=TBFBVW) and move to checkpoints folder + +#### 3. Convert pytorch face detection model and wav2lip model to OpenVINO model +```python +python export_openvino.py +``` + +#### 4. Run wav2lip inference with OpenVINO +```python +python inference_ov.py --face_detection_path checkpoints/face_detection.xml --wav2lip_path checkpoints/wav2lip.xml --inference_device CPU --face data_video_sun_5s.mp4 --audio data_audio_sun_5s.wav +``` + +The generated video will be saved as `results/result_voice.mp4` +### Wav2Lip is hosted for free at [Sync Labs](https://synclabs.so/) + +Are you looking to integrate this into a product? We have a turn-key hosted API with new and improved lip-syncing models here: https://synclabs.so/ + +For any other commercial / enterprise requests, please contact us at pavan@synclabs.so and prady@synclabs.so + +To reach out to the authors directly you can reach us at prajwal@synclabs.so, rudrabha@synclabs.so. + +This code is part of the paper: _A Lip Sync Expert Is All You Need for Speech to Lip Generation In the Wild_ published at ACM Multimedia 2020. + +[![PWC](https://img.shields.io/endpoint.svg?url=https://paperswithcode.com/badge/a-lip-sync-expert-is-all-you-need-for-speech/lip-sync-on-lrs2)](https://paperswithcode.com/sota/lip-sync-on-lrs2?p=a-lip-sync-expert-is-all-you-need-for-speech) +[![PWC](https://img.shields.io/endpoint.svg?url=https://paperswithcode.com/badge/a-lip-sync-expert-is-all-you-need-for-speech/lip-sync-on-lrs3)](https://paperswithcode.com/sota/lip-sync-on-lrs3?p=a-lip-sync-expert-is-all-you-need-for-speech) +[![PWC](https://img.shields.io/endpoint.svg?url=https://paperswithcode.com/badge/a-lip-sync-expert-is-all-you-need-for-speech/lip-sync-on-lrw)](https://paperswithcode.com/sota/lip-sync-on-lrw?p=a-lip-sync-expert-is-all-you-need-for-speech) + +|๐Ÿ“‘ Original Paper|๐Ÿ“ฐ Project Page|๐ŸŒ€ Demo|โšก Live Testing|๐Ÿ“” Colab Notebook +|:-:|:-:|:-:|:-:|:-:| +[Paper](http://arxiv.org/abs/2008.10010) | [Project Page](http://cvit.iiit.ac.in/research/projects/cvit-projects/a-lip-sync-expert-is-all-you-need-for-speech-to-lip-generation-in-the-wild/) | [Demo Video](https://youtu.be/0fXaDCZNOJc) | [Interactive Demo](https://synclabs.so/) | [Colab Notebook](https://colab.research.google.com/drive/1tZpDWXz49W6wDcTprANRGLo2D_EbD5J8?usp=sharing) /[Updated Collab Notebook](https://colab.research.google.com/drive/1IjFW1cLevs6Ouyu4Yht4mnR4yeuMqO7Y#scrollTo=MH1m608OymLH) + +![Logo](https://drive.google.com/uc?export=view&id=1Wn0hPmpo4GRbCIJR8Tf20Akzdi1qjjG9) + +---------- +**Highlights** +---------- + - Weights of the visual quality disc has been updated in readme! + - Lip-sync videos to any target speech with high accuracy :100:. Try our [interactive demo](https://synclabs.so/). + - :sparkles: Works for any identity, voice, and language. Also works for CGI faces and synthetic voices. + - Complete training code, inference code, and pretrained models are available :boom: + - Or, quick-start with the Google Colab Notebook: [Link](https://colab.research.google.com/drive/1tZpDWXz49W6wDcTprANRGLo2D_EbD5J8?usp=sharing). Checkpoints and samples are available in a Google Drive [folder](https://drive.google.com/drive/folders/1I-0dNLfFOSFwrfqjNa-SXuwaURHE5K4k?usp=sharing) as well. There is also a [tutorial video](https://www.youtube.com/watch?v=Ic0TBhfuOrA) on this, courtesy of [What Make Art](https://www.youtube.com/channel/UCmGXH-jy0o2CuhqtpxbaQgA). Also, thanks to [Eyal Gruss](https://eyalgruss.com), there is a more accessible [Google Colab notebook](https://j.mp/wav2lip) with more useful features. A tutorial collab notebook is present at this [link](https://colab.research.google.com/drive/1IjFW1cLevs6Ouyu4Yht4mnR4yeuMqO7Y#scrollTo=MH1m608OymLH). + - :fire: :fire: Several new, reliable evaluation benchmarks and metrics [[`evaluation/` folder of this repo]](https://github.com/Rudrabha/Wav2Lip/tree/master/evaluation) released. Instructions to calculate the metrics reported in the paper are also present. + +-------- +**Disclaimer** +-------- +All results from this open-source code or our [demo website](https://bhaasha.iiit.ac.in/lipsync) should only be used for research/academic/personal purposes only. As the models are trained on the LRS2 dataset, any form of commercial use is strictly prohibited. For commercial requests please contact us directly! + +Prerequisites +------------- +- `Python 3.6` +- ffmpeg: `sudo apt-get install ffmpeg` +- Install necessary packages using `pip install -r requirements.txt`. Alternatively, instructions for using a docker image is provided [here](https://gist.github.com/xenogenesi/e62d3d13dadbc164124c830e9c453668). Have a look at [this comment](https://github.com/Rudrabha/Wav2Lip/issues/131#issuecomment-725478562) and comment on [the gist](https://gist.github.com/xenogenesi/e62d3d13dadbc164124c830e9c453668) if you encounter any issues. +- Face detection [pre-trained model](https://www.adrianbulat.com/downloads/python-fan/s3fd-619a316812.pth) should be downloaded to `face_detection/detection/sfd/s3fd.pth`. Alternative [link](https://iiitaphyd-my.sharepoint.com/:u:/g/personal/prajwal_k_research_iiit_ac_in/EZsy6qWuivtDnANIG73iHjIBjMSoojcIV0NULXV-yiuiIg?e=qTasa8) if the above does not work. + +Getting the weights +---------- +| Model | Description | Link to the model | +| :-------------: | :---------------: | :---------------: | +| Wav2Lip | Highly accurate lip-sync | [Link](https://iiitaphyd-my.sharepoint.com/:u:/g/personal/radrabha_m_research_iiit_ac_in/Eb3LEzbfuKlJiR600lQWRxgBIY27JZg80f7V9jtMfbNDaQ?e=TBFBVW) | +| Wav2Lip + GAN | Slightly inferior lip-sync, but better visual quality | [Link](https://iiitaphyd-my.sharepoint.com/:u:/g/personal/radrabha_m_research_iiit_ac_in/EdjI7bZlgApMqsVoEUUXpLsBxqXbn5z8VTmoxp55YNDcIA?e=n9ljGW) | +| Expert Discriminator | Weights of the expert discriminator | [Link](https://iiitaphyd-my.sharepoint.com/:u:/g/personal/radrabha_m_research_iiit_ac_in/EQRvmiZg-HRAjvI6zqN9eTEBP74KefynCwPWVmF57l-AYA?e=ZRPHKP) | +| Visual Quality Discriminator | Weights of the visual disc trained in a GAN setup | [Link](https://iiitaphyd-my.sharepoint.com/:u:/g/personal/radrabha_m_research_iiit_ac_in/EQVqH88dTm1HjlK11eNba5gBbn15WMS0B0EZbDBttqrqkg?e=ic0ljo) | + +Lip-syncing videos using the pre-trained models (Inference) +------- +You can lip-sync any video to any audio: +```bash +python inference.py --checkpoint_path --face --audio +``` +The result is saved (by default) in `results/result_voice.mp4`. You can specify it as an argument, similar to several other available options. The audio source can be any file supported by `FFMPEG` containing audio data: `*.wav`, `*.mp3` or even a video file, from which the code will automatically extract the audio. + +##### Tips for better results: +- Experiment with the `--pads` argument to adjust the detected face bounding box. Often leads to improved results. You might need to increase the bottom padding to include the chin region. E.g. `--pads 0 20 0 0`. +- If you see the mouth position dislocated or some weird artifacts such as two mouths, then it can be because of over-smoothing the face detections. Use the `--nosmooth` argument and give it another try. +- Experiment with the `--resize_factor` argument, to get a lower-resolution video. Why? The models are trained on faces that were at a lower resolution. You might get better, visually pleasing results for 720p videos than for 1080p videos (in many cases, the latter works well too). +- The Wav2Lip model without GAN usually needs more experimenting with the above two to get the most ideal results, and sometimes, can give you a better result as well. + +Preparing LRS2 for training +---------- +Our models are trained on LRS2. See [here](#training-on-datasets-other-than-lrs2) for a few suggestions regarding training on other datasets. +##### LRS2 dataset folder structure + +``` +data_root (mvlrs_v1) +โ”œโ”€โ”€ main, pretrain (we use only main folder in this work) +| โ”œโ”€โ”€ list of folders +| โ”‚ โ”œโ”€โ”€ five-digit numbered video IDs ending with (.mp4) +``` + +Place the LRS2 filelists (train, val, test) `.txt` files in the `filelists/` folder. + +##### Preprocess the dataset for fast training + +```bash +python preprocess.py --data_root data_root/main --preprocessed_root lrs2_preprocessed/ +``` +Additional options like `batch_size` and the number of GPUs to use in parallel to use can also be set. + +##### Preprocessed LRS2 folder structure +``` +preprocessed_root (lrs2_preprocessed) +โ”œโ”€โ”€ list of folders +| โ”œโ”€โ”€ Folders with five-digit numbered video IDs +| โ”‚ โ”œโ”€โ”€ *.jpg +| โ”‚ โ”œโ”€โ”€ audio.wav +``` + +Train! +---------- +There are two major steps: (i) Train the expert lip-sync discriminator, (ii) Train the Wav2Lip model(s). + +##### Training the expert discriminator +You can download [the pre-trained weights](#getting-the-weights) if you want to skip this step. To train it: +```bash +python color_syncnet_train.py --data_root lrs2_preprocessed/ --checkpoint_dir +``` +##### Training the Wav2Lip models +You can either train the model without the additional visual quality discriminator (< 1 day of training) or use the discriminator (~2 days). For the former, run: +```bash +python wav2lip_train.py --data_root lrs2_preprocessed/ --checkpoint_dir --syncnet_checkpoint_path +``` + +To train with the visual quality discriminator, you should run `hq_wav2lip_train.py` instead. The arguments for both files are similar. In both cases, you can resume training as well. Look at `python wav2lip_train.py --help` for more details. You can also set additional less commonly-used hyper-parameters at the bottom of the `hparams.py` file. + +Training on datasets other than LRS2 +------------------------------------ +Training on other datasets might require modifications to the code. Please read the following before you raise an issue: + +- You might not get good results by training/fine-tuning on a few minutes of a single speaker. This is a separate research problem, to which we do not have a solution yet. Thus, we would most likely not be able to resolve your issue. +- You must train the expert discriminator for your own dataset before training Wav2Lip. +- If it is your own dataset downloaded from the web, in most cases, needs to be sync-corrected. +- Be mindful of the FPS of the videos of your dataset. Changes to FPS would need significant code changes. +- The expert discriminator's eval loss should go down to ~0.25 and the Wav2Lip eval sync loss should go down to ~0.2 to get good results. + +When raising an issue on this topic, please let us know that you are aware of all these points. + +We have an HD model trained on a dataset allowing commercial usage. The size of the generated face will be 192 x 288 in our new model. + +Evaluation +---------- +Please check the `evaluation/` folder for the instructions. + +License and Citation +---------- +This repository can only be used for personal/research/non-commercial purposes. However, for commercial requests, please contact us directly at rudrabha@synclabs.so or prajwal@synclabs.so. We have a turn-key hosted API with new and improved lip-syncing models here: https://synclabs.so/ +The size of the generated face will be 192 x 288 in our new models. Please cite the following paper if you use this repository: +``` +@inproceedings{10.1145/3394171.3413532, +author = {Prajwal, K R and Mukhopadhyay, Rudrabha and Namboodiri, Vinay P. and Jawahar, C.V.}, +title = {A Lip Sync Expert Is All You Need for Speech to Lip Generation In the Wild}, +year = {2020}, +isbn = {9781450379885}, +publisher = {Association for Computing Machinery}, +address = {New York, NY, USA}, +url = {https://doi.org/10.1145/3394171.3413532}, +doi = {10.1145/3394171.3413532}, +booktitle = {Proceedings of the 28th ACM International Conference on Multimedia}, +pages = {484โ€“492}, +numpages = {9}, +keywords = {lip sync, talking face generation, video generation}, +location = {Seattle, WA, USA}, +series = {MM '20} +} +``` + + +Acknowledgments +---------- +Parts of the code structure are inspired by this [TTS repository](https://github.com/r9y9/deepvoice3_pytorch). We thank the author for this wonderful code. The code for Face Detection has been taken from the [face_alignment](https://github.com/1adrianb/face-alignment) repository. We thank the authors for releasing their code and models. We thank [zabique](https://github.com/zabique) for the tutorial collab notebook. + +## Acknowledgements + + - [Awesome Readme Templates](https://awesomeopensource.com/project/elangosundar/awesome-README-templates) + - [Awesome README](https://github.com/matiassingers/awesome-readme) + - [How to write a Good readme](https://bulldogjob.com/news/449-how-to-write-a-good-readme-for-your-github-project) + diff --git a/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/__init__.py b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/audio.py b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/audio.py new file mode 100644 index 0000000..5f6491b --- /dev/null +++ b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/audio.py @@ -0,0 +1,138 @@ +import librosa +import librosa.filters +import numpy as np +# import tensorflow as tf +from scipy import signal +from scipy.io import wavfile +from .hparams import hparams as hp + +def load_wav(path, sr): + wav = librosa.core.load(path, sr=sr)[0] + duration = librosa.get_duration(y=wav, sr=sr) + return wav, round(duration, 2) + +def save_wav(wav, path, sr): + wav *= 32767 / max(0.01, np.max(np.abs(wav))) + #proposed by @dsmiller + wavfile.write(path, sr, wav.astype(np.int16)) + +def save_wavenet_wav(wav, path, sr): + librosa.output.write_wav(path, wav, sr=sr) + +def preemphasis(wav, k, preemphasize=True): + if preemphasize: + return signal.lfilter([1, -k], [1], wav) + return wav + +def inv_preemphasis(wav, k, inv_preemphasize=True): + if inv_preemphasize: + return signal.lfilter([1], [1, -k], wav) + return wav + +def get_hop_size(): + hop_size = hp.hop_size + if hop_size is None: + assert hp.frame_shift_ms is not None + hop_size = int(hp.frame_shift_ms / 1000 * hp.sample_rate) + return hop_size + +def linearspectrogram(wav): + D = _stft(preemphasis(wav, hp.preemphasis, hp.preemphasize)) + S = _amp_to_db(np.abs(D)) - hp.ref_level_db + + if hp.signal_normalization: + return _normalize(S) + return S + +def melspectrogram(wav): + D = _stft(preemphasis(wav, hp.preemphasis, hp.preemphasize)) + S = _amp_to_db(_linear_to_mel(np.abs(D))) - hp.ref_level_db + + if hp.signal_normalization: + return _normalize(S) + return S + +def _lws_processor(): + import lws + return lws.lws(hp.n_fft, get_hop_size(), fftsize=hp.win_size, mode="speech") + +def _stft(y): + if hp.use_lws: + return _lws_processor(hp).stft(y).T + else: + return librosa.stft(y=y, n_fft=hp.n_fft, hop_length=get_hop_size(), win_length=hp.win_size) + +########################################################## +#Those are only correct when using lws!!! (This was messing with Wavenet quality for a long time!) +def num_frames(length, fsize, fshift): + """Compute number of time frames of spectrogram + """ + pad = (fsize - fshift) + if length % fshift == 0: + M = (length + pad * 2 - fsize) // fshift + 1 + else: + M = (length + pad * 2 - fsize) // fshift + 2 + return M + + +def pad_lr(x, fsize, fshift): + """Compute left and right padding + """ + M = num_frames(len(x), fsize, fshift) + pad = (fsize - fshift) + T = len(x) + 2 * pad + r = (M - 1) * fshift + fsize - T + return pad, pad + r +########################################################## +#Librosa correct padding +def librosa_pad_lr(x, fsize, fshift): + return 0, (x.shape[0] // fshift + 1) * fshift - x.shape[0] + +# Conversions +_mel_basis = None + +def _linear_to_mel(spectogram): + global _mel_basis + if _mel_basis is None: + _mel_basis = _build_mel_basis() + return np.dot(_mel_basis, spectogram) + +def _build_mel_basis(): + assert hp.fmax <= hp.sample_rate // 2 + return librosa.filters.mel(sr=hp.sample_rate, n_fft=hp.n_fft, n_mels=hp.num_mels, + fmin=hp.fmin, fmax=hp.fmax) + +def _amp_to_db(x): + min_level = np.exp(hp.min_level_db / 20 * np.log(10)) + return 20 * np.log10(np.maximum(min_level, x)) + +def _db_to_amp(x): + return np.power(10.0, (x) * 0.05) + +def _normalize(S): + if hp.allow_clipping_in_normalization: + if hp.symmetric_mels: + return np.clip((2 * hp.max_abs_value) * ((S - hp.min_level_db) / (-hp.min_level_db)) - hp.max_abs_value, + -hp.max_abs_value, hp.max_abs_value) + else: + return np.clip(hp.max_abs_value * ((S - hp.min_level_db) / (-hp.min_level_db)), 0, hp.max_abs_value) + + assert S.max() <= 0 and S.min() - hp.min_level_db >= 0 + if hp.symmetric_mels: + return (2 * hp.max_abs_value) * ((S - hp.min_level_db) / (-hp.min_level_db)) - hp.max_abs_value + else: + return hp.max_abs_value * ((S - hp.min_level_db) / (-hp.min_level_db)) + +def _denormalize(D): + if hp.allow_clipping_in_normalization: + if hp.symmetric_mels: + return (((np.clip(D, -hp.max_abs_value, + hp.max_abs_value) + hp.max_abs_value) * -hp.min_level_db / (2 * hp.max_abs_value)) + + hp.min_level_db) + else: + return ((np.clip(D, 0, hp.max_abs_value) * -hp.min_level_db / hp.max_abs_value) + hp.min_level_db) + + if hp.symmetric_mels: + return (((D + hp.max_abs_value) * -hp.min_level_db / (2 * hp.max_abs_value)) + hp.min_level_db) + else: + return ((D * -hp.min_level_db / hp.max_abs_value) + hp.min_level_db) diff --git a/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/bbox.py b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/bbox.py new file mode 100644 index 0000000..4bd7222 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/bbox.py @@ -0,0 +1,129 @@ +from __future__ import print_function +import os +import sys +import cv2 +import random +import datetime +import time +import math +import argparse +import numpy as np +import torch + +try: + from iou import IOU +except BaseException: + # IOU cython speedup 10x + def IOU(ax1, ay1, ax2, ay2, bx1, by1, bx2, by2): + sa = abs((ax2 - ax1) * (ay2 - ay1)) + sb = abs((bx2 - bx1) * (by2 - by1)) + x1, y1 = max(ax1, bx1), max(ay1, by1) + x2, y2 = min(ax2, bx2), min(ay2, by2) + w = x2 - x1 + h = y2 - y1 + if w < 0 or h < 0: + return 0.0 + else: + return 1.0 * w * h / (sa + sb - w * h) + + +def bboxlog(x1, y1, x2, y2, axc, ayc, aww, ahh): + xc, yc, ww, hh = (x2 + x1) / 2, (y2 + y1) / 2, x2 - x1, y2 - y1 + dx, dy = (xc - axc) / aww, (yc - ayc) / ahh + dw, dh = math.log(ww / aww), math.log(hh / ahh) + return dx, dy, dw, dh + + +def bboxloginv(dx, dy, dw, dh, axc, ayc, aww, ahh): + xc, yc = dx * aww + axc, dy * ahh + ayc + ww, hh = math.exp(dw) * aww, math.exp(dh) * ahh + x1, x2, y1, y2 = xc - ww / 2, xc + ww / 2, yc - hh / 2, yc + hh / 2 + return x1, y1, x2, y2 + + +def nms(dets, thresh): + if 0 == len(dets): + return [] + x1, y1, x2, y2, scores = dets[:, 0], dets[:, 1], dets[:, 2], dets[:, 3], dets[:, 4] + areas = (x2 - x1 + 1) * (y2 - y1 + 1) + order = scores.argsort()[::-1] + + keep = [] + while order.size > 0: + i = order[0] + keep.append(i) + xx1, yy1 = np.maximum(x1[i], x1[order[1:]]), np.maximum(y1[i], y1[order[1:]]) + xx2, yy2 = np.minimum(x2[i], x2[order[1:]]), np.minimum(y2[i], y2[order[1:]]) + + w, h = np.maximum(0.0, xx2 - xx1 + 1), np.maximum(0.0, yy2 - yy1 + 1) + ovr = w * h / (areas[i] + areas[order[1:]] - w * h) + + inds = np.where(ovr <= thresh)[0] + order = order[inds + 1] + + return keep + + +def encode(matched, priors, variances): + """Encode the variances from the priorbox layers into the ground truth boxes + we have matched (based on jaccard overlap) with the prior boxes. + Args: + matched: (tensor) Coords of ground truth for each prior in point-form + Shape: [num_priors, 4]. + priors: (tensor) Prior boxes in center-offset form + Shape: [num_priors,4]. + variances: (list[float]) Variances of priorboxes + Return: + encoded boxes (tensor), Shape: [num_priors, 4] + """ + + # dist b/t match center and prior's center + g_cxcy = (matched[:, :2] + matched[:, 2:]) / 2 - priors[:, :2] + # encode variance + g_cxcy /= (variances[0] * priors[:, 2:]) + # match wh / prior wh + g_wh = (matched[:, 2:] - matched[:, :2]) / priors[:, 2:] + g_wh = torch.log(g_wh) / variances[1] + # return target for smooth_l1_loss + return torch.cat([g_cxcy, g_wh], 1) # [num_priors,4] + + +def decode(loc, priors, variances): + """Decode locations from predictions using priors to undo + the encoding we did for offset regression at train time. + Args: + loc (tensor): location predictions for loc layers, + Shape: [num_priors,4] + priors (tensor): Prior boxes in center-offset form. + Shape: [num_priors,4]. + variances: (list[float]) Variances of priorboxes + Return: + decoded bounding box predictions + """ + + boxes = torch.cat(( + priors[:, :2] + loc[:, :2] * variances[0] * priors[:, 2:], + priors[:, 2:] * torch.exp(loc[:, 2:] * variances[1])), 1) + boxes[:, :2] -= boxes[:, 2:] / 2 + boxes[:, 2:] += boxes[:, :2] + return boxes + +def batch_decode(loc, priors, variances): + """Decode locations from predictions using priors to undo + the encoding we did for offset regression at train time. + Args: + loc (tensor): location predictions for loc layers, + Shape: [num_priors,4] + priors (tensor): Prior boxes in center-offset form. + Shape: [num_priors,4]. + variances: (list[float]) Variances of priorboxes + Return: + decoded bounding box predictions + """ + + boxes = torch.cat(( + priors[:, :, :2] + loc[:, :, :2] * variances[0] * priors[:, :, 2:], + priors[:, :, 2:] * torch.exp(loc[:, :, 2:] * variances[1])), 2) + boxes[:, :, :2] -= boxes[:, :, 2:] / 2 + boxes[:, :, 2:] += boxes[:, :, :2] + return boxes diff --git a/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/color_syncnet_train.py b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/color_syncnet_train.py new file mode 100644 index 0000000..afa0054 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/color_syncnet_train.py @@ -0,0 +1,279 @@ +from os.path import dirname, join, basename, isfile +from tqdm import tqdm + +from models import SyncNet_color as SyncNet +import audio + +import torch +from torch import nn +from torch import optim +import torch.backends.cudnn as cudnn +from torch.utils import data as data_utils +import numpy as np + +from glob import glob + +import os, random, cv2, argparse +from hparams import hparams, get_image_list + +parser = argparse.ArgumentParser(description='Code to train the expert lip-sync discriminator') + +parser.add_argument("--data_root", help="Root folder of the preprocessed LRS2 dataset", required=True) + +parser.add_argument('--checkpoint_dir', help='Save checkpoints to this directory', required=True, type=str) +parser.add_argument('--checkpoint_path', help='Resumed from this checkpoint', default=None, type=str) + +args = parser.parse_args() + + +global_step = 0 +global_epoch = 0 +use_cuda = torch.cuda.is_available() +print('use_cuda: {}'.format(use_cuda)) + +syncnet_T = 5 +syncnet_mel_step_size = 16 + +class Dataset(object): + def __init__(self, split): + self.all_videos = get_image_list(args.data_root, split) + + def get_frame_id(self, frame): + return int(basename(frame).split('.')[0]) + + def get_window(self, start_frame): + start_id = self.get_frame_id(start_frame) + vidname = dirname(start_frame) + + window_fnames = [] + for frame_id in range(start_id, start_id + syncnet_T): + frame = join(vidname, '{}.jpg'.format(frame_id)) + if not isfile(frame): + return None + window_fnames.append(frame) + return window_fnames + + def crop_audio_window(self, spec, start_frame): + # num_frames = (T x hop_size * fps) / sample_rate + start_frame_num = self.get_frame_id(start_frame) + start_idx = int(80. * (start_frame_num / float(hparams.fps))) + + end_idx = start_idx + syncnet_mel_step_size + + return spec[start_idx : end_idx, :] + + + def __len__(self): + return len(self.all_videos) + + def __getitem__(self, idx): + while 1: + idx = random.randint(0, len(self.all_videos) - 1) + vidname = self.all_videos[idx] + + img_names = list(glob(join(vidname, '*.jpg'))) + if len(img_names) <= 3 * syncnet_T: + continue + img_name = random.choice(img_names) + wrong_img_name = random.choice(img_names) + while wrong_img_name == img_name: + wrong_img_name = random.choice(img_names) + + if random.choice([True, False]): + y = torch.ones(1).float() + chosen = img_name + else: + y = torch.zeros(1).float() + chosen = wrong_img_name + + window_fnames = self.get_window(chosen) + if window_fnames is None: + continue + + window = [] + all_read = True + for fname in window_fnames: + img = cv2.imread(fname) + if img is None: + all_read = False + break + try: + img = cv2.resize(img, (hparams.img_size, hparams.img_size)) + except Exception as e: + all_read = False + break + + window.append(img) + + if not all_read: continue + + try: + wavpath = join(vidname, "audio.wav") + wav = audio.load_wav(wavpath, hparams.sample_rate) + + orig_mel = audio.melspectrogram(wav).T + except Exception as e: + continue + + mel = self.crop_audio_window(orig_mel.copy(), img_name) + + if (mel.shape[0] != syncnet_mel_step_size): + continue + + # H x W x 3 * T + x = np.concatenate(window, axis=2) / 255. + x = x.transpose(2, 0, 1) + x = x[:, x.shape[1]//2:] + + x = torch.FloatTensor(x) + mel = torch.FloatTensor(mel.T).unsqueeze(0) + + return x, mel, y + +logloss = nn.BCELoss() +def cosine_loss(a, v, y): + d = nn.functional.cosine_similarity(a, v) + loss = logloss(d.unsqueeze(1), y) + + return loss + +def train(device, model, train_data_loader, test_data_loader, optimizer, + checkpoint_dir=None, checkpoint_interval=None, nepochs=None): + + global global_step, global_epoch + resumed_step = global_step + + while global_epoch < nepochs: + running_loss = 0. + prog_bar = tqdm(enumerate(train_data_loader)) + for step, (x, mel, y) in prog_bar: + model.train() + optimizer.zero_grad() + + # Transform data to CUDA device + x = x.to(device) + + mel = mel.to(device) + + a, v = model(mel, x) + y = y.to(device) + + loss = cosine_loss(a, v, y) + loss.backward() + optimizer.step() + + global_step += 1 + cur_session_steps = global_step - resumed_step + running_loss += loss.item() + + if global_step == 1 or global_step % checkpoint_interval == 0: + save_checkpoint( + model, optimizer, global_step, checkpoint_dir, global_epoch) + + if global_step % hparams.syncnet_eval_interval == 0: + with torch.no_grad(): + eval_model(test_data_loader, global_step, device, model, checkpoint_dir) + + prog_bar.set_description('Loss: {}'.format(running_loss / (step + 1))) + + global_epoch += 1 + +def eval_model(test_data_loader, global_step, device, model, checkpoint_dir): + eval_steps = 1400 + print('Evaluating for {} steps'.format(eval_steps)) + losses = [] + while 1: + for step, (x, mel, y) in enumerate(test_data_loader): + + model.eval() + + # Transform data to CUDA device + x = x.to(device) + + mel = mel.to(device) + + a, v = model(mel, x) + y = y.to(device) + + loss = cosine_loss(a, v, y) + losses.append(loss.item()) + + if step > eval_steps: break + + averaged_loss = sum(losses) / len(losses) + print(averaged_loss) + + return + +def save_checkpoint(model, optimizer, step, checkpoint_dir, epoch): + + checkpoint_path = join( + checkpoint_dir, "checkpoint_step{:09d}.pth".format(global_step)) + optimizer_state = optimizer.state_dict() if hparams.save_optimizer_state else None + torch.save({ + "state_dict": model.state_dict(), + "optimizer": optimizer_state, + "global_step": step, + "global_epoch": epoch, + }, checkpoint_path) + print("Saved checkpoint:", checkpoint_path) + +def _load(checkpoint_path): + if use_cuda: + checkpoint = torch.load(checkpoint_path) + else: + checkpoint = torch.load(checkpoint_path, + map_location=lambda storage, loc: storage) + return checkpoint + +def load_checkpoint(path, model, optimizer, reset_optimizer=False): + global global_step + global global_epoch + + print("Load checkpoint from: {}".format(path)) + checkpoint = _load(path) + model.load_state_dict(checkpoint["state_dict"]) + if not reset_optimizer: + optimizer_state = checkpoint["optimizer"] + if optimizer_state is not None: + print("Load optimizer state from {}".format(path)) + optimizer.load_state_dict(checkpoint["optimizer"]) + global_step = checkpoint["global_step"] + global_epoch = checkpoint["global_epoch"] + + return model + +if __name__ == "__main__": + checkpoint_dir = args.checkpoint_dir + checkpoint_path = args.checkpoint_path + + if not os.path.exists(checkpoint_dir): os.mkdir(checkpoint_dir) + + # Dataset and Dataloader setup + train_dataset = Dataset('train') + test_dataset = Dataset('val') + + train_data_loader = data_utils.DataLoader( + train_dataset, batch_size=hparams.syncnet_batch_size, shuffle=True, + num_workers=hparams.num_workers) + + test_data_loader = data_utils.DataLoader( + test_dataset, batch_size=hparams.syncnet_batch_size, + num_workers=8) + + device = torch.device("cuda" if use_cuda else "cpu") + + # Model + model = SyncNet().to(device) + print('total trainable params {}'.format(sum(p.numel() for p in model.parameters() if p.requires_grad))) + + optimizer = optim.Adam([p for p in model.parameters() if p.requires_grad], + lr=hparams.syncnet_lr) + + if checkpoint_path is not None: + load_checkpoint(checkpoint_path, model, optimizer, reset_optimizer=False) + + train(device, model, train_data_loader, test_data_loader, optimizer, + checkpoint_dir=checkpoint_dir, + checkpoint_interval=hparams.syncnet_checkpoint_interval, + nepochs=hparams.nepochs) diff --git a/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/export_openvino.py b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/export_openvino.py new file mode 100644 index 0000000..fef31c8 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/export_openvino.py @@ -0,0 +1,82 @@ +import requests +from tqdm import tqdm +import numpy as np +import os +import openvino as ov +from pathlib import Path +import torch +from face_detection.detection.sfd.net_s3fd import s3fd +from models import Wav2Lip +from torch.utils.model_zoo import load_url + +def download(url, output_path): + response = requests.get(url, stream=True) + total_size = int(response.headers.get('content-length', 0)) + block_size = 1024 + progress_bar = tqdm(total=total_size, unit='iB', unit_scale=True) + + with open(output_path, 'wb') as file: + for data in response.iter_content(block_size): + progress_bar.update(len(data)) + file.write(data) + progress_bar.close() + + if total_size != 0 and progress_bar.n != total_size: + print("ERROR: Something went wrong") + else: + print(f"Downloaded FFmpeg to {output_path}") + +def _load(checkpoint_path): + checkpoint = torch.load(checkpoint_path, + map_location=lambda storage, loc: storage) + return checkpoint + +def load_model(path): + model = Wav2Lip() + print("Load checkpoint from: {}".format(path) ) + checkpoint = _load(path) + s = checkpoint["state_dict"] + new_s = {} + for k, v in s.items(): + new_s[k.replace('module.', '')] = v + model.load_state_dict(new_s) + + return model.eval() + +if __name__ == "__main__": + models_urls = { + 'wav2lip': "https://iiitaphyd-my.sharepoint.com/:u:/r/personal/radrabha_m_research_iiit_ac_in/Documents/Wav2Lip_Models/wav2lip.pth?csf=1&web=1&e=HbccQs", + 's3fd': 'https://www.adrianbulat.com/downloads/python-fan/s3fd-619a316812.pth'} + path_to_detector = "checkpoints/face_detection.pth" + path_to_wav2lip = "checkpoints/wav2lip.pth" + + OV_FACE_DETECTION_MODEL_PATH = Path("checkpoints/face_detection.xml") + OV_WAV2LIP_MODEL_PATH = Path("checkpoints/wav2lip.xml") + + # Convert Face Detection Model + print("Convert Face Detection Model ...") + if not os.path.isfile(path_to_detector): + model_weights = load_url(models_urls['s3fd']) + else: + model_weights = torch.load(path_to_detector) + face_detector = s3fd() + face_detector.load_state_dict(model_weights) + + if not OV_FACE_DETECTION_MODEL_PATH.exists(): + face_detection_dummy_inputs = torch.FloatTensor(np.random.rand(1, 3, 768, 576)) + face_detection_ov_model = ov.convert_model(face_detector, example_input=face_detection_dummy_inputs) + ov.save_model(face_detection_ov_model, OV_FACE_DETECTION_MODEL_PATH) + print("Converted face detection OpenVINO model: ", OV_FACE_DETECTION_MODEL_PATH) + + # print("Convert Wav2Lip Model ...") + # if not OV_WAV2LIP_MODEL_PATH.exists(): + # download(models_urls['wav2lip'], "checkpoints/wav2lip.pth") + wav2lip = load_model(path_to_wav2lip) + img_batch = torch.FloatTensor(np.random.rand(123, 6, 96, 96)) + mel_batch = torch.FloatTensor(np.random.rand(123, 1, 80, 16)) + + if not OV_WAV2LIP_MODEL_PATH.exists(): + example_inputs = {"audio_sequences": mel_batch, "face_sequences": img_batch} + wav2lip_ov_model = ov.convert_model(wav2lip, example_input=example_inputs) + ov.save_model(wav2lip_ov_model, OV_WAV2LIP_MODEL_PATH) + print("Converted face detection OpenVINO model: ", OV_FACE_DETECTION_MODEL_PATH) \ No newline at end of file diff --git a/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/README.md b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/README.md new file mode 100644 index 0000000..c073376 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/README.md @@ -0,0 +1 @@ +The code for Face Detection in this folder has been taken from the wonderful [face_alignment](https://github.com/1adrianb/face-alignment) repository. This has been modified to take batches of faces at a time. \ No newline at end of file diff --git a/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/__init__.py b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/__init__.py new file mode 100644 index 0000000..4bae29f --- /dev/null +++ b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/__init__.py @@ -0,0 +1,7 @@ +# -*- coding: utf-8 -*- + +__author__ = """Adrian Bulat""" +__email__ = 'adrian.bulat@nottingham.ac.uk' +__version__ = '1.0.1' + +from .api import FaceAlignment, LandmarksType, NetworkSize diff --git a/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/api.py b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/api.py new file mode 100644 index 0000000..cb02d52 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/api.py @@ -0,0 +1,79 @@ +from __future__ import print_function +import os +import torch +from torch.utils.model_zoo import load_url +from enum import Enum +import numpy as np +import cv2 +try: + import urllib.request as request_file +except BaseException: + import urllib as request_file + +from .models import FAN, ResNetDepth +from .utils import * + + +class LandmarksType(Enum): + """Enum class defining the type of landmarks to detect. + + ``_2D`` - the detected points ``(x,y)`` are detected in a 2D space and follow the visible contour of the face + ``_2halfD`` - this points represent the projection of the 3D points into 3D + ``_3D`` - detect the points ``(x,y,z)``` in a 3D space + + """ + _2D = 1 + _2halfD = 2 + _3D = 3 + + +class NetworkSize(Enum): + # TINY = 1 + # SMALL = 2 + # MEDIUM = 3 + LARGE = 4 + + def __new__(cls, value): + member = object.__new__(cls) + member._value_ = value + return member + + def __int__(self): + return self.value + +ROOT = os.path.dirname(os.path.abspath(__file__)) + +class FaceAlignment: + def __init__(self, landmarks_type, network_size=NetworkSize.LARGE, + device='cuda', flip_input=False, face_detector='sfd', verbose=False): + self.device = device + self.flip_input = flip_input + self.landmarks_type = landmarks_type + self.verbose = verbose + + network_size = int(network_size) + + if 'cuda' in device: + torch.backends.cudnn.benchmark = True + + # Get the face detector + face_detector_module = __import__('face_detection.detection.' + face_detector, + globals(), locals(), [face_detector], 0) + self.face_detector = face_detector_module.FaceDetector(device=device, verbose=verbose) + + def get_detections_for_batch(self, images): + images = images[..., ::-1] + detected_faces = self.face_detector.detect_from_batch(images.copy()) + results = [] + + for i, d in enumerate(detected_faces): + if len(d) == 0: + results.append(None) + continue + d = d[0] + d = np.clip(d, 0, None) + + x1, y1, x2, y2 = map(int, d[:-1]) + results.append((x1, y1, x2, y2)) + + return results \ No newline at end of file diff --git a/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/detection/__init__.py b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/detection/__init__.py new file mode 100644 index 0000000..1a6b040 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/detection/__init__.py @@ -0,0 +1 @@ +from .core import FaceDetector \ No newline at end of file diff --git a/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/detection/core.py b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/detection/core.py new file mode 100644 index 0000000..0f8275e --- /dev/null +++ b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/detection/core.py @@ -0,0 +1,130 @@ +import logging +import glob +from tqdm import tqdm +import numpy as np +import torch +import cv2 + + +class FaceDetector(object): + """An abstract class representing a face detector. + + Any other face detection implementation must subclass it. All subclasses + must implement ``detect_from_image``, that return a list of detected + bounding boxes. Optionally, for speed considerations detect from path is + recommended. + """ + + def __init__(self, device, verbose): + self.device = device + self.verbose = verbose + + if verbose: + if 'cpu' in device: + logger = logging.getLogger(__name__) + logger.warning("Detection running on CPU, this may be potentially slow.") + + if 'cpu' not in device and 'cuda' not in device: + if verbose: + logger.error("Expected values for device are: {cpu, cuda} but got: %s", device) + raise ValueError + + def detect_from_image(self, tensor_or_path): + """Detects faces in a given image. + + This function detects the faces present in a provided BGR(usually) + image. The input can be either the image itself or the path to it. + + Arguments: + tensor_or_path {numpy.ndarray, torch.tensor or string} -- the path + to an image or the image itself. + + Example:: + + >>> path_to_image = 'data/image_01.jpg' + ... detected_faces = detect_from_image(path_to_image) + [A list of bounding boxes (x1, y1, x2, y2)] + >>> image = cv2.imread(path_to_image) + ... detected_faces = detect_from_image(image) + [A list of bounding boxes (x1, y1, x2, y2)] + + """ + raise NotImplementedError + + def detect_from_directory(self, path, extensions=['.jpg', '.png'], recursive=False, show_progress_bar=True): + """Detects faces from all the images present in a given directory. + + Arguments: + path {string} -- a string containing a path that points to the folder containing the images + + Keyword Arguments: + extensions {list} -- list of string containing the extensions to be + consider in the following format: ``.extension_name`` (default: + {['.jpg', '.png']}) recursive {bool} -- option wherever to scan the + folder recursively (default: {False}) show_progress_bar {bool} -- + display a progressbar (default: {True}) + + Example: + >>> directory = 'data' + ... detected_faces = detect_from_directory(directory) + {A dictionary of [lists containing bounding boxes(x1, y1, x2, y2)]} + + """ + if self.verbose: + logger = logging.getLogger(__name__) + + if len(extensions) == 0: + if self.verbose: + logger.error("Expected at list one extension, but none was received.") + raise ValueError + + if self.verbose: + logger.info("Constructing the list of images.") + additional_pattern = '/**/*' if recursive else '/*' + files = [] + for extension in extensions: + files.extend(glob.glob(path + additional_pattern + extension, recursive=recursive)) + + if self.verbose: + logger.info("Finished searching for images. %s images found", len(files)) + logger.info("Preparing to run the detection.") + + predictions = {} + for image_path in tqdm(files, disable=not show_progress_bar): + if self.verbose: + logger.info("Running the face detector on image: %s", image_path) + predictions[image_path] = self.detect_from_image(image_path) + + if self.verbose: + logger.info("The detector was successfully run on all %s images", len(files)) + + return predictions + + @property + def reference_scale(self): + raise NotImplementedError + + @property + def reference_x_shift(self): + raise NotImplementedError + + @property + def reference_y_shift(self): + raise NotImplementedError + + @staticmethod + def tensor_or_path_to_ndarray(tensor_or_path, rgb=True): + """Convert path (represented as a string) or torch.tensor to a numpy.ndarray + + Arguments: + tensor_or_path {numpy.ndarray, torch.tensor or string} -- path to the image, or the image itself + """ + if isinstance(tensor_or_path, str): + return cv2.imread(tensor_or_path) if not rgb else cv2.imread(tensor_or_path)[..., ::-1] + elif torch.is_tensor(tensor_or_path): + # Call cpu in case its coming from cuda + return tensor_or_path.cpu().numpy()[..., ::-1].copy() if not rgb else tensor_or_path.cpu().numpy() + elif isinstance(tensor_or_path, np.ndarray): + return tensor_or_path[..., ::-1].copy() if not rgb else tensor_or_path + else: + raise TypeError diff --git a/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/detection/sfd/__init__.py b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/detection/sfd/__init__.py new file mode 100644 index 0000000..5a63ecd --- /dev/null +++ b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/detection/sfd/__init__.py @@ -0,0 +1 @@ +from .sfd_detector import SFDDetector as FaceDetector \ No newline at end of file diff --git a/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/detection/sfd/bbox.py b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/detection/sfd/bbox.py new file mode 100644 index 0000000..4bd7222 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/detection/sfd/bbox.py @@ -0,0 +1,129 @@ +from __future__ import print_function +import os +import sys +import cv2 +import random +import datetime +import time +import math +import argparse +import numpy as np +import torch + +try: + from iou import IOU +except BaseException: + # IOU cython speedup 10x + def IOU(ax1, ay1, ax2, ay2, bx1, by1, bx2, by2): + sa = abs((ax2 - ax1) * (ay2 - ay1)) + sb = abs((bx2 - bx1) * (by2 - by1)) + x1, y1 = max(ax1, bx1), max(ay1, by1) + x2, y2 = min(ax2, bx2), min(ay2, by2) + w = x2 - x1 + h = y2 - y1 + if w < 0 or h < 0: + return 0.0 + else: + return 1.0 * w * h / (sa + sb - w * h) + + +def bboxlog(x1, y1, x2, y2, axc, ayc, aww, ahh): + xc, yc, ww, hh = (x2 + x1) / 2, (y2 + y1) / 2, x2 - x1, y2 - y1 + dx, dy = (xc - axc) / aww, (yc - ayc) / ahh + dw, dh = math.log(ww / aww), math.log(hh / ahh) + return dx, dy, dw, dh + + +def bboxloginv(dx, dy, dw, dh, axc, ayc, aww, ahh): + xc, yc = dx * aww + axc, dy * ahh + ayc + ww, hh = math.exp(dw) * aww, math.exp(dh) * ahh + x1, x2, y1, y2 = xc - ww / 2, xc + ww / 2, yc - hh / 2, yc + hh / 2 + return x1, y1, x2, y2 + + +def nms(dets, thresh): + if 0 == len(dets): + return [] + x1, y1, x2, y2, scores = dets[:, 0], dets[:, 1], dets[:, 2], dets[:, 3], dets[:, 4] + areas = (x2 - x1 + 1) * (y2 - y1 + 1) + order = scores.argsort()[::-1] + + keep = [] + while order.size > 0: + i = order[0] + keep.append(i) + xx1, yy1 = np.maximum(x1[i], x1[order[1:]]), np.maximum(y1[i], y1[order[1:]]) + xx2, yy2 = np.minimum(x2[i], x2[order[1:]]), np.minimum(y2[i], y2[order[1:]]) + + w, h = np.maximum(0.0, xx2 - xx1 + 1), np.maximum(0.0, yy2 - yy1 + 1) + ovr = w * h / (areas[i] + areas[order[1:]] - w * h) + + inds = np.where(ovr <= thresh)[0] + order = order[inds + 1] + + return keep + + +def encode(matched, priors, variances): + """Encode the variances from the priorbox layers into the ground truth boxes + we have matched (based on jaccard overlap) with the prior boxes. + Args: + matched: (tensor) Coords of ground truth for each prior in point-form + Shape: [num_priors, 4]. + priors: (tensor) Prior boxes in center-offset form + Shape: [num_priors,4]. + variances: (list[float]) Variances of priorboxes + Return: + encoded boxes (tensor), Shape: [num_priors, 4] + """ + + # dist b/t match center and prior's center + g_cxcy = (matched[:, :2] + matched[:, 2:]) / 2 - priors[:, :2] + # encode variance + g_cxcy /= (variances[0] * priors[:, 2:]) + # match wh / prior wh + g_wh = (matched[:, 2:] - matched[:, :2]) / priors[:, 2:] + g_wh = torch.log(g_wh) / variances[1] + # return target for smooth_l1_loss + return torch.cat([g_cxcy, g_wh], 1) # [num_priors,4] + + +def decode(loc, priors, variances): + """Decode locations from predictions using priors to undo + the encoding we did for offset regression at train time. + Args: + loc (tensor): location predictions for loc layers, + Shape: [num_priors,4] + priors (tensor): Prior boxes in center-offset form. + Shape: [num_priors,4]. + variances: (list[float]) Variances of priorboxes + Return: + decoded bounding box predictions + """ + + boxes = torch.cat(( + priors[:, :2] + loc[:, :2] * variances[0] * priors[:, 2:], + priors[:, 2:] * torch.exp(loc[:, 2:] * variances[1])), 1) + boxes[:, :2] -= boxes[:, 2:] / 2 + boxes[:, 2:] += boxes[:, :2] + return boxes + +def batch_decode(loc, priors, variances): + """Decode locations from predictions using priors to undo + the encoding we did for offset regression at train time. + Args: + loc (tensor): location predictions for loc layers, + Shape: [num_priors,4] + priors (tensor): Prior boxes in center-offset form. + Shape: [num_priors,4]. + variances: (list[float]) Variances of priorboxes + Return: + decoded bounding box predictions + """ + + boxes = torch.cat(( + priors[:, :, :2] + loc[:, :, :2] * variances[0] * priors[:, :, 2:], + priors[:, :, 2:] * torch.exp(loc[:, :, 2:] * variances[1])), 2) + boxes[:, :, :2] -= boxes[:, :, 2:] / 2 + boxes[:, :, 2:] += boxes[:, :, :2] + return boxes diff --git a/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/detection/sfd/detect.py b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/detection/sfd/detect.py new file mode 100644 index 0000000..efef627 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/detection/sfd/detect.py @@ -0,0 +1,112 @@ +import torch +import torch.nn.functional as F + +import os +import sys +import cv2 +import random +import datetime +import math +import argparse +import numpy as np + +import scipy.io as sio +import zipfile +from .net_s3fd import s3fd +from .bbox import * + + +def detect(net, img, device): + img = img - np.array([104, 117, 123]) + img = img.transpose(2, 0, 1) + img = img.reshape((1,) + img.shape) + + if 'cuda' in device: + torch.backends.cudnn.benchmark = True + + img = torch.from_numpy(img).float().to(device) + BB, CC, HH, WW = img.size() + with torch.no_grad(): + olist = net(img) + + bboxlist = [] + for i in range(len(olist) // 2): + olist[i * 2] = F.softmax(olist[i * 2], dim=1) + olist = [oelem.data.cpu() for oelem in olist] + for i in range(len(olist) // 2): + ocls, oreg = olist[i * 2], olist[i * 2 + 1] + FB, FC, FH, FW = ocls.size() # feature map size + stride = 2**(i + 2) # 4,8,16,32,64,128 + anchor = stride * 4 + poss = zip(*np.where(ocls[:, 1, :, :] > 0.05)) + for Iindex, hindex, windex in poss: + axc, ayc = stride / 2 + windex * stride, stride / 2 + hindex * stride + score = ocls[0, 1, hindex, windex] + loc = oreg[0, :, hindex, windex].contiguous().view(1, 4) + priors = torch.Tensor([[axc / 1.0, ayc / 1.0, stride * 4 / 1.0, stride * 4 / 1.0]]) + variances = [0.1, 0.2] + box = decode(loc, priors, variances) + x1, y1, x2, y2 = box[0] * 1.0 + # cv2.rectangle(imgshow,(int(x1),int(y1)),(int(x2),int(y2)),(0,0,255),1) + bboxlist.append([x1, y1, x2, y2, score]) + bboxlist = np.array(bboxlist) + if 0 == len(bboxlist): + bboxlist = np.zeros((1, 5)) + + return bboxlist + +def batch_detect(net, imgs, device): + imgs = imgs - np.array([104, 117, 123]) + imgs = imgs.transpose(0, 3, 1, 2) + + if 'cuda' in device: + torch.backends.cudnn.benchmark = True + + imgs = torch.from_numpy(imgs).float().to(device) + BB, CC, HH, WW = imgs.size() + with torch.no_grad(): + olist = net(imgs) + + bboxlist = [] + for i in range(len(olist) // 2): + olist[i * 2] = F.softmax(olist[i * 2], dim=1) + olist = [oelem.data.cpu() for oelem in olist] + for i in range(len(olist) // 2): + ocls, oreg = olist[i * 2], olist[i * 2 + 1] + FB, FC, FH, FW = ocls.size() # feature map size + stride = 2**(i + 2) # 4,8,16,32,64,128 + anchor = stride * 4 + poss = zip(*np.where(ocls[:, 1, :, :] > 0.05)) + for Iindex, hindex, windex in poss: + axc, ayc = stride / 2 + windex * stride, stride / 2 + hindex * stride + score = ocls[:, 1, hindex, windex] + loc = oreg[:, :, hindex, windex].contiguous().view(BB, 1, 4) + priors = torch.Tensor([[axc / 1.0, ayc / 1.0, stride * 4 / 1.0, stride * 4 / 1.0]]).view(1, 1, 4) + variances = [0.1, 0.2] + box = batch_decode(loc, priors, variances) + box = box[:, 0] * 1.0 + # cv2.rectangle(imgshow,(int(x1),int(y1)),(int(x2),int(y2)),(0,0,255),1) + bboxlist.append(torch.cat([box, score.unsqueeze(1)], 1).cpu().numpy()) + bboxlist = np.array(bboxlist) + if 0 == len(bboxlist): + bboxlist = np.zeros((1, BB, 5)) + + return bboxlist + +def flip_detect(net, img, device): + img = cv2.flip(img, 1) + b = detect(net, img, device) + + bboxlist = np.zeros(b.shape) + bboxlist[:, 0] = img.shape[1] - b[:, 2] + bboxlist[:, 1] = b[:, 1] + bboxlist[:, 2] = img.shape[1] - b[:, 0] + bboxlist[:, 3] = b[:, 3] + bboxlist[:, 4] = b[:, 4] + return bboxlist + + +def pts_to_bb(pts): + min_x, min_y = np.min(pts, axis=0) + max_x, max_y = np.max(pts, axis=0) + return np.array([min_x, min_y, max_x, max_y]) diff --git a/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/detection/sfd/net_s3fd.py b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/detection/sfd/net_s3fd.py new file mode 100644 index 0000000..fc64313 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/detection/sfd/net_s3fd.py @@ -0,0 +1,129 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F + + +class L2Norm(nn.Module): + def __init__(self, n_channels, scale=1.0): + super(L2Norm, self).__init__() + self.n_channels = n_channels + self.scale = scale + self.eps = 1e-10 + self.weight = nn.Parameter(torch.Tensor(self.n_channels)) + self.weight.data *= 0.0 + self.weight.data += self.scale + + def forward(self, x): + norm = x.pow(2).sum(dim=1, keepdim=True).sqrt() + self.eps + x = x / norm * self.weight.view(1, -1, 1, 1) + return x + + +class s3fd(nn.Module): + def __init__(self): + super(s3fd, self).__init__() + self.conv1_1 = nn.Conv2d(3, 64, kernel_size=3, stride=1, padding=1) + self.conv1_2 = nn.Conv2d(64, 64, kernel_size=3, stride=1, padding=1) + + self.conv2_1 = nn.Conv2d(64, 128, kernel_size=3, stride=1, padding=1) + self.conv2_2 = nn.Conv2d(128, 128, kernel_size=3, stride=1, padding=1) + + self.conv3_1 = nn.Conv2d(128, 256, kernel_size=3, stride=1, padding=1) + self.conv3_2 = nn.Conv2d(256, 256, kernel_size=3, stride=1, padding=1) + self.conv3_3 = nn.Conv2d(256, 256, kernel_size=3, stride=1, padding=1) + + self.conv4_1 = nn.Conv2d(256, 512, kernel_size=3, stride=1, padding=1) + self.conv4_2 = nn.Conv2d(512, 512, kernel_size=3, stride=1, padding=1) + self.conv4_3 = nn.Conv2d(512, 512, kernel_size=3, stride=1, padding=1) + + self.conv5_1 = nn.Conv2d(512, 512, kernel_size=3, stride=1, padding=1) + self.conv5_2 = nn.Conv2d(512, 512, kernel_size=3, stride=1, padding=1) + self.conv5_3 = nn.Conv2d(512, 512, kernel_size=3, stride=1, padding=1) + + self.fc6 = nn.Conv2d(512, 1024, kernel_size=3, stride=1, padding=3) + self.fc7 = nn.Conv2d(1024, 1024, kernel_size=1, stride=1, padding=0) + + self.conv6_1 = nn.Conv2d(1024, 256, kernel_size=1, stride=1, padding=0) + self.conv6_2 = nn.Conv2d(256, 512, kernel_size=3, stride=2, padding=1) + + self.conv7_1 = nn.Conv2d(512, 128, kernel_size=1, stride=1, padding=0) + self.conv7_2 = nn.Conv2d(128, 256, kernel_size=3, stride=2, padding=1) + + self.conv3_3_norm = L2Norm(256, scale=10) + self.conv4_3_norm = L2Norm(512, scale=8) + self.conv5_3_norm = L2Norm(512, scale=5) + + self.conv3_3_norm_mbox_conf = nn.Conv2d(256, 4, kernel_size=3, stride=1, padding=1) + self.conv3_3_norm_mbox_loc = nn.Conv2d(256, 4, kernel_size=3, stride=1, padding=1) + self.conv4_3_norm_mbox_conf = nn.Conv2d(512, 2, kernel_size=3, stride=1, padding=1) + self.conv4_3_norm_mbox_loc = nn.Conv2d(512, 4, kernel_size=3, stride=1, padding=1) + self.conv5_3_norm_mbox_conf = nn.Conv2d(512, 2, kernel_size=3, stride=1, padding=1) + self.conv5_3_norm_mbox_loc = nn.Conv2d(512, 4, kernel_size=3, stride=1, padding=1) + + self.fc7_mbox_conf = nn.Conv2d(1024, 2, kernel_size=3, stride=1, padding=1) + self.fc7_mbox_loc = nn.Conv2d(1024, 4, kernel_size=3, stride=1, padding=1) + self.conv6_2_mbox_conf = nn.Conv2d(512, 2, kernel_size=3, stride=1, padding=1) + self.conv6_2_mbox_loc = nn.Conv2d(512, 4, kernel_size=3, stride=1, padding=1) + self.conv7_2_mbox_conf = nn.Conv2d(256, 2, kernel_size=3, stride=1, padding=1) + self.conv7_2_mbox_loc = nn.Conv2d(256, 4, kernel_size=3, stride=1, padding=1) + + def forward(self, x): + h = F.relu(self.conv1_1(x)) + h = F.relu(self.conv1_2(h)) + h = F.max_pool2d(h, 2, 2) + + h = F.relu(self.conv2_1(h)) + h = F.relu(self.conv2_2(h)) + h = F.max_pool2d(h, 2, 2) + + h = F.relu(self.conv3_1(h)) + h = F.relu(self.conv3_2(h)) + h = F.relu(self.conv3_3(h)) + f3_3 = h + h = F.max_pool2d(h, 2, 2) + + h = F.relu(self.conv4_1(h)) + h = F.relu(self.conv4_2(h)) + h = F.relu(self.conv4_3(h)) + f4_3 = h + h = F.max_pool2d(h, 2, 2) + + h = F.relu(self.conv5_1(h)) + h = F.relu(self.conv5_2(h)) + h = F.relu(self.conv5_3(h)) + f5_3 = h + h = F.max_pool2d(h, 2, 2) + + h = F.relu(self.fc6(h)) + h = F.relu(self.fc7(h)) + ffc7 = h + h = F.relu(self.conv6_1(h)) + h = F.relu(self.conv6_2(h)) + f6_2 = h + h = F.relu(self.conv7_1(h)) + h = F.relu(self.conv7_2(h)) + f7_2 = h + + f3_3 = self.conv3_3_norm(f3_3) + f4_3 = self.conv4_3_norm(f4_3) + f5_3 = self.conv5_3_norm(f5_3) + + cls1 = self.conv3_3_norm_mbox_conf(f3_3) + reg1 = self.conv3_3_norm_mbox_loc(f3_3) + cls2 = self.conv4_3_norm_mbox_conf(f4_3) + reg2 = self.conv4_3_norm_mbox_loc(f4_3) + cls3 = self.conv5_3_norm_mbox_conf(f5_3) + reg3 = self.conv5_3_norm_mbox_loc(f5_3) + cls4 = self.fc7_mbox_conf(ffc7) + reg4 = self.fc7_mbox_loc(ffc7) + cls5 = self.conv6_2_mbox_conf(f6_2) + reg5 = self.conv6_2_mbox_loc(f6_2) + cls6 = self.conv7_2_mbox_conf(f7_2) + reg6 = self.conv7_2_mbox_loc(f7_2) + + # max-out background label + chunk = torch.chunk(cls1, 4, 1) + bmax = torch.max(torch.max(chunk[0], chunk[1]), chunk[2]) + cls1 = torch.cat([bmax, chunk[3]], dim=1) + + return [cls1, reg1, cls2, reg2, cls3, reg3, cls4, reg4, cls5, reg5, cls6, reg6] diff --git a/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/detection/sfd/sfd_detector.py b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/detection/sfd/sfd_detector.py new file mode 100644 index 0000000..8fbce15 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/detection/sfd/sfd_detector.py @@ -0,0 +1,59 @@ +import os +import cv2 +from torch.utils.model_zoo import load_url + +from ..core import FaceDetector + +from .net_s3fd import s3fd +from .bbox import * +from .detect import * + +models_urls = { + 's3fd': 'https://www.adrianbulat.com/downloads/python-fan/s3fd-619a316812.pth', +} + + +class SFDDetector(FaceDetector): + def __init__(self, device, path_to_detector=os.path.join(os.path.dirname(os.path.abspath(__file__)), 's3fd.pth'), verbose=False): + super(SFDDetector, self).__init__(device, verbose) + + # Initialise the face detector + if not os.path.isfile(path_to_detector): + model_weights = load_url(models_urls['s3fd']) + else: + model_weights = torch.load(path_to_detector) + + self.face_detector = s3fd() + self.face_detector.load_state_dict(model_weights) + self.face_detector.to(device) + self.face_detector.eval() + + def detect_from_image(self, tensor_or_path): + image = self.tensor_or_path_to_ndarray(tensor_or_path) + + bboxlist = detect(self.face_detector, image, device=self.device) + keep = nms(bboxlist, 0.3) + bboxlist = bboxlist[keep, :] + bboxlist = [x for x in bboxlist if x[-1] > 0.5] + + return bboxlist + + def detect_from_batch(self, images): + bboxlists = batch_detect(self.face_detector, images, device=self.device) + keeps = [nms(bboxlists[:, i, :], 0.3) for i in range(bboxlists.shape[1])] + bboxlists = [bboxlists[keep, i, :] for i, keep in enumerate(keeps)] + bboxlists = [[x for x in bboxlist if x[-1] > 0.5] for bboxlist in bboxlists] + + return bboxlists + + @property + def reference_scale(self): + return 195 + + @property + def reference_x_shift(self): + return 0 + + @property + def reference_y_shift(self): + return 0 diff --git a/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/models.py b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/models.py new file mode 100644 index 0000000..ee2dde3 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/models.py @@ -0,0 +1,261 @@ +import torch +import torch.nn as nn +import torch.nn.functional as F +import math + + +def conv3x3(in_planes, out_planes, strd=1, padding=1, bias=False): + "3x3 convolution with padding" + return nn.Conv2d(in_planes, out_planes, kernel_size=3, + stride=strd, padding=padding, bias=bias) + + +class ConvBlock(nn.Module): + def __init__(self, in_planes, out_planes): + super(ConvBlock, self).__init__() + self.bn1 = nn.BatchNorm2d(in_planes) + self.conv1 = conv3x3(in_planes, int(out_planes / 2)) + self.bn2 = nn.BatchNorm2d(int(out_planes / 2)) + self.conv2 = conv3x3(int(out_planes / 2), int(out_planes / 4)) + self.bn3 = nn.BatchNorm2d(int(out_planes / 4)) + self.conv3 = conv3x3(int(out_planes / 4), int(out_planes / 4)) + + if in_planes != out_planes: + self.downsample = nn.Sequential( + nn.BatchNorm2d(in_planes), + nn.ReLU(True), + nn.Conv2d(in_planes, out_planes, + kernel_size=1, stride=1, bias=False), + ) + else: + self.downsample = None + + def forward(self, x): + residual = x + + out1 = self.bn1(x) + out1 = F.relu(out1, True) + out1 = self.conv1(out1) + + out2 = self.bn2(out1) + out2 = F.relu(out2, True) + out2 = self.conv2(out2) + + out3 = self.bn3(out2) + out3 = F.relu(out3, True) + out3 = self.conv3(out3) + + out3 = torch.cat((out1, out2, out3), 1) + + if self.downsample is not None: + residual = self.downsample(residual) + + out3 += residual + + return out3 + + +class Bottleneck(nn.Module): + + expansion = 4 + + def __init__(self, inplanes, planes, stride=1, downsample=None): + super(Bottleneck, self).__init__() + self.conv1 = nn.Conv2d(inplanes, planes, kernel_size=1, bias=False) + self.bn1 = nn.BatchNorm2d(planes) + self.conv2 = nn.Conv2d(planes, planes, kernel_size=3, stride=stride, + padding=1, bias=False) + self.bn2 = nn.BatchNorm2d(planes) + self.conv3 = nn.Conv2d(planes, planes * 4, kernel_size=1, bias=False) + self.bn3 = nn.BatchNorm2d(planes * 4) + self.relu = nn.ReLU(inplace=True) + self.downsample = downsample + self.stride = stride + + def forward(self, x): + residual = x + + out = self.conv1(x) + out = self.bn1(out) + out = self.relu(out) + + out = self.conv2(out) + out = self.bn2(out) + out = self.relu(out) + + out = self.conv3(out) + out = self.bn3(out) + + if self.downsample is not None: + residual = self.downsample(x) + + out += residual + out = self.relu(out) + + return out + + +class HourGlass(nn.Module): + def __init__(self, num_modules, depth, num_features): + super(HourGlass, self).__init__() + self.num_modules = num_modules + self.depth = depth + self.features = num_features + + self._generate_network(self.depth) + + def _generate_network(self, level): + self.add_module('b1_' + str(level), ConvBlock(self.features, self.features)) + + self.add_module('b2_' + str(level), ConvBlock(self.features, self.features)) + + if level > 1: + self._generate_network(level - 1) + else: + self.add_module('b2_plus_' + str(level), ConvBlock(self.features, self.features)) + + self.add_module('b3_' + str(level), ConvBlock(self.features, self.features)) + + def _forward(self, level, inp): + # Upper branch + up1 = inp + up1 = self._modules['b1_' + str(level)](up1) + + # Lower branch + low1 = F.avg_pool2d(inp, 2, stride=2) + low1 = self._modules['b2_' + str(level)](low1) + + if level > 1: + low2 = self._forward(level - 1, low1) + else: + low2 = low1 + low2 = self._modules['b2_plus_' + str(level)](low2) + + low3 = low2 + low3 = self._modules['b3_' + str(level)](low3) + + up2 = F.interpolate(low3, scale_factor=2, mode='nearest') + + return up1 + up2 + + def forward(self, x): + return self._forward(self.depth, x) + + +class FAN(nn.Module): + + def __init__(self, num_modules=1): + super(FAN, self).__init__() + self.num_modules = num_modules + + # Base part + self.conv1 = nn.Conv2d(3, 64, kernel_size=7, stride=2, padding=3) + self.bn1 = nn.BatchNorm2d(64) + self.conv2 = ConvBlock(64, 128) + self.conv3 = ConvBlock(128, 128) + self.conv4 = ConvBlock(128, 256) + + # Stacking part + for hg_module in range(self.num_modules): + self.add_module('m' + str(hg_module), HourGlass(1, 4, 256)) + self.add_module('top_m_' + str(hg_module), ConvBlock(256, 256)) + self.add_module('conv_last' + str(hg_module), + nn.Conv2d(256, 256, kernel_size=1, stride=1, padding=0)) + self.add_module('bn_end' + str(hg_module), nn.BatchNorm2d(256)) + self.add_module('l' + str(hg_module), nn.Conv2d(256, + 68, kernel_size=1, stride=1, padding=0)) + + if hg_module < self.num_modules - 1: + self.add_module( + 'bl' + str(hg_module), nn.Conv2d(256, 256, kernel_size=1, stride=1, padding=0)) + self.add_module('al' + str(hg_module), nn.Conv2d(68, + 256, kernel_size=1, stride=1, padding=0)) + + def forward(self, x): + x = F.relu(self.bn1(self.conv1(x)), True) + x = F.avg_pool2d(self.conv2(x), 2, stride=2) + x = self.conv3(x) + x = self.conv4(x) + + previous = x + + outputs = [] + for i in range(self.num_modules): + hg = self._modules['m' + str(i)](previous) + + ll = hg + ll = self._modules['top_m_' + str(i)](ll) + + ll = F.relu(self._modules['bn_end' + str(i)] + (self._modules['conv_last' + str(i)](ll)), True) + + # Predict heatmaps + tmp_out = self._modules['l' + str(i)](ll) + outputs.append(tmp_out) + + if i < self.num_modules - 1: + ll = self._modules['bl' + str(i)](ll) + tmp_out_ = self._modules['al' + str(i)](tmp_out) + previous = previous + ll + tmp_out_ + + return outputs + + +class ResNetDepth(nn.Module): + + def __init__(self, block=Bottleneck, layers=[3, 8, 36, 3], num_classes=68): + self.inplanes = 64 + super(ResNetDepth, self).__init__() + self.conv1 = nn.Conv2d(3 + 68, 64, kernel_size=7, stride=2, padding=3, + bias=False) + self.bn1 = nn.BatchNorm2d(64) + self.relu = nn.ReLU(inplace=True) + self.maxpool = nn.MaxPool2d(kernel_size=3, stride=2, padding=1) + self.layer1 = self._make_layer(block, 64, layers[0]) + self.layer2 = self._make_layer(block, 128, layers[1], stride=2) + self.layer3 = self._make_layer(block, 256, layers[2], stride=2) + self.layer4 = self._make_layer(block, 512, layers[3], stride=2) + self.avgpool = nn.AvgPool2d(7) + self.fc = nn.Linear(512 * block.expansion, num_classes) + + for m in self.modules(): + if isinstance(m, nn.Conv2d): + n = m.kernel_size[0] * m.kernel_size[1] * m.out_channels + m.weight.data.normal_(0, math.sqrt(2. / n)) + elif isinstance(m, nn.BatchNorm2d): + m.weight.data.fill_(1) + m.bias.data.zero_() + + def _make_layer(self, block, planes, blocks, stride=1): + downsample = None + if stride != 1 or self.inplanes != planes * block.expansion: + downsample = nn.Sequential( + nn.Conv2d(self.inplanes, planes * block.expansion, + kernel_size=1, stride=stride, bias=False), + nn.BatchNorm2d(planes * block.expansion), + ) + + layers = [] + layers.append(block(self.inplanes, planes, stride, downsample)) + self.inplanes = planes * block.expansion + for i in range(1, blocks): + layers.append(block(self.inplanes, planes)) + + return nn.Sequential(*layers) + + def forward(self, x): + x = self.conv1(x) + x = self.bn1(x) + x = self.relu(x) + x = self.maxpool(x) + + x = self.layer1(x) + x = self.layer2(x) + x = self.layer3(x) + x = self.layer4(x) + + x = self.avgpool(x) + x = x.view(x.size(0), -1) + x = self.fc(x) + + return x diff --git a/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/utils.py b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/utils.py new file mode 100644 index 0000000..3dc4cf3 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/face_detection/utils.py @@ -0,0 +1,313 @@ +from __future__ import print_function +import os +import sys +import time +import torch +import math +import numpy as np +import cv2 + + +def _gaussian( + size=3, sigma=0.25, amplitude=1, normalize=False, width=None, + height=None, sigma_horz=None, sigma_vert=None, mean_horz=0.5, + mean_vert=0.5): + # handle some defaults + if width is None: + width = size + if height is None: + height = size + if sigma_horz is None: + sigma_horz = sigma + if sigma_vert is None: + sigma_vert = sigma + center_x = mean_horz * width + 0.5 + center_y = mean_vert * height + 0.5 + gauss = np.empty((height, width), dtype=np.float32) + # generate kernel + for i in range(height): + for j in range(width): + gauss[i][j] = amplitude * math.exp(-(math.pow((j + 1 - center_x) / ( + sigma_horz * width), 2) / 2.0 + math.pow((i + 1 - center_y) / (sigma_vert * height), 2) / 2.0)) + if normalize: + gauss = gauss / np.sum(gauss) + return gauss + + +def draw_gaussian(image, point, sigma): + # Check if the gaussian is inside + ul = [math.floor(point[0] - 3 * sigma), math.floor(point[1] - 3 * sigma)] + br = [math.floor(point[0] + 3 * sigma), math.floor(point[1] + 3 * sigma)] + if (ul[0] > image.shape[1] or ul[1] > image.shape[0] or br[0] < 1 or br[1] < 1): + return image + size = 6 * sigma + 1 + g = _gaussian(size) + g_x = [int(max(1, -ul[0])), int(min(br[0], image.shape[1])) - int(max(1, ul[0])) + int(max(1, -ul[0]))] + g_y = [int(max(1, -ul[1])), int(min(br[1], image.shape[0])) - int(max(1, ul[1])) + int(max(1, -ul[1]))] + img_x = [int(max(1, ul[0])), int(min(br[0], image.shape[1]))] + img_y = [int(max(1, ul[1])), int(min(br[1], image.shape[0]))] + assert (g_x[0] > 0 and g_y[1] > 0) + image[img_y[0] - 1:img_y[1], img_x[0] - 1:img_x[1] + ] = image[img_y[0] - 1:img_y[1], img_x[0] - 1:img_x[1]] + g[g_y[0] - 1:g_y[1], g_x[0] - 1:g_x[1]] + image[image > 1] = 1 + return image + + +def transform(point, center, scale, resolution, invert=False): + """Generate and affine transformation matrix. + + Given a set of points, a center, a scale and a targer resolution, the + function generates and affine transformation matrix. If invert is ``True`` + it will produce the inverse transformation. + + Arguments: + point {torch.tensor} -- the input 2D point + center {torch.tensor or numpy.array} -- the center around which to perform the transformations + scale {float} -- the scale of the face/object + resolution {float} -- the output resolution + + Keyword Arguments: + invert {bool} -- define wherever the function should produce the direct or the + inverse transformation matrix (default: {False}) + """ + _pt = torch.ones(3) + _pt[0] = point[0] + _pt[1] = point[1] + + h = 200.0 * scale + t = torch.eye(3) + t[0, 0] = resolution / h + t[1, 1] = resolution / h + t[0, 2] = resolution * (-center[0] / h + 0.5) + t[1, 2] = resolution * (-center[1] / h + 0.5) + + if invert: + t = torch.inverse(t) + + new_point = (torch.matmul(t, _pt))[0:2] + + return new_point.int() + + +def crop(image, center, scale, resolution=256.0): + """Center crops an image or set of heatmaps + + Arguments: + image {numpy.array} -- an rgb image + center {numpy.array} -- the center of the object, usually the same as of the bounding box + scale {float} -- scale of the face + + Keyword Arguments: + resolution {float} -- the size of the output cropped image (default: {256.0}) + + Returns: + [type] -- [description] + """ # Crop around the center point + """ Crops the image around the center. Input is expected to be an np.ndarray """ + ul = transform([1, 1], center, scale, resolution, True) + br = transform([resolution, resolution], center, scale, resolution, True) + # pad = math.ceil(torch.norm((ul - br).float()) / 2.0 - (br[0] - ul[0]) / 2.0) + if image.ndim > 2: + newDim = np.array([br[1] - ul[1], br[0] - ul[0], + image.shape[2]], dtype=np.int32) + newImg = np.zeros(newDim, dtype=np.uint8) + else: + newDim = np.array([br[1] - ul[1], br[0] - ul[0]], dtype=np.int) + newImg = np.zeros(newDim, dtype=np.uint8) + ht = image.shape[0] + wd = image.shape[1] + newX = np.array( + [max(1, -ul[0] + 1), min(br[0], wd) - ul[0]], dtype=np.int32) + newY = np.array( + [max(1, -ul[1] + 1), min(br[1], ht) - ul[1]], dtype=np.int32) + oldX = np.array([max(1, ul[0] + 1), min(br[0], wd)], dtype=np.int32) + oldY = np.array([max(1, ul[1] + 1), min(br[1], ht)], dtype=np.int32) + newImg[newY[0] - 1:newY[1], newX[0] - 1:newX[1] + ] = image[oldY[0] - 1:oldY[1], oldX[0] - 1:oldX[1], :] + newImg = cv2.resize(newImg, dsize=(int(resolution), int(resolution)), + interpolation=cv2.INTER_LINEAR) + return newImg + + +def get_preds_fromhm(hm, center=None, scale=None): + """Obtain (x,y) coordinates given a set of N heatmaps. If the center + and the scale is provided the function will return the points also in + the original coordinate frame. + + Arguments: + hm {torch.tensor} -- the predicted heatmaps, of shape [B, N, W, H] + + Keyword Arguments: + center {torch.tensor} -- the center of the bounding box (default: {None}) + scale {float} -- face scale (default: {None}) + """ + max, idx = torch.max( + hm.view(hm.size(0), hm.size(1), hm.size(2) * hm.size(3)), 2) + idx += 1 + preds = idx.view(idx.size(0), idx.size(1), 1).repeat(1, 1, 2).float() + preds[..., 0].apply_(lambda x: (x - 1) % hm.size(3) + 1) + preds[..., 1].add_(-1).div_(hm.size(2)).floor_().add_(1) + + for i in range(preds.size(0)): + for j in range(preds.size(1)): + hm_ = hm[i, j, :] + pX, pY = int(preds[i, j, 0]) - 1, int(preds[i, j, 1]) - 1 + if pX > 0 and pX < 63 and pY > 0 and pY < 63: + diff = torch.FloatTensor( + [hm_[pY, pX + 1] - hm_[pY, pX - 1], + hm_[pY + 1, pX] - hm_[pY - 1, pX]]) + preds[i, j].add_(diff.sign_().mul_(.25)) + + preds.add_(-.5) + + preds_orig = torch.zeros(preds.size()) + if center is not None and scale is not None: + for i in range(hm.size(0)): + for j in range(hm.size(1)): + preds_orig[i, j] = transform( + preds[i, j], center, scale, hm.size(2), True) + + return preds, preds_orig + +def get_preds_fromhm_batch(hm, centers=None, scales=None): + """Obtain (x,y) coordinates given a set of N heatmaps. If the centers + and the scales is provided the function will return the points also in + the original coordinate frame. + + Arguments: + hm {torch.tensor} -- the predicted heatmaps, of shape [B, N, W, H] + + Keyword Arguments: + centers {torch.tensor} -- the centers of the bounding box (default: {None}) + scales {float} -- face scales (default: {None}) + """ + max, idx = torch.max( + hm.view(hm.size(0), hm.size(1), hm.size(2) * hm.size(3)), 2) + idx += 1 + preds = idx.view(idx.size(0), idx.size(1), 1).repeat(1, 1, 2).float() + preds[..., 0].apply_(lambda x: (x - 1) % hm.size(3) + 1) + preds[..., 1].add_(-1).div_(hm.size(2)).floor_().add_(1) + + for i in range(preds.size(0)): + for j in range(preds.size(1)): + hm_ = hm[i, j, :] + pX, pY = int(preds[i, j, 0]) - 1, int(preds[i, j, 1]) - 1 + if pX > 0 and pX < 63 and pY > 0 and pY < 63: + diff = torch.FloatTensor( + [hm_[pY, pX + 1] - hm_[pY, pX - 1], + hm_[pY + 1, pX] - hm_[pY - 1, pX]]) + preds[i, j].add_(diff.sign_().mul_(.25)) + + preds.add_(-.5) + + preds_orig = torch.zeros(preds.size()) + if centers is not None and scales is not None: + for i in range(hm.size(0)): + for j in range(hm.size(1)): + preds_orig[i, j] = transform( + preds[i, j], centers[i], scales[i], hm.size(2), True) + + return preds, preds_orig + +def shuffle_lr(parts, pairs=None): + """Shuffle the points left-right according to the axis of symmetry + of the object. + + Arguments: + parts {torch.tensor} -- a 3D or 4D object containing the + heatmaps. + + Keyword Arguments: + pairs {list of integers} -- [order of the flipped points] (default: {None}) + """ + if pairs is None: + pairs = [16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, + 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 27, 28, 29, 30, 35, + 34, 33, 32, 31, 45, 44, 43, 42, 47, 46, 39, 38, 37, 36, 41, + 40, 54, 53, 52, 51, 50, 49, 48, 59, 58, 57, 56, 55, 64, 63, + 62, 61, 60, 67, 66, 65] + if parts.ndimension() == 3: + parts = parts[pairs, ...] + else: + parts = parts[:, pairs, ...] + + return parts + + +def flip(tensor, is_label=False): + """Flip an image or a set of heatmaps left-right + + Arguments: + tensor {numpy.array or torch.tensor} -- [the input image or heatmaps] + + Keyword Arguments: + is_label {bool} -- [denote wherever the input is an image or a set of heatmaps ] (default: {False}) + """ + if not torch.is_tensor(tensor): + tensor = torch.from_numpy(tensor) + + if is_label: + tensor = shuffle_lr(tensor).flip(tensor.ndimension() - 1) + else: + tensor = tensor.flip(tensor.ndimension() - 1) + + return tensor + +# From pyzolib/paths.py (https://bitbucket.org/pyzo/pyzolib/src/tip/paths.py) + + +def appdata_dir(appname=None, roaming=False): + """ appdata_dir(appname=None, roaming=False) + + Get the path to the application directory, where applications are allowed + to write user specific files (e.g. configurations). For non-user specific + data, consider using common_appdata_dir(). + If appname is given, a subdir is appended (and created if necessary). + If roaming is True, will prefer a roaming directory (Windows Vista/7). + """ + + # Define default user directory + userDir = os.getenv('FACEALIGNMENT_USERDIR', None) + if userDir is None: + userDir = os.path.expanduser('~') + if not os.path.isdir(userDir): # pragma: no cover + userDir = '/var/tmp' # issue #54 + + # Get system app data dir + path = None + if sys.platform.startswith('win'): + path1, path2 = os.getenv('LOCALAPPDATA'), os.getenv('APPDATA') + path = (path2 or path1) if roaming else (path1 or path2) + elif sys.platform.startswith('darwin'): + path = os.path.join(userDir, 'Library', 'Application Support') + # On Linux and as fallback + if not (path and os.path.isdir(path)): + path = userDir + + # Maybe we should store things local to the executable (in case of a + # portable distro or a frozen application that wants to be portable) + prefix = sys.prefix + if getattr(sys, 'frozen', None): + prefix = os.path.abspath(os.path.dirname(sys.executable)) + for reldir in ('settings', '../settings'): + localpath = os.path.abspath(os.path.join(prefix, reldir)) + if os.path.isdir(localpath): # pragma: no cover + try: + open(os.path.join(localpath, 'test.write'), 'wb').close() + os.remove(os.path.join(localpath, 'test.write')) + except IOError: + pass # We cannot write in this directory + else: + path = localpath + break + + # Get path specific for this app + if appname: + if path == userDir: + appname = '.' + appname.lstrip('.') # Make it a hidden directory + path = os.path.join(path, appname) + if not os.path.isdir(path): # pragma: no cover + os.mkdir(path) + + # Done + return path diff --git a/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/filelists/README.md b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/filelists/README.md new file mode 100644 index 0000000..e7d7e7b --- /dev/null +++ b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/filelists/README.md @@ -0,0 +1 @@ +Place LRS2 (and any other) filelists here for training. \ No newline at end of file diff --git a/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/hparams.py b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/hparams.py new file mode 100644 index 0000000..1c01904 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/hparams.py @@ -0,0 +1,101 @@ +from glob import glob +import os + +def get_image_list(data_root, split): + filelist = [] + + with open('filelists/{}.txt'.format(split)) as f: + for line in f: + line = line.strip() + if ' ' in line: line = line.split()[0] + filelist.append(os.path.join(data_root, line)) + + return filelist + +class HParams: + def __init__(self, **kwargs): + self.data = {} + + for key, value in kwargs.items(): + self.data[key] = value + + def __getattr__(self, key): + if key not in self.data: + raise AttributeError("'HParams' object has no attribute %s" % key) + return self.data[key] + + def set_hparam(self, key, value): + self.data[key] = value + + +# Default hyperparameters +hparams = HParams( + num_mels=80, # Number of mel-spectrogram channels and local conditioning dimensionality + # network + rescale=True, # Whether to rescale audio prior to preprocessing + rescaling_max=0.9, # Rescaling value + + # Use LWS (https://github.com/Jonathan-LeRoux/lws) for STFT and phase reconstruction + # It"s preferred to set True to use with https://github.com/r9y9/wavenet_vocoder + # Does not work if n_ffit is not multiple of hop_size!! + use_lws=False, + + n_fft=800, # Extra window size is filled with 0 paddings to match this parameter + hop_size=200, # For 16000Hz, 200 = 12.5 ms (0.0125 * sample_rate) + win_size=800, # For 16000Hz, 800 = 50 ms (If None, win_size = n_fft) (0.05 * sample_rate) + sample_rate=16000, # 16000Hz (corresponding to librispeech) (sox --i ) + + frame_shift_ms=None, # Can replace hop_size parameter. (Recommended: 12.5) + + # Mel and Linear spectrograms normalization/scaling and clipping + signal_normalization=True, + # Whether to normalize mel spectrograms to some predefined range (following below parameters) + allow_clipping_in_normalization=True, # Only relevant if mel_normalization = True + symmetric_mels=True, + # Whether to scale the data to be symmetric around 0. (Also multiplies the output range by 2, + # faster and cleaner convergence) + max_abs_value=4., + # max absolute value of data. If symmetric, data will be [-max, max] else [0, max] (Must not + # be too big to avoid gradient explosion, + # not too small for fast convergence) + # Contribution by @begeekmyfriend + # Spectrogram Pre-Emphasis (Lfilter: Reduce spectrogram noise and helps model certitude + # levels. Also allows for better G&L phase reconstruction) + preemphasize=True, # whether to apply filter + preemphasis=0.97, # filter coefficient. + + # Limits + min_level_db=-100, + ref_level_db=20, + fmin=55, + # Set this to 55 if your speaker is male! if female, 95 should help taking off noise. (To + # test depending on dataset. Pitch info: male~[65, 260], female~[100, 525]) + fmax=7600, # To be increased/reduced depending on data. + + ###################### Our training parameters ################################# + img_size=96, + fps=25, + + batch_size=16, + initial_learning_rate=1e-4, + nepochs=200000000000000000, ### ctrl + c, stop whenever eval loss is consistently greater than train loss for ~10 epochs + num_workers=16, + checkpoint_interval=3000, + eval_interval=3000, + save_optimizer_state=True, + + syncnet_wt=0.0, # is initially zero, will be set automatically to 0.03 later. Leads to faster convergence. + syncnet_batch_size=64, + syncnet_lr=1e-4, + syncnet_eval_interval=10000, + syncnet_checkpoint_interval=10000, + + disc_wt=0.07, + disc_initial_learning_rate=1e-4, +) + + +def hparams_debug_string(): + values = hparams.values() + hp = [" %s: %s" % (name, values[name]) for name in sorted(values) if name != "sentences"] + return "Hyperparameters:\n" + "\n".join(hp) diff --git a/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/hq_wav2lip_train.py b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/hq_wav2lip_train.py new file mode 100644 index 0000000..c384ad9 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/hq_wav2lip_train.py @@ -0,0 +1,443 @@ +from os.path import dirname, join, basename, isfile +from tqdm import tqdm + +from models import SyncNet_color as SyncNet +from models import Wav2Lip, Wav2Lip_disc_qual +import audio + +import torch +from torch import nn +from torch.nn import functional as F +from torch import optim +import torch.backends.cudnn as cudnn +from torch.utils import data as data_utils +import numpy as np + +from glob import glob + +import os, random, cv2, argparse +from hparams import hparams, get_image_list + +parser = argparse.ArgumentParser(description='Code to train the Wav2Lip model WITH the visual quality discriminator') + +parser.add_argument("--data_root", help="Root folder of the preprocessed LRS2 dataset", required=True, type=str) + +parser.add_argument('--checkpoint_dir', help='Save checkpoints to this directory', required=True, type=str) +parser.add_argument('--syncnet_checkpoint_path', help='Load the pre-trained Expert discriminator', required=True, type=str) + +parser.add_argument('--checkpoint_path', help='Resume generator from this checkpoint', default=None, type=str) +parser.add_argument('--disc_checkpoint_path', help='Resume quality disc from this checkpoint', default=None, type=str) + +args = parser.parse_args() + + +global_step = 0 +global_epoch = 0 +use_cuda = torch.cuda.is_available() +print('use_cuda: {}'.format(use_cuda)) + +syncnet_T = 5 +syncnet_mel_step_size = 16 + +class Dataset(object): + def __init__(self, split): + self.all_videos = get_image_list(args.data_root, split) + + def get_frame_id(self, frame): + return int(basename(frame).split('.')[0]) + + def get_window(self, start_frame): + start_id = self.get_frame_id(start_frame) + vidname = dirname(start_frame) + + window_fnames = [] + for frame_id in range(start_id, start_id + syncnet_T): + frame = join(vidname, '{}.jpg'.format(frame_id)) + if not isfile(frame): + return None + window_fnames.append(frame) + return window_fnames + + def read_window(self, window_fnames): + if window_fnames is None: return None + window = [] + for fname in window_fnames: + img = cv2.imread(fname) + if img is None: + return None + try: + img = cv2.resize(img, (hparams.img_size, hparams.img_size)) + except Exception as e: + return None + + window.append(img) + + return window + + def crop_audio_window(self, spec, start_frame): + if type(start_frame) == int: + start_frame_num = start_frame + else: + start_frame_num = self.get_frame_id(start_frame) + start_idx = int(80. * (start_frame_num / float(hparams.fps))) + + end_idx = start_idx + syncnet_mel_step_size + + return spec[start_idx : end_idx, :] + + def get_segmented_mels(self, spec, start_frame): + mels = [] + assert syncnet_T == 5 + start_frame_num = self.get_frame_id(start_frame) + 1 # 0-indexing ---> 1-indexing + if start_frame_num - 2 < 0: return None + for i in range(start_frame_num, start_frame_num + syncnet_T): + m = self.crop_audio_window(spec, i - 2) + if m.shape[0] != syncnet_mel_step_size: + return None + mels.append(m.T) + + mels = np.asarray(mels) + + return mels + + def prepare_window(self, window): + # 3 x T x H x W + x = np.asarray(window) / 255. + x = np.transpose(x, (3, 0, 1, 2)) + + return x + + def __len__(self): + return len(self.all_videos) + + def __getitem__(self, idx): + while 1: + idx = random.randint(0, len(self.all_videos) - 1) + vidname = self.all_videos[idx] + img_names = list(glob(join(vidname, '*.jpg'))) + if len(img_names) <= 3 * syncnet_T: + continue + + img_name = random.choice(img_names) + wrong_img_name = random.choice(img_names) + while wrong_img_name == img_name: + wrong_img_name = random.choice(img_names) + + window_fnames = self.get_window(img_name) + wrong_window_fnames = self.get_window(wrong_img_name) + if window_fnames is None or wrong_window_fnames is None: + continue + + window = self.read_window(window_fnames) + if window is None: + continue + + wrong_window = self.read_window(wrong_window_fnames) + if wrong_window is None: + continue + + try: + wavpath = join(vidname, "audio.wav") + wav = audio.load_wav(wavpath, hparams.sample_rate) + + orig_mel = audio.melspectrogram(wav).T + except Exception as e: + continue + + mel = self.crop_audio_window(orig_mel.copy(), img_name) + + if (mel.shape[0] != syncnet_mel_step_size): + continue + + indiv_mels = self.get_segmented_mels(orig_mel.copy(), img_name) + if indiv_mels is None: continue + + window = self.prepare_window(window) + y = window.copy() + window[:, :, window.shape[2]//2:] = 0. + + wrong_window = self.prepare_window(wrong_window) + x = np.concatenate([window, wrong_window], axis=0) + + x = torch.FloatTensor(x) + mel = torch.FloatTensor(mel.T).unsqueeze(0) + indiv_mels = torch.FloatTensor(indiv_mels).unsqueeze(1) + y = torch.FloatTensor(y) + return x, indiv_mels, mel, y + +def save_sample_images(x, g, gt, global_step, checkpoint_dir): + x = (x.detach().cpu().numpy().transpose(0, 2, 3, 4, 1) * 255.).astype(np.uint8) + g = (g.detach().cpu().numpy().transpose(0, 2, 3, 4, 1) * 255.).astype(np.uint8) + gt = (gt.detach().cpu().numpy().transpose(0, 2, 3, 4, 1) * 255.).astype(np.uint8) + + refs, inps = x[..., 3:], x[..., :3] + folder = join(checkpoint_dir, "samples_step{:09d}".format(global_step)) + if not os.path.exists(folder): os.mkdir(folder) + collage = np.concatenate((refs, inps, g, gt), axis=-2) + for batch_idx, c in enumerate(collage): + for t in range(len(c)): + cv2.imwrite('{}/{}_{}.jpg'.format(folder, batch_idx, t), c[t]) + +logloss = nn.BCELoss() +def cosine_loss(a, v, y): + d = nn.functional.cosine_similarity(a, v) + loss = logloss(d.unsqueeze(1), y) + + return loss + +device = torch.device("cuda" if use_cuda else "cpu") +syncnet = SyncNet().to(device) +for p in syncnet.parameters(): + p.requires_grad = False + +recon_loss = nn.L1Loss() +def get_sync_loss(mel, g): + g = g[:, :, :, g.size(3)//2:] + g = torch.cat([g[:, :, i] for i in range(syncnet_T)], dim=1) + # B, 3 * T, H//2, W + a, v = syncnet(mel, g) + y = torch.ones(g.size(0), 1).float().to(device) + return cosine_loss(a, v, y) + +def train(device, model, disc, train_data_loader, test_data_loader, optimizer, disc_optimizer, + checkpoint_dir=None, checkpoint_interval=None, nepochs=None): + global global_step, global_epoch + resumed_step = global_step + + while global_epoch < nepochs: + print('Starting Epoch: {}'.format(global_epoch)) + running_sync_loss, running_l1_loss, disc_loss, running_perceptual_loss = 0., 0., 0., 0. + running_disc_real_loss, running_disc_fake_loss = 0., 0. + prog_bar = tqdm(enumerate(train_data_loader)) + for step, (x, indiv_mels, mel, gt) in prog_bar: + disc.train() + model.train() + + x = x.to(device) + mel = mel.to(device) + indiv_mels = indiv_mels.to(device) + gt = gt.to(device) + + ### Train generator now. Remove ALL grads. + optimizer.zero_grad() + disc_optimizer.zero_grad() + + g = model(indiv_mels, x) + + if hparams.syncnet_wt > 0.: + sync_loss = get_sync_loss(mel, g) + else: + sync_loss = 0. + + if hparams.disc_wt > 0.: + perceptual_loss = disc.perceptual_forward(g) + else: + perceptual_loss = 0. + + l1loss = recon_loss(g, gt) + + loss = hparams.syncnet_wt * sync_loss + hparams.disc_wt * perceptual_loss + \ + (1. - hparams.syncnet_wt - hparams.disc_wt) * l1loss + + loss.backward() + optimizer.step() + + ### Remove all gradients before Training disc + disc_optimizer.zero_grad() + + pred = disc(gt) + disc_real_loss = F.binary_cross_entropy(pred, torch.ones((len(pred), 1)).to(device)) + disc_real_loss.backward() + + pred = disc(g.detach()) + disc_fake_loss = F.binary_cross_entropy(pred, torch.zeros((len(pred), 1)).to(device)) + disc_fake_loss.backward() + + disc_optimizer.step() + + running_disc_real_loss += disc_real_loss.item() + running_disc_fake_loss += disc_fake_loss.item() + + if global_step % checkpoint_interval == 0: + save_sample_images(x, g, gt, global_step, checkpoint_dir) + + # Logs + global_step += 1 + cur_session_steps = global_step - resumed_step + + running_l1_loss += l1loss.item() + if hparams.syncnet_wt > 0.: + running_sync_loss += sync_loss.item() + else: + running_sync_loss += 0. + + if hparams.disc_wt > 0.: + running_perceptual_loss += perceptual_loss.item() + else: + running_perceptual_loss += 0. + + if global_step == 1 or global_step % checkpoint_interval == 0: + save_checkpoint( + model, optimizer, global_step, checkpoint_dir, global_epoch) + save_checkpoint(disc, disc_optimizer, global_step, checkpoint_dir, global_epoch, prefix='disc_') + + + if global_step % hparams.eval_interval == 0: + with torch.no_grad(): + average_sync_loss = eval_model(test_data_loader, global_step, device, model, disc) + + if average_sync_loss < .75: + hparams.set_hparam('syncnet_wt', 0.03) + + prog_bar.set_description('L1: {}, Sync: {}, Percep: {} | Fake: {}, Real: {}'.format(running_l1_loss / (step + 1), + running_sync_loss / (step + 1), + running_perceptual_loss / (step + 1), + running_disc_fake_loss / (step + 1), + running_disc_real_loss / (step + 1))) + + global_epoch += 1 + +def eval_model(test_data_loader, global_step, device, model, disc): + eval_steps = 300 + print('Evaluating for {} steps'.format(eval_steps)) + running_sync_loss, running_l1_loss, running_disc_real_loss, running_disc_fake_loss, running_perceptual_loss = [], [], [], [], [] + while 1: + for step, (x, indiv_mels, mel, gt) in enumerate((test_data_loader)): + model.eval() + disc.eval() + + x = x.to(device) + mel = mel.to(device) + indiv_mels = indiv_mels.to(device) + gt = gt.to(device) + + pred = disc(gt) + disc_real_loss = F.binary_cross_entropy(pred, torch.ones((len(pred), 1)).to(device)) + + g = model(indiv_mels, x) + pred = disc(g) + disc_fake_loss = F.binary_cross_entropy(pred, torch.zeros((len(pred), 1)).to(device)) + + running_disc_real_loss.append(disc_real_loss.item()) + running_disc_fake_loss.append(disc_fake_loss.item()) + + sync_loss = get_sync_loss(mel, g) + + if hparams.disc_wt > 0.: + perceptual_loss = disc.perceptual_forward(g) + else: + perceptual_loss = 0. + + l1loss = recon_loss(g, gt) + + loss = hparams.syncnet_wt * sync_loss + hparams.disc_wt * perceptual_loss + \ + (1. - hparams.syncnet_wt - hparams.disc_wt) * l1loss + + running_l1_loss.append(l1loss.item()) + running_sync_loss.append(sync_loss.item()) + + if hparams.disc_wt > 0.: + running_perceptual_loss.append(perceptual_loss.item()) + else: + running_perceptual_loss.append(0.) + + if step > eval_steps: break + + print('L1: {}, Sync: {}, Percep: {} | Fake: {}, Real: {}'.format(sum(running_l1_loss) / len(running_l1_loss), + sum(running_sync_loss) / len(running_sync_loss), + sum(running_perceptual_loss) / len(running_perceptual_loss), + sum(running_disc_fake_loss) / len(running_disc_fake_loss), + sum(running_disc_real_loss) / len(running_disc_real_loss))) + return sum(running_sync_loss) / len(running_sync_loss) + + +def save_checkpoint(model, optimizer, step, checkpoint_dir, epoch, prefix=''): + checkpoint_path = join( + checkpoint_dir, "{}checkpoint_step{:09d}.pth".format(prefix, global_step)) + optimizer_state = optimizer.state_dict() if hparams.save_optimizer_state else None + torch.save({ + "state_dict": model.state_dict(), + "optimizer": optimizer_state, + "global_step": step, + "global_epoch": epoch, + }, checkpoint_path) + print("Saved checkpoint:", checkpoint_path) + +def _load(checkpoint_path): + if use_cuda: + checkpoint = torch.load(checkpoint_path) + else: + checkpoint = torch.load(checkpoint_path, + map_location=lambda storage, loc: storage) + return checkpoint + + +def load_checkpoint(path, model, optimizer, reset_optimizer=False, overwrite_global_states=True): + global global_step + global global_epoch + + print("Load checkpoint from: {}".format(path)) + checkpoint = _load(path) + s = checkpoint["state_dict"] + new_s = {} + for k, v in s.items(): + new_s[k.replace('module.', '')] = v + model.load_state_dict(new_s) + if not reset_optimizer: + optimizer_state = checkpoint["optimizer"] + if optimizer_state is not None: + print("Load optimizer state from {}".format(path)) + optimizer.load_state_dict(checkpoint["optimizer"]) + if overwrite_global_states: + global_step = checkpoint["global_step"] + global_epoch = checkpoint["global_epoch"] + + return model + +if __name__ == "__main__": + checkpoint_dir = args.checkpoint_dir + + # Dataset and Dataloader setup + train_dataset = Dataset('train') + test_dataset = Dataset('val') + + train_data_loader = data_utils.DataLoader( + train_dataset, batch_size=hparams.batch_size, shuffle=True, + num_workers=hparams.num_workers) + + test_data_loader = data_utils.DataLoader( + test_dataset, batch_size=hparams.batch_size, + num_workers=4) + + device = torch.device("cuda" if use_cuda else "cpu") + + # Model + model = Wav2Lip().to(device) + disc = Wav2Lip_disc_qual().to(device) + + print('total trainable params {}'.format(sum(p.numel() for p in model.parameters() if p.requires_grad))) + print('total DISC trainable params {}'.format(sum(p.numel() for p in disc.parameters() if p.requires_grad))) + + optimizer = optim.Adam([p for p in model.parameters() if p.requires_grad], + lr=hparams.initial_learning_rate, betas=(0.5, 0.999)) + disc_optimizer = optim.Adam([p for p in disc.parameters() if p.requires_grad], + lr=hparams.disc_initial_learning_rate, betas=(0.5, 0.999)) + + if args.checkpoint_path is not None: + load_checkpoint(args.checkpoint_path, model, optimizer, reset_optimizer=False) + + if args.disc_checkpoint_path is not None: + load_checkpoint(args.disc_checkpoint_path, disc, disc_optimizer, + reset_optimizer=False, overwrite_global_states=False) + + load_checkpoint(args.syncnet_checkpoint_path, syncnet, None, reset_optimizer=True, + overwrite_global_states=False) + + if not os.path.exists(checkpoint_dir): + os.mkdir(checkpoint_dir) + + # Train! + train(device, model, disc, train_data_loader, test_data_loader, optimizer, disc_optimizer, + checkpoint_dir=checkpoint_dir, + checkpoint_interval=hparams.checkpoint_interval, + nepochs=hparams.nepochs) diff --git a/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/models/__init__.py b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/models/__init__.py new file mode 100644 index 0000000..4374370 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/models/__init__.py @@ -0,0 +1,2 @@ +from .wav2lip import Wav2Lip, Wav2Lip_disc_qual +from .syncnet import SyncNet_color \ No newline at end of file diff --git a/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/models/conv.py b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/models/conv.py new file mode 100644 index 0000000..ed83da0 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/models/conv.py @@ -0,0 +1,44 @@ +import torch +from torch import nn +from torch.nn import functional as F + +class Conv2d(nn.Module): + def __init__(self, cin, cout, kernel_size, stride, padding, residual=False, *args, **kwargs): + super().__init__(*args, **kwargs) + self.conv_block = nn.Sequential( + nn.Conv2d(cin, cout, kernel_size, stride, padding), + nn.BatchNorm2d(cout) + ) + self.act = nn.ReLU() + self.residual = residual + + def forward(self, x): + out = self.conv_block(x) + if self.residual: + out += x + return self.act(out) + +class nonorm_Conv2d(nn.Module): + def __init__(self, cin, cout, kernel_size, stride, padding, residual=False, *args, **kwargs): + super().__init__(*args, **kwargs) + self.conv_block = nn.Sequential( + nn.Conv2d(cin, cout, kernel_size, stride, padding), + ) + self.act = nn.LeakyReLU(0.01, inplace=True) + + def forward(self, x): + out = self.conv_block(x) + return self.act(out) + +class Conv2dTranspose(nn.Module): + def __init__(self, cin, cout, kernel_size, stride, padding, output_padding=0, *args, **kwargs): + super().__init__(*args, **kwargs) + self.conv_block = nn.Sequential( + nn.ConvTranspose2d(cin, cout, kernel_size, stride, padding, output_padding), + nn.BatchNorm2d(cout) + ) + self.act = nn.ReLU() + + def forward(self, x): + out = self.conv_block(x) + return self.act(out) diff --git a/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/models/syncnet.py b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/models/syncnet.py new file mode 100644 index 0000000..e773cdc --- /dev/null +++ b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/models/syncnet.py @@ -0,0 +1,66 @@ +import torch +from torch import nn +from torch.nn import functional as F + +from .conv import Conv2d + +class SyncNet_color(nn.Module): + def __init__(self): + super(SyncNet_color, self).__init__() + + self.face_encoder = nn.Sequential( + Conv2d(15, 32, kernel_size=(7, 7), stride=1, padding=3), + + Conv2d(32, 64, kernel_size=5, stride=(1, 2), padding=1), + Conv2d(64, 64, kernel_size=3, stride=1, padding=1, residual=True), + Conv2d(64, 64, kernel_size=3, stride=1, padding=1, residual=True), + + Conv2d(64, 128, kernel_size=3, stride=2, padding=1), + Conv2d(128, 128, kernel_size=3, stride=1, padding=1, residual=True), + Conv2d(128, 128, kernel_size=3, stride=1, padding=1, residual=True), + Conv2d(128, 128, kernel_size=3, stride=1, padding=1, residual=True), + + Conv2d(128, 256, kernel_size=3, stride=2, padding=1), + Conv2d(256, 256, kernel_size=3, stride=1, padding=1, residual=True), + Conv2d(256, 256, kernel_size=3, stride=1, padding=1, residual=True), + + Conv2d(256, 512, kernel_size=3, stride=2, padding=1), + Conv2d(512, 512, kernel_size=3, stride=1, padding=1, residual=True), + Conv2d(512, 512, kernel_size=3, stride=1, padding=1, residual=True), + + Conv2d(512, 512, kernel_size=3, stride=2, padding=1), + Conv2d(512, 512, kernel_size=3, stride=1, padding=0), + Conv2d(512, 512, kernel_size=1, stride=1, padding=0),) + + self.audio_encoder = nn.Sequential( + Conv2d(1, 32, kernel_size=3, stride=1, padding=1), + Conv2d(32, 32, kernel_size=3, stride=1, padding=1, residual=True), + Conv2d(32, 32, kernel_size=3, stride=1, padding=1, residual=True), + + Conv2d(32, 64, kernel_size=3, stride=(3, 1), padding=1), + Conv2d(64, 64, kernel_size=3, stride=1, padding=1, residual=True), + Conv2d(64, 64, kernel_size=3, stride=1, padding=1, residual=True), + + Conv2d(64, 128, kernel_size=3, stride=3, padding=1), + Conv2d(128, 128, kernel_size=3, stride=1, padding=1, residual=True), + Conv2d(128, 128, kernel_size=3, stride=1, padding=1, residual=True), + + Conv2d(128, 256, kernel_size=3, stride=(3, 2), padding=1), + Conv2d(256, 256, kernel_size=3, stride=1, padding=1, residual=True), + Conv2d(256, 256, kernel_size=3, stride=1, padding=1, residual=True), + + Conv2d(256, 512, kernel_size=3, stride=1, padding=0), + Conv2d(512, 512, kernel_size=1, stride=1, padding=0),) + + def forward(self, audio_sequences, face_sequences): # audio_sequences := (B, dim, T) + face_embedding = self.face_encoder(face_sequences) + audio_embedding = self.audio_encoder(audio_sequences) + + audio_embedding = audio_embedding.view(audio_embedding.size(0), -1) + face_embedding = face_embedding.view(face_embedding.size(0), -1) + + audio_embedding = F.normalize(audio_embedding, p=2, dim=1) + face_embedding = F.normalize(face_embedding, p=2, dim=1) + + + return audio_embedding, face_embedding diff --git a/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/models/wav2lip.py b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/models/wav2lip.py new file mode 100644 index 0000000..ae5d691 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/models/wav2lip.py @@ -0,0 +1,184 @@ +import torch +from torch import nn +from torch.nn import functional as F +import math + +from .conv import Conv2dTranspose, Conv2d, nonorm_Conv2d + +class Wav2Lip(nn.Module): + def __init__(self): + super(Wav2Lip, self).__init__() + + self.face_encoder_blocks = nn.ModuleList([ + nn.Sequential(Conv2d(6, 16, kernel_size=7, stride=1, padding=3)), # 96,96 + + nn.Sequential(Conv2d(16, 32, kernel_size=3, stride=2, padding=1), # 48,48 + Conv2d(32, 32, kernel_size=3, stride=1, padding=1, residual=True), + Conv2d(32, 32, kernel_size=3, stride=1, padding=1, residual=True)), + + nn.Sequential(Conv2d(32, 64, kernel_size=3, stride=2, padding=1), # 24,24 + Conv2d(64, 64, kernel_size=3, stride=1, padding=1, residual=True), + Conv2d(64, 64, kernel_size=3, stride=1, padding=1, residual=True), + Conv2d(64, 64, kernel_size=3, stride=1, padding=1, residual=True)), + + nn.Sequential(Conv2d(64, 128, kernel_size=3, stride=2, padding=1), # 12,12 + Conv2d(128, 128, kernel_size=3, stride=1, padding=1, residual=True), + Conv2d(128, 128, kernel_size=3, stride=1, padding=1, residual=True)), + + nn.Sequential(Conv2d(128, 256, kernel_size=3, stride=2, padding=1), # 6,6 + Conv2d(256, 256, kernel_size=3, stride=1, padding=1, residual=True), + Conv2d(256, 256, kernel_size=3, stride=1, padding=1, residual=True)), + + nn.Sequential(Conv2d(256, 512, kernel_size=3, stride=2, padding=1), # 3,3 + Conv2d(512, 512, kernel_size=3, stride=1, padding=1, residual=True),), + + nn.Sequential(Conv2d(512, 512, kernel_size=3, stride=1, padding=0), # 1, 1 + Conv2d(512, 512, kernel_size=1, stride=1, padding=0)),]) + + self.audio_encoder = nn.Sequential( + Conv2d(1, 32, kernel_size=3, stride=1, padding=1), + Conv2d(32, 32, kernel_size=3, stride=1, padding=1, residual=True), + Conv2d(32, 32, kernel_size=3, stride=1, padding=1, residual=True), + + Conv2d(32, 64, kernel_size=3, stride=(3, 1), padding=1), + Conv2d(64, 64, kernel_size=3, stride=1, padding=1, residual=True), + Conv2d(64, 64, kernel_size=3, stride=1, padding=1, residual=True), + + Conv2d(64, 128, kernel_size=3, stride=3, padding=1), + Conv2d(128, 128, kernel_size=3, stride=1, padding=1, residual=True), + Conv2d(128, 128, kernel_size=3, stride=1, padding=1, residual=True), + + Conv2d(128, 256, kernel_size=3, stride=(3, 2), padding=1), + Conv2d(256, 256, kernel_size=3, stride=1, padding=1, residual=True), + + Conv2d(256, 512, kernel_size=3, stride=1, padding=0), + Conv2d(512, 512, kernel_size=1, stride=1, padding=0),) + + self.face_decoder_blocks = nn.ModuleList([ + nn.Sequential(Conv2d(512, 512, kernel_size=1, stride=1, padding=0),), + + nn.Sequential(Conv2dTranspose(1024, 512, kernel_size=3, stride=1, padding=0), # 3,3 + Conv2d(512, 512, kernel_size=3, stride=1, padding=1, residual=True),), + + nn.Sequential(Conv2dTranspose(1024, 512, kernel_size=3, stride=2, padding=1, output_padding=1), + Conv2d(512, 512, kernel_size=3, stride=1, padding=1, residual=True), + Conv2d(512, 512, kernel_size=3, stride=1, padding=1, residual=True),), # 6, 6 + + nn.Sequential(Conv2dTranspose(768, 384, kernel_size=3, stride=2, padding=1, output_padding=1), + Conv2d(384, 384, kernel_size=3, stride=1, padding=1, residual=True), + Conv2d(384, 384, kernel_size=3, stride=1, padding=1, residual=True),), # 12, 12 + + nn.Sequential(Conv2dTranspose(512, 256, kernel_size=3, stride=2, padding=1, output_padding=1), + Conv2d(256, 256, kernel_size=3, stride=1, padding=1, residual=True), + Conv2d(256, 256, kernel_size=3, stride=1, padding=1, residual=True),), # 24, 24 + + nn.Sequential(Conv2dTranspose(320, 128, kernel_size=3, stride=2, padding=1, output_padding=1), + Conv2d(128, 128, kernel_size=3, stride=1, padding=1, residual=True), + Conv2d(128, 128, kernel_size=3, stride=1, padding=1, residual=True),), # 48, 48 + + nn.Sequential(Conv2dTranspose(160, 64, kernel_size=3, stride=2, padding=1, output_padding=1), + Conv2d(64, 64, kernel_size=3, stride=1, padding=1, residual=True), + Conv2d(64, 64, kernel_size=3, stride=1, padding=1, residual=True),),]) # 96,96 + + self.output_block = nn.Sequential(Conv2d(80, 32, kernel_size=3, stride=1, padding=1), + nn.Conv2d(32, 3, kernel_size=1, stride=1, padding=0), + nn.Sigmoid()) + + def forward(self, audio_sequences, face_sequences): + # audio_sequences = (B, T, 1, 80, 16) + B = audio_sequences.size(0) + + input_dim_size = len(face_sequences.size()) + if input_dim_size > 4: + audio_sequences = torch.cat([audio_sequences[:, i] for i in range(audio_sequences.size(1))], dim=0) + face_sequences = torch.cat([face_sequences[:, :, i] for i in range(face_sequences.size(2))], dim=0) + + audio_embedding = self.audio_encoder(audio_sequences) # B, 512, 1, 1 + + feats = [] + x = face_sequences + for f in self.face_encoder_blocks: + x = f(x) + feats.append(x) + + x = audio_embedding + for f in self.face_decoder_blocks: + x = f(x) + try: + x = torch.cat((x, feats[-1]), dim=1) + except Exception as e: + print(x.size()) + print(feats[-1].size()) + raise e + + feats.pop() + + x = self.output_block(x) + + if input_dim_size > 4: + x = torch.split(x, B, dim=0) # [(B, C, H, W)] + outputs = torch.stack(x, dim=2) # (B, C, T, H, W) + + else: + outputs = x + + return outputs + +class Wav2Lip_disc_qual(nn.Module): + def __init__(self): + super(Wav2Lip_disc_qual, self).__init__() + + self.face_encoder_blocks = nn.ModuleList([ + nn.Sequential(nonorm_Conv2d(3, 32, kernel_size=7, stride=1, padding=3)), # 48,96 + + nn.Sequential(nonorm_Conv2d(32, 64, kernel_size=5, stride=(1, 2), padding=2), # 48,48 + nonorm_Conv2d(64, 64, kernel_size=5, stride=1, padding=2)), + + nn.Sequential(nonorm_Conv2d(64, 128, kernel_size=5, stride=2, padding=2), # 24,24 + nonorm_Conv2d(128, 128, kernel_size=5, stride=1, padding=2)), + + nn.Sequential(nonorm_Conv2d(128, 256, kernel_size=5, stride=2, padding=2), # 12,12 + nonorm_Conv2d(256, 256, kernel_size=5, stride=1, padding=2)), + + nn.Sequential(nonorm_Conv2d(256, 512, kernel_size=3, stride=2, padding=1), # 6,6 + nonorm_Conv2d(512, 512, kernel_size=3, stride=1, padding=1)), + + nn.Sequential(nonorm_Conv2d(512, 512, kernel_size=3, stride=2, padding=1), # 3,3 + nonorm_Conv2d(512, 512, kernel_size=3, stride=1, padding=1),), + + nn.Sequential(nonorm_Conv2d(512, 512, kernel_size=3, stride=1, padding=0), # 1, 1 + nonorm_Conv2d(512, 512, kernel_size=1, stride=1, padding=0)),]) + + self.binary_pred = nn.Sequential(nn.Conv2d(512, 1, kernel_size=1, stride=1, padding=0), nn.Sigmoid()) + self.label_noise = .0 + + def get_lower_half(self, face_sequences): + return face_sequences[:, :, face_sequences.size(2)//2:] + + def to_2d(self, face_sequences): + B = face_sequences.size(0) + face_sequences = torch.cat([face_sequences[:, :, i] for i in range(face_sequences.size(2))], dim=0) + return face_sequences + + def perceptual_forward(self, false_face_sequences): + false_face_sequences = self.to_2d(false_face_sequences) + false_face_sequences = self.get_lower_half(false_face_sequences) + + false_feats = false_face_sequences + for f in self.face_encoder_blocks: + false_feats = f(false_feats) + + false_pred_loss = F.binary_cross_entropy(self.binary_pred(false_feats).view(len(false_feats), -1), + torch.ones((len(false_feats), 1)).cuda()) + + return false_pred_loss + + def forward(self, face_sequences): + face_sequences = self.to_2d(face_sequences) + face_sequences = self.get_lower_half(face_sequences) + + x = face_sequences + for f in self.face_encoder_blocks: + x = f(x) + + return self.binary_pred(x).view(len(x), -1) diff --git a/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/ov_wav2lip.py b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/ov_wav2lip.py new file mode 100644 index 0000000..40350b4 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/ov_wav2lip.py @@ -0,0 +1,707 @@ +import sys +import os + +script_folder = os.path.join(os.path.dirname(__file__), 'wav2lip') +sys.path.append(script_folder) + +import numpy as np +import cv2 +from .audio import load_wav, melspectrogram +import subprocess +from tqdm import tqdm +from glob import glob +import torch +import platform +import openvino as ov +import torch +from torch.utils.model_zoo import load_url +from enum import Enum +import torch.nn.functional as F +import openvino.properties.hint as hints +import openvino.properties as props +# from face_parsing import init_parser, swap_regions + +import time +import logging +import uuid +from pathlib import Path + +try: + import urllib.request as request_file +except BaseException: + import urllib as request_file + + +class LandmarksType(Enum): + """Enum class defining the type of landmarks to detect. + + ``_2D`` - the detected points ``(x,y)`` are detected in a 2D space and follow the visible contour of the face + ``_2halfD`` - this points represent the projection of the 3D points into 3D + ``_3D`` - detect the points ``(x,y,z)``` in a 3D space + + """ + _2D = 1 + _2halfD = 2 + _3D = 3 + + +class NetworkSize(Enum): + # TINY = 1 + # SMALL = 2 + # MEDIUM = 3 + LARGE = 4 + + def __new__(cls, value): + member = object.__new__(cls) + member._value_ = value + return member + + def __int__(self): + return self.value + + +class OVFaceDetector(object): + def __init__(self, device, verbose): + self.device = device + self.verbose = verbose + + def detect_from_image(self, tensor_or_path): + raise NotImplementedError + + def detect_from_directory(self, path, extensions=['.jpg', '.png'], recursive=False, show_progress_bar=True): + if self.verbose: + logger = logging.getLogger(__name__) + + if len(extensions) == 0: + if self.verbose: + logger.error( + "Expected at list one extension, but none was received.") + raise ValueError + + if self.verbose: + logger.info("Constructing the list of images.") + additional_pattern = '/**/*' if recursive else '/*' + files = [] + for extension in extensions: + files.extend(glob.glob(path + additional_pattern + + extension, recursive=recursive)) + + if self.verbose: + logger.info( + "Finished searching for images. %s images found", len(files)) + logger.info("Preparing to run the detection.") + + predictions = {} + for image_path in tqdm(files, disable=not show_progress_bar): + if self.verbose: + logger.info( + "Running the face detector on image: %s", image_path) + predictions[image_path] = self.detect_from_image(image_path) + + if self.verbose: + logger.info( + "The detector was successfully run on all %s images", len(files)) + + return predictions + + @property + def reference_scale(self): + raise NotImplementedError + + @property + def reference_x_shift(self): + raise NotImplementedError + + @property + def reference_y_shift(self): + raise NotImplementedError + + @staticmethod + def tensor_or_path_to_ndarray(tensor_or_path, rgb=True): + """Convert path (represented as a string) or torch.tensor to a numpy.ndarray + + Arguments: + tensor_or_path {numpy.ndarray, torch.tensor or string} -- path to the image, or the image itself + """ + if isinstance(tensor_or_path, str): + return cv2.imread(tensor_or_path) if not rgb else cv2.imread(tensor_or_path)[..., ::-1] + elif torch.is_tensor(tensor_or_path): + # Call cpu in case its coming from cuda + return tensor_or_path.cpu().numpy()[..., ::-1].copy() if not rgb else tensor_or_path.cpu().numpy() + elif isinstance(tensor_or_path, np.ndarray): + return tensor_or_path[..., ::-1].copy() if not rgb else tensor_or_path + else: + raise TypeError + + +class OVSFDDetector(OVFaceDetector): + def __init__(self, device, face_detector, verbose=False): + super().__init__(device, verbose) + self.face_detector = face_detector + + def detect_from_image(self, tensor_or_path): + image = self.tensor_or_path_to_ndarray(tensor_or_path) + + bboxlist = self.detect(self.face_detector, image, device="cpu") + keep = self.nms(bboxlist, 0.3) + bboxlist = bboxlist[keep, :] + bboxlist = [x for x in bboxlist if x[-1] > 0.5] + + return bboxlist + + def detect_from_batch(self, images): + bboxlists = self.batch_detect(self.face_detector, images, device="cpu") + keeps = [self.nms(bboxlists[:, i, :], 0.3) + for i in range(bboxlists.shape[1])] + bboxlists = [bboxlists[keep, i, :] for i, keep in enumerate(keeps)] + bboxlists = [[x for x in bboxlist if x[-1] > 0.5] + for bboxlist in bboxlists] + + return bboxlists + + def nms(self, dets, thresh): + if 0 == len(dets): + return [] + x1, y1, x2, y2, scores = dets[:, 0], dets[:, + 1], dets[:, 2], dets[:, 3], dets[:, 4] + areas = (x2 - x1 + 1) * (y2 - y1 + 1) + order = scores.argsort()[::-1] + + keep = [] + while order.size > 0: + i = order[0] + keep.append(i) + xx1, yy1 = np.maximum(x1[i], x1[order[1:]]), np.maximum( + y1[i], y1[order[1:]]) + xx2, yy2 = np.minimum(x2[i], x2[order[1:]]), np.minimum( + y2[i], y2[order[1:]]) + + w, h = np.maximum( + 0.0, xx2 - xx1 + 1), np.maximum(0.0, yy2 - yy1 + 1) + ovr = w * h / (areas[i] + areas[order[1:]] - w * h) + + inds = np.where(ovr <= thresh)[0] + order = order[inds + 1] + + return keep + + def detect(self, net, img, device): + img = img - np.array([104, 117, 123]) + img = img.transpose(2, 0, 1) + img = img.reshape((1,) + img.shape) + + img = torch.from_numpy(img).float().to(device) + BB, CC, HH, WW = img.size() + + results = net({"x": img.numpy()}) + olist = [torch.Tensor(results[i]) for i in range(12)] + + bboxlist = [] + for i in range(len(olist) // 2): + olist[i * 2] = F.softmax(olist[i * 2], dim=1) + olist = [oelem.data.cpu() for oelem in olist] + for i in range(len(olist) // 2): + ocls, oreg = olist[i * 2], olist[i * 2 + 1] + FB, FC, FH, FW = ocls.size() # feature map size + stride = 2**(i + 2) # 4,8,16,32,64,128 + anchor = stride * 4 + poss = zip(*np.where(ocls[:, 1, :, :] > 0.05)) + for Iindex, hindex, windex in poss: + axc, ayc = stride / 2 + windex * stride, stride / 2 + hindex * stride + score = ocls[0, 1, hindex, windex] + loc = oreg[0, :, hindex, windex].contiguous().view(1, 4) + priors = torch.Tensor( + [[axc / 1.0, ayc / 1.0, stride * 4 / 1.0, stride * 4 / 1.0]]) + variances = [0.1, 0.2] + box = self.decode(loc, priors, variances) + x1, y1, x2, y2 = box[0] * 1.0 + # cv2.rectangle(imgshow,(int(x1),int(y1)),(int(x2),int(y2)),(0,0,255),1) + bboxlist.append([x1, y1, x2, y2, score]) + bboxlist = np.array(bboxlist) + if 0 == len(bboxlist): + bboxlist = np.zeros((1, 5)) + + return bboxlist + + def decode(self, loc, priors, variances): + """Decode locations from predictions using priors to undo + the encoding we did for offset regression at train time. + Args: + loc (tensor): location predictions for loc layers, + Shape: [num_priors,4] + priors (tensor): Prior boxes in center-offset form. + Shape: [num_priors,4]. + variances: (list[float]) Variances of priorboxes + Return: + decoded bounding box predictions + """ + + boxes = torch.cat(( + priors[:, :2] + loc[:, :2] * variances[0] * priors[:, 2:], + priors[:, 2:] * torch.exp(loc[:, 2:] * variances[1])), 1) + boxes[:, :2] -= boxes[:, 2:] / 2 + boxes[:, 2:] += boxes[:, :2] + return boxes + + def batch_detect(self, net, imgs, device): + imgs = imgs - np.array([104, 117, 123]) + imgs = imgs.transpose(0, 3, 1, 2) + + imgs = torch.from_numpy(imgs).float().to(device) + BB, CC, HH, WW = imgs.size() + + results = net({"x": imgs.numpy()}) + olist = [torch.Tensor(results[i]) for i in range(12)] + bboxlist = [] + for i in range(len(olist) // 2): + olist[i * 2] = F.softmax(olist[i * 2], dim=1) + # olist[i * 2] = (olist[i * 2], dim=1) + olist = [oelem.data.cpu() for oelem in olist] + # olist = [oelem for oelem in olist] + for i in range(len(olist) // 2): + ocls, oreg = olist[i * 2], olist[i * 2 + 1] + FB, FC, FH, FW = ocls.size() # feature map size + stride = 2**(i + 2) # 4,8,16,32,64,128 + anchor = stride * 4 + poss = zip(*np.where(ocls[:, 1, :, :] > 0.05)) + for Iindex, hindex, windex in poss: + axc, ayc = stride / 2 + windex * stride, stride / 2 + hindex * stride + score = ocls[:, 1, hindex, windex] + loc = oreg[:, :, hindex, windex].contiguous().view(BB, 1, 4) + priors = torch.Tensor( + [[axc / 1.0, ayc / 1.0, stride * 4 / 1.0, stride * 4 / 1.0]]).view(1, 1, 4) + variances = [0.1, 0.2] + box = self.batch_decode(loc, priors, variances) + box = box[:, 0] * 1.0 + # cv2.rectangle(imgshow,(int(x1),int(y1)),(int(x2),int(y2)),(0,0,255),1) + bboxlist.append( + torch.cat([box, score.unsqueeze(1)], 1).cpu().numpy()) + bboxlist = np.array(bboxlist) + if 0 == len(bboxlist): + bboxlist = np.zeros((1, BB, 5)) + + return bboxlist + + def batch_decode(self, loc, priors, variances): + """Decode locations from predictions using priors to undo + the encoding we did for offset regression at train time. + Args: + loc (tensor): location predictions for loc layers, + Shape: [num_priors,4] + priors (tensor): Prior boxes in center-offset form. + Shape: [num_priors,4]. + variances: (list[float]) Variances of priorboxes + Return: + decoded bounding box predictions + """ + + boxes = torch.cat(( + priors[:, :, :2] + loc[:, :, :2] * variances[0] * priors[:, :, 2:], + priors[:, :, 2:] * torch.exp(loc[:, :, 2:] * variances[1])), 2) + boxes[:, :, :2] -= boxes[:, :, 2:] / 2 + boxes[:, :, 2:] += boxes[:, :, :2] + return boxes + + @property + def reference_scale(self): + return 195 + + @property + def reference_x_shift(self): + return 0 + + @property + def reference_y_shift(self): + return 0 + + +class NetworkSize(Enum): + # TINY = 1 + # SMALL = 2 + # MEDIUM = 3 + LARGE = 4 + + def __new__(cls, value): + member = object.__new__(cls) + member._value_ = value + return member + + def __int__(self): + return self.value + + +class OVFaceAlignment: + def __init__(self, landmarks_type, face_detector, network_size=NetworkSize.LARGE, + device='CPU', flip_input=False, verbose=False): + self.device = device + self.flip_input = flip_input + self.landmarks_type = landmarks_type + self.verbose = verbose + + network_size = int(network_size) + + self.face_detector = OVSFDDetector( + device=device, face_detector=face_detector, verbose=verbose) + + def get_detections_for_batch(self, images): + images = images[..., ::-1] + detected_faces = self.face_detector.detect_from_batch(images.copy()) + results = [] + + for i, d in enumerate(detected_faces): + if len(d) == 0: + results.append(None) + continue + d = d[0] + d = np.clip(d, 0, None) + + x1, y1, x2, y2 = map(int, d[:-1]) + results.append((x1, y1, x2, y2)) + + return results + + +class OVWav2Lip: + def __init__(self, avatar_path="assets/xy.png", device="GPU"): + # Paths to model checkpoints + self.face_detection_path = "wav2lip/checkpoints/face_detection.xml" + self.wav2lip_path = "wav2lip/checkpoints/wav2lip_gan.xml" + self.segmentation_path = 'face_segmentation.pth' + self.sr_path = 'esrgan_yunying.pth' + self.face_landmarks_detector_path = 'wav2lip/checkpoints/face_landmarker_v2_with_blendshapes.task' + + # Device configuration + self.inference_device = device + + # Input and output files + self.face = avatar_path + + # Video processing settings + self.static = False + self.fps = 25.0 + self.pads = [0, 30, 0, 0] + self.face_det_batch_size = 16 + self.wav2lip_batch_size = 128 + self.resize_factor = 1 + self.crop = [0, -1, 0, -1] + self.box = [-1, -1, -1, -1] + self.rotate = False + self.nosmooth = True + self.with_face_mask = False + self.no_segmentation = False + self.no_sr = False + self.img_size = 96 + + # Model URLs + self.models_urls = { + 's3fd': 'https://www.adrianbulat.com/downloads/python-fan/s3fd-619a316812.pth', + } + + # Run the initialization process + self.run() + + def run(self): + core = ov.Core() + config = {hints.performance_mode: hints.PerformanceMode.LATENCY} + + # FIXME: A770 don't work for face detection + self.face_detector = core.compile_model( + self.face_detection_path, self.inference_device, config) + + # OV_WAV2LIP_MODEL_PATH = Path(args.wav2lip_path) + core.set_property( + {props.cache_dir: f'./cache/{self.inference_device}'}) + wav2_lip_model = core.read_model(model=self.wav2lip_path) + self.compiled_wav2lip_model = core.compile_model( + model=wav2_lip_model, device_name=self.inference_device, config=config) + + if os.path.isfile(self.face) and self.face.split('.')[1] in ['jpg', 'png', 'jpeg']: + self.static = True + # IOU cython speedup 10x + + def IOU(ax1, ay1, ax2, ay2, bx1, by1, bx2, by2): + sa = abs((ax2 - ax1) * (ay2 - ay1)) + sb = abs((bx2 - bx1) * (by2 - by1)) + x1, y1 = max(ax1, bx1), max(ay1, by1) + x2, y2 = min(ax2, bx2), min(ay2, by2) + w = x2 - x1 + h = y2 - y1 + if w < 0 or h < 0: + return 0.0 + else: + return 1.0 * w * h / (sa + sb - w * h) + + self.full_frames = [] + os.makedirs("wav2lip/temp", exist_ok=True) + if not os.path.isfile(self.face): + raise ValueError( + '--face argument must be a valid path to video/image file') + + elif self.face.split('.')[1] in ['jpg', 'png', 'jpeg']: + self.full_frames = [cv2.imread(self.face)] + self.fps = self.fps + + else: + video_stream = cv2.VideoCapture(self.face) + self.fps = video_stream.get(cv2.CAP_PROP_FPS) + frame_count = video_stream.get(cv2.CAP_PROP_FRAME_COUNT) + self.duration = round(frame_count / self.fps, 2) + frames = [] + while 1: + still_reading, frame = video_stream.read() + if not still_reading: + video_stream.release() + break + if self.resize_factor > 1: + frame = cv2.resize( + frame, (frame.shape[1]//self.resize_factor, frame.shape[0]//self.resize_factor)) + + if self.rotate: + frame = cv2.rotate(frame, cv2.cv2.ROTATE_90_CLOCKWISE) + + y1, y2, x1, x2 = self.crop + if x2 == -1: + x2 = frame.shape[1] + if y2 == -1: + y2 = frame.shape[0] + + frame = frame[y1:y2, x1:x2] + + frames.append(frame) + + self.full_frames=frames.copy() + + self.mel_step_size = 16 + + self.batch_size = self.wav2lip_batch_size + + self.face_det_results = None + + frames_temp = self.full_frames.copy() + + if self.box[0] == -1: + if not self.static: + self.face_det_results = self.face_detect_ov( + frames_temp, self.inference_device) + else: + self.face_det_results = self.face_detect_ov( + [frames_temp[0]], self.inference_device) + else: + print('Using the specified bounding box instead of face detection...') + y1, y2, x1, x2 = self.box + self.face_det_results = [ + [f[y1: y2, x1:x2], (y1, y2, x1, x2)] for f in frames_temp] + + def process_images_with_detector(self, images, detector, initial_batch_size): + batch_size = initial_batch_size + predictions = [] + + for _ in range(int(np.log2(initial_batch_size)) + 1): # Loop to halve the batch size + try: + for i in tqdm(range(0, len(images), batch_size)): + batch = np.array(images[i:i + batch_size]) + predictions.extend(detector.get_detections_for_batch(batch)) + return predictions # Return predictions if processing is successful + except RuntimeError as e: + import traceback + traceback.print_exc() + # if batch_size == 1: + # raise RuntimeError( + # 'Image too big to run face detection on GPU. Please use the --resize_factor argument') from e + # batch_size //= 2 + # print(f'Recovering from OOM error; New batch size: {batch_size}') + + # raise RuntimeError('Failed to process images even with the smallest batch size.') + + def face_detect_ov(self, images, device): + detector = OVFaceAlignment( + LandmarksType._2D, face_detector=self.face_detector, flip_input=False, device=device) + + predictions = self.process_images_with_detector(images, detector, self.face_det_batch_size) + + results = [] + pady1, pady2, padx1, padx2 = self.pads + + for rect, image in zip(predictions, images): + if rect is None: + # check this frame where the face was not detected. + cv2.imwrite('temp/faulty_frame.jpg', image) + raise ValueError( + 'Face not detected! Ensure the video contains a face in all the frames.') + + y1 = max(0, rect[1] - pady1) + y2 = min(image.shape[0], rect[3] + pady2) + x1 = max(0, rect[0] - padx1) + x2 = min(image.shape[1], rect[2] + padx2) + + results.append([x1, y1, x2, y2]) + + boxes = np.array(results) + if not self.nosmooth: + boxes = self.get_smoothened_boxes(boxes, T=5) + results = [[image[y1: y2, x1:x2], (y1, y2, x1, x2)] + for image, (x1, y1, x2, y2) in zip(images, boxes)] + + del detector + return results + + def get_smoothened_boxes(boxes, T): + for i in range(len(boxes)): + if i + T > len(boxes): + window = boxes[len(boxes) - T:] + else: + window = boxes[i: i + T] + boxes[i] = np.mean(window, axis=0) + return boxes + + def get_full_frames_and_face_det_results(self, reverse=False, double=False): + if reverse: + full_frames = self.full_frames.copy()[::-1] + face_det_results = self.face_det_results.copy()[::-1] + else: + full_frames = self.full_frames.copy() + face_det_results = self.face_det_results.copy() + + if double: + full_frames = full_frames + full_frames[::-1] + face_det_results = face_det_results + face_det_results[::-1] + + return full_frames, face_det_results + + + def inference(self, audio_path, reversed=False): + file_id = str(uuid.uuid4()) + output_path = Path(f'wav2lip/results/{file_id}.mp4') + output_path.parent.mkdir(parents=True, exist_ok=True) + + wav, wav_duration = load_wav(audio_path, 16000) + mel = melspectrogram(wav) + + mel_chunks = [] + new_frames = [] + gen = None + mel_idx_multiplier = 80./self.fps + i = 0 + while 1: + start_idx = int(i * mel_idx_multiplier) + if start_idx + self.mel_step_size > len(mel[0]): + mel_chunks.append(mel[:, len(mel[0]) - self.mel_step_size:]) + break + mel_chunks.append( + mel[:, start_idx: start_idx + self.mel_step_size]) + i += 1 + + if not self.static: + if wav_duration > self.duration: + full_frames, face_det_results = self.get_full_frames_and_face_det_results(reverse=reversed, double=True) + else: + full_frames, face_det_results = self.get_full_frames_and_face_det_results(reverse=reversed) + else: + full_frames, face_det_results = self.get_full_frames_and_face_det_results() + + gen = self.datagen(full_frames.copy(), mel_chunks, face_det_results) + new_frames = full_frames.copy()[:len(mel_chunks)] + device = 'cuda' if torch.cuda.is_available() else 'cpu' + + frames_generated = 0 + for i, (img_batch, mel_batch, frames, coords) in enumerate(tqdm(gen, + total=int(np.ceil(float(len(mel_chunks))/self.batch_size)))): + if i == 0: + img_batch = torch.FloatTensor( + np.transpose(img_batch, (0, 3, 1, 2))).to(device) + mel_batch = torch.FloatTensor( + np.transpose(mel_batch, (0, 3, 1, 2))).to(device) + + frame_h, frame_w = new_frames[0].shape[:-1] + out = cv2.VideoWriter('wav2lip/temp/result.avi', + cv2.VideoWriter_fourcc(*'DIVX'), self.fps, (frame_w, frame_h)) + pred_ov = self.compiled_wav2lip_model( + {"audio_sequences": mel_batch.numpy(), "face_sequences": img_batch.numpy()})[0] + else: + img_batch = np.transpose(img_batch, (0, 3, 1, 2)) + mel_batch = np.transpose(mel_batch, (0, 3, 1, 2)) + pred_ov = self.compiled_wav2lip_model( + {"audio_sequences": mel_batch, "face_sequences": img_batch})[0] + + # pred_ov = compiled_wav2lip_model({"audio_sequences": mel_batch, "face_sequences": img_batch})[0] + pred_ov = pred_ov.transpose(0, 2, 3, 1) * 255. + + for p, f, c in zip(pred_ov, frames, coords): + y1, y2, x1, x2 = c + p = cv2.resize(p.astype(np.uint8), (x2 - x1, y2 - y1)) + f[y1:y2, x1:x2] = p + frames_generated += 1 + out.write(f) + + video_frames = len(self.full_frames) + + if not frames_generated == video_frames: + leftover_frames_index = frames_generated % video_frames + + if frames_generated > video_frames: + is_reversed = 0 if frames_generated // video_frames % 2 == 0 else 1 + else: + is_reversed = 0 + if (is_reversed and not reversed) or (not is_reversed and reversed): + leftover_frames = self.full_frames[:video_frames-leftover_frames_index][::-1].copy() + else: + leftover_frames = self.full_frames[leftover_frames_index:].copy() + + for f in leftover_frames: + out.write(f) + + out.release() + + command = 'ffmpeg -y -i {} -i {} -strict -2 -q:v 1 {} > /dev/null 2>&1'.format( + audio_path, 'wav2lip/temp/result.avi', output_path) + subprocess.call(command, shell=platform.system() != 'Windows') + return output_path + + def datagen(self, frames, mels, face_det_results): + img_batch, mel_batch, frame_batch, coords_batch = [], [], [], [] + for i, m in enumerate(mels): + idx = 0 if self.static else i % len(frames) + frame_to_save = frames[idx].copy() + face, coords = face_det_results[idx].copy() + face = cv2.resize(face, (self.img_size, self.img_size)) + + img_batch.append(face) + mel_batch.append(m) + frame_batch.append(frame_to_save) + coords_batch.append(coords) + + if len(img_batch) >= self.wav2lip_batch_size: + img_batch, mel_batch = np.asarray( + img_batch), np.asarray(mel_batch) + + img_masked = img_batch.copy() + img_masked[:, self.img_size//2:] = 0 + + img_batch = np.concatenate( + (img_masked, img_batch), axis=3) / 255. + mel_batch = np.reshape( + mel_batch, [len(mel_batch), mel_batch.shape[1], mel_batch.shape[2], 1]) + + yield img_batch, mel_batch, frame_batch, coords_batch + img_batch, mel_batch, frame_batch, coords_batch = [], [], [], [] + + if len(img_batch) > 0: + img_batch, mel_batch = np.asarray(img_batch), np.asarray(mel_batch) + + img_masked = img_batch.copy() + img_masked[:, self.img_size//2:] = 0 + + img_batch = np.concatenate((img_masked, img_batch), axis=3) / 255. + mel_batch = np.reshape( + mel_batch, [len(mel_batch), mel_batch.shape[1], mel_batch.shape[2], 1]) + + yield img_batch, mel_batch, frame_batch, coords_batch + + +if __name__ == "__main__": + init_time = time.time() + wav2lip = OVWav2Lip(device="CPU", avatar_path="assets/image.png") + print("Init Time: ", time.time() - init_time) + start_time = time.time() + wav2lip.inference("assets/audio.wav") + print("Time taken: ", time.time() - start_time) \ No newline at end of file diff --git a/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/preprocess.py b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/preprocess.py new file mode 100644 index 0000000..5322012 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/preprocess.py @@ -0,0 +1,113 @@ +import sys + +if sys.version_info[0] < 3 and sys.version_info[1] < 2: + raise Exception("Must be using >= Python 3.2") + +from os import listdir, path + +if not path.isfile('face_detection/detection/sfd/s3fd.pth'): + raise FileNotFoundError('Save the s3fd model to face_detection/detection/sfd/s3fd.pth \ + before running this script!') + +import multiprocessing as mp +from concurrent.futures import ThreadPoolExecutor, as_completed +import numpy as np +import argparse, os, cv2, traceback, subprocess +from tqdm import tqdm +from glob import glob +import audio +from hparams import hparams as hp + +import face_detection + +parser = argparse.ArgumentParser() + +parser.add_argument('--ngpu', help='Number of GPUs across which to run in parallel', default=1, type=int) +parser.add_argument('--batch_size', help='Single GPU Face detection batch size', default=32, type=int) +parser.add_argument("--data_root", help="Root folder of the LRS2 dataset", required=True) +parser.add_argument("--preprocessed_root", help="Root folder of the preprocessed dataset", required=True) + +args = parser.parse_args() + +fa = [face_detection.FaceAlignment(face_detection.LandmarksType._2D, flip_input=False, + device='cuda:{}'.format(id)) for id in range(args.ngpu)] + +template = 'ffmpeg -loglevel panic -y -i {} -strict -2 {}' +# template2 = 'ffmpeg -hide_banner -loglevel panic -threads 1 -y -i {} -async 1 -ac 1 -vn -acodec pcm_s16le -ar 16000 {}' + +def process_video_file(vfile, args, gpu_id): + video_stream = cv2.VideoCapture(vfile) + + frames = [] + while 1: + still_reading, frame = video_stream.read() + if not still_reading: + video_stream.release() + break + frames.append(frame) + + vidname = os.path.basename(vfile).split('.')[0] + dirname = vfile.split('/')[-2] + + fulldir = path.join(args.preprocessed_root, dirname, vidname) + os.makedirs(fulldir, exist_ok=True) + + batches = [frames[i:i + args.batch_size] for i in range(0, len(frames), args.batch_size)] + + i = -1 + for fb in batches: + preds = fa[gpu_id].get_detections_for_batch(np.asarray(fb)) + + for j, f in enumerate(preds): + i += 1 + if f is None: + continue + + x1, y1, x2, y2 = f + cv2.imwrite(path.join(fulldir, '{}.jpg'.format(i)), fb[j][y1:y2, x1:x2]) + +def process_audio_file(vfile, args): + vidname = os.path.basename(vfile).split('.')[0] + dirname = vfile.split('/')[-2] + + fulldir = path.join(args.preprocessed_root, dirname, vidname) + os.makedirs(fulldir, exist_ok=True) + + wavpath = path.join(fulldir, 'audio.wav') + + command = template.format(vfile, wavpath) + subprocess.call(command, shell=True) + + +def mp_handler(job): + vfile, args, gpu_id = job + try: + process_video_file(vfile, args, gpu_id) + except KeyboardInterrupt: + exit(0) + except: + traceback.print_exc() + +def main(args): + print('Started processing for {} with {} GPUs'.format(args.data_root, args.ngpu)) + + filelist = glob(path.join(args.data_root, '*/*.mp4')) + + jobs = [(vfile, args, i%args.ngpu) for i, vfile in enumerate(filelist)] + p = ThreadPoolExecutor(args.ngpu) + futures = [p.submit(mp_handler, j) for j in jobs] + _ = [r.result() for r in tqdm(as_completed(futures), total=len(futures))] + + print('Dumping audios...') + + for vfile in tqdm(filelist): + try: + process_audio_file(vfile, args) + except KeyboardInterrupt: + exit(0) + except: + traceback.print_exc() + continue + +if __name__ == '__main__': + main(args) \ No newline at end of file diff --git a/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/wav2lip_train.py b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/wav2lip_train.py new file mode 100644 index 0000000..6e08118 --- /dev/null +++ b/usecases/ai/digital-avatar/backend/wav2lip/wav2lip/wav2lip_train.py @@ -0,0 +1,374 @@ +from os.path import dirname, join, basename, isfile +from tqdm import tqdm + +from models import SyncNet_color as SyncNet +from models import Wav2Lip as Wav2Lip +import audio + +import torch +from torch import nn +from torch import optim +import torch.backends.cudnn as cudnn +from torch.utils import data as data_utils +import numpy as np + +from glob import glob + +import os, random, cv2, argparse +from hparams import hparams, get_image_list + +parser = argparse.ArgumentParser(description='Code to train the Wav2Lip model without the visual quality discriminator') + +parser.add_argument("--data_root", help="Root folder of the preprocessed LRS2 dataset", required=True, type=str) + +parser.add_argument('--checkpoint_dir', help='Save checkpoints to this directory', required=True, type=str) +parser.add_argument('--syncnet_checkpoint_path', help='Load the pre-trained Expert discriminator', required=True, type=str) + +parser.add_argument('--checkpoint_path', help='Resume from this checkpoint', default=None, type=str) + +args = parser.parse_args() + + +global_step = 0 +global_epoch = 0 +use_cuda = torch.cuda.is_available() +print('use_cuda: {}'.format(use_cuda)) + +syncnet_T = 5 +syncnet_mel_step_size = 16 + +class Dataset(object): + def __init__(self, split): + self.all_videos = get_image_list(args.data_root, split) + + def get_frame_id(self, frame): + return int(basename(frame).split('.')[0]) + + def get_window(self, start_frame): + start_id = self.get_frame_id(start_frame) + vidname = dirname(start_frame) + + window_fnames = [] + for frame_id in range(start_id, start_id + syncnet_T): + frame = join(vidname, '{}.jpg'.format(frame_id)) + if not isfile(frame): + return None + window_fnames.append(frame) + return window_fnames + + def read_window(self, window_fnames): + if window_fnames is None: return None + window = [] + for fname in window_fnames: + img = cv2.imread(fname) + if img is None: + return None + try: + img = cv2.resize(img, (hparams.img_size, hparams.img_size)) + except Exception as e: + return None + + window.append(img) + + return window + + def crop_audio_window(self, spec, start_frame): + if type(start_frame) == int: + start_frame_num = start_frame + else: + start_frame_num = self.get_frame_id(start_frame) # 0-indexing ---> 1-indexing + start_idx = int(80. * (start_frame_num / float(hparams.fps))) + + end_idx = start_idx + syncnet_mel_step_size + + return spec[start_idx : end_idx, :] + + def get_segmented_mels(self, spec, start_frame): + mels = [] + assert syncnet_T == 5 + start_frame_num = self.get_frame_id(start_frame) + 1 # 0-indexing ---> 1-indexing + if start_frame_num - 2 < 0: return None + for i in range(start_frame_num, start_frame_num + syncnet_T): + m = self.crop_audio_window(spec, i - 2) + if m.shape[0] != syncnet_mel_step_size: + return None + mels.append(m.T) + + mels = np.asarray(mels) + + return mels + + def prepare_window(self, window): + # 3 x T x H x W + x = np.asarray(window) / 255. + x = np.transpose(x, (3, 0, 1, 2)) + + return x + + def __len__(self): + return len(self.all_videos) + + def __getitem__(self, idx): + while 1: + idx = random.randint(0, len(self.all_videos) - 1) + vidname = self.all_videos[idx] + img_names = list(glob(join(vidname, '*.jpg'))) + if len(img_names) <= 3 * syncnet_T: + continue + + img_name = random.choice(img_names) + wrong_img_name = random.choice(img_names) + while wrong_img_name == img_name: + wrong_img_name = random.choice(img_names) + + window_fnames = self.get_window(img_name) + wrong_window_fnames = self.get_window(wrong_img_name) + if window_fnames is None or wrong_window_fnames is None: + continue + + window = self.read_window(window_fnames) + if window is None: + continue + + wrong_window = self.read_window(wrong_window_fnames) + if wrong_window is None: + continue + + try: + wavpath = join(vidname, "audio.wav") + wav = audio.load_wav(wavpath, hparams.sample_rate) + + orig_mel = audio.melspectrogram(wav).T + except Exception as e: + continue + + mel = self.crop_audio_window(orig_mel.copy(), img_name) + + if (mel.shape[0] != syncnet_mel_step_size): + continue + + indiv_mels = self.get_segmented_mels(orig_mel.copy(), img_name) + if indiv_mels is None: continue + + window = self.prepare_window(window) + y = window.copy() + window[:, :, window.shape[2]//2:] = 0. + + wrong_window = self.prepare_window(wrong_window) + x = np.concatenate([window, wrong_window], axis=0) + + x = torch.FloatTensor(x) + mel = torch.FloatTensor(mel.T).unsqueeze(0) + indiv_mels = torch.FloatTensor(indiv_mels).unsqueeze(1) + y = torch.FloatTensor(y) + return x, indiv_mels, mel, y + +def save_sample_images(x, g, gt, global_step, checkpoint_dir): + x = (x.detach().cpu().numpy().transpose(0, 2, 3, 4, 1) * 255.).astype(np.uint8) + g = (g.detach().cpu().numpy().transpose(0, 2, 3, 4, 1) * 255.).astype(np.uint8) + gt = (gt.detach().cpu().numpy().transpose(0, 2, 3, 4, 1) * 255.).astype(np.uint8) + + refs, inps = x[..., 3:], x[..., :3] + folder = join(checkpoint_dir, "samples_step{:09d}".format(global_step)) + if not os.path.exists(folder): os.mkdir(folder) + collage = np.concatenate((refs, inps, g, gt), axis=-2) + for batch_idx, c in enumerate(collage): + for t in range(len(c)): + cv2.imwrite('{}/{}_{}.jpg'.format(folder, batch_idx, t), c[t]) + +logloss = nn.BCELoss() +def cosine_loss(a, v, y): + d = nn.functional.cosine_similarity(a, v) + loss = logloss(d.unsqueeze(1), y) + + return loss + +device = torch.device("cuda" if use_cuda else "cpu") +syncnet = SyncNet().to(device) +for p in syncnet.parameters(): + p.requires_grad = False + +recon_loss = nn.L1Loss() +def get_sync_loss(mel, g): + g = g[:, :, :, g.size(3)//2:] + g = torch.cat([g[:, :, i] for i in range(syncnet_T)], dim=1) + # B, 3 * T, H//2, W + a, v = syncnet(mel, g) + y = torch.ones(g.size(0), 1).float().to(device) + return cosine_loss(a, v, y) + +def train(device, model, train_data_loader, test_data_loader, optimizer, + checkpoint_dir=None, checkpoint_interval=None, nepochs=None): + + global global_step, global_epoch + resumed_step = global_step + + while global_epoch < nepochs: + print('Starting Epoch: {}'.format(global_epoch)) + running_sync_loss, running_l1_loss = 0., 0. + prog_bar = tqdm(enumerate(train_data_loader)) + for step, (x, indiv_mels, mel, gt) in prog_bar: + model.train() + optimizer.zero_grad() + + # Move data to CUDA device + x = x.to(device) + mel = mel.to(device) + indiv_mels = indiv_mels.to(device) + gt = gt.to(device) + + g = model(indiv_mels, x) + + if hparams.syncnet_wt > 0.: + sync_loss = get_sync_loss(mel, g) + else: + sync_loss = 0. + + l1loss = recon_loss(g, gt) + + loss = hparams.syncnet_wt * sync_loss + (1 - hparams.syncnet_wt) * l1loss + loss.backward() + optimizer.step() + + if global_step % checkpoint_interval == 0: + save_sample_images(x, g, gt, global_step, checkpoint_dir) + + global_step += 1 + cur_session_steps = global_step - resumed_step + + running_l1_loss += l1loss.item() + if hparams.syncnet_wt > 0.: + running_sync_loss += sync_loss.item() + else: + running_sync_loss += 0. + + if global_step == 1 or global_step % checkpoint_interval == 0: + save_checkpoint( + model, optimizer, global_step, checkpoint_dir, global_epoch) + + if global_step == 1 or global_step % hparams.eval_interval == 0: + with torch.no_grad(): + average_sync_loss = eval_model(test_data_loader, global_step, device, model, checkpoint_dir) + + if average_sync_loss < .75: + hparams.set_hparam('syncnet_wt', 0.01) # without image GAN a lesser weight is sufficient + + prog_bar.set_description('L1: {}, Sync Loss: {}'.format(running_l1_loss / (step + 1), + running_sync_loss / (step + 1))) + + global_epoch += 1 + + +def eval_model(test_data_loader, global_step, device, model, checkpoint_dir): + eval_steps = 700 + print('Evaluating for {} steps'.format(eval_steps)) + sync_losses, recon_losses = [], [] + step = 0 + while 1: + for x, indiv_mels, mel, gt in test_data_loader: + step += 1 + model.eval() + + # Move data to CUDA device + x = x.to(device) + gt = gt.to(device) + indiv_mels = indiv_mels.to(device) + mel = mel.to(device) + + g = model(indiv_mels, x) + + sync_loss = get_sync_loss(mel, g) + l1loss = recon_loss(g, gt) + + sync_losses.append(sync_loss.item()) + recon_losses.append(l1loss.item()) + + if step > eval_steps: + averaged_sync_loss = sum(sync_losses) / len(sync_losses) + averaged_recon_loss = sum(recon_losses) / len(recon_losses) + + print('L1: {}, Sync loss: {}'.format(averaged_recon_loss, averaged_sync_loss)) + + return averaged_sync_loss + +def save_checkpoint(model, optimizer, step, checkpoint_dir, epoch): + + checkpoint_path = join( + checkpoint_dir, "checkpoint_step{:09d}.pth".format(global_step)) + optimizer_state = optimizer.state_dict() if hparams.save_optimizer_state else None + torch.save({ + "state_dict": model.state_dict(), + "optimizer": optimizer_state, + "global_step": step, + "global_epoch": epoch, + }, checkpoint_path) + print("Saved checkpoint:", checkpoint_path) + + +def _load(checkpoint_path): + if use_cuda: + checkpoint = torch.load(checkpoint_path) + else: + checkpoint = torch.load(checkpoint_path, + map_location=lambda storage, loc: storage) + return checkpoint + +def load_checkpoint(path, model, optimizer, reset_optimizer=False, overwrite_global_states=True): + global global_step + global global_epoch + + print("Load checkpoint from: {}".format(path)) + checkpoint = _load(path) + s = checkpoint["state_dict"] + new_s = {} + for k, v in s.items(): + new_s[k.replace('module.', '')] = v + model.load_state_dict(new_s) + if not reset_optimizer: + optimizer_state = checkpoint["optimizer"] + if optimizer_state is not None: + print("Load optimizer state from {}".format(path)) + optimizer.load_state_dict(checkpoint["optimizer"]) + if overwrite_global_states: + global_step = checkpoint["global_step"] + global_epoch = checkpoint["global_epoch"] + + return model + +if __name__ == "__main__": + checkpoint_dir = args.checkpoint_dir + + # Dataset and Dataloader setup + train_dataset = Dataset('train') + test_dataset = Dataset('val') + + train_data_loader = data_utils.DataLoader( + train_dataset, batch_size=hparams.batch_size, shuffle=True, + num_workers=hparams.num_workers) + + test_data_loader = data_utils.DataLoader( + test_dataset, batch_size=hparams.batch_size, + num_workers=4) + + device = torch.device("cuda" if use_cuda else "cpu") + + # Model + model = Wav2Lip().to(device) + print('total trainable params {}'.format(sum(p.numel() for p in model.parameters() if p.requires_grad))) + + optimizer = optim.Adam([p for p in model.parameters() if p.requires_grad], + lr=hparams.initial_learning_rate) + + if args.checkpoint_path is not None: + load_checkpoint(args.checkpoint_path, model, optimizer, reset_optimizer=False) + + load_checkpoint(args.syncnet_checkpoint_path, syncnet, None, reset_optimizer=True, overwrite_global_states=False) + + if not os.path.exists(checkpoint_dir): + os.mkdir(checkpoint_dir) + + # Train! + train(device, model, train_data_loader, test_data_loader, optimizer, + checkpoint_dir=checkpoint_dir, + checkpoint_interval=hparams.checkpoint_interval, + nepochs=hparams.nepochs) diff --git a/usecases/ai/digital-avatar/docker-compose.yml b/usecases/ai/digital-avatar/docker-compose.yml new file mode 100644 index 0000000..1c30f7c --- /dev/null +++ b/usecases/ai/digital-avatar/docker-compose.yml @@ -0,0 +1,168 @@ +services: + wav2lip: + build: + context: . + dockerfile: ./backend/wav2lip/Dockerfile + args: + - RENDER_GROUP_ID=110 # Please update this if you are not using Ubuntu 20.04 + image: digital-avatar.backend.wav2lip + container_name: digital-avatar.backend.wav2lip + privileged: true + restart: always + depends_on: + liveportrait: + condition: service_healthy + devices: + - /dev:/dev:rw + environment: + - SERVER_PORT=8011 + - DEVICE=CPU + - ALLOWED_CORS=["http://localhost"] # frontend url + volumes: + - wav2lip-checkpoints:/usr/src/app/wav2lip/checkpoints + - ./assets:/usr/src/app/assets + - ./weights/wav2lip_gan.pth:/usr/src/app/setup/wav2lip_gan.pth + ports: + - 8011:8011 + command: "python3 main.py" + + liveportrait: + build: + context: . + dockerfile: ./backend/liveportrait/Dockerfile + args: + - RENDER_GROUP_ID=110 # Please update this if you are not using Ubuntu 20.04 + image: digital-avatar.backend.liveportrait + container_name: digital-avatar.backend.liveportrait + privileged: true + restart: always + environment: + - SERVER_PORT=8012 + - ALLOWED_CORS=["http://localhost"] # frontend url + devices: + - /dev:/dev:rw + volumes: + - ./assets:/usr/src/app/assets + ports: + - 8012:8012 + command: "python3 main.py" + + frontend: + build: + context: . + dockerfile: frontend/Dockerfile + args: + - NEXT_PUBLIC_LLM_MODEL=${LLM_MODEL:-qwen2.5} + - NEXT_PUBLIC_TTS_URL=localhost:8013 + - NEXT_PUBLIC_LLM_URL=ollama:8015 + - NEXT_PUBLIC_STT_URL=localhost:8014 + - NEXT_PUBLIC_LIPSYNC_URL=localhost:8011 + image: digital-avatar.frontend + container_name: digital-avatar.frontend + restart: always + depends_on: + liveportrait: + condition: service_healthy + wav2lip: + condition: service_healthy + ollama: + condition: service_healthy + stt_service: + condition: service_healthy + tts_service: + condition: service_healthy + networks: + - app-network + volumes: + - ./assets:/app/public/assets + ports: + - "80:3000" + command: "npm start" + + tts_service: + build: + context: ../microservices/text-to-speech + dockerfile: Dockerfile + image: tts_service + hostname: tts_service + container_name: tts_service + privileged: true + restart: always + networks: + - app-network + environment: + - TTS_DEVICE=CPU + - ALLOWED_CORS=["http://localhost"] # frontend url + ports: + - 8013:5995 + devices: + - /dev:/dev:rw + - /lib/modules:/lib/modules:rw + command: "python3 -m uvicorn main:app --host tts_service --port 5995" + + stt_service: + build: + context: ../microservices/speech-to-text + dockerfile: Dockerfile + args: + - RENDER_GROUP_ID=110 # Please update this if you are not using Ubuntu 20.04 + image: stt_service + hostname: stt_service + container_name: stt_service + privileged: true + networks: + - app-network + environment: + - STT_MODEL_ID=base + - STT_ENCODED_DEVICE=CPU + - STT_DECODED_DEVICE=CPU + - ALLOWED_CORS=["http://localhost"] # frontend url + restart: always + ports: + - 8014:5996 + volumes: + - stt_volume:/usr/src/app/data:rw + devices: + - /dev:/dev:rw + - /lib/modules:/lib/modules:rw + command: "python3 -m uvicorn main:app --host stt_service --port 5996" + + ollama: + build: + context: ../microservices/ollama + dockerfile: Dockerfile + hostname: ollama + container_name: ollama + image: intel-ipex-ollama + restart: always + privileged: true + ports: + - 8015:8015 + environment: + - OLLAMA_HOST=0.0.0.0:8015 + - OLLAMA_NUM_GPU=999 + - ZES_ENABLE_SYSMAN=1 + - SYCL_CACHE_PERSISTENT=1 + - SYCL_PI_LEVEL_ZERO_USE_IMMEDIATE_COMMANDLISTS=1 + - ONEAPI_DEVICE_SELECTOR=level_zero:0 + - LLM_MODEL=${LLM_MODEL:-qwen2.5} + networks: + - app-network + devices: + - /dev:/dev:rw + - /lib/modules:/lib/modules:rw + volumes: + - ../microservices/ollama:/root/.ollama + command: "./run.sh" + +networks: + app-network: + + +volumes: + tts_volume: + stt_volume: + data_volume: + ollama: + name: "ollama-data" + wav2lip-checkpoints: diff --git a/usecases/ai/digital-avatar/docs/architecture.png b/usecases/ai/digital-avatar/docs/architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..73919db688e5b4782ee763ec17f32aab1e8fad12 GIT binary patch literal 532394 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 z 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 z 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�oQz>taZkPuxQNvwnL5PiRUBGFDB$3k{K1 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�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ãlKLelrGsK7tV5kp8Ks`o^hG8%J^()IiFWfP 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 a3{J~eg?l8?R=r=F{?`Qq?Y#3hg8l;p6v%u4 literal 0 HcmV?d00001 diff --git a/usecases/ai/digital-avatar/docs/demo.gif b/usecases/ai/digital-avatar/docs/demo.gif new file mode 100644 index 0000000000000000000000000000000000000000..4098d38471c20b3aae9911bc58f5a0d2ed4a8bd9 GIT binary patch literal 1550336 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

  • gy)Ia`wA#zySCA%a{fqjBvsVFU)Y3R9g0M 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
    4*I@olOD%~V}kv%SXv%0j7 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�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

    u{uCS?qbG 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ΜM-RG&wgCT#W=WH(t0^oWC+e8Lpb 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%0A#$QD7P9RLY! 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 z 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¥aZ(rStiC24 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%0D05N6sgH~f%T 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 M>Qo&3Ib#v}9~JZvbN~PV literal 0 HcmV?d00001 diff --git a/usecases/ai/digital-avatar/env.template b/usecases/ai/digital-avatar/env.template new file mode 100644 index 0000000..c4dd813 --- /dev/null +++ b/usecases/ai/digital-avatar/env.template @@ -0,0 +1 @@ +LLM_MODEL=qwen2.5 \ No newline at end of file diff --git a/usecases/ai/digital-avatar/frontend/.eslintrc.json b/usecases/ai/digital-avatar/frontend/.eslintrc.json new file mode 100644 index 0000000..e5bc1ed --- /dev/null +++ b/usecases/ai/digital-avatar/frontend/.eslintrc.json @@ -0,0 +1,51 @@ +{ + "extends": [ + "plugin:import/recommended", + "plugin:import/typescript", + "prettier", + "plugin:tailwindcss/recommended", + "next/core-web-vitals", + "next/typescript" + ], + "plugins": [ + "import", + "tailwindcss" + ], + "rules": { + "tailwindcss/no-custom-classname": "off", + "tailwindcss/classnames-order": "off", + "import/order": [ + "error", + { + "groups": [ + "builtin", + "external", + "internal", + [ + "parent", + "sibling" + ], + "index", + "object", + "type" + ], + "newlines-between": "always", + "alphabetize": { + "order": "asc", + "caseInsensitive": true + } + } + ], + "@typescript-eslint/no-explicit-any": "off" // personal style + }, + "settings": { + "import/resolver": { + "typescript": { + "alwaysTryTypes": true + } + } + }, + "ignorePatterns": [ + "**/components/ui/**" + ] +} \ No newline at end of file diff --git a/usecases/ai/digital-avatar/frontend/.gitignore b/usecases/ai/digital-avatar/frontend/.gitignore new file mode 100644 index 0000000..fd3dbb5 --- /dev/null +++ b/usecases/ai/digital-avatar/frontend/.gitignore @@ -0,0 +1,36 @@ +# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. + +# dependencies +/node_modules +/.pnp +.pnp.js +.yarn/install-state.gz + +# testing +/coverage + +# next.js +/.next/ +/out/ + +# production +/build + +# misc +.DS_Store +*.pem + +# debug +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# local env files +.env*.local + +# vercel +.vercel + +# typescript +*.tsbuildinfo +next-env.d.ts diff --git a/usecases/ai/digital-avatar/frontend/Dockerfile b/usecases/ai/digital-avatar/frontend/Dockerfile new file mode 100644 index 0000000..83f509c --- /dev/null +++ b/usecases/ai/digital-avatar/frontend/Dockerfile @@ -0,0 +1,58 @@ +# INTEL CONFIDENTIAL +# Copyright (C) 2024, Intel Corporation + +FROM debian:12-slim AS base +ARG DEBIAN_FRONTEND=noninteractive +SHELL ["/bin/bash", "-o", "pipefail", "-c"] +ENV NEXT_TELEMETRY_DISABLED 1 +ENV PORT 3000 +RUN apt-get update \ + && apt-get upgrade -y \ + && apt-get install --no-install-recommends -y \ + sudo \ + curl \ + ca-certificates \ + && addgroup --system intel --gid 1000 \ + && adduser --system --ingroup intel --uid 1000 --home /home/intel intel \ + && echo "intel ALL=(ALL:ALL) NOPASSWD:ALL" > /etc/sudoers.d/intel \ + && mkdir -p /etc/apt/keyrings \ + && curl -fsSL https://deb.nodesource.com/setup_22.x | bash - \ + && apt-get install --no-install-recommends -y \ + nodejs \ + && node -v \ + && npm -v \ + && rm -rf /var/lib/apt/lists/* \ + && mkdir -p /app \ + && chown -R intel:intel /app + +FROM base AS development +ENV NODE_ENV development +USER intel +WORKDIR /app +COPY --chown=intel:intel ./frontend/package*.json ./ +RUN npm install + +FROM base AS builder +USER intel +WORKDIR /app +COPY --chown=intel:intel ./frontend/package*.json ./ +RUN npm install +COPY --chown=intel:intel ./frontend ./ +# COPY --chown=intel ./assets/*.png ./assets/*.mp4 ./public/assets/ +ARG NEXT_PUBLIC_LLM_MODEL +ARG NEXT_PUBLIC_TTS_URL +ARG NEXT_PUBLIC_LLM_URL +ARG NEXT_PUBLIC_STT_URL +ARG NEXT_PUBLIC_LIPSYNC_URL +RUN npm run build + +FROM base AS runner +ENV NODE_ENV production +USER intel +WORKDIR /app +COPY --from=builder --chown=intel:intel /app/package*.json ./ +COPY --from=builder --chown=intel:intel /app/.next ./.next +RUN npm install --omit=dev + +HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 \ + CMD npm --version || exit 1 \ No newline at end of file diff --git a/usecases/ai/digital-avatar/frontend/README.md b/usecases/ai/digital-avatar/frontend/README.md new file mode 100644 index 0000000..e215bc4 --- /dev/null +++ b/usecases/ai/digital-avatar/frontend/README.md @@ -0,0 +1,36 @@ +This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app). + +## Getting Started + +First, run the development server: + +```bash +npm run dev +# or +yarn dev +# or +pnpm dev +# or +bun dev +``` + +Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. + +You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. + +This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel. + +## Learn More + +To learn more about Next.js, take a look at the following resources: + +- [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. +- [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. + +You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome! + +## Deploy on Vercel + +The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. + +Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details. diff --git a/usecases/ai/digital-avatar/frontend/app/api/chat/route.ts b/usecases/ai/digital-avatar/frontend/app/api/chat/route.ts new file mode 100644 index 0000000..0c062e4 --- /dev/null +++ b/usecases/ai/digital-avatar/frontend/app/api/chat/route.ts @@ -0,0 +1,44 @@ +import { CoreMessage, StreamData, streamText } from 'ai'; +import { createOllama } from 'ollama-ai-provider'; + +export async function POST(req: Request) { + const { messages }: { messages: CoreMessage[] } = await req.json(); + const ollama = createOllama({ + baseURL: `http://${process.env.NEXT_PUBLIC_LLM_URL}/api`, + }) + + let message = ''; + let wordCount = 0; + let index = 0; + const minimumWordCount = 10; + const punctuations = ',.!?;:*'; + const data = new StreamData(); + + const result = await streamText({ + model: ollama(`${process.env.NEXT_PUBLIC_LLM_MODEL ?? "qwen2.5"}`), + messages, + onChunk({ chunk }) { + if (chunk.type === 'text-delta') { + message += chunk.textDelta; + wordCount += chunk.textDelta.split(/\s+/).length - 1; + if (punctuations.includes(chunk.textDelta) && wordCount > minimumWordCount) { + data.append({ index, message, processed: false }); + message = ''; + wordCount = 0; + index++; + } + } + }, + onFinish() { + if (message) { + data.append({ index, message, processed: false }); + message = ''; + index++; + } + + void data.close(); + } + }); + + return result.toDataStreamResponse({ data }); +} \ No newline at end of file diff --git a/usecases/ai/digital-avatar/frontend/app/fonts/GeistMonoVF.woff b/usecases/ai/digital-avatar/frontend/app/fonts/GeistMonoVF.woff new file mode 100644 index 0000000000000000000000000000000000000000..f2ae185cbfd16946a534d819e9eb03924abbcc49 GIT binary patch literal 67864 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
    4)|DOKg<>hv+aNnO=o?qd) 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ϣ%UY8`RWp~V-U_7 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 CLkb=M literal 0 HcmV?d00001 diff --git a/usecases/ai/digital-avatar/frontend/app/fonts/GeistVF.woff b/usecases/ai/digital-avatar/frontend/app/fonts/GeistVF.woff new file mode 100644 index 0000000000000000000000000000000000000000..1b62daacff96dad6584e71cd962051b82957c313 GIT binary patch literal 66268 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 >-Aun5A4Gp>4U0IQJ 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 G)cz05(PHWV literal 0 HcmV?d00001 diff --git a/usecases/ai/digital-avatar/frontend/app/globals.css b/usecases/ai/digital-avatar/frontend/app/globals.css new file mode 100644 index 0000000..1dcb0fc --- /dev/null +++ b/usecases/ai/digital-avatar/frontend/app/globals.css @@ -0,0 +1,78 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; + +body { + font-family: Arial, Helvetica, sans-serif; +} + +@layer utilities { + .text-balance { + text-wrap: balance; + } +} + +@layer base { + :root { + --background: 0 0% 100%; + --foreground: 0 0% 3.9%; + --card: 0 0% 100%; + --card-foreground: 0 0% 3.9%; + --popover: 0 0% 100%; + --popover-foreground: 0 0% 3.9%; + --primary: 0 0% 9%; + --primary-foreground: 0 0% 98%; + --secondary: 0 0% 96.1%; + --secondary-foreground: 0 0% 9%; + --muted: 0 0% 96.1%; + --muted-foreground: 0 0% 45.1%; + --accent: 0 0% 96.1%; + --accent-foreground: 0 0% 9%; + --destructive: 0 84.2% 60.2%; + --destructive-foreground: 0 0% 98%; + --border: 0 0% 89.8%; + --input: 0 0% 89.8%; + --ring: 0 0% 3.9%; + --chart-1: 12 76% 61%; + --chart-2: 173 58% 39%; + --chart-3: 197 37% 24%; + --chart-4: 43 74% 66%; + --chart-5: 27 87% 67%; + --radius: 0.5rem; + } + .dark { + --background: 0 0% 3.9%; + --foreground: 0 0% 98%; + --card: 0 0% 3.9%; + --card-foreground: 0 0% 98%; + --popover: 0 0% 3.9%; + --popover-foreground: 0 0% 98%; + --primary: 0 0% 98%; + --primary-foreground: 0 0% 9%; + --secondary: 0 0% 14.9%; + --secondary-foreground: 0 0% 98%; + --muted: 0 0% 14.9%; + --muted-foreground: 0 0% 63.9%; + --accent: 0 0% 14.9%; + --accent-foreground: 0 0% 98%; + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 0 0% 98%; + --border: 0 0% 14.9%; + --input: 0 0% 14.9%; + --ring: 0 0% 83.1%; + --chart-1: 220 70% 50%; + --chart-2: 160 60% 45%; + --chart-3: 30 80% 55%; + --chart-4: 280 65% 60%; + --chart-5: 340 75% 55%; + } +} + +@layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground; + } +} diff --git a/usecases/ai/digital-avatar/frontend/app/layout.tsx b/usecases/ai/digital-avatar/frontend/app/layout.tsx new file mode 100644 index 0000000..a1847ff --- /dev/null +++ b/usecases/ai/digital-avatar/frontend/app/layout.tsx @@ -0,0 +1,40 @@ +import localFont from "next/font/local"; + +import "./globals.css"; +import Providers from "@/providers"; + +import type { Metadata } from "next"; + +const geistSans = localFont({ + src: "./fonts/GeistVF.woff", + variable: "--font-geist-sans", + weight: "100 900", +}); +const geistMono = localFont({ + src: "./fonts/GeistMonoVF.woff", + variable: "--font-geist-mono", + weight: "100 900", +}); + +export const metadata: Metadata = { + title: "Create Next App", + description: "Generated by create next app", +}; + +export default function RootLayout({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + return ( + + + + {children} + + + + ); +} diff --git a/usecases/ai/digital-avatar/frontend/app/page.tsx b/usecases/ai/digital-avatar/frontend/app/page.tsx new file mode 100644 index 0000000..3bf98f8 --- /dev/null +++ b/usecases/ai/digital-avatar/frontend/app/page.tsx @@ -0,0 +1,20 @@ +'use client' + +import Avatar from "@/components/avatar" +import Chat from "@/components/chat" + +export default function Component() { + + return ( +
    +
    +
    + +
    +
    + +
    +
    +
    + ) +} \ No newline at end of file diff --git a/usecases/ai/digital-avatar/frontend/components.json b/usecases/ai/digital-avatar/frontend/components.json new file mode 100644 index 0000000..bcec1f9 --- /dev/null +++ b/usecases/ai/digital-avatar/frontend/components.json @@ -0,0 +1,20 @@ +{ + "$schema": "https://ui.shadcn.com/schema.json", + "style": "new-york", + "rsc": true, + "tsx": true, + "tailwind": { + "config": "tailwind.config.ts", + "css": "app/globals.css", + "baseColor": "neutral", + "cssVariables": true, + "prefix": "" + }, + "aliases": { + "components": "@/components", + "utils": "@/lib/utils", + "ui": "@/components/ui", + "lib": "@/lib", + "hooks": "@/hooks" + } +} \ No newline at end of file diff --git a/usecases/ai/digital-avatar/frontend/components/avatar/index.tsx b/usecases/ai/digital-avatar/frontend/components/avatar/index.tsx new file mode 100644 index 0000000..5d8708d --- /dev/null +++ b/usecases/ai/digital-avatar/frontend/components/avatar/index.tsx @@ -0,0 +1,171 @@ +import { useEffect, useRef, useState } from 'react'; + +import useVideoQueue from '@/hooks/useVideoQueue'; + +export default function Avatar() { + const { currentVideo, popVideo } = useVideoQueue(); + const videoRef = useRef(null); + const canvasRef = useRef(null); + const [frames, setFrames] = useState([]); + const [videoDuration, setVideoDuration] = useState(0) + const [timeoutId, setTimeoutId] = useState(null); + const [isPlaying, setIsPlaying] = useState("0"); + const [isLoading, setIsLoading] = useState(true) + const [isReversed, setIsReversed] = useState(false) + + const FPS = 30 + + // Read all the frames from video and store it in frames state + const handleVideoLoaded = () => { + const video = videoRef.current; + const canvas = canvasRef.current; + if (!canvas || !video) + return; + const aspectRatio = video.videoWidth / video.videoHeight; + canvas.width = video.videoWidth; + canvas.height = canvas.width / aspectRatio; + + const tempCanvas = document.createElement("canvas") + tempCanvas.width = video.videoWidth; + tempCanvas.height = tempCanvas.width / aspectRatio; + const context = tempCanvas.getContext('2d', { willReadFrequently: true }); + if (!context) + return; + + const frameArray: ImageData[] = []; + const captureFrame = () => { + context.drawImage(video, 0, 0, canvas.width, canvas.height); + const imageData = context.getImageData(0, 0, canvas.width, canvas.height); + if (imageData.data.some(value => value !== 0)) { + frameArray.push(imageData); + } + }; + video.addEventListener("play", () => { + setVideoDuration(video.duration) + const interval = setInterval(() => { + if (video.paused || video.ended) { + clearInterval(interval); + setIsLoading(false) + setFrames(frameArray) + } else { + captureFrame(); + } + }, 1000 / FPS); + }) + + video.play() + } + + useEffect(() => { + const videoElement = videoRef.current; + if (videoElement) + videoElement.src = "/assets/video.mp4"; + }, []) + + useEffect(() => { + if (isPlaying === "0" && currentVideo?.url && !isReversed) { + if (timeoutId) + clearTimeout(timeoutId) + setIsPlaying(currentVideo.url) + } + else if (frames.length > 0 && isPlaying === "0") { + if (timeoutId) + clearTimeout(timeoutId) + setIsPlaying("1") + } + }, [frames, isPlaying, currentVideo, timeoutId, isReversed]) + + useEffect(() => { + if (isPlaying === "1") { + const canvas = canvasRef.current; + if (!canvas || frames.length === 0) return; + const context = canvas.getContext('2d'); + if (!context) return; + let currentFrameIndex = isReversed ? frames.length - 1 : 0; + const direction = isReversed ? -1 : 1; + const frameDelay = 1000 / FPS; + + const playFrames = () => { + context.putImageData(frames[currentFrameIndex], 0, 0); + currentFrameIndex += direction; + if (currentFrameIndex === frames.length - 1 || currentFrameIndex === 0) { + setIsReversed(prev => !prev) + setIsPlaying("0") + return + } + const timeoutId = setTimeout(playFrames, frameDelay); + setTimeoutId(timeoutId) + }; + + playFrames(); + } else if (isPlaying && isPlaying !== "0" && isPlaying !== "1" && !isReversed) { + console.log('play') + const video = document.createElement('video'); + video.src = isPlaying; + + const canvas = canvasRef.current; + if (!canvas) return; + const context = canvas.getContext('2d'); + if (!context) return; + + video.addEventListener('play', () => { + const drawFrame = () => { + if (video.paused || video.ended) { + popVideo(); + const duration = video.duration + console.log(duration, videoDuration, Math.round(duration / videoDuration) % 2) + if (duration <= videoDuration || Math.round(duration / videoDuration) % 2 === 1) { + setIsReversed(true) + } else { + setIsReversed(false) + } + setIsPlaying("0") + return + }; + context.drawImage(video, 0, 0, canvas.width, canvas.height); + requestAnimationFrame(drawFrame); + }; + drawFrame(); + }); + + video.play() + } + }, [frames, isPlaying, popVideo, isReversed, videoDuration]) + + + return ( + <> +
    + { + isLoading ? +
    + + + + + +
    + : null + } + +
    + + ); +} \ No newline at end of file diff --git a/usecases/ai/digital-avatar/frontend/components/chat/Markdown.tsx b/usecases/ai/digital-avatar/frontend/components/chat/Markdown.tsx new file mode 100644 index 0000000..f801455 --- /dev/null +++ b/usecases/ai/digital-avatar/frontend/components/chat/Markdown.tsx @@ -0,0 +1,19 @@ +// Copyright (C) 2024 Intel Corporation +// SPDX-License-Identifier: Apache-2.0 + +// Framework +import React from "react"; +import ReactMarkdown from "react-markdown"; +import remarkGfm from "remark-gfm"; + +interface MarkdownProps { + content: string; +} + +export default function Markdown({ content }: MarkdownProps): React.JSX.Element { + return ( +
    + {content} +
    + ); +}; \ No newline at end of file diff --git a/usecases/ai/digital-avatar/frontend/components/chat/index.tsx b/usecases/ai/digital-avatar/frontend/components/chat/index.tsx new file mode 100644 index 0000000..e0ed56b --- /dev/null +++ b/usecases/ai/digital-avatar/frontend/components/chat/index.tsx @@ -0,0 +1,166 @@ +import { useChat } from 'ai/react' +import { Send, Mic, StopCircle } from 'lucide-react' +import { useEffect, useRef, useState } from 'react' + +import { Button } from "@/components/ui/button" +import { Input } from "@/components/ui/input" +import { ScrollArea } from "@/components/ui/scroll-area" +import useAudioRecorder from '@/hooks/useAudioRecorder' +import { useGetLipsync } from '@/hooks/useLipsync' +import { useGetTTSAudio } from '@/hooks/useTTS' +import useVideoQueue from '@/hooks/useVideoQueue' + +import Markdown from './Markdown' + + +interface StreamData { + index: number, + message: string, + processed: boolean +} + +export default function Chat() { + const { messages, input, setInput, append, handleSubmit, data, isLoading } = useChat(); + const { startRecording, stopRecording, recording, durationSeconds, visualizerData, sttMutation } = useAudioRecorder(); + const { addVideo, updateVideo } = useVideoQueue() + const chatBottomRef = useRef(null) + const getTTSAudio = useGetTTSAudio() + const getLipsync = useGetLipsync() + const [taskQueue, setTaskQueue] = useState[]>([]) + const [isProcessing, setIsProcessing] = useState(false) + + // Ensure scroll to bottom when new message is added + useEffect(() => { + if (chatBottomRef.current) { + chatBottomRef.current.scrollIntoView() + } + }, [messages]) + + // Add each trun sentence to task queue + useEffect(() => { + if (data) { + const streamData: (StreamData | null)[] = data as (StreamData | null)[] + streamData.forEach((d) => { + if (d && !d.processed) { + d.processed = true + setTaskQueue(prev => { return [...prev, { id: d.index, text: d.message }] }) + } + }) + } + }, [data]) + + // Process task queue items one by one + useEffect(() => { + const processText = async (index: number, text: string) => { + addVideo({ id: index, url: undefined }) + + console.time(`process for message ${index}`) + // TTS + const speech = await getTTSAudio.mutateAsync({ text }) + + const file = new File([speech], "speech.wav", { type: "audio/wav" }) + + // Lipsync + const form = new FormData() + form.append("file", file) + const response = await getLipsync.mutateAsync({ data: form }) + const url = URL.createObjectURL(response) + updateVideo(index, url) + console.timeEnd(`process for message ${index}`) + + setIsProcessing(false) + setTaskQueue(prev => { return prev.slice(1) }) + } + + if (taskQueue.length > 0 && !isProcessing) { + const task = taskQueue[0] + setIsProcessing(true) + processText(task.id as number, task.text as string) + } + + + }, [taskQueue, isProcessing, addVideo, getTTSAudio, getLipsync, updateVideo]) + + const formatSeconds = (seconds: number) => { + const minutes = Math.floor(seconds / 60); + const remainingSeconds = seconds % 60; + const formattedSeconds = remainingSeconds < 10 ? `0${remainingSeconds}` : remainingSeconds; + return `${minutes}:${formattedSeconds}`; + }; + + useEffect(() => { + if (sttMutation.status === "success" && sttMutation.data) { + append({ content: sttMutation.data.text, role: "user" }) + sttMutation.reset() + } + // eslint-disable-next-line react-hooks/exhaustive-deps -- sttMutation.reset added to dependency will cause infinite loop + }, [append, sttMutation.status, sttMutation.data]) + + return ( + <> +
    +

    Chat

    +
    + + {messages.map((message, index) => ( +
    +
    + +
    +
    + ))} +
    + +
    + {recording ? ( +
    + {formatSeconds(durationSeconds)} +
    + {visualizerData.slice().reverse().map((rms, index) => ( +
    +
    +
    + ))} +
    +
    + ) : ( + <> + setInput(e.target.value)} + onKeyDown={async (ev) => { + if (ev.key === "Enter") { + append({ content: input, role: "user" }) + setInput("") + } + }} + disabled={isLoading} + className="grow" + /> + + + )} + + {recording ? ( + + ) : ( + + )} +
    + + ) +} \ No newline at end of file diff --git a/usecases/ai/digital-avatar/frontend/components/ui/button.tsx b/usecases/ai/digital-avatar/frontend/components/ui/button.tsx new file mode 100644 index 0000000..65d4fcd --- /dev/null +++ b/usecases/ai/digital-avatar/frontend/components/ui/button.tsx @@ -0,0 +1,57 @@ +import * as React from "react" +import { Slot } from "@radix-ui/react-slot" +import { cva, type VariantProps } from "class-variance-authority" + +import { cn } from "@/lib/utils" + +const buttonVariants = cva( + "inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-colors focus-visible:outline-none focus-visible:ring-1 focus-visible:ring-ring disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg]:size-4 [&_svg]:shrink-0", + { + variants: { + variant: { + default: + "bg-primary text-primary-foreground shadow hover:bg-primary/90", + destructive: + "bg-destructive text-destructive-foreground shadow-sm hover:bg-destructive/90", + outline: + "border border-input bg-background shadow-sm hover:bg-accent hover:text-accent-foreground", + secondary: + "bg-secondary text-secondary-foreground shadow-sm hover:bg-secondary/80", + ghost: "hover:bg-accent hover:text-accent-foreground", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: "h-9 px-4 py-2", + sm: "h-8 rounded-md px-3 text-xs", + lg: "h-10 rounded-md px-8", + icon: "h-9 w-9", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, + } +) + +export interface ButtonProps + extends React.ButtonHTMLAttributes, + VariantProps { + asChild?: boolean +} + +const Button = React.forwardRef( + ({ className, variant, size, asChild = false, ...props }, ref) => { + const Comp = asChild ? Slot : "button" + return ( + + ) + } +) +Button.displayName = "Button" + +export { Button, buttonVariants } diff --git a/usecases/ai/digital-avatar/frontend/components/ui/input.tsx b/usecases/ai/digital-avatar/frontend/components/ui/input.tsx new file mode 100644 index 0000000..5af26b2 --- /dev/null +++ b/usecases/ai/digital-avatar/frontend/components/ui/input.tsx @@ -0,0 +1,25 @@ +import * as React from "react" + +import { cn } from "@/lib/utils" + +export interface InputProps + extends React.InputHTMLAttributes {} + +const Input = React.forwardRef( + ({ className, type, ...props }, ref) => { + return ( + + ) + } +) +Input.displayName = "Input" + +export { Input } diff --git a/usecases/ai/digital-avatar/frontend/components/ui/scroll-area.tsx b/usecases/ai/digital-avatar/frontend/components/ui/scroll-area.tsx new file mode 100644 index 0000000..0b4a48d --- /dev/null +++ b/usecases/ai/digital-avatar/frontend/components/ui/scroll-area.tsx @@ -0,0 +1,48 @@ +"use client" + +import * as React from "react" +import * as ScrollAreaPrimitive from "@radix-ui/react-scroll-area" + +import { cn } from "@/lib/utils" + +const ScrollArea = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, children, ...props }, ref) => ( + + + {children} + + + + +)) +ScrollArea.displayName = ScrollAreaPrimitive.Root.displayName + +const ScrollBar = React.forwardRef< + React.ElementRef, + React.ComponentPropsWithoutRef +>(({ className, orientation = "vertical", ...props }, ref) => ( + + + +)) +ScrollBar.displayName = ScrollAreaPrimitive.ScrollAreaScrollbar.displayName + +export { ScrollArea, ScrollBar } diff --git a/usecases/ai/digital-avatar/frontend/context/VideoQueueContext.tsx b/usecases/ai/digital-avatar/frontend/context/VideoQueueContext.tsx new file mode 100644 index 0000000..f008a14 --- /dev/null +++ b/usecases/ai/digital-avatar/frontend/context/VideoQueueContext.tsx @@ -0,0 +1,49 @@ +import React, { createContext, useState, ReactNode, useMemo, useCallback } from 'react'; + +interface Video { + id: number; + url?: string | undefined; +} + +export interface VideoQueueContextProps { + queue: Video[]; + addVideo: (video: Video) => void; + popVideo: () => void; + currentVideo: Video | undefined; + updateVideo: (id: number, url: string) => void; +} + +export const VideoQueueContext = createContext({} as VideoQueueContextProps); + +export const VideoQueueProvider = ({ children }: { children: ReactNode }) => { + const [queue, setQueue] = useState([]); + + const addVideo = (video: Video) => { + setQueue((prevQueue) => [...prevQueue, video]); + }; + + const updateVideo = (id: number, url: string) => { + setQueue((prevQueue) => { + return prevQueue.map((item) => { + if (item.id === id) { + return { ...item, url } + } + return { ...item } + }) + }); + }; + + const popVideo = useCallback(() => { + setQueue((prevQueue) => { return prevQueue.slice(1) }); + }, []); + + + const currentVideo = useMemo(() => { + return queue[0]; + }, [queue]) + return ( + + {children} + + ); +}; \ No newline at end of file diff --git a/usecases/ai/digital-avatar/frontend/hooks/useAudioRecorder.tsx b/usecases/ai/digital-avatar/frontend/hooks/useAudioRecorder.tsx new file mode 100644 index 0000000..af7eb18 --- /dev/null +++ b/usecases/ai/digital-avatar/frontend/hooks/useAudioRecorder.tsx @@ -0,0 +1,220 @@ +"use client" + +import { useCallback, useEffect, useRef, useState } from 'react'; + +import { useGetSTT } from './useSTT'; + +export default function useAudioRecorder() { + const MIN_DECIBELS = -45; + const VISUALIZER_BUFFER_LENGTH = 300; + + const [initialLoad, setInitialLoad] = useState(false); + const [mediaRecorder, setMediaRecorder] = useState(null); + const [recording, setRecording] = useState(false); + const chunks = useRef([]); + const [analyser, setAnalyser] = useState(null) + const [durationCounter, setDurationCounter] = useState(null) + const [durationSeconds, setDurationSeconds] = useState(0); + const [visualizerData, setVisualizerData] = useState(Array(VISUALIZER_BUFFER_LENGTH).fill(0)) + + const sttMutation = useGetSTT() + + // Function to calculate the RMS level from time domain data + const calculateRMS = (data: Uint8Array) => { + let sumSquares = 0; + for (let i = 0; i < data.length; i++) { + const normalizedValue = (data[i] - 128) / 128; // Normalize the data + sumSquares += normalizedValue * normalizedValue; + } + return Math.sqrt(sumSquares / data.length); + }; + + const normalizeRMS = (rms: number) => { + rms = rms * 10; + const exp = 1.5; // Adjust exponent value; values greater than 1 expand larger numbers more and compress smaller numbers more + const scaledRMS = Math.pow(rms, exp); + + // Scale between 0.01 (1%) and 1.0 (100%) + return Math.min(1.0, Math.max(0.01, scaledRMS)); + }; + + const analyseAudio = useCallback(() => { + if (!analyser) return; + const bufferLength = analyser.frequencyBinCount; + + const domainData = new Uint8Array(bufferLength); + const timeDomainData = new Uint8Array(analyser.fftSize); + + let lastSoundTime = Date.now(); + let hasStartedSpeaking = false + + const detectSound = () => { + const processFrame = () => { + if (recording) { + analyser.getByteTimeDomainData(timeDomainData); + analyser.getByteFrequencyData(domainData); + + // Calculate RMS level from time domain data + const rmsLevel = calculateRMS(timeDomainData); + // Push the calculated decibel level to visualizerData + setVisualizerData((prev) => { + if (prev.length >= VISUALIZER_BUFFER_LENGTH) { + prev.shift(); + } + return [...prev, normalizeRMS(rmsLevel)]; + }) + + // Check if initial speech/noise has started + const hasSound = domainData.some((value) => value > 0); + if (hasSound) { + if (!hasStartedSpeaking) { + hasStartedSpeaking = true + } + + lastSoundTime = Date.now(); + } + + // Start silence detection only after initial speech/noise has been detected + if (hasStartedSpeaking) { + if (Date.now() - lastSoundTime > 2000) { + if (mediaRecorder) { + console.log('stop') + mediaRecorder.stop(); + return; + } + } + } + + window.requestAnimationFrame(processFrame); + } + }; + + window.requestAnimationFrame(processFrame); + }; + + detectSound(); + }, [analyser, mediaRecorder, recording]); + + const initiateMediaRecoder = useCallback( + (stream: MediaStream) => { + const blobToFile = (blob: Blob, fileName: string) => { + // Create a new File object from the Blob + const file = new File([blob], fileName, { type: blob.type }); + return file; + }; + + const transcribe = async (file: File) => { + const form = new FormData() + form.append("file", file) + form.append("language", "english") + sttMutation.mutate({ data: form }) + } + + const wavRecorder = new MediaRecorder(stream); + + // Event handler when recording starts + wavRecorder.onstart = () => { + chunks.current = []; // Resetting chunks array + }; + + // Event handler when data becomes available during recording + wavRecorder.ondataavailable = (ev: BlobEvent) => { + chunks.current.push(ev.data); // Storing data chunks + }; + + // Event handler when recording stops + wavRecorder.onstop = () => { + const mimeType = wavRecorder.mimeType; + const audioBlob = new Blob(chunks.current, { type: mimeType }); + const file = blobToFile(audioBlob, 'recording.wav'); + transcribe(file) + setRecording(false); + }; + + setMediaRecorder(wavRecorder); + + // Analyzer to activate only on certain noise level + const audioCtx = new AudioContext(); + const sourceAnalyser = audioCtx.createAnalyser(); + const source = audioCtx.createMediaStreamSource(stream); + source.connect(sourceAnalyser); + sourceAnalyser.minDecibels = MIN_DECIBELS + setAnalyser(sourceAnalyser) + }, + [MIN_DECIBELS, sttMutation] + ); + + const startRecording = useCallback(() => { + const startDurationCounter = () => { + setDurationCounter(setInterval(() => { + setDurationSeconds(prev => prev + 1); + }, 1000)); + }; + + if (mediaRecorder) { + startDurationCounter(); + setRecording(true); + mediaRecorder.start(); + } + }, [mediaRecorder]) + + const stopRecording = useCallback(() => { + const stopDurationCounter = () => { + if (durationCounter !== null) { + clearInterval(durationCounter); + } + setDurationSeconds(0); + }; + + + if (mediaRecorder) { + stopDurationCounter() + mediaRecorder.stop(); + } + }, [durationCounter, mediaRecorder]); + + const pauseRecording = useCallback(() => { + if (mediaRecorder) { + mediaRecorder.pause(); + } + }, [mediaRecorder]) + + const resumeRecording = useCallback(() => { + if (mediaRecorder) { + mediaRecorder.resume(); + } + }, [mediaRecorder]) + + + useEffect(() => { + async function loadRecorder(): Promise { + + const stream = await navigator.mediaDevices.getUserMedia({ audio: true }); + initiateMediaRecoder(stream); + } + + if (typeof window !== 'undefined' && !mediaRecorder && !initialLoad) { + setInitialLoad(true); + void loadRecorder() + } + }, [mediaRecorder, initialLoad, initiateMediaRecoder]); + + useEffect(() => { + if (recording) { + analyseAudio() + } + }, [analyseAudio, recording]) + + return { + startRecording, + stopRecording, + visualizerData, + recording, + durationSeconds, + sttMutation, + pauseRecording, + resumeRecording + }; +}; + +export const preferredRegion = 'home' \ No newline at end of file diff --git a/usecases/ai/digital-avatar/frontend/hooks/useLipsync.tsx b/usecases/ai/digital-avatar/frontend/hooks/useLipsync.tsx new file mode 100644 index 0000000..4cb3829 --- /dev/null +++ b/usecases/ai/digital-avatar/frontend/hooks/useLipsync.tsx @@ -0,0 +1,19 @@ +"use client" + +import { useMutation } from "@tanstack/react-query"; + +import { FetchAPI } from "@/lib/api"; + +const LipsyncAPI = new FetchAPI(`${process.env.NEXT_PUBLIC_LIPSYNC_URL}`); + +export function useGetLipsync() { + return useMutation({ + mutationFn: async ({ + data + }: { data: FormData }) => { + // const response = await fetch("/api/lipsync", { body: data, method: "POST" }) + const response = await LipsyncAPI.file('inference', data, { headers: {} }) + return await response.blob() + }, + }); +} \ No newline at end of file diff --git a/usecases/ai/digital-avatar/frontend/hooks/useSTT.tsx b/usecases/ai/digital-avatar/frontend/hooks/useSTT.tsx new file mode 100644 index 0000000..e11e08a --- /dev/null +++ b/usecases/ai/digital-avatar/frontend/hooks/useSTT.tsx @@ -0,0 +1,22 @@ +"use client" + +import { useMutation, UseMutationResult } from "@tanstack/react-query"; + +import { FetchAPI } from "@/lib/api"; + +const STTAPI = new FetchAPI(`${process.env.NEXT_PUBLIC_STT_URL}`); + +export function useGetSTT(): UseMutationResult, Error, { data: FormData }> { + return useMutation({ + mutationFn: async ({ + data + }: { data: FormData }) => { + try { + const response = await STTAPI.file('audio/transcriptions', data, { headers: {} }) + return await response.json() + } catch (error) { + return { status: false, message: "Failed to process audio", data: error } + } + }, + }); +} \ No newline at end of file diff --git a/usecases/ai/digital-avatar/frontend/hooks/useTTS.tsx b/usecases/ai/digital-avatar/frontend/hooks/useTTS.tsx new file mode 100644 index 0000000..ff4c7ce --- /dev/null +++ b/usecases/ai/digital-avatar/frontend/hooks/useTTS.tsx @@ -0,0 +1,19 @@ +"use client" + +import { useMutation } from "@tanstack/react-query"; + +import { FetchAPI } from "@/lib/api"; + +const TTSAPI = new FetchAPI(`${process.env.NEXT_PUBLIC_TTS_URL}`); + +export function useGetTTSAudio() { + return useMutation({ + mutationFn: async ({ + text + }: { text: string }) => { + // const response = await fetch("/api/tts", { method: "POST", body: JSON.stringify({ input: text, voice: "EN-US", model: " - " }) }) + const response = await TTSAPI.file('audio/speech', { input: text, voice: "EN-US", model: "-", speed: 1.2 }) + return await response.blob() + }, + }); +} \ No newline at end of file diff --git a/usecases/ai/digital-avatar/frontend/hooks/useVideoQueue.tsx b/usecases/ai/digital-avatar/frontend/hooks/useVideoQueue.tsx new file mode 100644 index 0000000..3c03c29 --- /dev/null +++ b/usecases/ai/digital-avatar/frontend/hooks/useVideoQueue.tsx @@ -0,0 +1,8 @@ +import { useContext } from 'react'; + +import { VideoQueueContext, VideoQueueContextProps } from '@/context/VideoQueueContext'; + + +const useVideoQueue: () => VideoQueueContextProps = () => useContext(VideoQueueContext); + +export default useVideoQueue; \ No newline at end of file diff --git a/usecases/ai/digital-avatar/frontend/lib/api.ts b/usecases/ai/digital-avatar/frontend/lib/api.ts new file mode 100644 index 0000000..486cc83 --- /dev/null +++ b/usecases/ai/digital-avatar/frontend/lib/api.ts @@ -0,0 +1,97 @@ +// INTEL CONFIDENTIAL +// Copyright (C) 2024, Intel Corporation +import { type APIResponse } from '@/types/api'; + +interface RequestConfig { + headers?: Record; + data?: any; + tags?: string[]; + revalidate?: number; + raw_response?: boolean; +} + +type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE'; +const apiVersion = 'v1'; + +export class FetchAPI { + private baseURL: string; + + constructor(baseURL: string) { + if (!baseURL.match(/^https?:\/\//)) { + baseURL = 'http://' + baseURL; + } + this.baseURL = new URL(`${apiVersion}/path`, baseURL).toString(); + } + + private async request(method: HttpMethod, url: string, config: RequestConfig = {}): Promise { + try { + const { data, tags, revalidate, headers, raw_response } = config; + const fullURL = new URL(url, this.baseURL).toString(); + const options: RequestInit = { + method, + headers: headers ?? { 'Content-Type': 'application/json' }, + next: { + ...(tags && { tags }), + ...((revalidate || revalidate === 0) && { revalidate }), + }, + }; + + const request = new Request(fullURL, options); + if (data && request.headers.get('Content-Type') === 'application/json') { + options.body = JSON.stringify(data); + } else { + options.body = data; + } + const response = await fetch(fullURL, options); + return raw_response ? response : this.handleResponse(response); + } catch (err) { + console.log(err); + return { + status: false, + message: 'Error communicating with backend', + } as APIResponse; + } + } + + private async handleResponse(response: Response): Promise { + const responseURL = response.url; + const data = await response.json(); + if (!response.ok) { + return { + status: false, + message: 'Error communicating with backend', + url: response.url, + } as APIResponse; + } + if ("status" in data) { + return data as APIResponse + } + return { status: true, data, url: responseURL } as APIResponse; + } + + public async get(url: string, config?: RequestConfig): Promise { + return await this.request('GET', url, config) as APIResponse; + } + + public async post(url: string, data?: Record, config?: RequestConfig): Promise { + return await this.request('POST', url, { ...config, data }) as APIResponse; + } + + public async put(url: string, data?: Record, config?: RequestConfig): Promise { + return await this.request('PUT', url, { ...config, data }) as APIResponse; + } + + public async patch(url: string, data?: Record, config?: RequestConfig): Promise { + return await this.request('PATCH', url, { ...config, data }) as APIResponse; + } + + public async delete(url: string, config?: RequestConfig): Promise { + return await this.request('DELETE', url, config) as APIResponse; + } + + public async file(url: string, data?: Record, config?: RequestConfig): Promise { + return await this.request('POST', url, { ...config, raw_response: true, data }) as Response; + } +} + +export const API = new FetchAPI(`http://${process.env.NEXT_PUBLIC_API_URL ?? "localhost"}:5999`); diff --git a/usecases/ai/digital-avatar/frontend/lib/utils.ts b/usecases/ai/digital-avatar/frontend/lib/utils.ts new file mode 100644 index 0000000..bd0c391 --- /dev/null +++ b/usecases/ai/digital-avatar/frontend/lib/utils.ts @@ -0,0 +1,6 @@ +import { clsx, type ClassValue } from "clsx" +import { twMerge } from "tailwind-merge" + +export function cn(...inputs: ClassValue[]) { + return twMerge(clsx(inputs)) +} diff --git a/usecases/ai/digital-avatar/frontend/next.config.mjs b/usecases/ai/digital-avatar/frontend/next.config.mjs new file mode 100644 index 0000000..c58c974 --- /dev/null +++ b/usecases/ai/digital-avatar/frontend/next.config.mjs @@ -0,0 +1,6 @@ +/** @type {import('next').NextConfig} */ +const nextConfig = { + reactStrictMode: false, +}; + +export default nextConfig; diff --git a/usecases/ai/digital-avatar/frontend/package-lock.json b/usecases/ai/digital-avatar/frontend/package-lock.json new file mode 100644 index 0000000..1810ad9 --- /dev/null +++ b/usecases/ai/digital-avatar/frontend/package-lock.json @@ -0,0 +1,9095 @@ +{ + "name": "frontend", + "version": "0.1.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "frontend", + "version": "0.1.0", + "dependencies": { + "@ai-sdk/openai": "^0.0.71", + "@radix-ui/react-icons": "^1.3.1", + "@radix-ui/react-scroll-area": "^1.2.0", + "@radix-ui/react-slot": "^1.1.0", + "@tanstack/react-query": "^5.59.16", + "ai": "^3.4.32", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.1", + "lucide-react": "^0.454.0", + "next": "14.2.16", + "ollama-ai-provider": "^0.16.0", + "react": "^18", + "react-dom": "^18", + "react-markdown": "^9.0.1", + "remark-gfm": "^4.0.0", + "tailwind-merge": "^2.5.4", + "tailwindcss-animate": "^1.0.7" + }, + "devDependencies": { + "@tailwindcss/typography": "^0.5.15", + "@types/d3-scale": "^4.0.8", + "@types/node": "^20", + "@types/pdf-parse": "^1.1.4", + "@types/react": "^18", + "@types/react-dom": "^18", + "drizzle-kit": "^0.25.0", + "eslint": "^8.57.0", + "eslint-config-next": "^14.2.16", + "eslint-config-prettier": "^9.1.0", + "eslint-import-resolver-typescript": "^3.6.3", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-tailwindcss": "^3.17.5", + "postcss": "^8", + "prettier": "^3.3.3", + "tailwindcss": "^3.4.1", + "tsx": "^4.19.1", + "typescript": "^5" + } + }, + "node_modules/@ai-sdk/openai": { + "version": "0.0.71", + "resolved": "https://registry.npmjs.org/@ai-sdk/openai/-/openai-0.0.71.tgz", + "integrity": "sha512-ds7u3sWEnKyHxM3lAL9xTs72228HEKcPZCAEFaxmgrexKPJe2tyLBtvS/Kg39SPKPtY9EeaKqi/nbx1AmnXK6A==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "0.0.26", + "@ai-sdk/provider-utils": "1.0.22" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.0.0" + } + }, + "node_modules/@ai-sdk/provider": { + "version": "0.0.26", + "resolved": "https://registry.npmjs.org/@ai-sdk/provider/-/provider-0.0.26.tgz", + "integrity": "sha512-dQkfBDs2lTYpKM8389oopPdQgIU007GQyCbuPPrV+K6MtSII3HBfE0stUIMXUb44L+LK1t6GXPP7wjSzjO6uKg==", + "license": "Apache-2.0", + "dependencies": { + "json-schema": "^0.4.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@ai-sdk/provider-utils": { + "version": "1.0.22", + "resolved": "https://registry.npmjs.org/@ai-sdk/provider-utils/-/provider-utils-1.0.22.tgz", + "integrity": "sha512-YHK2rpj++wnLVc9vPGzGFP3Pjeld2MwhKinetA0zKXOoHAT/Jit5O8kZsxcSlJPu9wvcGT1UGZEjZrtO7PfFOQ==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "0.0.26", + "eventsource-parser": "^1.1.2", + "nanoid": "^3.3.7", + "secure-json-parse": "^2.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.0.0" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } + } + }, + "node_modules/@ai-sdk/react": { + "version": "0.0.70", + "resolved": "https://registry.npmjs.org/@ai-sdk/react/-/react-0.0.70.tgz", + "integrity": "sha512-GnwbtjW4/4z7MleLiW+TOZC2M29eCg1tOUpuEiYFMmFNZK8mkrqM0PFZMo6UsYeUYMWqEOOcPOU9OQVJMJh7IQ==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider-utils": "1.0.22", + "@ai-sdk/ui-utils": "0.0.50", + "swr": "^2.2.5", + "throttleit": "2.1.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "react": "^18 || ^19 || ^19.0.0-rc", + "zod": "^3.0.0" + }, + "peerDependenciesMeta": { + "react": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/@ai-sdk/solid": { + "version": "0.0.54", + "resolved": "https://registry.npmjs.org/@ai-sdk/solid/-/solid-0.0.54.tgz", + "integrity": "sha512-96KWTVK+opdFeRubqrgaJXoNiDP89gNxFRWUp0PJOotZW816AbhUf4EnDjBjXTLjXL1n0h8tGSE9sZsRkj9wQQ==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider-utils": "1.0.22", + "@ai-sdk/ui-utils": "0.0.50" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "solid-js": "^1.7.7" + }, + "peerDependenciesMeta": { + "solid-js": { + "optional": true + } + } + }, + "node_modules/@ai-sdk/svelte": { + "version": "0.0.57", + "resolved": "https://registry.npmjs.org/@ai-sdk/svelte/-/svelte-0.0.57.tgz", + "integrity": "sha512-SyF9ItIR9ALP9yDNAD+2/5Vl1IT6kchgyDH8xkmhysfJI6WrvJbtO1wdQ0nylvPLcsPoYu+cAlz1krU4lFHcYw==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider-utils": "1.0.22", + "@ai-sdk/ui-utils": "0.0.50", + "sswr": "^2.1.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "svelte": "^3.0.0 || ^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "svelte": { + "optional": true + } + } + }, + "node_modules/@ai-sdk/ui-utils": { + "version": "0.0.50", + "resolved": "https://registry.npmjs.org/@ai-sdk/ui-utils/-/ui-utils-0.0.50.tgz", + "integrity": "sha512-Z5QYJVW+5XpSaJ4jYCCAVG7zIAuKOOdikhgpksneNmKvx61ACFaf98pmOd+xnjahl0pIlc/QIe6O4yVaJ1sEaw==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "0.0.26", + "@ai-sdk/provider-utils": "1.0.22", + "json-schema": "^0.4.0", + "secure-json-parse": "^2.7.0", + "zod-to-json-schema": "^3.23.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.0.0" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } + } + }, + "node_modules/@ai-sdk/vue": { + "version": "0.0.59", + "resolved": "https://registry.npmjs.org/@ai-sdk/vue/-/vue-0.0.59.tgz", + "integrity": "sha512-+ofYlnqdc8c4F6tM0IKF0+7NagZRAiqBJpGDJ+6EYhDW8FHLUP/JFBgu32SjxSxC6IKFZxEnl68ZoP/Z38EMlw==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider-utils": "1.0.22", + "@ai-sdk/ui-utils": "0.0.50", + "swrv": "^1.0.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "vue": "^3.3.4" + }, + "peerDependenciesMeta": { + "vue": { + "optional": true + } + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz", + "integrity": "sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.25.9", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz", + "integrity": "sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.26.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", + "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/types": "^7.26.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/types": { + "version": "7.26.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", + "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-string-parser": "^7.25.9", + "@babel/helper-validator-identifier": "^7.25.9" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@drizzle-team/brocli": { + "version": "0.10.2", + "resolved": "https://registry.npmjs.org/@drizzle-team/brocli/-/brocli-0.10.2.tgz", + "integrity": "sha512-z33Il7l5dKjUgGULTqBsQBQwckHh5AbIuxhdsIxDDiZAzBOrZO6q9ogcWC65kU382AfynTfgNumVcNIjuIua6w==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@esbuild-kit/core-utils": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/@esbuild-kit/core-utils/-/core-utils-3.3.2.tgz", + "integrity": "sha512-sPRAnw9CdSsRmEtnsl2WXWdyquogVpB3yZ3dgwJfe8zrOzTsV7cJvmwrKVa+0ma5BoiGJ+BoqkMvawbayKUsqQ==", + "deprecated": "Merged into tsx: https://tsx.is", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.18.20", + "source-map-support": "^0.5.21" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/android-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", + "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/android-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", + "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/android-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", + "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/darwin-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", + "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/freebsd-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", + "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/freebsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", + "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-arm": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", + "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", + "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", + "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-loong64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", + "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-mips64el": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", + "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-ppc64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", + "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-riscv64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", + "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-s390x": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", + "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/linux-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", + "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/netbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", + "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/openbsd-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", + "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/sunos-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", + "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/win32-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", + "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/win32-ia32": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", + "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/@esbuild/win32-x64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", + "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild-kit/core-utils/node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" + } + }, + "node_modules/@esbuild-kit/esm-loader": { + "version": "2.6.5", + "resolved": "https://registry.npmjs.org/@esbuild-kit/esm-loader/-/esm-loader-2.6.5.tgz", + "integrity": "sha512-FxEMIkJKnodyA1OaCUoEvbYRkoZlLZ4d/eXFu9Fh8CbBBgP5EmZxrfTRyN0qpXZ4vOvqnE5YdRdcrmUUXuU+dA==", + "deprecated": "Merged into tsx: https://tsx.is", + "dev": true, + "license": "MIT", + "dependencies": { + "@esbuild-kit/core-utils": "^3.3.2", + "get-tsconfig": "^4.7.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", + "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", + "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", + "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", + "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", + "deprecated": "Use @eslint/config-array instead", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "license": "ISC", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/cliui/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/@isaacs/cliui/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "license": "MIT", + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@next/env": { + "version": "14.2.16", + "resolved": "https://registry.npmjs.org/@next/env/-/env-14.2.16.tgz", + "integrity": "sha512-fLrX5TfJzHCbnZ9YUSnGW63tMV3L4nSfhgOQ0iCcX21Pt+VSTDuaLsSuL8J/2XAiVA5AnzvXDpf6pMs60QxOag==", + "license": "MIT" + }, + "node_modules/@next/eslint-plugin-next": { + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/@next/eslint-plugin-next/-/eslint-plugin-next-14.2.18.tgz", + "integrity": "sha512-KyYTbZ3GQwWOjX3Vi1YcQbekyGP0gdammb7pbmmi25HBUCINzDReyrzCMOJIeZisK1Q3U6DT5Rlc4nm2/pQeXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob": "10.3.10" + } + }, + "node_modules/@next/swc-darwin-arm64": { + "version": "14.2.16", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-arm64/-/swc-darwin-arm64-14.2.16.tgz", + "integrity": "sha512-uFT34QojYkf0+nn6MEZ4gIWQ5aqGF11uIZ1HSxG+cSbj+Mg3+tYm8qXYd3dKN5jqKUm5rBVvf1PBRO/MeQ6rxw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-darwin-x64": { + "version": "14.2.16", + "resolved": "https://registry.npmjs.org/@next/swc-darwin-x64/-/swc-darwin-x64-14.2.16.tgz", + "integrity": "sha512-mCecsFkYezem0QiZlg2bau3Xul77VxUD38b/auAjohMA22G9KTJneUYMv78vWoCCFkleFAhY1NIvbyjj1ncG9g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-gnu": { + "version": "14.2.16", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-gnu/-/swc-linux-arm64-gnu-14.2.16.tgz", + "integrity": "sha512-yhkNA36+ECTC91KSyZcgWgKrYIyDnXZj8PqtJ+c2pMvj45xf7y/HrgI17hLdrcYamLfVt7pBaJUMxADtPaczHA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-arm64-musl": { + "version": "14.2.16", + "resolved": "https://registry.npmjs.org/@next/swc-linux-arm64-musl/-/swc-linux-arm64-musl-14.2.16.tgz", + "integrity": "sha512-X2YSyu5RMys8R2lA0yLMCOCtqFOoLxrq2YbazFvcPOE4i/isubYjkh+JCpRmqYfEuCVltvlo+oGfj/b5T2pKUA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-gnu": { + "version": "14.2.16", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-gnu/-/swc-linux-x64-gnu-14.2.16.tgz", + "integrity": "sha512-9AGcX7VAkGbc5zTSa+bjQ757tkjr6C/pKS7OK8cX7QEiK6MHIIezBLcQ7gQqbDW2k5yaqba2aDtaBeyyZh1i6Q==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-linux-x64-musl": { + "version": "14.2.16", + "resolved": "https://registry.npmjs.org/@next/swc-linux-x64-musl/-/swc-linux-x64-musl-14.2.16.tgz", + "integrity": "sha512-Klgeagrdun4WWDaOizdbtIIm8khUDQJ/5cRzdpXHfkbY91LxBXeejL4kbZBrpR/nmgRrQvmz4l3OtttNVkz2Sg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-arm64-msvc": { + "version": "14.2.16", + "resolved": "https://registry.npmjs.org/@next/swc-win32-arm64-msvc/-/swc-win32-arm64-msvc-14.2.16.tgz", + "integrity": "sha512-PwW8A1UC1Y0xIm83G3yFGPiOBftJK4zukTmk7DI1CebyMOoaVpd8aSy7K6GhobzhkjYvqS/QmzcfsWG2Dwizdg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-ia32-msvc": { + "version": "14.2.16", + "resolved": "https://registry.npmjs.org/@next/swc-win32-ia32-msvc/-/swc-win32-ia32-msvc-14.2.16.tgz", + "integrity": "sha512-jhPl3nN0oKEshJBNDAo0etGMzv0j3q3VYorTSFqH1o3rwv1MQRdor27u1zhkgsHPNeY1jxcgyx1ZsCkDD1IHgg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@next/swc-win32-x64-msvc": { + "version": "14.2.16", + "resolved": "https://registry.npmjs.org/@next/swc-win32-x64-msvc/-/swc-win32-x64-msvc-14.2.16.tgz", + "integrity": "sha512-OA7NtfxgirCjfqt+02BqxC3MIgM/JaGjw9tOe4fyZgPsqfseNiMPnCRP44Pfs+Gpo9zPN+SXaFsgP6vk8d571A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nolyfill/is-core-module": { + "version": "1.0.39", + "resolved": "https://registry.npmjs.org/@nolyfill/is-core-module/-/is-core-module-1.0.39.tgz", + "integrity": "sha512-nn5ozdjYQpUCZlWGuxcJY/KpxkWQs4DcbMCmKojjyrYDEAGy4Ce19NN4v5MduafTwJlbKc99UA8YhSVqq9yPZA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.4.0" + } + }, + "node_modules/@opentelemetry/api": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.9.0.tgz", + "integrity": "sha512-3giAOQvZiH5F9bMlMiv8+GSPMeqg0dbaeo58/0SlA9sxSqZhnUtxzX9/2FzyhS9sWQf5S0GJE0AKBrFqjpeYcg==", + "license": "Apache-2.0", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "license": "MIT", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@radix-ui/number": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/number/-/number-1.1.0.tgz", + "integrity": "sha512-V3gRzhVNU1ldS5XhAPTom1fOIo4ccrjjJgmE+LI2h/WaFpHmx0MQApT+KZHnx8abG6Avtfcz4WoEciMnpFT3HQ==", + "license": "MIT" + }, + "node_modules/@radix-ui/primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/primitive/-/primitive-1.1.0.tgz", + "integrity": "sha512-4Z8dn6Upk0qk4P74xBhZ6Hd/w0mPEzOOLxy4xiPXOXqjF7jZS0VAKk7/x/H6FyY2zCkYJqePf1G5KmkmNJ4RBA==", + "license": "MIT" + }, + "node_modules/@radix-ui/react-compose-refs": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-compose-refs/-/react-compose-refs-1.1.0.tgz", + "integrity": "sha512-b4inOtiaOnYf9KWyO3jAeeCG6FeyfY6ldiEPanbUjWd+xIk5wZeHa8yVwmrJ2vderhu/BQvzCrJI0lHd+wIiqw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-context": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-context/-/react-context-1.1.1.tgz", + "integrity": "sha512-UASk9zi+crv9WteK/NU4PLvOoL3OuE6BWVKNF6hPRBtYBDXQ2u5iu3O59zUlJiTVvkyuycnqrztsHVJwcK9K+Q==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-direction": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-direction/-/react-direction-1.1.0.tgz", + "integrity": "sha512-BUuBvgThEiAXh2DWu93XsT+a3aWrGqolGlqqw5VU1kG7p/ZH2cuDlM1sRLNnY3QcBS69UIz2mcKhMxDsdewhjg==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-icons": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@radix-ui/react-icons/-/react-icons-1.3.2.tgz", + "integrity": "sha512-fyQIhGDhzfc9pK2kH6Pl9c4BDJGfMkPqkyIgYDthyNYoNg3wVhoJMMh19WS4Up/1KMPFVpNsT2q3WmXn2N1m6g==", + "license": "MIT", + "peerDependencies": { + "react": "^16.x || ^17.x || ^18.x || ^19.0.0 || ^19.0.0-rc" + } + }, + "node_modules/@radix-ui/react-presence": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-presence/-/react-presence-1.1.1.tgz", + "integrity": "sha512-IeFXVi4YS1K0wVZzXNrbaaUvIJ3qdY+/Ih4eHFhWA9SwGR9UDX7Ck8abvL57C4cv3wwMvUE0OG69Qc3NCcTe/A==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-primitive/-/react-primitive-2.0.0.tgz", + "integrity": "sha512-ZSpFm0/uHa8zTvKBDjLFWLo8dkr4MBsiDLz0g3gMUwqgLHz9rTaRRGYDgvZPtBJgYCBKXkS9fzmoySgr8CO6Cw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-slot": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-scroll-area": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@radix-ui/react-scroll-area/-/react-scroll-area-1.2.1.tgz", + "integrity": "sha512-FnM1fHfCtEZ1JkyfH/1oMiTcFBQvHKl4vD9WnpwkLgtF+UmnXMCad6ECPTaAjcDjam+ndOEJWgHyKDGNteWSHw==", + "license": "MIT", + "dependencies": { + "@radix-ui/number": "1.1.0", + "@radix-ui/primitive": "1.1.0", + "@radix-ui/react-compose-refs": "1.1.0", + "@radix-ui/react-context": "1.1.1", + "@radix-ui/react-direction": "1.1.0", + "@radix-ui/react-presence": "1.1.1", + "@radix-ui/react-primitive": "2.0.0", + "@radix-ui/react-use-callback-ref": "1.1.0", + "@radix-ui/react-use-layout-effect": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "@types/react-dom": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + }, + "@types/react-dom": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-slot/-/react-slot-1.1.0.tgz", + "integrity": "sha512-FUCf5XMfmW4dtYl69pdS4DbxKy8nj4M7SafBgPllysxmdachynNflAdp/gCsnYWNDnge6tI9onzMp5ARYc1KNw==", + "license": "MIT", + "dependencies": { + "@radix-ui/react-compose-refs": "1.1.0" + }, + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-callback-ref": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-callback-ref/-/react-use-callback-ref-1.1.0.tgz", + "integrity": "sha512-CasTfvsy+frcFkbXtSJ2Zu9JHpN8TYKxkgJGWbjiZhFivxaeW7rMeZt7QELGVLaYVfFMsKHjb7Ak0nMEe+2Vfw==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@radix-ui/react-use-layout-effect": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@radix-ui/react-use-layout-effect/-/react-use-layout-effect-1.1.0.tgz", + "integrity": "sha512-+FPE0rOdziWSrH9athwI1R0HDVbWlEhd+FR+aSDk4uWGmSJ9Z54sdZVDQPZAinJhJXwfT+qnj969mCsT2gfm5w==", + "license": "MIT", + "peerDependencies": { + "@types/react": "*", + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0 || ^19.0.0-rc" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@rtsao/scc": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", + "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@rushstack/eslint-patch": { + "version": "1.10.4", + "resolved": "https://registry.npmjs.org/@rushstack/eslint-patch/-/eslint-patch-1.10.4.tgz", + "integrity": "sha512-WJgX9nzTqknM393q1QJDJmoW28kUfEnybeTfVNcNAPnIx210RXm2DiXiHzfNPJNIUUb1tJnz/l4QGtJ30PgWmA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@swc/counter": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@swc/counter/-/counter-0.1.3.tgz", + "integrity": "sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==", + "license": "Apache-2.0" + }, + "node_modules/@swc/helpers": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.5.tgz", + "integrity": "sha512-KGYxvIOXcceOAbEk4bi/dVLEK9z8sZ0uBB3Il5b1rhfClSpcX0yfRO0KmTkqR2cnQDymwLB+25ZyMzICg/cm/A==", + "license": "Apache-2.0", + "dependencies": { + "@swc/counter": "^0.1.3", + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/typography": { + "version": "0.5.15", + "resolved": "https://registry.npmjs.org/@tailwindcss/typography/-/typography-0.5.15.tgz", + "integrity": "sha512-AqhlCXl+8grUz8uqExv5OTtgpjuVIwFTSXTrh8y9/pw6q2ek7fJ+Y8ZEVw7EB2DCcuCOtEjf9w3+J3rzts01uA==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash.castarray": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.merge": "^4.6.2", + "postcss-selector-parser": "6.0.10" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders || >=4.0.0-alpha.20" + } + }, + "node_modules/@tanstack/query-core": { + "version": "5.61.5", + "resolved": "https://registry.npmjs.org/@tanstack/query-core/-/query-core-5.61.5.tgz", + "integrity": "sha512-iG5vqurEOEbv+paP6kW3zPENa99kSIrd1THISJMaTwVlJ+N5yjVDNOUwp9McK2DWqWCXM3v13ubBbAyhxT78UQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + } + }, + "node_modules/@tanstack/react-query": { + "version": "5.61.5", + "resolved": "https://registry.npmjs.org/@tanstack/react-query/-/react-query-5.61.5.tgz", + "integrity": "sha512-rjy8aqPgBBEz/rjJnpnuhi8TVkVTorMUsJlM3lMvrRb5wK6yzfk34Er0fnJ7w/4qyF01SnXsLB/QsTBsLF5PaQ==", + "license": "MIT", + "dependencies": { + "@tanstack/query-core": "5.61.5" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/tannerlinsley" + }, + "peerDependencies": { + "react": "^18 || ^19" + } + }, + "node_modules/@types/d3-scale": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.8.tgz", + "integrity": "sha512-gkK1VVTr5iNiYJ7vWDI+yUFFlszhNMtVeneJ6lUTKPjprsvLLI9/tgEGiXJOnlINJA8FyA88gfnQsHbybVZrYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/debug": { + "version": "4.1.12", + "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", + "integrity": "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==", + "license": "MIT", + "dependencies": { + "@types/ms": "*" + } + }, + "node_modules/@types/diff-match-patch": { + "version": "1.0.36", + "resolved": "https://registry.npmjs.org/@types/diff-match-patch/-/diff-match-patch-1.0.36.tgz", + "integrity": "sha512-xFdR6tkm0MWvBfO8xXCSsinYxHcqkQUlcHeSpMC2ukzOb6lwQAfDmW+Qt0AvlGd8HpsS28qKsB+oPeJn9I39jg==", + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "license": "MIT" + }, + "node_modules/@types/estree-jsx": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree-jsx/-/estree-jsx-1.0.5.tgz", + "integrity": "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==", + "license": "MIT", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mdast": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", + "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, + "node_modules/@types/ms": { + "version": "0.7.34", + "resolved": "https://registry.npmjs.org/@types/ms/-/ms-0.7.34.tgz", + "integrity": "sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==", + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "20.17.8", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.8.tgz", + "integrity": "sha512-ahz2g6/oqbKalW9sPv6L2iRbhLnojxjYWspAqhjvqSWBgGebEJT5GvRmk0QXPj3sbC6rU0GTQjPLQkmR8CObvA==", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@types/pdf-parse": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@types/pdf-parse/-/pdf-parse-1.1.4.tgz", + "integrity": "sha512-+gbBHbNCVGGYw1S9lAIIvrHW47UYOhMIFUsJcMkMrzy1Jf0vulBN3XQIjPgnoOXveMuHnF3b57fXROnY/Or7eg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/prop-types": { + "version": "15.7.13", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", + "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", + "license": "MIT" + }, + "node_modules/@types/react": { + "version": "18.3.12", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", + "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", + "license": "MIT", + "dependencies": { + "@types/prop-types": "*", + "csstype": "^3.0.2" + } + }, + "node_modules/@types/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "@types/react": "*" + } + }, + "node_modules/@types/unist": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.16.0.tgz", + "integrity": "sha512-5YTHKV8MYlyMI6BaEG7crQ9BhSc8RxzshOReKwZwRWN0+XvvTOm+L/UYLCYxFpfwYuAAqhxiq4yae0CMFwbL7Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.16.0", + "@typescript-eslint/type-utils": "8.16.0", + "@typescript-eslint/utils": "8.16.0", + "@typescript-eslint/visitor-keys": "8.16.0", + "graphemer": "^1.4.0", + "ignore": "^5.3.1", + "natural-compare": "^1.4.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.16.0.tgz", + "integrity": "sha512-D7DbgGFtsqIPIFMPJwCad9Gfi/hC0PWErRRHFnaCWoEDYi5tQUDiJCTmGUbBiLzjqAck4KcXt9Ayj0CNlIrF+w==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "8.16.0", + "@typescript-eslint/types": "8.16.0", + "@typescript-eslint/typescript-estree": "8.16.0", + "@typescript-eslint/visitor-keys": "8.16.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.16.0.tgz", + "integrity": "sha512-mwsZWubQvBki2t5565uxF0EYvG+FwdFb8bMtDuGQLdCCnGPrDEDvm1gtfynuKlnpzeBRqdFCkMf9jg1fnAK8sg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.16.0", + "@typescript-eslint/visitor-keys": "8.16.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.16.0.tgz", + "integrity": "sha512-IqZHGG+g1XCWX9NyqnI/0CX5LL8/18awQqmkZSl2ynn8F76j579dByc0jhfVSnSnhf7zv76mKBQv9HQFKvDCgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "8.16.0", + "@typescript-eslint/utils": "8.16.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.16.0.tgz", + "integrity": "sha512-NzrHj6thBAOSE4d9bsuRNMvk+BvaQvmY4dDglgkgGC0EW/tB3Kelnp3tAKH87GEwzoxgeQn9fNGRyFJM/xd+GQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.16.0.tgz", + "integrity": "sha512-E2+9IzzXMc1iaBy9zmo+UYvluE3TW7bCGWSF41hVWUE01o8nzr1rvOQYSxelxr6StUvRcTMe633eY8mXASMaNw==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "8.16.0", + "@typescript-eslint/visitor-keys": "8.16.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.16.0.tgz", + "integrity": "sha512-C1zRy/mOL8Pj157GiX4kaw7iyRLKfJXBR3L82hk5kS/GyHcOFmy4YUq/zfZti72I9wnuQtA/+xzft4wCC8PJdA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.16.0", + "@typescript-eslint/types": "8.16.0", + "@typescript-eslint/typescript-estree": "8.16.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.16.0.tgz", + "integrity": "sha512-pq19gbaMOmFE3CbL0ZB8J8BFCo2ckfHBfaIsaOZgBIF4EoISJIdLX5xRhd0FGB0LlHReNRuzoJoMGpTjq8F2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.16.0", + "eslint-visitor-keys": "^4.2.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", + "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", + "license": "ISC" + }, + "node_modules/@vue/compiler-core": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.13.tgz", + "integrity": "sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/shared": "3.5.13", + "entities": "^4.5.0", + "estree-walker": "^2.0.2", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-dom": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.13.tgz", + "integrity": "sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/compiler-core": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/compiler-sfc": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.13.tgz", + "integrity": "sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/parser": "^7.25.3", + "@vue/compiler-core": "3.5.13", + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13", + "estree-walker": "^2.0.2", + "magic-string": "^0.30.11", + "postcss": "^8.4.48", + "source-map-js": "^1.2.0" + } + }, + "node_modules/@vue/compiler-ssr": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.13.tgz", + "integrity": "sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/compiler-dom": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/reactivity": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.13.tgz", + "integrity": "sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/runtime-core": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.13.tgz", + "integrity": "sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/reactivity": "3.5.13", + "@vue/shared": "3.5.13" + } + }, + "node_modules/@vue/runtime-dom": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.13.tgz", + "integrity": "sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/reactivity": "3.5.13", + "@vue/runtime-core": "3.5.13", + "@vue/shared": "3.5.13", + "csstype": "^3.1.3" + } + }, + "node_modules/@vue/server-renderer": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.13.tgz", + "integrity": "sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/compiler-ssr": "3.5.13", + "@vue/shared": "3.5.13" + }, + "peerDependencies": { + "vue": "3.5.13" + } + }, + "node_modules/@vue/shared": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.13.tgz", + "integrity": "sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==", + "license": "MIT", + "peer": true + }, + "node_modules/acorn": { + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-typescript": { + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/acorn-typescript/-/acorn-typescript-1.4.13.tgz", + "integrity": "sha512-xsc9Xv0xlVfwp2o7sQ+GCQ1PgbkdcpWdTzrwXxO3xDMTAywVS3oXVOcOHuRjAPkS4P9b+yc/qNF15460v+jp4Q==", + "license": "MIT", + "peer": true, + "peerDependencies": { + "acorn": ">=8.9.0" + } + }, + "node_modules/ai": { + "version": "3.4.33", + "resolved": "https://registry.npmjs.org/ai/-/ai-3.4.33.tgz", + "integrity": "sha512-plBlrVZKwPoRTmM8+D1sJac9Bq8eaa2jiZlHLZIWekKWI1yMWYZvCCEezY9ASPwRhULYDJB2VhKOBUUeg3S5JQ==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "0.0.26", + "@ai-sdk/provider-utils": "1.0.22", + "@ai-sdk/react": "0.0.70", + "@ai-sdk/solid": "0.0.54", + "@ai-sdk/svelte": "0.0.57", + "@ai-sdk/ui-utils": "0.0.50", + "@ai-sdk/vue": "0.0.59", + "@opentelemetry/api": "1.9.0", + "eventsource-parser": "1.1.2", + "json-schema": "^0.4.0", + "jsondiffpatch": "0.6.0", + "secure-json-parse": "^2.7.0", + "zod-to-json-schema": "^3.23.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "openai": "^4.42.0", + "react": "^18 || ^19 || ^19.0.0-rc", + "sswr": "^2.1.0", + "svelte": "^3.0.0 || ^4.0.0 || ^5.0.0", + "zod": "^3.0.0" + }, + "peerDependenciesMeta": { + "openai": { + "optional": true + }, + "react": { + "optional": true + }, + "sswr": { + "optional": true + }, + "svelte": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "license": "MIT" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", + "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-includes": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", + "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlast": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz", + "integrity": "sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", + "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", + "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", + "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array.prototype.tosorted": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/array.prototype.tosorted/-/array.prototype.tosorted-1.1.4.tgz", + "integrity": "sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", + "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "es-abstract": "^1.22.3", + "es-errors": "^1.2.1", + "get-intrinsic": "^1.2.3", + "is-array-buffer": "^3.0.4", + "is-shared-array-buffer": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ast-types-flow": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.8.tgz", + "integrity": "sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axe-core": { + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/axe-core/-/axe-core-4.10.2.tgz", + "integrity": "sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==", + "dev": true, + "license": "MPL-2.0", + "engines": { + "node": ">=4" + } + }, + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/bail": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bail/-/bail-2.0.2.tgz", + "integrity": "sha512-0xO6mYd7JB2YesxDKplafRpsiOzPt9V02ddPCLbY1xYGPOX24NTyN50qnUxgCPcSoYMhKpAuBTjQoRZCAkUDRw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT" + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/busboy": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/busboy/-/busboy-1.6.0.tgz", + "integrity": "sha512-8SFQbg/0hQ9xy3UNTB0YEnsNBbWfhf7RtnzpL7TkBiTBRfrQ9Fxcnz7VJsleJpyp6rVLvXiuORqjlHi5q+PYuA==", + "dependencies": { + "streamsearch": "^1.1.0" + }, + "engines": { + "node": ">=10.16.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001684", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001684.tgz", + "integrity": "sha512-G1LRwLIQjBQoyq0ZJGqGIJUXzJ8irpbjHLpVRXDvBEScFJ9b17sgK6vlx0GAJFE21okD7zXl08rRRUfq6HdoEQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0" + }, + "node_modules/ccount": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", + "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/character-entities": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-2.0.2.tgz", + "integrity": "sha512-shx7oQ0Awen/BRIdkjkvz54PnEEI/EjwXDSIZp86/KKdbafHh1Df/RYGBhn4hbe2+uKC9FnT5UCEdyPz3ai9hQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-html4": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", + "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-entities-legacy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", + "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/character-reference-invalid": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-2.0.1.tgz", + "integrity": "sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "license": "MIT", + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/class-variance-authority": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/class-variance-authority/-/class-variance-authority-0.7.1.tgz", + "integrity": "sha512-Ka+9Trutv7G8M6WT6SeiRWz792K5qEqIGEGzXKhAE6xOWAY6pPH8U+9IY3oCMv6kqTmLsv7Xh/2w2RigkePMsg==", + "license": "Apache-2.0", + "dependencies": { + "clsx": "^2.1.1" + }, + "funding": { + "url": "https://polar.sh/cva" + } + }, + "node_modules/client-only": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/client-only/-/client-only-0.0.1.tgz", + "integrity": "sha512-IV3Ou0jSMzZrd3pZ48nLkT9DA7Ag1pnPzaiQhpW7c3RbcqqzvzzVu+L8gfqMp/8IM2MQtSiqaCxrrcfu8I8rMA==", + "license": "MIT" + }, + "node_modules/clsx": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz", + "integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT" + }, + "node_modules/comma-separated-tokens": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", + "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/csstype": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", + "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", + "license": "MIT" + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/data-view-buffer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", + "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", + "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", + "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decode-named-character-reference": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/decode-named-character-reference/-/decode-named-character-reference-1.0.2.tgz", + "integrity": "sha512-O8x12RzrUF8xyVcY0KJowWsmaJxQbmy0/EtnNtHRpsOcT7dFk5W598coHqBVpmWo1oQQfsCqfCmkZN5DJrZVdg==", + "license": "MIT", + "dependencies": { + "character-entities": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/devlop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", + "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", + "license": "MIT", + "dependencies": { + "dequal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "license": "Apache-2.0" + }, + "node_modules/diff-match-patch": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/diff-match-patch/-/diff-match-patch-1.0.5.tgz", + "integrity": "sha512-IayShXAgj/QMXgB0IWmKx+rOPuGMhqm5w6jvFxmVenXKIzRqTAAsbBPT3kWQeGANj3jGgvcvv4yK6SxqYmikgw==", + "license": "Apache-2.0" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "license": "MIT" + }, + "node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/drizzle-kit": { + "version": "0.25.0", + "resolved": "https://registry.npmjs.org/drizzle-kit/-/drizzle-kit-0.25.0.tgz", + "integrity": "sha512-Rcf0nYCAKizwjWQCY+d3zytyuTbDb81NcaPor+8NebESlUz1+9W3uGl0+r9FhU4Qal5Zv9j/7neXCSCe7DHzjA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@drizzle-team/brocli": "^0.10.1", + "@esbuild-kit/esm-loader": "^2.5.5", + "esbuild": "^0.19.7", + "esbuild-register": "^3.5.0" + }, + "bin": { + "drizzle-kit": "bin.cjs" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "license": "MIT" + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "license": "MIT" + }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "license": "BSD-2-Clause", + "peer": true, + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/es-abstract": { + "version": "1.23.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz", + "integrity": "sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "data-view-buffer": "^1.0.1", + "data-view-byte-length": "^1.0.1", + "data-view-byte-offset": "^1.0.0", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "es-set-tostringtag": "^2.0.3", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", + "globalthis": "^1.0.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "hasown": "^2.0.2", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.1", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.3", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.13", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.3", + "safe-array-concat": "^1.1.2", + "safe-regex-test": "^1.0.3", + "string.prototype.trim": "^1.2.9", + "string.prototype.trimend": "^1.0.8", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.6", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-iterator-helpers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/es-iterator-helpers/-/es-iterator-helpers-1.2.0.tgz", + "integrity": "sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "globalthis": "^1.0.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "iterator.prototype": "^1.1.3", + "safe-array-concat": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", + "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", + "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "hasown": "^2.0.0" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.12" + } + }, + "node_modules/esbuild-register": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/esbuild-register/-/esbuild-register-3.6.0.tgz", + "integrity": "sha512-H2/S7Pm8a9CL1uhp9OvjwrBh5Pvx0H8qVOxNu8Wed9Y7qv56MPtq+GGM8RJpq6glYJn9Wspr8uw7l55uyinNeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "peerDependencies": { + "esbuild": ">=0.12 <1" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.57.1", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", + "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "deprecated": "This version is no longer supported. Please see https://eslint.org/version-support for other options.", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-config-next": { + "version": "14.2.18", + "resolved": "https://registry.npmjs.org/eslint-config-next/-/eslint-config-next-14.2.18.tgz", + "integrity": "sha512-SuDRcpJY5VHBkhz5DijJ4iA4bVnBA0n48Rb+YSJSCDr+h7kKAcb1mZHusLbW+WA8LDB6edSolomXA55eG3eOVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@next/eslint-plugin-next": "14.2.18", + "@rushstack/eslint-patch": "^1.3.3", + "@typescript-eslint/eslint-plugin": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "@typescript-eslint/parser": "^5.4.2 || ^6.0.0 || ^7.0.0 || ^8.0.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-import-resolver-typescript": "^3.5.2", + "eslint-plugin-import": "^2.28.1", + "eslint-plugin-jsx-a11y": "^6.7.1", + "eslint-plugin-react": "^7.33.2", + "eslint-plugin-react-hooks": "^4.5.0 || 5.0.0-canary-7118f5dd7-20230705" + }, + "peerDependencies": { + "eslint": "^7.23.0 || ^8.0.0", + "typescript": ">=3.3.1" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/eslint-config-prettier": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.1.0.tgz", + "integrity": "sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", + "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-typescript": { + "version": "3.6.3", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.3.tgz", + "integrity": "sha512-ud9aw4szY9cCT1EWWdGv1L1XR6hh2PaRWif0j2QjQ0pgTY/69iw+W0Z4qZv5wHahOl8isEr+k/JnyAqNQkLkIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@nolyfill/is-core-module": "1.0.39", + "debug": "^4.3.5", + "enhanced-resolve": "^5.15.0", + "eslint-module-utils": "^2.8.1", + "fast-glob": "^3.3.2", + "get-tsconfig": "^4.7.5", + "is-bun-module": "^1.0.2", + "is-glob": "^4.0.3" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", + "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependenciesMeta": { + "eslint": { + "optional": true + } + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.31.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", + "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@rtsao/scc": "^1.1.0", + "array-includes": "^3.1.8", + "array.prototype.findlastindex": "^1.2.5", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.12.0", + "hasown": "^2.0.2", + "is-core-module": "^2.15.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "object.groupby": "^1.0.3", + "object.values": "^1.2.0", + "semver": "^6.3.1", + "string.prototype.trimend": "^1.0.8", + "tsconfig-paths": "^3.15.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-jsx-a11y": { + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.10.2.tgz", + "integrity": "sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "aria-query": "^5.3.2", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", + "damerau-levenshtein": "^1.0.8", + "emoji-regex": "^9.2.2", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.1" + }, + "engines": { + "node": ">=4.0" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" + } + }, + "node_modules/eslint-plugin-react": { + "version": "7.37.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.37.2.tgz", + "integrity": "sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.2", + "array.prototype.tosorted": "^1.1.4", + "doctrine": "^2.1.0", + "es-iterator-helpers": "^1.1.0", + "estraverse": "^5.3.0", + "hasown": "^2.0.2", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.1.2", + "object.entries": "^1.1.8", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.0", + "prop-types": "^15.8.1", + "resolve": "^2.0.0-next.5", + "semver": "^6.3.1", + "string.prototype.matchall": "^4.0.11", + "string.prototype.repeat": "^1.0.0" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" + } + }, + "node_modules/eslint-plugin-react-hooks": { + "version": "5.0.0-canary-7118f5dd7-20230705", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-5.0.0-canary-7118f5dd7-20230705.tgz", + "integrity": "sha512-AZYbMo/NW9chdL7vk6HQzQhT+PvTAEVqWk9ziruUoW2kAOcN5qNyelv70e0F1VNQAbvutOC9oc+xfWycI9FxDw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "peerDependencies": { + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/eslint-plugin-react/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eslint-plugin-react/node_modules/resolve": { + "version": "2.0.0-next.5", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.5.tgz", + "integrity": "sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/eslint-plugin-react/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-plugin-tailwindcss": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-tailwindcss/-/eslint-plugin-tailwindcss-3.17.5.tgz", + "integrity": "sha512-8Mi7p7dm+mO1dHgRHHFdPu4RDTBk69Cn4P0B40vRQR+MrguUpwmKwhZy1kqYe3Km8/4nb+cyrCF+5SodOEmaow==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-glob": "^3.2.5", + "postcss": "^8.4.4" + }, + "engines": { + "node": ">=18.12.0" + }, + "peerDependencies": { + "tailwindcss": "^3.4.0" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esm-env": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.2.0.tgz", + "integrity": "sha512-OhSQuHL3mUcaQHjGe8UMG8GsJIJHYYz0flR0h9fiTPNMupLMkb7TvcRD0EeJXW5a8GHBgfz08b6FDLNK7kkPQA==", + "license": "MIT", + "peer": true + }, + "node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esquery": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrap": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/esrap/-/esrap-1.2.2.tgz", + "integrity": "sha512-F2pSJklxx1BlQIQgooczXCPHmcWpn6EsP5oo73LQfonG9fIlIENQ8vMmfGXeojP9MrkzUNAfyU5vdFlR9shHAw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15", + "@types/estree": "^1.0.1" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-util-is-identifier-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/estree-util-is-identifier-name/-/estree-util-is-identifier-name-3.0.0.tgz", + "integrity": "sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "license": "MIT", + "peer": true + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/eventsource-parser": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/eventsource-parser/-/eventsource-parser-1.1.2.tgz", + "integrity": "sha512-v0eOBUbiaFojBu2s2NPBfYUoRR9GjcDNvCXVaqEf5vVfpIAh9f8RCo4vXTP8c63QRKCFwoLpMpTdPwwhEKVgzA==", + "license": "MIT", + "engines": { + "node": ">=14.18" + } + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "license": "MIT" + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", + "dev": true, + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", + "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", + "dev": true, + "license": "ISC" + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/foreground-child": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", + "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", + "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", + "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", + "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", + "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", + "dev": true, + "license": "MIT" + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hast-util-to-jsx-runtime": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/hast-util-to-jsx-runtime/-/hast-util-to-jsx-runtime-2.3.2.tgz", + "integrity": "sha512-1ngXYb+V9UT5h+PxNRa1O1FYguZK/XL+gkeqvp7EdHlB9oHUG0eYRo/vY5inBdcqo3RkPMC58/H94HvkbfGdyg==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "devlop": "^1.0.0", + "estree-util-is-identifier-name": "^3.0.0", + "hast-util-whitespace": "^3.0.0", + "mdast-util-mdx-expression": "^2.0.0", + "mdast-util-mdx-jsx": "^3.0.0", + "mdast-util-mdxjs-esm": "^2.0.0", + "property-information": "^6.0.0", + "space-separated-tokens": "^2.0.0", + "style-to-object": "^1.0.0", + "unist-util-position": "^5.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-whitespace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", + "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/html-url-attributes": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/html-url-attributes/-/html-url-attributes-3.0.1.tgz", + "integrity": "sha512-ol6UPyBWqsrO6EJySPz2O7ZSr856WDrEzM5zMqp+FJJLGMW35cLYmmZnl0vztAZxRUoNZJFTCohfjuIJ8I4QBQ==", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/ignore": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/inline-style-parser": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz", + "integrity": "sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==", + "license": "MIT" + }, + "node_modules/internal-slot": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", + "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-alphabetical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-2.0.1.tgz", + "integrity": "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-alphanumerical": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-2.0.1.tgz", + "integrity": "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw==", + "license": "MIT", + "dependencies": { + "is-alphabetical": "^2.0.0", + "is-decimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", + "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.0.0.tgz", + "integrity": "sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "license": "MIT", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bun-module": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-bun-module/-/is-bun-module-1.3.0.tgz", + "integrity": "sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.6.3" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-core-module": { + "version": "2.15.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", + "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", + "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-decimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-2.0.1.tgz", + "integrity": "sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.0.tgz", + "integrity": "sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-hexadecimal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-2.0.1.tgz", + "integrity": "sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-obj": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-4.1.0.tgz", + "integrity": "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-reference": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.3.tgz", + "integrity": "sha512-ixkJoqQvAP88E6wLydLGGqCJsrFUnqoH6HnaczB8XmDH1oaWU+xxdptvikTgaEhtZ53Ky6YXiBuUI2WXLMCwjw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/estree": "^1.0.6" + } + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "dev": true, + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", + "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "dev": true, + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC" + }, + "node_modules/iterator.prototype": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz", + "integrity": "sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "reflect.getprototypeof": "^1.0.4", + "set-function-name": "^2.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "license": "MIT", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT" + }, + "node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "license": "(AFL-2.1 OR BSD-3-Clause)" + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", + "dev": true, + "license": "MIT" + }, + "node_modules/json5": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsondiffpatch": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/jsondiffpatch/-/jsondiffpatch-0.6.0.tgz", + "integrity": "sha512-3QItJOXp2AP1uv7waBkao5nCvhEv+QmJAd38Ybq7wNI74Q+BBmnLn4EDKz6yI9xGAIQoUF87qHt+kc1IVxB4zQ==", + "license": "MIT", + "dependencies": { + "@types/diff-match-patch": "^1.0.36", + "chalk": "^5.3.0", + "diff-match-patch": "^1.0.5" + }, + "bin": { + "jsondiffpatch": "bin/jsondiffpatch.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + } + }, + "node_modules/jsondiffpatch/node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jsx-ast-utils": { + "version": "3.3.5", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.3.5.tgz", + "integrity": "sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "array-includes": "^3.1.6", + "array.prototype.flat": "^1.3.1", + "object.assign": "^4.1.4", + "object.values": "^1.1.6" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", + "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.23", + "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", + "integrity": "sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/language-tags": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/language-tags/-/language-tags-1.0.9.tgz", + "integrity": "sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==", + "dev": true, + "license": "MIT", + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "license": "MIT" + }, + "node_modules/locate-character": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", + "license": "MIT", + "peer": true + }, + "node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash.castarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", + "integrity": "sha512-aVx8ztPv7/2ULbArGJ2Y42bG1mEQ5mGjpdvrbJcJFU3TbYybe+QlLS4pst9zV52ymy2in1KpFPiZnAOATxD4+Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/longest-streak": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-3.1.0.tgz", + "integrity": "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "license": "ISC" + }, + "node_modules/lucide-react": { + "version": "0.454.0", + "resolved": "https://registry.npmjs.org/lucide-react/-/lucide-react-0.454.0.tgz", + "integrity": "sha512-hw7zMDwykCLnEzgncEEjHeA6+45aeEzRYuKHuyRSOPkhko+J3ySGjGIzu+mmMfDFG1vazHepMaYFYHbTFAZAAQ==", + "license": "ISC", + "peerDependencies": { + "react": "^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0-rc" + } + }, + "node_modules/magic-string": { + "version": "0.30.14", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.14.tgz", + "integrity": "sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "node_modules/markdown-table": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", + "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/mdast-util-find-and-replace": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-find-and-replace/-/mdast-util-find-and-replace-3.0.1.tgz", + "integrity": "sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "escape-string-regexp": "^5.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-find-and-replace/node_modules/escape-string-regexp": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz", + "integrity": "sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mdast-util-from-markdown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mdast-util-from-markdown/-/mdast-util-from-markdown-2.0.2.tgz", + "integrity": "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark": "^4.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm/-/mdast-util-gfm-3.0.0.tgz", + "integrity": "sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==", + "license": "MIT", + "dependencies": { + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-gfm-autolink-literal": "^2.0.0", + "mdast-util-gfm-footnote": "^2.0.0", + "mdast-util-gfm-strikethrough": "^2.0.0", + "mdast-util-gfm-table": "^2.0.0", + "mdast-util-gfm-task-list-item": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-autolink-literal": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-autolink-literal/-/mdast-util-gfm-autolink-literal-2.0.1.tgz", + "integrity": "sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "ccount": "^2.0.0", + "devlop": "^1.0.0", + "mdast-util-find-and-replace": "^3.0.0", + "micromark-util-character": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-footnote": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-footnote/-/mdast-util-gfm-footnote-2.0.0.tgz", + "integrity": "sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-strikethrough": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-strikethrough/-/mdast-util-gfm-strikethrough-2.0.0.tgz", + "integrity": "sha512-mKKb915TF+OC5ptj5bJ7WFRPdYtuHv0yTRxK2tJvi+BDqbkiG7h7u/9SI89nRAYcmap2xHQL9D+QG/6wSrTtXg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-table": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-table/-/mdast-util-gfm-table-2.0.0.tgz", + "integrity": "sha512-78UEvebzz/rJIxLvE7ZtDd/vIQ0RHv+3Mh5DR96p7cS7HsBhYIICDBCu8csTNWNO6tBWfqXPWekRuj2FNOGOZg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "markdown-table": "^3.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-gfm-task-list-item": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-gfm-task-list-item/-/mdast-util-gfm-task-list-item-2.0.0.tgz", + "integrity": "sha512-IrtvNvjxC1o06taBAVJznEnkiHxLFTzgonUdy8hzFVeDun0uTjxxrRGVaNFqkU1wJR3RBPEfsxmU6jDWPofrTQ==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-expression": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-expression/-/mdast-util-mdx-expression-2.0.1.tgz", + "integrity": "sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdx-jsx": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/mdast-util-mdx-jsx/-/mdast-util-mdx-jsx-3.1.3.tgz", + "integrity": "sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "ccount": "^2.0.0", + "devlop": "^1.1.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0", + "parse-entities": "^4.0.0", + "stringify-entities": "^4.0.0", + "unist-util-stringify-position": "^4.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-mdxjs-esm": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/mdast-util-mdxjs-esm/-/mdast-util-mdxjs-esm-2.0.1.tgz", + "integrity": "sha512-EcmOpxsZ96CvlP03NghtH1EsLtr0n9Tm4lPUJUBccV9RwUOneqSycg19n5HGzCf+10LozMRSObtVr3ee1WoHtg==", + "license": "MIT", + "dependencies": { + "@types/estree-jsx": "^1.0.0", + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "devlop": "^1.0.0", + "mdast-util-from-markdown": "^2.0.0", + "mdast-util-to-markdown": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-phrasing": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-phrasing/-/mdast-util-phrasing-4.1.0.tgz", + "integrity": "sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-hast": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", + "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "@ungap/structured-clone": "^1.0.0", + "devlop": "^1.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "trim-lines": "^3.0.0", + "unist-util-position": "^5.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-markdown": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/mdast-util-to-markdown/-/mdast-util-to-markdown-2.1.2.tgz", + "integrity": "sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "@types/unist": "^3.0.0", + "longest-streak": "^3.0.0", + "mdast-util-phrasing": "^4.0.0", + "mdast-util-to-string": "^4.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-decode-string": "^2.0.0", + "unist-util-visit": "^5.0.0", + "zwitch": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/mdast-util-to-string": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-4.0.0.tgz", + "integrity": "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromark": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.1.tgz", + "integrity": "sha512-eBPdkcoCNvYcxQOAKAlceo5SNdzZWfF+FcSupREAzdAh9rRmE239CEQAiTwIgblwnoM8zzj35sZ5ZwvSEOF6Kw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "@types/debug": "^4.0.0", + "debug": "^4.0.0", + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-core-commonmark": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-core-commonmark/-/micromark-core-commonmark-2.0.2.tgz", + "integrity": "sha512-FKjQKbxd1cibWMM1P9N+H8TwlgGgSkWZMmfuVucLCHaYqeSvJ0hFeHsIa65pA2nYbes0f8LDHPMrd9X7Ujxg9w==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "devlop": "^1.0.0", + "micromark-factory-destination": "^2.0.0", + "micromark-factory-label": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-factory-title": "^2.0.0", + "micromark-factory-whitespace": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-html-tag-name": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-subtokenize": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-extension-gfm": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm/-/micromark-extension-gfm-3.0.0.tgz", + "integrity": "sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==", + "license": "MIT", + "dependencies": { + "micromark-extension-gfm-autolink-literal": "^2.0.0", + "micromark-extension-gfm-footnote": "^2.0.0", + "micromark-extension-gfm-strikethrough": "^2.0.0", + "micromark-extension-gfm-table": "^2.0.0", + "micromark-extension-gfm-tagfilter": "^2.0.0", + "micromark-extension-gfm-task-list-item": "^2.0.0", + "micromark-util-combine-extensions": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-autolink-literal": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-autolink-literal/-/micromark-extension-gfm-autolink-literal-2.1.0.tgz", + "integrity": "sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==", + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-footnote": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-footnote/-/micromark-extension-gfm-footnote-2.1.0.tgz", + "integrity": "sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-core-commonmark": "^2.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-normalize-identifier": "^2.0.0", + "micromark-util-sanitize-uri": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-strikethrough": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-strikethrough/-/micromark-extension-gfm-strikethrough-2.1.0.tgz", + "integrity": "sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-classify-character": "^2.0.0", + "micromark-util-resolve-all": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-table": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-table/-/micromark-extension-gfm-table-2.1.0.tgz", + "integrity": "sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-tagfilter": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-tagfilter/-/micromark-extension-gfm-tagfilter-2.0.0.tgz", + "integrity": "sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==", + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-extension-gfm-task-list-item": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/micromark-extension-gfm-task-list-item/-/micromark-extension-gfm-task-list-item-2.1.0.tgz", + "integrity": "sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==", + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/micromark-factory-destination": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-destination/-/micromark-factory-destination-2.0.1.tgz", + "integrity": "sha512-Xe6rDdJlkmbFRExpTOmRj9N3MaWmbAgdpSrBQvCFqhezUn4AHqJHbaEnfbVYYiexVSs//tqOdY/DxhjdCiJnIA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-label": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-label/-/micromark-factory-label-2.0.1.tgz", + "integrity": "sha512-VFMekyQExqIW7xIChcXn4ok29YE3rnuyveW3wZQWWqF4Nv9Wk5rgJ99KzPvHjkmPXF93FXIbBp6YdW3t71/7Vg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-space": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-space/-/micromark-factory-space-2.0.1.tgz", + "integrity": "sha512-zRkxjtBxxLd2Sc0d+fbnEunsTj46SWXgXciZmHq0kDYGnck/ZSGj9/wULTV95uoeYiK5hRXP2mJ98Uo4cq/LQg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-title": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-title/-/micromark-factory-title-2.0.1.tgz", + "integrity": "sha512-5bZ+3CjhAd9eChYTHsjy6TGxpOFSKgKKJPJxr293jTbfry2KDoWkhBb6TcPVB4NmzaPhMs1Frm9AZH7OD4Cjzw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-factory-whitespace": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-factory-whitespace/-/micromark-factory-whitespace-2.0.1.tgz", + "integrity": "sha512-Ob0nuZ3PKt/n0hORHyvoD9uZhr+Za8sFoP+OnMcnWK5lngSzALgQYKMr9RJVOWLqQYuyn6ulqGWSXdwf6F80lQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-factory-space": "^2.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-character": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.1.tgz", + "integrity": "sha512-wv8tdUTJ3thSFFFJKtpYKOYiGP2+v96Hvk4Tu8KpCAsTMs6yi+nVmGh1syvSCsaxz45J6Jbw+9DD6g97+NV67Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-chunked": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-chunked/-/micromark-util-chunked-2.0.1.tgz", + "integrity": "sha512-QUNFEOPELfmvv+4xiNg2sRYeS/P84pTW0TCgP5zc9FpXetHY0ab7SxKyAQCNCc1eK0459uoLI1y5oO5Vc1dbhA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-classify-character": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-classify-character/-/micromark-util-classify-character-2.0.1.tgz", + "integrity": "sha512-K0kHzM6afW/MbeWYWLjoHQv1sgg2Q9EccHEDzSkxiP/EaagNzCm7T/WMKZ3rjMbvIpvBiZgwR3dKMygtA4mG1Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-combine-extensions": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-combine-extensions/-/micromark-util-combine-extensions-2.0.1.tgz", + "integrity": "sha512-OnAnH8Ujmy59JcyZw8JSbK9cGpdVY44NKgSM7E9Eh7DiLS2E9RNQf0dONaGDzEG9yjEl5hcqeIsj4hfRkLH/Bg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-chunked": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-numeric-character-reference": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/micromark-util-decode-numeric-character-reference/-/micromark-util-decode-numeric-character-reference-2.0.2.tgz", + "integrity": "sha512-ccUbYk6CwVdkmCQMyr64dXz42EfHGkPQlBj5p7YVGzq8I7CtjXZJrubAYezf7Rp+bjPseiROqe7G6foFd+lEuw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-decode-string": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-decode-string/-/micromark-util-decode-string-2.0.1.tgz", + "integrity": "sha512-nDV/77Fj6eH1ynwscYTOsbK7rR//Uj0bZXBwJZRfaLEJ1iGBR6kIfNmlNqaqJf649EP0F3NWNdeJi03elllNUQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "decode-named-character-reference": "^1.0.0", + "micromark-util-character": "^2.0.0", + "micromark-util-decode-numeric-character-reference": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-encode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.1.tgz", + "integrity": "sha512-c3cVx2y4KqUnwopcO9b/SCdo2O67LwJJ/UyqGfbigahfegL9myoEFoDYZgkT7f36T0bLrM9hZTAaAyH+PCAXjw==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-html-tag-name": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-html-tag-name/-/micromark-util-html-tag-name-2.0.1.tgz", + "integrity": "sha512-2cNEiYDhCWKI+Gs9T0Tiysk136SnR13hhO8yW6BGNyhOC4qYFnwF1nKfD3HFAIXA5c45RrIG1ub11GiXeYd1xA==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-normalize-identifier": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-normalize-identifier/-/micromark-util-normalize-identifier-2.0.1.tgz", + "integrity": "sha512-sxPqmo70LyARJs0w2UclACPUUEqltCkJ6PhKdMIDuJ3gSf/Q+/GIe3WKl0Ijb/GyH9lOpUkRAO2wp0GVkLvS9Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-resolve-all": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-resolve-all/-/micromark-util-resolve-all-2.0.1.tgz", + "integrity": "sha512-VdQyxFWFT2/FGJgwQnJYbe1jjQoNTS4RjglmSjTUlpUMa95Htx9NHeYW4rGDJzbjvCsl9eLjMQwGeElsqmzcHg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-sanitize-uri": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.1.tgz", + "integrity": "sha512-9N9IomZ/YuGGZZmQec1MbgxtlgougxTodVwDzzEouPKo3qFWvymFHWcnDi2vzV1ff6kas9ucW+o3yzJK9YB1AQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "micromark-util-character": "^2.0.0", + "micromark-util-encode": "^2.0.0", + "micromark-util-symbol": "^2.0.0" + } + }, + "node_modules/micromark-util-subtokenize": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/micromark-util-subtokenize/-/micromark-util-subtokenize-2.0.3.tgz", + "integrity": "sha512-VXJJuNxYWSoYL6AJ6OQECCFGhIU2GGHMw8tahogePBrjkG8aCCas3ibkp7RnVOSTClg2is05/R7maAhF1XyQMg==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT", + "dependencies": { + "devlop": "^1.0.0", + "micromark-util-chunked": "^2.0.0", + "micromark-util-symbol": "^2.0.0", + "micromark-util-types": "^2.0.0" + } + }, + "node_modules/micromark-util-symbol": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.1.tgz", + "integrity": "sha512-vs5t8Apaud9N28kgCrRUdEed4UJ+wWNvicHLPxCa9ENlYuAY31M0ETy5y1vA33YoNPDFTghEbnh6efaE8h4x0Q==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromark-util-types": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.1.tgz", + "integrity": "sha512-534m2WhVTddrcKVepwmVEVnUAmtrx9bfIjNoQHRqfnvdaHQiFytEhJoTgpWJvDEXCO5gLTQh3wYC1PgOJA4NSQ==", + "funding": [ + { + "type": "GitHub Sponsors", + "url": "https://github.com/sponsors/unifiedjs" + }, + { + "type": "OpenCollective", + "url": "https://opencollective.com/unified" + } + ], + "license": "MIT" + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "license": "ISC", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", + "dev": true, + "license": "MIT" + }, + "node_modules/next": { + "version": "14.2.16", + "resolved": "https://registry.npmjs.org/next/-/next-14.2.16.tgz", + "integrity": "sha512-LcO7WnFu6lYSvCzZoo1dB+IO0xXz5uEv52HF1IUN0IqVTUIZGHuuR10I5efiLadGt+4oZqTcNZyVVEem/TM5nA==", + "license": "MIT", + "dependencies": { + "@next/env": "14.2.16", + "@swc/helpers": "0.5.5", + "busboy": "1.6.0", + "caniuse-lite": "^1.0.30001579", + "graceful-fs": "^4.2.11", + "postcss": "8.4.31", + "styled-jsx": "5.1.1" + }, + "bin": { + "next": "dist/bin/next" + }, + "engines": { + "node": ">=18.17.0" + }, + "optionalDependencies": { + "@next/swc-darwin-arm64": "14.2.16", + "@next/swc-darwin-x64": "14.2.16", + "@next/swc-linux-arm64-gnu": "14.2.16", + "@next/swc-linux-arm64-musl": "14.2.16", + "@next/swc-linux-x64-gnu": "14.2.16", + "@next/swc-linux-x64-musl": "14.2.16", + "@next/swc-win32-arm64-msvc": "14.2.16", + "@next/swc-win32-ia32-msvc": "14.2.16", + "@next/swc-win32-x64-msvc": "14.2.16" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.1.0", + "@playwright/test": "^1.41.2", + "react": "^18.2.0", + "react-dom": "^18.2.0", + "sass": "^1.3.0" + }, + "peerDependenciesMeta": { + "@opentelemetry/api": { + "optional": true + }, + "@playwright/test": { + "optional": true + }, + "sass": { + "optional": true + } + } + }, + "node_modules/next/node_modules/postcss": { + "version": "8.4.31", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", + "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.6", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.3", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.3.tgz", + "integrity": "sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", + "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.entries": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.8.tgz", + "integrity": "sha512-cmopxi8VwRIAw/fkijJohSfpef5PdN0pMQJN6VC/ZKvn0LIknWD8KtgY6KlQdEc4tIjcQ3HxSMmnvtzIscdaYQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.fromentries": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", + "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object.groupby": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", + "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.values": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", + "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ollama-ai-provider": { + "version": "0.16.1", + "resolved": "https://registry.npmjs.org/ollama-ai-provider/-/ollama-ai-provider-0.16.1.tgz", + "integrity": "sha512-0vSQVz5Y/LguyzfO4bi1JrrVGF/k2JvO8/uFR0wYmqDFp8KPp4+AhdENSynGBr1oRhMWOM4F1l6cv7UNDgRMjw==", + "license": "Apache-2.0", + "dependencies": { + "@ai-sdk/provider": "0.0.26", + "@ai-sdk/provider-utils": "1.0.22", + "partial-json": "0.1.7" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "zod": "^3.0.0" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", + "dev": true, + "license": "MIT", + "dependencies": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-entities": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-4.0.1.tgz", + "integrity": "sha512-SWzvYcSJh4d/SGLIOQfZ/CoNv6BTlI6YEQ7Nj82oDVnRpwe/Z/F1EMx42x3JAOwGBlCjeCH0BRJQbQ/opHL17w==", + "license": "MIT", + "dependencies": { + "@types/unist": "^2.0.0", + "character-entities": "^2.0.0", + "character-entities-legacy": "^3.0.0", + "character-reference-invalid": "^2.0.0", + "decode-named-character-reference": "^1.0.0", + "is-alphanumerical": "^2.0.0", + "is-decimal": "^2.0.0", + "is-hexadecimal": "^2.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/parse-entities/node_modules/@types/unist": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.11.tgz", + "integrity": "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==", + "license": "MIT" + }, + "node_modules/partial-json": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/partial-json/-/partial-json-0.1.7.tgz", + "integrity": "sha512-Njv/59hHaokb/hRUjce3Hdv12wd60MtM9Z5Olmn+nehe0QDAsRtRbJPvJ0Z91TusF0SuZRIvnM+S4l6EIP8leA==", + "license": "MIT" + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "license": "MIT" + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.4.49", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.49.tgz", + "integrity": "sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "license": "MIT", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "license": "MIT", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-nested": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.2.0.tgz", + "integrity": "sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "postcss-selector-parser": "^6.1.1" + }, + "engines": { + "node": ">=12.0" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-nested/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "license": "MIT" + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prettier": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.1.tgz", + "integrity": "sha512-G+YdqtITVZmOJje6QkXQWzl3fSfMxFwm1tjTyo9exhkmWSqC4Yhd1+lug++IlR2mvRVAxEDDWYkQdeSztajqgg==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prop-types": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", + "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", + "dev": true, + "license": "MIT", + "dependencies": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.13.1" + } + }, + "node_modules/property-information": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", + "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/react": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-dom": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0", + "scheduler": "^0.23.2" + }, + "peerDependencies": { + "react": "^18.3.1" + } + }, + "node_modules/react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/react-markdown": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/react-markdown/-/react-markdown-9.0.1.tgz", + "integrity": "sha512-186Gw/vF1uRkydbsOIkcGXw7aHq0sZOCRFFjGrr7b9+nVZg4UfA4enXCaxm4fUzecU38sWfrNDitGhshuU7rdg==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "devlop": "^1.0.0", + "hast-util-to-jsx-runtime": "^2.0.0", + "html-url-attributes": "^3.0.0", + "mdast-util-to-hast": "^13.0.0", + "remark-parse": "^11.0.0", + "remark-rehype": "^11.0.0", + "unified": "^11.0.0", + "unist-util-visit": "^5.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + }, + "peerDependencies": { + "@types/react": ">=18", + "react": ">=18" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "license": "MIT", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "license": "MIT", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.7.tgz", + "integrity": "sha512-bMvFGIUKlc/eSfXNX+aZ+EL95/EgZzuwA0OBPTbZZDEJw/0AkentjMuM1oiRfwHrshqk4RzdgiTg5CcDalXN5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "which-builtin-type": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", + "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/remark-gfm": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/remark-gfm/-/remark-gfm-4.0.0.tgz", + "integrity": "sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-gfm": "^3.0.0", + "micromark-extension-gfm": "^3.0.0", + "remark-parse": "^11.0.0", + "remark-stringify": "^11.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-parse": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-11.0.0.tgz", + "integrity": "sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-from-markdown": "^2.0.0", + "micromark-util-types": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-rehype": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/remark-rehype/-/remark-rehype-11.1.1.tgz", + "integrity": "sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/mdast": "^4.0.0", + "mdast-util-to-hast": "^13.0.0", + "unified": "^11.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/remark-stringify": { + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-11.0.0.tgz", + "integrity": "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==", + "license": "MIT", + "dependencies": { + "@types/mdast": "^4.0.0", + "mdast-util-to-markdown": "^2.0.0", + "unified": "^11.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "license": "MIT", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", + "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "get-intrinsic": "^1.2.4", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", + "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.6", + "es-errors": "^1.3.0", + "is-regex": "^1.1.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/scheduler": { + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", + "license": "MIT", + "dependencies": { + "loose-envify": "^1.1.0" + } + }, + "node_modules/secure-json-parse": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", + "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==", + "license": "BSD-3-Clause" + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/space-separated-tokens": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", + "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/sswr": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sswr/-/sswr-2.1.0.tgz", + "integrity": "sha512-Cqc355SYlTAaUt8iDPaC/4DPPXK925PePLMxyBKuWd5kKc5mwsG3nT9+Mq2tyguL5s7b4Jg+IRMpTRsNTAfpSQ==", + "license": "MIT", + "dependencies": { + "swrev": "^4.0.0" + }, + "peerDependencies": { + "svelte": "^4.0.0 || ^5.0.0-next.0" + } + }, + "node_modules/streamsearch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/streamsearch/-/streamsearch-1.1.0.tgz", + "integrity": "sha512-Mcc5wHehp9aXz1ax6bZUyY5afg9u2rv5cqQI3mRrYkGC8rW2hM02jWuwjtL++LS5qinSyhj2QfLyNsuc+VsExg==", + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "license": "MIT", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/string.prototype.includes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/string.prototype.includes/-/string.prototype.includes-2.0.1.tgz", + "integrity": "sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.matchall": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.11.tgz", + "integrity": "sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.7", + "regexp.prototype.flags": "^1.5.2", + "set-function-name": "^2.0.2", + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/string.prototype.repeat/-/string.prototype.repeat-1.0.0.tgz", + "integrity": "sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==", + "dev": true, + "license": "MIT", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", + "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", + "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/stringify-entities": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", + "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", + "license": "MIT", + "dependencies": { + "character-entities-html4": "^2.0.0", + "character-entities-legacy": "^3.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/style-to-object": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/style-to-object/-/style-to-object-1.0.8.tgz", + "integrity": "sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==", + "license": "MIT", + "dependencies": { + "inline-style-parser": "0.2.4" + } + }, + "node_modules/styled-jsx": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/styled-jsx/-/styled-jsx-5.1.1.tgz", + "integrity": "sha512-pW7uC1l4mBZ8ugbiZrcIsiIvVx1UmTfw7UkC3Um2tmfUq9Bhk8IiyEIPl6F8agHgjzku6j0xQEZbfA5uSgSaCw==", + "license": "MIT", + "dependencies": { + "client-only": "0.0.1" + }, + "engines": { + "node": ">= 12.0.0" + }, + "peerDependencies": { + "react": ">= 16.8.0 || 17.x.x || ^18.0.0-0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svelte": { + "version": "5.2.10", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.2.10.tgz", + "integrity": "sha512-ON0OyO7vOmSjTc9mLjusu3vf1I7BvjovbiRB7j84F1WZMXV6dR+Tj4btIzxQxMHfzbGskaFmRa7qjgmBSVBnhQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@ampproject/remapping": "^2.3.0", + "@jridgewell/sourcemap-codec": "^1.5.0", + "@types/estree": "^1.0.5", + "acorn": "^8.12.1", + "acorn-typescript": "^1.4.13", + "aria-query": "^5.3.1", + "axobject-query": "^4.1.0", + "esm-env": "^1.2.0", + "esrap": "^1.2.2", + "is-reference": "^3.0.3", + "locate-character": "^3.0.0", + "magic-string": "^0.30.11", + "zimmerframe": "^1.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/swr": { + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/swr/-/swr-2.2.5.tgz", + "integrity": "sha512-QtxqyclFeAsxEUeZIYmsaQ0UjimSq1RZ9Un7I68/0ClKK/U3LoyQunwkQfJZr2fc22DfIXLNDc2wFyTEikCUpg==", + "license": "MIT", + "dependencies": { + "client-only": "^0.0.1", + "use-sync-external-store": "^1.2.0" + }, + "peerDependencies": { + "react": "^16.11.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/swrev": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/swrev/-/swrev-4.0.0.tgz", + "integrity": "sha512-LqVcOHSB4cPGgitD1riJ1Hh4vdmITOp+BkmfmXRh4hSF/t7EnS4iD+SOTmq7w5pPm/SiPeto4ADbKS6dHUDWFA==", + "license": "MIT" + }, + "node_modules/swrv": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/swrv/-/swrv-1.0.4.tgz", + "integrity": "sha512-zjEkcP8Ywmj+xOJW3lIT65ciY/4AL4e/Or7Gj0MzU3zBJNMdJiT8geVZhINavnlHRMMCcJLHhraLTAiDOTmQ9g==", + "license": "Apache-2.0", + "peerDependencies": { + "vue": ">=3.2.26 < 4" + } + }, + "node_modules/tailwind-merge": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.5.5.tgz", + "integrity": "sha512-0LXunzzAZzo0tEPxV3I297ffKZPlKDrjj7NXphC8V5ak9yHC5zRmxnOe2m/Rd/7ivsOMJe3JZ2JVocoDdQTRBA==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.15", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.15.tgz", + "integrity": "sha512-r4MeXnfBmSOuKUWmXe6h2CcyfzJCEk4F0pptO5jlnYSIViUkVmsawj80N5h2lO3gwcmSb4n3PuN+e+GC1Guylw==", + "license": "MIT", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.6.0", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.2", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.6", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.8", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.1.1", + "postcss": "^8.4.47", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.2", + "postcss-nested": "^6.2.0", + "postcss-selector-parser": "^6.1.2", + "resolve": "^1.22.8", + "sucrase": "^3.35.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tailwindcss-animate": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/tailwindcss-animate/-/tailwindcss-animate-1.0.7.tgz", + "integrity": "sha512-bl6mpH3T7I3UFxuvDEXLxy/VuFxBk5bbzplh7tXI68mwMokNYd1t9qPBHlnyTwfa4JGC4zP516I1hYYtQ/vspA==", + "license": "MIT", + "peerDependencies": { + "tailwindcss": ">=3.0.0 || insiders" + } + }, + "node_modules/tailwindcss/node_modules/postcss-selector-parser": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", + "dev": true, + "license": "MIT" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/throttleit": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-2.1.0.tgz", + "integrity": "sha512-nt6AMGKW1p/70DF/hGBdJB57B8Tspmbp5gfJ8ilhLnt7kkr2ye7hzD6NVG8GGErk2HWF34igrL2CXmNIkzKqKw==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/trim-lines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", + "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/trough": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/trough/-/trough-2.2.0.tgz", + "integrity": "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/ts-api-utils": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.2.tgz", + "integrity": "sha512-ZF5gQIQa/UmzfvxbHZI3JXN0/Jt+vnAfAviNRAMc491laiK6YCLpCW9ft8oaCRFOTxCZtUTE6XB0ZQAe3olntw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "license": "Apache-2.0" + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tsx": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.2.tgz", + "integrity": "sha512-pOUl6Vo2LUq/bSa8S5q7b91cgNSjctn9ugq/+Mvow99qW6x/UZYwzxy/3NmqoT66eHYfCVvFvACC58UBPFf28g==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "~0.23.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/tsx/node_modules/@esbuild/aix-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", + "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/android-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", + "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/android-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", + "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/android-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", + "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/darwin-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", + "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/darwin-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", + "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/freebsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", + "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/freebsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", + "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", + "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", + "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", + "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-loong64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", + "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-mips64el": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", + "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", + "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-riscv64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", + "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-s390x": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", + "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/linux-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", + "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/netbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", + "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/openbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", + "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/sunos-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", + "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/win32-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", + "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/win32-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", + "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/@esbuild/win32-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", + "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/tsx/node_modules/esbuild": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", + "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.23.1", + "@esbuild/android-arm": "0.23.1", + "@esbuild/android-arm64": "0.23.1", + "@esbuild/android-x64": "0.23.1", + "@esbuild/darwin-arm64": "0.23.1", + "@esbuild/darwin-x64": "0.23.1", + "@esbuild/freebsd-arm64": "0.23.1", + "@esbuild/freebsd-x64": "0.23.1", + "@esbuild/linux-arm": "0.23.1", + "@esbuild/linux-arm64": "0.23.1", + "@esbuild/linux-ia32": "0.23.1", + "@esbuild/linux-loong64": "0.23.1", + "@esbuild/linux-mips64el": "0.23.1", + "@esbuild/linux-ppc64": "0.23.1", + "@esbuild/linux-riscv64": "0.23.1", + "@esbuild/linux-s390x": "0.23.1", + "@esbuild/linux-x64": "0.23.1", + "@esbuild/netbsd-x64": "0.23.1", + "@esbuild/openbsd-arm64": "0.23.1", + "@esbuild/openbsd-x64": "0.23.1", + "@esbuild/sunos-x64": "0.23.1", + "@esbuild/win32-arm64": "0.23.1", + "@esbuild/win32-ia32": "0.23.1", + "@esbuild/win32-x64": "0.23.1" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.3.tgz", + "integrity": "sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.7.2.tgz", + "integrity": "sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==", + "devOptional": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "dev": true, + "license": "MIT" + }, + "node_modules/unified": { + "version": "11.0.5", + "resolved": "https://registry.npmjs.org/unified/-/unified-11.0.5.tgz", + "integrity": "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "bail": "^2.0.0", + "devlop": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^4.0.0", + "trough": "^2.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-is": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", + "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", + "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-stringify-position": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", + "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", + "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0", + "unist-util-visit-parents": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/unist-util-visit-parents": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", + "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/use-sync-external-store": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.2.2.tgz", + "integrity": "sha512-PElTlVMwpblvbNqQ82d2n6RjStvdSoNe9FG28kNfz3WiXilJm4DdNkEzRhCZuIDwY8U08WVihhGR5iRqAwfDiw==", + "license": "MIT", + "peerDependencies": { + "react": "^16.8.0 || ^17.0.0 || ^18.0.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/vfile": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", + "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vfile-message": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", + "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-stringify-position": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/vue": { + "version": "3.5.13", + "resolved": "https://registry.npmjs.org/vue/-/vue-3.5.13.tgz", + "integrity": "sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@vue/compiler-dom": "3.5.13", + "@vue/compiler-sfc": "3.5.13", + "@vue/runtime-dom": "3.5.13", + "@vue/server-renderer": "3.5.13", + "@vue/shared": "3.5.13" + }, + "peerDependencies": { + "typescript": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.0.tgz", + "integrity": "sha512-I+qLGQ/vucCby4tf5HsLmGueEla4ZhwTBSqaooS+Y0BuxN4Cp+okmGuV+8mXZ84KDI9BA+oklo+RzKg0ONdSUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.0.5", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.1.4", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.0.2", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.15" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.16.tgz", + "integrity": "sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", + "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/yaml": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.6.1.tgz", + "integrity": "sha512-7r0XPzioN/Q9kXBro/XPnA6kznR73DHq+GXh5ON7ZozRO6aMjbmiBuKste2wslTFkC5d1dw0GooOCepZXJ2SAg==", + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/zimmerframe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.2.tgz", + "integrity": "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==", + "license": "MIT", + "peer": true + }, + "node_modules/zod": { + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", + "license": "MIT", + "peer": true, + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + }, + "node_modules/zod-to-json-schema": { + "version": "3.23.5", + "resolved": "https://registry.npmjs.org/zod-to-json-schema/-/zod-to-json-schema-3.23.5.tgz", + "integrity": "sha512-5wlSS0bXfF/BrL4jPAbz9da5hDlDptdEppYfe+x4eIJ7jioqKG9uUxOwPzqof09u/XeVdrgFu29lZi+8XNDJtA==", + "license": "ISC", + "peerDependencies": { + "zod": "^3.23.3" + } + }, + "node_modules/zwitch": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", + "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + } + } +} diff --git a/usecases/ai/digital-avatar/frontend/package.json b/usecases/ai/digital-avatar/frontend/package.json new file mode 100644 index 0000000..e7d8215 --- /dev/null +++ b/usecases/ai/digital-avatar/frontend/package.json @@ -0,0 +1,50 @@ +{ + "name": "frontend", + "version": "0.1.0", + "private": true, + "scripts": { + "dev": "next dev", + "build": "next build", + "start": "next start", + "lint": "next lint" + }, + "dependencies": { + "@ai-sdk/openai": "^0.0.71", + "@radix-ui/react-icons": "^1.3.1", + "@radix-ui/react-scroll-area": "^1.2.0", + "@radix-ui/react-slot": "^1.1.0", + "@tanstack/react-query": "^5.59.16", + "ai": "^3.4.32", + "class-variance-authority": "^0.7.0", + "clsx": "^2.1.1", + "lucide-react": "^0.454.0", + "next": "14.2.16", + "ollama-ai-provider": "^0.16.0", + "react": "^18", + "react-dom": "^18", + "react-markdown": "^9.0.1", + "remark-gfm": "^4.0.0", + "tailwind-merge": "^2.5.4", + "tailwindcss-animate": "^1.0.7" + }, + "devDependencies": { + "@tailwindcss/typography": "^0.5.15", + "@types/d3-scale": "^4.0.8", + "@types/node": "^20", + "@types/pdf-parse": "^1.1.4", + "@types/react": "^18", + "@types/react-dom": "^18", + "drizzle-kit": "^0.25.0", + "eslint": "^8.57.0", + "eslint-config-next": "^14.2.16", + "eslint-config-prettier": "^9.1.0", + "eslint-import-resolver-typescript": "^3.6.3", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-tailwindcss": "^3.17.5", + "postcss": "^8", + "prettier": "^3.3.3", + "tailwindcss": "^3.4.1", + "tsx": "^4.19.1", + "typescript": "^5" + } +} \ No newline at end of file diff --git a/usecases/ai/digital-avatar/frontend/postcss.config.mjs b/usecases/ai/digital-avatar/frontend/postcss.config.mjs new file mode 100644 index 0000000..1a69fd2 --- /dev/null +++ b/usecases/ai/digital-avatar/frontend/postcss.config.mjs @@ -0,0 +1,8 @@ +/** @type {import('postcss-load-config').Config} */ +const config = { + plugins: { + tailwindcss: {}, + }, +}; + +export default config; diff --git a/usecases/ai/digital-avatar/frontend/providers/index.tsx b/usecases/ai/digital-avatar/frontend/providers/index.tsx new file mode 100644 index 0000000..9970b4a --- /dev/null +++ b/usecases/ai/digital-avatar/frontend/providers/index.tsx @@ -0,0 +1,19 @@ +"use client" + +import { VideoQueueProvider } from "@/context/VideoQueueContext"; +import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; + +export default function Providers({ + children, +}: Readonly<{ + children: React.ReactNode; +}>) { + const queryClient = new QueryClient() + return ( + + + {children} + + + ) +} \ No newline at end of file diff --git a/usecases/ai/digital-avatar/frontend/tailwind.config.ts b/usecases/ai/digital-avatar/frontend/tailwind.config.ts new file mode 100644 index 0000000..ebc9f38 --- /dev/null +++ b/usecases/ai/digital-avatar/frontend/tailwind.config.ts @@ -0,0 +1,63 @@ +import type { Config } from "tailwindcss"; + +const config: Config = { + darkMode: ["class"], + content: [ + "./pages/**/*.{js,ts,jsx,tsx,mdx}", + "./components/**/*.{js,ts,jsx,tsx,mdx}", + "./app/**/*.{js,ts,jsx,tsx,mdx}", + ], + theme: { + extend: { + colors: { + background: 'hsl(var(--background))', + foreground: 'hsl(var(--foreground))', + card: { + DEFAULT: 'hsl(var(--card))', + foreground: 'hsl(var(--card-foreground))' + }, + popover: { + DEFAULT: 'hsl(var(--popover))', + foreground: 'hsl(var(--popover-foreground))' + }, + primary: { + DEFAULT: 'hsl(var(--primary))', + foreground: 'hsl(var(--primary-foreground))' + }, + secondary: { + DEFAULT: 'hsl(var(--secondary))', + foreground: 'hsl(var(--secondary-foreground))' + }, + muted: { + DEFAULT: 'hsl(var(--muted))', + foreground: 'hsl(var(--muted-foreground))' + }, + accent: { + DEFAULT: 'hsl(var(--accent))', + foreground: 'hsl(var(--accent-foreground))' + }, + destructive: { + DEFAULT: 'hsl(var(--destructive))', + foreground: 'hsl(var(--destructive-foreground))' + }, + border: 'hsl(var(--border))', + input: 'hsl(var(--input))', + ring: 'hsl(var(--ring))', + chart: { + '1': 'hsl(var(--chart-1))', + '2': 'hsl(var(--chart-2))', + '3': 'hsl(var(--chart-3))', + '4': 'hsl(var(--chart-4))', + '5': 'hsl(var(--chart-5))' + } + }, + borderRadius: { + lg: 'var(--radius)', + md: 'calc(var(--radius) - 2px)', + sm: 'calc(var(--radius) - 4px)' + } + } + }, + plugins: [require("tailwindcss-animate")], +}; +export default config; diff --git a/usecases/ai/digital-avatar/frontend/tsconfig.json b/usecases/ai/digital-avatar/frontend/tsconfig.json new file mode 100644 index 0000000..e7ff90f --- /dev/null +++ b/usecases/ai/digital-avatar/frontend/tsconfig.json @@ -0,0 +1,26 @@ +{ + "compilerOptions": { + "lib": ["dom", "dom.iterable", "esnext"], + "allowJs": true, + "skipLibCheck": true, + "strict": true, + "noEmit": true, + "esModuleInterop": true, + "module": "esnext", + "moduleResolution": "bundler", + "resolveJsonModule": true, + "isolatedModules": true, + "jsx": "preserve", + "incremental": true, + "plugins": [ + { + "name": "next" + } + ], + "paths": { + "@/*": ["./*"] + } + }, + "include": ["next-env.d.ts", "**/*.ts", "**/*.tsx", ".next/types/**/*.ts"], + "exclude": ["node_modules"] +} diff --git a/usecases/ai/digital-avatar/frontend/types/api.ts b/usecases/ai/digital-avatar/frontend/types/api.ts new file mode 100644 index 0000000..f6e931b --- /dev/null +++ b/usecases/ai/digital-avatar/frontend/types/api.ts @@ -0,0 +1,10 @@ +// INTEL CONFIDENTIAL +// Copyright (C) 2024, Intel Corporation + +export interface APIResponse { + status: boolean; + url: string; + data?: any; + message?: string; + detail?: any; +} diff --git a/usecases/ai/microservices/ollama/Dockerfile b/usecases/ai/microservices/ollama/Dockerfile index 86a8837..6a63100 100644 --- a/usecases/ai/microservices/ollama/Dockerfile +++ b/usecases/ai/microservices/ollama/Dockerfile @@ -5,7 +5,7 @@ FROM intel/oneapi-basekit:2024.2.1-0-devel-ubuntu22.04 WORKDIR /opt/intel/llm-app RUN apt update \ - && apt install -y python3.11-venv \ + && apt install -y python3.11-venv jq \ wget \ && wget -qO - https://repositories.intel.com/gpu/intel-graphics.key | gpg --yes --dearmor --output /usr/share/keyrings/intel-graphics.gpg \ && echo "deb [arch=amd64,i386 signed-by=/usr/share/keyrings/intel-graphics.gpg] https://repositories.intel.com/gpu/ubuntu jammy client" | tee /etc/apt/sources.list.d/intel-gpu-jammy.list \ @@ -20,4 +20,8 @@ RUN python3 -m pip install --upgrade pip \ && python3 -m pip install --upgrade accelerate==0.33.0 \ && init-ollama -CMD ["/opt/intel/llm-app/ollama", "serve"] +COPY ./run.sh . + +COPY ./healthcheck.sh . +HEALTHCHECK --interval=60s --timeout=20m --start-period=5s --retries=20 \ + CMD ./healthcheck.sh \ No newline at end of file diff --git a/usecases/ai/microservices/ollama/healthcheck.sh b/usecases/ai/microservices/ollama/healthcheck.sh new file mode 100755 index 0000000..a454883 --- /dev/null +++ b/usecases/ai/microservices/ollama/healthcheck.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +# Ensure OLLAMA_HOST is set +if [ -z "$OLLAMA_HOST" ]; then + echo "Error: OLLAMA_HOST environment variable is not set." + exit 1 +fi + +# Ensure LLM_MODEL is set +if [ -z "$LLM_MODEL" ]; then + echo "Error: LLM_MODEL environment variable is not set." + exit 1 +fi + +PORT=$(echo "$OLLAMA_HOST" | cut -d':' -f2) + +# Capture the HTTP response code and response body separately +http_code=$(curl -s -o response.txt -w "%{http_code}" -X POST "http://localhost:$PORT/api/show" -d "{\"model\": \"$LLM_MODEL\"}") +response=$(cat response.txt) + +echo "HTTP Response Code: $http_code" + +if [ "$http_code" -ne 200 ]; then + echo "Error: HTTP request failed with status code $http_code" + rm response.txt + exit 1 +fi + +if echo "$response" | grep -q "\"error\""; then + echo "Error in response: $(echo "$response" | sed -n 's/.*\"error\":\"\([^\"]*\)\".*/\1/p')" + rm response.txt + exit 1 +else + echo "Ollama is up and running." + rm response.txt + exit 0 +fi \ No newline at end of file diff --git a/usecases/ai/microservices/ollama/run.sh b/usecases/ai/microservices/ollama/run.sh new file mode 100755 index 0000000..76db2f5 --- /dev/null +++ b/usecases/ai/microservices/ollama/run.sh @@ -0,0 +1,32 @@ +#!/bin/bash + +# Ensure OLLAMA_HOST is set +if [ -z "$OLLAMA_HOST" ]; then + echo "Error: OLLAMA_HOST environment variable is not set." + exit 1 +fi + +# Ensure LLM_MODEL is set +if [ -z "$LLM_MODEL" ]; then + echo "Error: LLM_MODEL environment variable is not set." + exit 1 +fi + +echo "Starting Ollama..." +./ollama serve & + +# Give Ollama a moment to start up +sleep 5 + +echo "Checking if Ollama is up..." +PORT=$(echo "$OLLAMA_HOST" | cut -d':' -f2) + +echo "Downloading Model: $LLM_MODEL" +curl -# "http://localhost:$PORT/api/pull" -d "{\"name\": \"$LLM_MODEL\"}" + +# Warm Up Model +curl -# http://localhost:"$PORT"/api/generate -d "{\"model\": \"$LLM_MODEL\", \"prompt\": \"Why is the sky blue?\"}" + +# To keep the container running, use an indefinite wait +echo "Ollama is running. Keeping container alive..." +tail -f /dev/null \ No newline at end of file diff --git a/usecases/ai/microservices/speech-to-text/Dockerfile b/usecases/ai/microservices/speech-to-text/Dockerfile index b2d3330..0fac679 100644 --- a/usecases/ai/microservices/speech-to-text/Dockerfile +++ b/usecases/ai/microservices/speech-to-text/Dockerfile @@ -32,12 +32,12 @@ RUN wget https://github.com/oneapi-src/level-zero/releases/download/v1.17.6/leve RUN pip install "transformers>=4.35" "torch>=2.1" onnx "git+https://github.com/huggingface/optimum-intel.git" "peft==0.6.2" --extra-index-url https://download.pytorch.org/whl/cpu RUN rm -r *.deb neo npu-driver -RUN groupadd -g 110 render +ARG RENDER_GROUP_ID +RUN groupadd -g ${RENDER_GROUP_ID} render COPY requirements.txt . RUN python3 -m pip install -r requirements.txt COPY . . - -HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 \ - CMD wget --no-verbose -O /dev/null --tries=1 http://stt_service:5996/healthcheck || exit 1 \ No newline at end of file +HEALTHCHECK --interval=60s --timeout=180s --start-period=5s --retries=3 \ + CMD wget --no-verbose --no-proxy -O /dev/null --tries=1 http://stt_service:5996/healthcheck || exit 1 \ No newline at end of file diff --git a/usecases/ai/microservices/speech-to-text/main.py b/usecases/ai/microservices/speech-to-text/main.py index 873151d..93a04e2 100644 --- a/usecases/ai/microservices/speech-to-text/main.py +++ b/usecases/ai/microservices/speech-to-text/main.py @@ -9,6 +9,7 @@ import logging from pathlib import Path import soundfile as sf +import json from typing import Optional from fastapi import FastAPI, UploadFile, Form, File, HTTPException from contextlib import asynccontextmanager @@ -18,6 +19,7 @@ inference_translate ) from pydub import AudioSegment +from fastapi.middleware.cors import CORSMiddleware logger = logging.getLogger('uvicorn.error') ASR_MODEL = None @@ -41,8 +43,15 @@ async def lifespan(app: FastAPI): clean_up() +allowed_cors = json.loads(os.getenv("ALLOWED_CORS", '["http://localhost"]')) app = FastAPI(lifespan=lifespan) - +app.add_middleware( + CORSMiddleware, + allow_origins=allowed_cors, + allow_credentials=True, + allow_methods=['*'], + allow_headers=['*'], +) @app.post("/v1/audio/transcriptions") async def stt_transcription(file: UploadFile = File(...), language: Optional[str] = Form(None)): diff --git a/usecases/ai/microservices/text-to-speech/Dockerfile b/usecases/ai/microservices/text-to-speech/Dockerfile index 5c5a3bd..2784ae1 100644 --- a/usecases/ai/microservices/text-to-speech/Dockerfile +++ b/usecases/ai/microservices/text-to-speech/Dockerfile @@ -29,4 +29,4 @@ RUN python3 nltk_download.py COPY . . HEALTHCHECK --interval=30s --timeout=180s --start-period=50s --retries=5 \ - CMD wget --no-verbose -O /dev/null --tries=1 http://tts_service:5995/healthcheck || exit 1 \ No newline at end of file + CMD wget --no-verbose --no-proxy -O /dev/null --tries=1 http://tts_service:5995/healthcheck || exit 1 \ No newline at end of file diff --git a/usecases/ai/microservices/text-to-speech/main.py b/usecases/ai/microservices/text-to-speech/main.py index 3714665..3c3d7d0 100644 --- a/usecases/ai/microservices/text-to-speech/main.py +++ b/usecases/ai/microservices/text-to-speech/main.py @@ -18,8 +18,9 @@ from fastapi.responses import FileResponse from fastapi import FastAPI, HTTPException from starlette.background import BackgroundTasks - +from fastapi.middleware.cors import CORSMiddleware from melo.api import TTS +import json TTS_PROCESSOR = None TTS_SPEAKER_IDS = None @@ -62,9 +63,15 @@ async def lifespan(app: FastAPI): yield clean_up() +allowed_cors = json.loads(os.getenv("ALLOWED_CORS", '["http://localhost"]')) app = FastAPI(lifespan=lifespan) - - +app.add_middleware( + CORSMiddleware, + allow_origins=allowed_cors, + allow_credentials=True, + allow_methods=['*'], + allow_headers=['*'], +) class TTSData(BaseModel): input: str model: str = '-'

    u64 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ⅅ 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