libcom 0.1.3__tar.gz → 0.1.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {libcom-0.1.3 → libcom-0.1.4}/PKG-INFO +52 -5
- {libcom-0.1.3 → libcom-0.1.4}/README.md +18 -3
- {libcom-0.1.3 → libcom-0.1.4}/libcom/image_harmonization/image_harmonization.py +0 -13
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/shadow_generation.py +7 -9
- {libcom-0.1.3 → libcom-0.1.4}/libcom.egg-info/PKG-INFO +52 -5
- {libcom-0.1.3 → libcom-0.1.4}/libcom.egg-info/SOURCES.txt +14 -1
- {libcom-0.1.3 → libcom-0.1.4}/setup.py +1 -1
- libcom-0.1.4/tests/test_color_transfer.py +25 -0
- libcom-0.1.4/tests/test_composite_generation.py +30 -0
- libcom-0.1.4/tests/test_flux_kontext.py +35 -0
- libcom-0.1.4/tests/test_fopa_heat_map.py +30 -0
- libcom-0.1.4/tests/test_fos_score.py +27 -0
- libcom-0.1.4/tests/test_harmony_score.py +32 -0
- libcom-0.1.4/tests/test_image_harmonization.py +29 -0
- libcom-0.1.4/tests/test_inharmonious_region_localization.py +26 -0
- libcom-0.1.4/tests/test_insert_anything.py +29 -0
- libcom-0.1.4/tests/test_opa_score.py +27 -0
- libcom-0.1.4/tests/test_painterly_image_harmonization.py +40 -0
- libcom-0.1.4/tests/test_reflection_generation.py +43 -0
- libcom-0.1.4/tests/test_shadow_generation.py +43 -0
- {libcom-0.1.3 → libcom-0.1.4}/LICENSE +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/color_transfer/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/color_transfer/reinhard.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/fopa_heat_map/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/fopa_heat_map/fopa_heat_map.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/fopa_heat_map/source/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/fopa_heat_map/source/backbone/ResNet.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/fopa_heat_map/source/backbone/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/fopa_heat_map/source/data/OBdataset.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/fopa_heat_map/source/data/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/fopa_heat_map/source/data/all_transforms.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/fopa_heat_map/source/network/BaseBlocks.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/fopa_heat_map/source/network/DynamicModules.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/fopa_heat_map/source/network/ObPlaNet_simple.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/fopa_heat_map/source/network/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/fopa_heat_map/source/network/tensor_ops.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/fopa_heat_map/source/prepare_multi_fg_scales.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/fos_score/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/fos_score/fos_score_prediction.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/fos_score/source/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/fos_score/source/config/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/fos_score/source/config/config.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/fos_score/source/config/config.sfosd.yaml +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/fos_score/source/config/config_rfosd.yaml +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/fos_score/source/loss_function.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/fos_score/source/networks.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/harmony_score/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/harmony_score/harmony_score_prediction.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/harmony_score/source/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/harmony_score/source/bargainnet.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/image_harmonization/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/image_harmonization/source/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/image_harmonization/source/cdt_net.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/image_harmonization/source/functions.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/image_harmonization/source/pct_net.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/inharmonious_region_localization/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/inharmonious_region_localization/inharmonious_region_localization.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/inharmonious_region_localization/source/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/inharmonious_region_localization/source/blocks.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/inharmonious_region_localization/source/functions.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/inharmonious_region_localization/source/madis_net.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/insert_anything/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/insert_anything/insert_anything.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/insert_anything/source/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/insert_anything/source/utils.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/kontext_blending_harmonization/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/kontext_blending_harmonization/kontext_blending_harmonization.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/kontext_blending_harmonization/source/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/kontext_blending_harmonization/source/pipeline.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/naive_composition/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/naive_composition/generate_composite_image.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/opa_score/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/opa_score/opa_score_prediction.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/opa_score/source/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/opa_score/source/object_place_net.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/opa_score/source/oblect_place_config.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/opa_score/source/resnet_4ch.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/painterly_image_harmonization.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDNet/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDNet/networks.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDNet/phdnet.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDNet/phdnet_config.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/inference_base.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/lr_scheduler.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/autoencoder.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/ddim.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/ddpm.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/dpm_solver/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/dpm_solver/dpm_solver.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/dpm_solver/sampler.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/plms.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/scheduling_pndm.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/attention.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/diffusionmodules/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/diffusionmodules/model.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/diffusionmodules/openaimodel.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/diffusionmodules/util.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/distributions/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/distributions/distributions.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/ema.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/encoders/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/encoders/adapter.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/encoders/modules.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/api.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/api.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/midas/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/midas/base_model.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/midas/blocks.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/midas/dpt_depth.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/midas/midas_net.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/midas/midas_net_custom.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/midas/transforms.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/midas/vit.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/utils.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/model_edge.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/openpose/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/openpose/api.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/openpose/body.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/openpose/hand.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/openpose/model.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/openpose/util.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/utils.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/fusion/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/fusion/dual_encoder_fusion.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/image_degradation/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/image_degradation/bsrgan.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/image_degradation/bsrgan_light.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/image_degradation/utils_image.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/util.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/stable_diffusion.yaml +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/reflection_generation.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/PostProcessModel.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/cldm/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/cldm/base_network.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/cldm/cldm.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/cldm/ddim_hacked.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/cldm/hack.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/cldm/logger.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/cldm/model.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/cldm_v15.yaml +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/cluster_feature.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/models/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/models/autoencoder.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/models/diffusion/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/models/diffusion/attention_processor.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/models/diffusion/ddim.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/models/diffusion/ddpm.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/models/diffusion/dpm_solver/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/models/diffusion/dpm_solver/dpm_solver.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/models/diffusion/dpm_solver/sampler.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/models/diffusion/ip_adapter.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/models/diffusion/plms.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/models/diffusion/sampling_util.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/modules/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/modules/attention.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/modules/diffusionmodules/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/modules/diffusionmodules/model.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/modules/diffusionmodules/openaimodel.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/modules/diffusionmodules/upscaling.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/modules/diffusionmodules/util.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/modules/distributions/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/modules/distributions/distributions.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/modules/ema.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/modules/encoders/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/modules/encoders/modules.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/modules/image_degradation/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/modules/image_degradation/bsrgan.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/modules/image_degradation/bsrgan_light.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/modules/image_degradation/utils_image.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/util.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/local_clip.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/tool_add_control.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/PostProcessModel.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/attention_processor.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/cldm/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/cldm/base_network.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/cldm/cldm.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/cldm/model.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/models/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/models/autoencoder.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/models/diffusion/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/models/diffusion/attention_processor.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/models/diffusion/ddim.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/models/diffusion/ddpm.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/models/diffusion/dpm_solver/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/models/diffusion/dpm_solver/dpm_solver.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/models/diffusion/dpm_solver/sampler.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/models/diffusion/ip_adapter.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/models/diffusion/plms.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/models/diffusion/sampling_util.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/attention.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/diffusionmodules/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/diffusionmodules/model.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/diffusionmodules/openaimodel.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/diffusionmodules/upscaling.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/diffusionmodules/util.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/distributions/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/distributions/distributions.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/ema.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/encoders/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/encoders/modules.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/image_degradation/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/image_degradation/bsrgan.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/image_degradation/bsrgan_light.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/image_degradation/utils_image.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/midas/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/midas/api.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/midas/midas/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/midas/midas/base_model.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/midas/midas/blocks.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/midas/midas/dpt_depth.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/midas/midas/midas_net.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/midas/midas/midas_net_custom.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/midas/midas/transforms.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/midas/midas/vit.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/midas/utils.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/util.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/utils/__init__.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/utils/environment.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/utils/model_download.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom/utils/process_image.py +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom.egg-info/dependency_links.txt +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom.egg-info/requires.txt +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/libcom.egg-info/top_level.txt +0 -0
- {libcom-0.1.3 → libcom-0.1.4}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: libcom
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.4
|
|
4
4
|
Summary: Image Composition Toolbox
|
|
5
5
|
Home-page: https://github.com/bcmi/libcom
|
|
6
6
|
Author: BCMI Lab
|
|
@@ -13,6 +13,38 @@ Classifier: Programming Language :: Python :: 3
|
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.8
|
|
14
14
|
Description-Content-Type: text/markdown
|
|
15
15
|
License-File: LICENSE
|
|
16
|
+
Requires-Dist: einops
|
|
17
|
+
Requires-Dist: huggingface_hub
|
|
18
|
+
Requires-Dist: imageio
|
|
19
|
+
Requires-Dist: torch==2.6.0
|
|
20
|
+
Requires-Dist: torchvision==0.21.0
|
|
21
|
+
Requires-Dist: diffusers==0.34.0
|
|
22
|
+
Requires-Dist: mmdet==3.2.0
|
|
23
|
+
Requires-Dist: mmpose==1.2.0
|
|
24
|
+
Requires-Dist: peft
|
|
25
|
+
Requires-Dist: sentencepiece
|
|
26
|
+
Requires-Dist: protobuf
|
|
27
|
+
Requires-Dist: modelscope
|
|
28
|
+
Requires-Dist: omegaconf
|
|
29
|
+
Requires-Dist: opencv_python
|
|
30
|
+
Requires-Dist: opencv_python_headless
|
|
31
|
+
Requires-Dist: pytorch_lightning
|
|
32
|
+
Requires-Dist: transformers
|
|
33
|
+
Requires-Dist: tqdm
|
|
34
|
+
Requires-Dist: open_clip_torch
|
|
35
|
+
Requires-Dist: taming-transformers-rom1504
|
|
36
|
+
Requires-Dist: scikit-learn
|
|
37
|
+
Dynamic: author
|
|
38
|
+
Dynamic: author-email
|
|
39
|
+
Dynamic: classifier
|
|
40
|
+
Dynamic: description
|
|
41
|
+
Dynamic: description-content-type
|
|
42
|
+
Dynamic: home-page
|
|
43
|
+
Dynamic: keywords
|
|
44
|
+
Dynamic: license
|
|
45
|
+
Dynamic: license-file
|
|
46
|
+
Dynamic: requires-dist
|
|
47
|
+
Dynamic: summary
|
|
16
48
|
|
|
17
49
|
<div align="center">
|
|
18
50
|
</br>
|
|
@@ -27,7 +59,7 @@ License-File: LICENSE
|
|
|
27
59
|
[](https://pypi.org/project/libcom)
|
|
28
60
|
[](https://pepy.tech/project/libcom)
|
|
29
61
|
[](https://hits.sh/github.com/bcmi/libcom/)
|
|
30
|
-
[](http://libcom.ustcnewly.com/)
|
|
31
63
|
[](https://github.com/bcmi/Awesome-Object-Insertion)
|
|
32
64
|
[](https://arxiv.org/pdf/2106.14490.pdf)
|
|
33
65
|
[](https://github.com/bcmi/libcom/stargazers)
|
|
@@ -48,7 +80,17 @@ License-File: LICENSE
|
|
|
48
80
|
|
|
49
81
|
Welcome to follow WeChat public account ["Newly AIGCer"](https://www.ustcnewly.com/blog.html) or Zhihu Column ["Newly CVer"](https://www.zhihu.com/column/c_1333918224900206592) to get the latest information about image composition!
|
|
50
82
|
|
|
51
|
-
|
|
83
|
+
## Online Workbench
|
|
84
|
+
|
|
85
|
+
We have built the [image composition workbench](http://libcom.ustcnewly.com/) based on our Libcom toolbox. The interface is as follows:
|
|
86
|
+
|
|
87
|
+
<div align="center">
|
|
88
|
+
</br>
|
|
89
|
+
<img src="https://raw.githubusercontent.com/bcmi/libcom/main/resources/online_workbench.jpg" width="1000" />
|
|
90
|
+
</div>
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
## Main Functions
|
|
52
94
|
|
|
53
95
|
- **get_composite_image** generates composite images using naive copy-and-paste followed by image blending.
|
|
54
96
|
- **OPAScoreModel** [[OPA]](https://github.com/bcmi/Object-Placement-Assessment-Dataset-OPA) evaluates the rationality of foreground object placement in a composite image.
|
|
@@ -58,7 +100,7 @@ Welcome to follow WeChat public account ["Newly AIGCer"](https://www.ustcnewly.c
|
|
|
58
100
|
- **PainterlyHarmonizationModel** [[PHDNet]](https://github.com/bcmi/PHDNet-Painterly-Image-Harmonization) [[PHDiffusion]](https://github.com/bcmi/PHDiffusion-Painterly-Image-Harmonization) adjusts the foreground style to be compatible with the background given artistic background and photorealistic foreground.
|
|
59
101
|
- **HarmonyScoreModel** [[BargainNet]](https://github.com/bcmi/BargainNet-Image-Harmonization) evaluates the harmony level between foreground and background in a composite image.
|
|
60
102
|
- **InharmoniousLocalizationModel** [[MadisNet]](https://github.com/bcmi/MadisNet-Inharmonious-Region-Localization) localizes the inharmonious region in a synthetic image.
|
|
61
|
-
- **FOSScoreModel** [[DiscoFOS]](https://github.com/bcmi/Foreground-Object-Search-Dataset-FOSD) evaluates the compatibility between foreground and background in a composite image in terms of geometry and semantics.
|
|
103
|
+
- **FOSScoreModel** [[DiscoFOS]](https://github.com/bcmi/Foreground-Object-Search-Dataset-FOSD) evaluates the compatibility between foreground and background in a composite image in terms of geometry and semantics. Due to limited training data, the generalization ability of this model is poor.
|
|
62
104
|
- **ShadowGenerationModel** [[GPSDiffusion]](https://github.com/bcmi/GPSDiffusion-Object-Shadow-Generation) generates plausible shadow for the inserted object in a composite image.
|
|
63
105
|
- **ReflectionGenerationModel** generates plausible reflection for the inserted object in a composite image.
|
|
64
106
|
- **KontextBlendingHarmonizationModel** [[FluxKontext]](https://github.com/black-forest-labs/flux) is a generative image composition model which inserts foreground into the specified bounding box in the background. The pose and view of foreground stay unchanged. The "blending" mode does not adjust the foreground illumination, while the "harmonization" mode adjusts the foreground illumination to make the composite image harmonious.
|
|
@@ -98,3 +140,8 @@ If you use our toolbox, please cite our survey paper using the following BibTeX
|
|
|
98
140
|
}
|
|
99
141
|
```
|
|
100
142
|
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
[](https://pypi.org/project/libcom)
|
|
12
12
|
[](https://pepy.tech/project/libcom)
|
|
13
13
|
[](https://hits.sh/github.com/bcmi/libcom/)
|
|
14
|
-
[](http://libcom.ustcnewly.com/)
|
|
15
15
|
[](https://github.com/bcmi/Awesome-Object-Insertion)
|
|
16
16
|
[](https://arxiv.org/pdf/2106.14490.pdf)
|
|
17
17
|
[](https://github.com/bcmi/libcom/stargazers)
|
|
@@ -32,7 +32,17 @@
|
|
|
32
32
|
|
|
33
33
|
Welcome to follow WeChat public account ["Newly AIGCer"](https://www.ustcnewly.com/blog.html) or Zhihu Column ["Newly CVer"](https://www.zhihu.com/column/c_1333918224900206592) to get the latest information about image composition!
|
|
34
34
|
|
|
35
|
-
|
|
35
|
+
## Online Workbench
|
|
36
|
+
|
|
37
|
+
We have built the [image composition workbench](http://libcom.ustcnewly.com/) based on our Libcom toolbox. The interface is as follows:
|
|
38
|
+
|
|
39
|
+
<div align="center">
|
|
40
|
+
</br>
|
|
41
|
+
<img src="https://raw.githubusercontent.com/bcmi/libcom/main/resources/online_workbench.jpg" width="1000" />
|
|
42
|
+
</div>
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
## Main Functions
|
|
36
46
|
|
|
37
47
|
- **get_composite_image** generates composite images using naive copy-and-paste followed by image blending.
|
|
38
48
|
- **OPAScoreModel** [[OPA]](https://github.com/bcmi/Object-Placement-Assessment-Dataset-OPA) evaluates the rationality of foreground object placement in a composite image.
|
|
@@ -42,7 +52,7 @@ Welcome to follow WeChat public account ["Newly AIGCer"](https://www.ustcnewly.c
|
|
|
42
52
|
- **PainterlyHarmonizationModel** [[PHDNet]](https://github.com/bcmi/PHDNet-Painterly-Image-Harmonization) [[PHDiffusion]](https://github.com/bcmi/PHDiffusion-Painterly-Image-Harmonization) adjusts the foreground style to be compatible with the background given artistic background and photorealistic foreground.
|
|
43
53
|
- **HarmonyScoreModel** [[BargainNet]](https://github.com/bcmi/BargainNet-Image-Harmonization) evaluates the harmony level between foreground and background in a composite image.
|
|
44
54
|
- **InharmoniousLocalizationModel** [[MadisNet]](https://github.com/bcmi/MadisNet-Inharmonious-Region-Localization) localizes the inharmonious region in a synthetic image.
|
|
45
|
-
- **FOSScoreModel** [[DiscoFOS]](https://github.com/bcmi/Foreground-Object-Search-Dataset-FOSD) evaluates the compatibility between foreground and background in a composite image in terms of geometry and semantics.
|
|
55
|
+
- **FOSScoreModel** [[DiscoFOS]](https://github.com/bcmi/Foreground-Object-Search-Dataset-FOSD) evaluates the compatibility between foreground and background in a composite image in terms of geometry and semantics. Due to limited training data, the generalization ability of this model is poor.
|
|
46
56
|
- **ShadowGenerationModel** [[GPSDiffusion]](https://github.com/bcmi/GPSDiffusion-Object-Shadow-Generation) generates plausible shadow for the inserted object in a composite image.
|
|
47
57
|
- **ReflectionGenerationModel** generates plausible reflection for the inserted object in a composite image.
|
|
48
58
|
- **KontextBlendingHarmonizationModel** [[FluxKontext]](https://github.com/black-forest-labs/flux) is a generative image composition model which inserts foreground into the specified bounding box in the background. The pose and view of foreground stay unchanged. The "blending" mode does not adjust the foreground illumination, while the "harmonization" mode adjusts the foreground illumination to make the composite image harmonious.
|
|
@@ -82,3 +92,8 @@ If you use our toolbox, please cite our survey paper using the following BibTeX
|
|
|
82
92
|
}
|
|
83
93
|
```
|
|
84
94
|
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
|
|
@@ -27,17 +27,6 @@ class ImageHarmonizationModel:
|
|
|
27
27
|
>>> import os
|
|
28
28
|
>>> import numpy as np
|
|
29
29
|
>>> from PIL import Image
|
|
30
|
-
|
|
31
|
-
>>> #Use CDTNet
|
|
32
|
-
>>> CDTNet = ImageHarmonizationModel(device=0, model_type='CDTNet')
|
|
33
|
-
>>> comp_img1 = '../tests/source/composite/comp1_CDTNet.jpg'
|
|
34
|
-
>>> comp_mask1 = '../tests/source/composite_mask/mask1_CDTNet.png'
|
|
35
|
-
>>> CDT_result1 = CDTNet(comp_img1, comp_mask1)
|
|
36
|
-
>>> cv2.imwrite('../docs/_static/image/image_harmonization_CDT_result1.jpg', np.concatenate([cv2.imread(comp_img1), cv2.imread(comp_mask1), CDT_result1],axis=1))
|
|
37
|
-
>>> comp_img2 = '../tests/source/composite/comp2_CDTNet.jpg'
|
|
38
|
-
>>> comp_mask2 = '../tests/source/composite_mask/mask2_CDTNet.png'
|
|
39
|
-
>>> CDT_result2 = CDTNet(comp_img2, comp_mask2)
|
|
40
|
-
>>> cv2.imwrite('../docs/_static/image/image_harmonization_CDT_result2.jpg', np.concatenate([cv2.imread(comp_img2), cv2.imread(comp_mask2), CDT_result2],axis=1))
|
|
41
30
|
>>> #Use PCTNet
|
|
42
31
|
>>> PCTNet = ImageHarmonizationModel(device=0, model_type='PCTNet')
|
|
43
32
|
>>> comp_img1 = '../tests/source/composite/comp1_PCTNet.jpg'
|
|
@@ -51,8 +40,6 @@ class ImageHarmonizationModel:
|
|
|
51
40
|
|
|
52
41
|
Expected result:
|
|
53
42
|
|
|
54
|
-
.. image:: _static/image/image_harmonization_CDT_result1.jpg
|
|
55
|
-
.. image:: _static/image/image_harmonization_CDT_result2.jpg
|
|
56
43
|
.. image:: _static/image/image_harmonization_PCT_result1.jpg
|
|
57
44
|
.. image:: _static/image/image_harmonization_PCT_result2.jpg
|
|
58
45
|
|
|
@@ -570,14 +570,14 @@ class ShadowGenerationModel:
|
|
|
570
570
|
shadowfree_img: np.uint8 HWC [0-255] RGB
|
|
571
571
|
object_mask: np.uint8 HW [0-255]
|
|
572
572
|
"""
|
|
573
|
-
width, height =
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
573
|
+
width, height = 512, 512
|
|
574
|
+
decoded_512 = cv2.resize(decoded, (width, height))
|
|
575
|
+
shadowfree_img_512 = cv2.resize(shadowfree_img, (width, height))
|
|
576
|
+
object_mask_512 = cv2.resize(object_mask, (width, height))
|
|
577
577
|
|
|
578
|
-
comp_img_scaled =
|
|
579
|
-
obj_mask =
|
|
580
|
-
image_scaled =
|
|
578
|
+
comp_img_scaled = shadowfree_img_512.astype(np.float32)/127.5 - 1.0
|
|
579
|
+
obj_mask = object_mask_512[:,:,np.newaxis].astype(np.float32)/255.0
|
|
580
|
+
image_scaled = decoded_512.astype(np.float32)/127.5 - 1.0
|
|
581
581
|
|
|
582
582
|
comp_img_scaled = torch.from_numpy(comp_img_scaled).float().unsqueeze(0).to(self.device)
|
|
583
583
|
obj_mask = torch.from_numpy(obj_mask).float().unsqueeze(0).to(self.device)
|
|
@@ -603,8 +603,6 @@ class ShadowGenerationModel:
|
|
|
603
603
|
new_composite_512 = cv2.resize(new_composite, (512,512))
|
|
604
604
|
return new_composite_512
|
|
605
605
|
|
|
606
|
-
|
|
607
|
-
|
|
608
606
|
def __call__(self, shadowfree_img, object_mask, number=5):
|
|
609
607
|
"""
|
|
610
608
|
Generate shadow for foreground object.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
2
|
Name: libcom
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.4
|
|
4
4
|
Summary: Image Composition Toolbox
|
|
5
5
|
Home-page: https://github.com/bcmi/libcom
|
|
6
6
|
Author: BCMI Lab
|
|
@@ -13,6 +13,38 @@ Classifier: Programming Language :: Python :: 3
|
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.8
|
|
14
14
|
Description-Content-Type: text/markdown
|
|
15
15
|
License-File: LICENSE
|
|
16
|
+
Requires-Dist: einops
|
|
17
|
+
Requires-Dist: huggingface_hub
|
|
18
|
+
Requires-Dist: imageio
|
|
19
|
+
Requires-Dist: torch==2.6.0
|
|
20
|
+
Requires-Dist: torchvision==0.21.0
|
|
21
|
+
Requires-Dist: diffusers==0.34.0
|
|
22
|
+
Requires-Dist: mmdet==3.2.0
|
|
23
|
+
Requires-Dist: mmpose==1.2.0
|
|
24
|
+
Requires-Dist: peft
|
|
25
|
+
Requires-Dist: sentencepiece
|
|
26
|
+
Requires-Dist: protobuf
|
|
27
|
+
Requires-Dist: modelscope
|
|
28
|
+
Requires-Dist: omegaconf
|
|
29
|
+
Requires-Dist: opencv_python
|
|
30
|
+
Requires-Dist: opencv_python_headless
|
|
31
|
+
Requires-Dist: pytorch_lightning
|
|
32
|
+
Requires-Dist: transformers
|
|
33
|
+
Requires-Dist: tqdm
|
|
34
|
+
Requires-Dist: open_clip_torch
|
|
35
|
+
Requires-Dist: taming-transformers-rom1504
|
|
36
|
+
Requires-Dist: scikit-learn
|
|
37
|
+
Dynamic: author
|
|
38
|
+
Dynamic: author-email
|
|
39
|
+
Dynamic: classifier
|
|
40
|
+
Dynamic: description
|
|
41
|
+
Dynamic: description-content-type
|
|
42
|
+
Dynamic: home-page
|
|
43
|
+
Dynamic: keywords
|
|
44
|
+
Dynamic: license
|
|
45
|
+
Dynamic: license-file
|
|
46
|
+
Dynamic: requires-dist
|
|
47
|
+
Dynamic: summary
|
|
16
48
|
|
|
17
49
|
<div align="center">
|
|
18
50
|
</br>
|
|
@@ -27,7 +59,7 @@ License-File: LICENSE
|
|
|
27
59
|
[](https://pypi.org/project/libcom)
|
|
28
60
|
[](https://pepy.tech/project/libcom)
|
|
29
61
|
[](https://hits.sh/github.com/bcmi/libcom/)
|
|
30
|
-
[](http://libcom.ustcnewly.com/)
|
|
31
63
|
[](https://github.com/bcmi/Awesome-Object-Insertion)
|
|
32
64
|
[](https://arxiv.org/pdf/2106.14490.pdf)
|
|
33
65
|
[](https://github.com/bcmi/libcom/stargazers)
|
|
@@ -48,7 +80,17 @@ License-File: LICENSE
|
|
|
48
80
|
|
|
49
81
|
Welcome to follow WeChat public account ["Newly AIGCer"](https://www.ustcnewly.com/blog.html) or Zhihu Column ["Newly CVer"](https://www.zhihu.com/column/c_1333918224900206592) to get the latest information about image composition!
|
|
50
82
|
|
|
51
|
-
|
|
83
|
+
## Online Workbench
|
|
84
|
+
|
|
85
|
+
We have built the [image composition workbench](http://libcom.ustcnewly.com/) based on our Libcom toolbox. The interface is as follows:
|
|
86
|
+
|
|
87
|
+
<div align="center">
|
|
88
|
+
</br>
|
|
89
|
+
<img src="https://raw.githubusercontent.com/bcmi/libcom/main/resources/online_workbench.jpg" width="1000" />
|
|
90
|
+
</div>
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
## Main Functions
|
|
52
94
|
|
|
53
95
|
- **get_composite_image** generates composite images using naive copy-and-paste followed by image blending.
|
|
54
96
|
- **OPAScoreModel** [[OPA]](https://github.com/bcmi/Object-Placement-Assessment-Dataset-OPA) evaluates the rationality of foreground object placement in a composite image.
|
|
@@ -58,7 +100,7 @@ Welcome to follow WeChat public account ["Newly AIGCer"](https://www.ustcnewly.c
|
|
|
58
100
|
- **PainterlyHarmonizationModel** [[PHDNet]](https://github.com/bcmi/PHDNet-Painterly-Image-Harmonization) [[PHDiffusion]](https://github.com/bcmi/PHDiffusion-Painterly-Image-Harmonization) adjusts the foreground style to be compatible with the background given artistic background and photorealistic foreground.
|
|
59
101
|
- **HarmonyScoreModel** [[BargainNet]](https://github.com/bcmi/BargainNet-Image-Harmonization) evaluates the harmony level between foreground and background in a composite image.
|
|
60
102
|
- **InharmoniousLocalizationModel** [[MadisNet]](https://github.com/bcmi/MadisNet-Inharmonious-Region-Localization) localizes the inharmonious region in a synthetic image.
|
|
61
|
-
- **FOSScoreModel** [[DiscoFOS]](https://github.com/bcmi/Foreground-Object-Search-Dataset-FOSD) evaluates the compatibility between foreground and background in a composite image in terms of geometry and semantics.
|
|
103
|
+
- **FOSScoreModel** [[DiscoFOS]](https://github.com/bcmi/Foreground-Object-Search-Dataset-FOSD) evaluates the compatibility between foreground and background in a composite image in terms of geometry and semantics. Due to limited training data, the generalization ability of this model is poor.
|
|
62
104
|
- **ShadowGenerationModel** [[GPSDiffusion]](https://github.com/bcmi/GPSDiffusion-Object-Shadow-Generation) generates plausible shadow for the inserted object in a composite image.
|
|
63
105
|
- **ReflectionGenerationModel** generates plausible reflection for the inserted object in a composite image.
|
|
64
106
|
- **KontextBlendingHarmonizationModel** [[FluxKontext]](https://github.com/black-forest-labs/flux) is a generative image composition model which inserts foreground into the specified bounding box in the background. The pose and view of foreground stay unchanged. The "blending" mode does not adjust the foreground illumination, while the "harmonization" mode adjusts the foreground illumination to make the composite image harmonious.
|
|
@@ -98,3 +140,8 @@ If you use our toolbox, please cite our survey paper using the following BibTeX
|
|
|
98
140
|
}
|
|
99
141
|
```
|
|
100
142
|
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
|
|
@@ -224,4 +224,17 @@ libcom/shadow_generation/source/ldm/modules/midas/midas/vit.py
|
|
|
224
224
|
libcom/utils/__init__.py
|
|
225
225
|
libcom/utils/environment.py
|
|
226
226
|
libcom/utils/model_download.py
|
|
227
|
-
libcom/utils/process_image.py
|
|
227
|
+
libcom/utils/process_image.py
|
|
228
|
+
tests/test_color_transfer.py
|
|
229
|
+
tests/test_composite_generation.py
|
|
230
|
+
tests/test_flux_kontext.py
|
|
231
|
+
tests/test_fopa_heat_map.py
|
|
232
|
+
tests/test_fos_score.py
|
|
233
|
+
tests/test_harmony_score.py
|
|
234
|
+
tests/test_image_harmonization.py
|
|
235
|
+
tests/test_inharmonious_region_localization.py
|
|
236
|
+
tests/test_insert_anything.py
|
|
237
|
+
tests/test_opa_score.py
|
|
238
|
+
tests/test_painterly_image_harmonization.py
|
|
239
|
+
tests/test_reflection_generation.py
|
|
240
|
+
tests/test_shadow_generation.py
|
|
@@ -109,7 +109,7 @@ if __name__ == '__main__':
|
|
|
109
109
|
cur_dir = os.path.dirname(os.path.abspath(__file__))
|
|
110
110
|
setup(
|
|
111
111
|
name='libcom',
|
|
112
|
-
version='0.1.
|
|
112
|
+
version='0.1.4',
|
|
113
113
|
description='Image Composition Toolbox',
|
|
114
114
|
long_description=readme(),
|
|
115
115
|
long_description_content_type='text/markdown',
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
from common import *
|
|
2
|
+
from libcom import color_transfer
|
|
3
|
+
import os
|
|
4
|
+
import cv2
|
|
5
|
+
import shutil
|
|
6
|
+
|
|
7
|
+
task_name = 'color_transfer'
|
|
8
|
+
|
|
9
|
+
if __name__ == '__main__':
|
|
10
|
+
test_set = get_test_list()
|
|
11
|
+
result_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'results', task_name)
|
|
12
|
+
if os.path.exists(result_dir):
|
|
13
|
+
shutil.rmtree(result_dir)
|
|
14
|
+
os.makedirs(result_dir, exist_ok=True)
|
|
15
|
+
print(f'begin testing {task_name}...')
|
|
16
|
+
for pair in test_set:
|
|
17
|
+
comp_img, comp_mask = pair['composite'], pair['composite_mask']
|
|
18
|
+
trans_img = color_transfer(comp_img, comp_mask)
|
|
19
|
+
# visulization results
|
|
20
|
+
img_name = os.path.basename(comp_img).replace('.png', '.jpg')
|
|
21
|
+
grid_img = make_image_grid([comp_img, comp_mask, trans_img])
|
|
22
|
+
res_path = os.path.join(result_dir, img_name)
|
|
23
|
+
cv2.imwrite(res_path, grid_img)
|
|
24
|
+
print('save result to ', res_path)
|
|
25
|
+
print(f'end testing {task_name}!\n')
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
from common import *
|
|
2
|
+
from libcom import get_composite_image
|
|
3
|
+
import os
|
|
4
|
+
import cv2
|
|
5
|
+
import shutil
|
|
6
|
+
|
|
7
|
+
task_name = 'generate_composite'
|
|
8
|
+
|
|
9
|
+
if __name__ == '__main__':
|
|
10
|
+
test_set = get_test_list()
|
|
11
|
+
result_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'results', task_name)
|
|
12
|
+
if os.path.exists(result_dir):
|
|
13
|
+
shutil.rmtree(result_dir)
|
|
14
|
+
os.makedirs(result_dir, exist_ok=True)
|
|
15
|
+
print(f'begin testing {task_name}...')
|
|
16
|
+
for pair in test_set:
|
|
17
|
+
fg_img, fg_mask = pair['foreground'], pair['foreground_mask']
|
|
18
|
+
bg_img, bbox = pair['background'], pair['bbox']
|
|
19
|
+
img_list = [bg_img, fg_img]
|
|
20
|
+
for option in ['none', 'gaussian', 'poisson']:
|
|
21
|
+
comp_img, comp_mask = get_composite_image(fg_img, fg_mask, bg_img, bbox, option)
|
|
22
|
+
img_list.append(comp_img)
|
|
23
|
+
img_list.append(comp_mask)
|
|
24
|
+
# visulization results
|
|
25
|
+
img_name = os.path.basename(fg_img).replace('.png', '.jpg')
|
|
26
|
+
grid_img = make_image_grid(img_list, cols=4)
|
|
27
|
+
res_path = os.path.join(result_dir, img_name)
|
|
28
|
+
cv2.imwrite(res_path, grid_img)
|
|
29
|
+
print('save result to ', res_path)
|
|
30
|
+
print(f'end testing {task_name}!\n')
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
from common import *
|
|
2
|
+
from libcom import KontextBlendingHarmonizationModel
|
|
3
|
+
import os
|
|
4
|
+
import cv2
|
|
5
|
+
import shutil
|
|
6
|
+
|
|
7
|
+
task_name = 'flux_kontext'
|
|
8
|
+
|
|
9
|
+
model_set = ['Kontext_blend', 'Kontext_harm']
|
|
10
|
+
|
|
11
|
+
if __name__ == '__main__':
|
|
12
|
+
test_set = get_controlcom_test_list()
|
|
13
|
+
result_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'results', task_name)
|
|
14
|
+
if os.path.exists(result_dir):
|
|
15
|
+
shutil.rmtree(result_dir)
|
|
16
|
+
os.makedirs(result_dir, exist_ok=True)
|
|
17
|
+
print(f'begin testing {task_name}...')
|
|
18
|
+
|
|
19
|
+
net = KontextBlendingHarmonizationModel(device=0, model_type=model_set[0])
|
|
20
|
+
|
|
21
|
+
for pair in test_set:
|
|
22
|
+
|
|
23
|
+
fg_img, fg_mask = pair['foreground'], pair['foreground_mask']
|
|
24
|
+
bg_img, bbox = pair['background'], pair['bbox']
|
|
25
|
+
|
|
26
|
+
comp = net(bg_img, fg_img, bbox, fg_mask)
|
|
27
|
+
bg_img = draw_bbox_on_image(bg_img, bbox)
|
|
28
|
+
|
|
29
|
+
img_name = os.path.basename(fg_img).replace('.png', '.jpg')
|
|
30
|
+
grid_img = make_image_grid([bg_img, fg_img, comp[0]])
|
|
31
|
+
res_path = os.path.join(result_dir, img_name)
|
|
32
|
+
cv2.imwrite(res_path, grid_img)
|
|
33
|
+
print('save result to ', res_path)
|
|
34
|
+
|
|
35
|
+
print(f'end testing {task_name}!\n')
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
from common import *
|
|
2
|
+
from libcom import FOPAHeatMapModel
|
|
3
|
+
import os
|
|
4
|
+
import cv2
|
|
5
|
+
import shutil
|
|
6
|
+
|
|
7
|
+
task_name = 'fopa_heat_map'
|
|
8
|
+
|
|
9
|
+
if __name__ == '__main__':
|
|
10
|
+
# collect pairwise test samples
|
|
11
|
+
test_set = get_test_list_fopa_heatmap()
|
|
12
|
+
result_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'results', task_name)
|
|
13
|
+
if os.path.exists(result_dir):
|
|
14
|
+
shutil.rmtree(result_dir)
|
|
15
|
+
os.makedirs(result_dir, exist_ok=True)
|
|
16
|
+
os.makedirs(os.path.join(result_dir, 'grid'), exist_ok=True)
|
|
17
|
+
print(f'begin testing {task_name}...')
|
|
18
|
+
|
|
19
|
+
net = FOPAHeatMapModel(device=0)
|
|
20
|
+
for pair in test_set[:1]:
|
|
21
|
+
fg_img, fg_mask, bg_img = pair['foreground'], pair['foreground_mask'], pair['background']
|
|
22
|
+
bboxes, heatmaps = net(fg_img, fg_mask, bg_img,
|
|
23
|
+
cache_dir=os.path.join(result_dir, 'cache'),
|
|
24
|
+
heatmap_dir=os.path.join(result_dir, 'heatmap'))
|
|
25
|
+
img_name = os.path.basename(bg_img).replace('.png', '.jpg')
|
|
26
|
+
grid_img = make_image_grid([bg_img, fg_img, heatmaps[0]])
|
|
27
|
+
res_path = os.path.join(result_dir, 'grid', img_name)
|
|
28
|
+
cv2.imwrite(res_path, grid_img)
|
|
29
|
+
print('save result to ', res_path)
|
|
30
|
+
print(f'end testing {task_name}!\n')
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
from common import *
|
|
2
|
+
from libcom import FOSScoreModel
|
|
3
|
+
import os
|
|
4
|
+
import cv2
|
|
5
|
+
import shutil
|
|
6
|
+
import torch
|
|
7
|
+
|
|
8
|
+
task_name = 'fos_score_prediction'
|
|
9
|
+
MODEL_TYPE = 'FOS_D' # choose from 'FOS_D', 'FOS_E'
|
|
10
|
+
|
|
11
|
+
if __name__ == '__main__':
|
|
12
|
+
test_set = get_test_list()
|
|
13
|
+
result_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'results', task_name, MODEL_TYPE)
|
|
14
|
+
if os.path.exists(result_dir):
|
|
15
|
+
shutil.rmtree(result_dir)
|
|
16
|
+
os.makedirs(result_dir, exist_ok=True)
|
|
17
|
+
print(f'begin testing {task_name}...')
|
|
18
|
+
net = FOSScoreModel(device=0, model_type=MODEL_TYPE)
|
|
19
|
+
for pair in test_set:
|
|
20
|
+
background_image, foreground_image, foreground_mask, composite_image, bounding_box = pair['background'], pair['foreground'], pair['foreground_mask'], pair['composite'], pair['bbox']
|
|
21
|
+
score = net(background_image, foreground_image, bounding_box, foreground_mask=foreground_mask)
|
|
22
|
+
img_name = os.path.basename(background_image).replace('.png', '.jpg')
|
|
23
|
+
grid_img = make_image_grid([background_image, foreground_image, composite_image], text_list=[f'fos_score:{score:.2f}'])
|
|
24
|
+
res_path = os.path.join(result_dir, img_name)
|
|
25
|
+
cv2.imwrite(res_path, grid_img)
|
|
26
|
+
print('save result to ', res_path)
|
|
27
|
+
print(f'end testing {task_name}!\n')
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
from common import *
|
|
2
|
+
from libcom import HarmonyScoreModel
|
|
3
|
+
import os
|
|
4
|
+
import cv2
|
|
5
|
+
import shutil
|
|
6
|
+
import torch
|
|
7
|
+
|
|
8
|
+
task_name = 'harmony_score_prediction'
|
|
9
|
+
|
|
10
|
+
if __name__ == '__main__':
|
|
11
|
+
test_set = get_test_list_harmony_prediction()
|
|
12
|
+
result_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'results', task_name)
|
|
13
|
+
if os.path.exists(result_dir):
|
|
14
|
+
shutil.rmtree(result_dir)
|
|
15
|
+
os.makedirs(result_dir, exist_ok=True)
|
|
16
|
+
print(f'begin testing {task_name}...')
|
|
17
|
+
net = HarmonyScoreModel(device=0, model_type='BargainNet')
|
|
18
|
+
for pair in test_set:
|
|
19
|
+
comp_img, comp_mask = pair['composite'], pair['composite_mask']
|
|
20
|
+
score = net(comp_img, comp_mask)
|
|
21
|
+
if '_harm' in comp_img and score < 0.7:
|
|
22
|
+
continue
|
|
23
|
+
elif '_inharm' in comp_img and score > 0.3:
|
|
24
|
+
continue
|
|
25
|
+
img_name = os.path.basename(comp_img).replace('.png', '.jpg')
|
|
26
|
+
grid_img = make_image_grid([comp_img, comp_mask],
|
|
27
|
+
text_list=[f'harmony_score:{score:.2f}', 'composite-mask'])
|
|
28
|
+
res_path = os.path.join(result_dir, img_name)
|
|
29
|
+
cv2.imwrite(res_path, grid_img)
|
|
30
|
+
print('save result to ', res_path)
|
|
31
|
+
print(f'end testing {task_name}!\n')
|
|
32
|
+
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
from common import *
|
|
2
|
+
from libcom import ImageHarmonizationModel
|
|
3
|
+
import os
|
|
4
|
+
import cv2
|
|
5
|
+
import shutil
|
|
6
|
+
|
|
7
|
+
task_name = 'image_harmonization'
|
|
8
|
+
|
|
9
|
+
if __name__ == '__main__':
|
|
10
|
+
test_set = get_test_list()
|
|
11
|
+
result_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'results', task_name)
|
|
12
|
+
if os.path.exists(result_dir):
|
|
13
|
+
shutil.rmtree(result_dir)
|
|
14
|
+
os.makedirs(result_dir, exist_ok=True)
|
|
15
|
+
# cdt_model = ImageHarmonizationModel(model_type='CDTNet')
|
|
16
|
+
pct_model = ImageHarmonizationModel(model_type='PCTNet')
|
|
17
|
+
print(f'begin testing {task_name}...')
|
|
18
|
+
for pair in test_set:
|
|
19
|
+
comp_img, comp_mask = pair['composite'], pair['composite_mask']
|
|
20
|
+
# cdt_res = cdt_model(comp_img, comp_mask)
|
|
21
|
+
pct_res = pct_model(comp_img, comp_mask)
|
|
22
|
+
# visulization results
|
|
23
|
+
img_name = os.path.basename(comp_img).replace('.png', '.jpg')
|
|
24
|
+
# grid_img = make_image_grid([comp_img, comp_mask, cdt_res, pct_res])
|
|
25
|
+
grid_img = make_image_grid([comp_img, comp_mask, pct_res])
|
|
26
|
+
res_path = os.path.join(result_dir, img_name)
|
|
27
|
+
cv2.imwrite(res_path, grid_img)
|
|
28
|
+
print('save result to ', res_path)
|
|
29
|
+
print(f'end testing {task_name}!\n')
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
from common import *
|
|
2
|
+
from libcom import InharmoniousLocalizationModel
|
|
3
|
+
import os
|
|
4
|
+
import cv2
|
|
5
|
+
import shutil
|
|
6
|
+
|
|
7
|
+
task_name = 'inharmonious_region_localization'
|
|
8
|
+
|
|
9
|
+
if __name__ == '__main__':
|
|
10
|
+
test_set = get_test_list()
|
|
11
|
+
result_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'results', task_name)
|
|
12
|
+
if os.path.exists(result_dir):
|
|
13
|
+
shutil.rmtree(result_dir)
|
|
14
|
+
os.makedirs(result_dir, exist_ok=True)
|
|
15
|
+
model = InharmoniousLocalizationModel()
|
|
16
|
+
print(f'begin testing {task_name}...')
|
|
17
|
+
for pair in test_set:
|
|
18
|
+
comp_img = pair['composite']
|
|
19
|
+
trans_img = model(comp_img)
|
|
20
|
+
# visulization results
|
|
21
|
+
img_name = os.path.basename(comp_img).replace('.png', '.jpg')
|
|
22
|
+
grid_img = make_image_grid([comp_img, trans_img])
|
|
23
|
+
res_path = os.path.join(result_dir, img_name)
|
|
24
|
+
cv2.imwrite(res_path, grid_img)
|
|
25
|
+
print('save result to ', res_path)
|
|
26
|
+
print(f'end testing {task_name}!\n')
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
from common import *
|
|
2
|
+
from libcom import InsertAnythingModel
|
|
3
|
+
import cv2
|
|
4
|
+
import shutil
|
|
5
|
+
|
|
6
|
+
task_name = 'insert_anything'
|
|
7
|
+
|
|
8
|
+
if __name__ == '__main__':
|
|
9
|
+
test_set = get_controlcom_test_list()
|
|
10
|
+
result_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'results', task_name)
|
|
11
|
+
if os.path.exists(result_dir):
|
|
12
|
+
shutil.rmtree(result_dir)
|
|
13
|
+
os.makedirs(result_dir, exist_ok=True)
|
|
14
|
+
print(f'begin testing {task_name}...')
|
|
15
|
+
|
|
16
|
+
net = InsertAnythingModel(device=1)
|
|
17
|
+
for pair in test_set:
|
|
18
|
+
fg_img, fg_mask = pair['foreground'], pair['foreground_mask']
|
|
19
|
+
bg_img, bbox = pair['background'], pair['bbox']
|
|
20
|
+
|
|
21
|
+
comp = net(bg_img, fg_img, fg_mask, bbox, num_samples=1)
|
|
22
|
+
bg_img = draw_bbox_on_image(bg_img, bbox)
|
|
23
|
+
|
|
24
|
+
img_name = os.path.basename(fg_img).replace('.png', '.jpg')
|
|
25
|
+
grid_img = make_image_grid([bg_img, fg_img, comp[0]])
|
|
26
|
+
res_path = os.path.join(result_dir, img_name)
|
|
27
|
+
cv2.imwrite(res_path, grid_img)
|
|
28
|
+
print('save result to ', res_path)
|
|
29
|
+
print(f'end testing {task_name}!\n')
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
from common import *
|
|
2
|
+
from libcom import OPAScoreModel
|
|
3
|
+
import os
|
|
4
|
+
import cv2
|
|
5
|
+
import shutil
|
|
6
|
+
import torch
|
|
7
|
+
|
|
8
|
+
task_name = 'opa_score_prediction'
|
|
9
|
+
|
|
10
|
+
if __name__ == '__main__':
|
|
11
|
+
test_set = get_test_list()
|
|
12
|
+
result_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'results', task_name)
|
|
13
|
+
if os.path.exists(result_dir):
|
|
14
|
+
shutil.rmtree(result_dir)
|
|
15
|
+
os.makedirs(result_dir, exist_ok=True)
|
|
16
|
+
print(f'begin testing {task_name}...')
|
|
17
|
+
net = OPAScoreModel(device=0, model_type='SimOPA')
|
|
18
|
+
for pair in test_set:
|
|
19
|
+
comp_img, comp_mask = pair['composite'], pair['composite_mask']
|
|
20
|
+
score = net(comp_img, comp_mask)
|
|
21
|
+
# visulization results
|
|
22
|
+
img_name = os.path.basename(comp_img).replace('.png', '.jpg')
|
|
23
|
+
grid_img = make_image_grid([comp_img, comp_mask], text_list=[f'opa_score:{score:.2f}', 'composite-mask'])
|
|
24
|
+
res_path = os.path.join(result_dir, img_name)
|
|
25
|
+
cv2.imwrite(res_path, grid_img)
|
|
26
|
+
print('save result to ', res_path)
|
|
27
|
+
print(f'end testing {task_name}!\n')
|