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.
Files changed (242) hide show
  1. {libcom-0.1.3 → libcom-0.1.4}/PKG-INFO +52 -5
  2. {libcom-0.1.3 → libcom-0.1.4}/README.md +18 -3
  3. {libcom-0.1.3 → libcom-0.1.4}/libcom/image_harmonization/image_harmonization.py +0 -13
  4. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/shadow_generation.py +7 -9
  5. {libcom-0.1.3 → libcom-0.1.4}/libcom.egg-info/PKG-INFO +52 -5
  6. {libcom-0.1.3 → libcom-0.1.4}/libcom.egg-info/SOURCES.txt +14 -1
  7. {libcom-0.1.3 → libcom-0.1.4}/setup.py +1 -1
  8. libcom-0.1.4/tests/test_color_transfer.py +25 -0
  9. libcom-0.1.4/tests/test_composite_generation.py +30 -0
  10. libcom-0.1.4/tests/test_flux_kontext.py +35 -0
  11. libcom-0.1.4/tests/test_fopa_heat_map.py +30 -0
  12. libcom-0.1.4/tests/test_fos_score.py +27 -0
  13. libcom-0.1.4/tests/test_harmony_score.py +32 -0
  14. libcom-0.1.4/tests/test_image_harmonization.py +29 -0
  15. libcom-0.1.4/tests/test_inharmonious_region_localization.py +26 -0
  16. libcom-0.1.4/tests/test_insert_anything.py +29 -0
  17. libcom-0.1.4/tests/test_opa_score.py +27 -0
  18. libcom-0.1.4/tests/test_painterly_image_harmonization.py +40 -0
  19. libcom-0.1.4/tests/test_reflection_generation.py +43 -0
  20. libcom-0.1.4/tests/test_shadow_generation.py +43 -0
  21. {libcom-0.1.3 → libcom-0.1.4}/LICENSE +0 -0
  22. {libcom-0.1.3 → libcom-0.1.4}/libcom/__init__.py +0 -0
  23. {libcom-0.1.3 → libcom-0.1.4}/libcom/color_transfer/__init__.py +0 -0
  24. {libcom-0.1.3 → libcom-0.1.4}/libcom/color_transfer/reinhard.py +0 -0
  25. {libcom-0.1.3 → libcom-0.1.4}/libcom/fopa_heat_map/__init__.py +0 -0
  26. {libcom-0.1.3 → libcom-0.1.4}/libcom/fopa_heat_map/fopa_heat_map.py +0 -0
  27. {libcom-0.1.3 → libcom-0.1.4}/libcom/fopa_heat_map/source/__init__.py +0 -0
  28. {libcom-0.1.3 → libcom-0.1.4}/libcom/fopa_heat_map/source/backbone/ResNet.py +0 -0
  29. {libcom-0.1.3 → libcom-0.1.4}/libcom/fopa_heat_map/source/backbone/__init__.py +0 -0
  30. {libcom-0.1.3 → libcom-0.1.4}/libcom/fopa_heat_map/source/data/OBdataset.py +0 -0
  31. {libcom-0.1.3 → libcom-0.1.4}/libcom/fopa_heat_map/source/data/__init__.py +0 -0
  32. {libcom-0.1.3 → libcom-0.1.4}/libcom/fopa_heat_map/source/data/all_transforms.py +0 -0
  33. {libcom-0.1.3 → libcom-0.1.4}/libcom/fopa_heat_map/source/network/BaseBlocks.py +0 -0
  34. {libcom-0.1.3 → libcom-0.1.4}/libcom/fopa_heat_map/source/network/DynamicModules.py +0 -0
  35. {libcom-0.1.3 → libcom-0.1.4}/libcom/fopa_heat_map/source/network/ObPlaNet_simple.py +0 -0
  36. {libcom-0.1.3 → libcom-0.1.4}/libcom/fopa_heat_map/source/network/__init__.py +0 -0
  37. {libcom-0.1.3 → libcom-0.1.4}/libcom/fopa_heat_map/source/network/tensor_ops.py +0 -0
  38. {libcom-0.1.3 → libcom-0.1.4}/libcom/fopa_heat_map/source/prepare_multi_fg_scales.py +0 -0
  39. {libcom-0.1.3 → libcom-0.1.4}/libcom/fos_score/__init__.py +0 -0
  40. {libcom-0.1.3 → libcom-0.1.4}/libcom/fos_score/fos_score_prediction.py +0 -0
  41. {libcom-0.1.3 → libcom-0.1.4}/libcom/fos_score/source/__init__.py +0 -0
  42. {libcom-0.1.3 → libcom-0.1.4}/libcom/fos_score/source/config/__init__.py +0 -0
  43. {libcom-0.1.3 → libcom-0.1.4}/libcom/fos_score/source/config/config.py +0 -0
  44. {libcom-0.1.3 → libcom-0.1.4}/libcom/fos_score/source/config/config.sfosd.yaml +0 -0
  45. {libcom-0.1.3 → libcom-0.1.4}/libcom/fos_score/source/config/config_rfosd.yaml +0 -0
  46. {libcom-0.1.3 → libcom-0.1.4}/libcom/fos_score/source/loss_function.py +0 -0
  47. {libcom-0.1.3 → libcom-0.1.4}/libcom/fos_score/source/networks.py +0 -0
  48. {libcom-0.1.3 → libcom-0.1.4}/libcom/harmony_score/__init__.py +0 -0
  49. {libcom-0.1.3 → libcom-0.1.4}/libcom/harmony_score/harmony_score_prediction.py +0 -0
  50. {libcom-0.1.3 → libcom-0.1.4}/libcom/harmony_score/source/__init__.py +0 -0
  51. {libcom-0.1.3 → libcom-0.1.4}/libcom/harmony_score/source/bargainnet.py +0 -0
  52. {libcom-0.1.3 → libcom-0.1.4}/libcom/image_harmonization/__init__.py +0 -0
  53. {libcom-0.1.3 → libcom-0.1.4}/libcom/image_harmonization/source/__init__.py +0 -0
  54. {libcom-0.1.3 → libcom-0.1.4}/libcom/image_harmonization/source/cdt_net.py +0 -0
  55. {libcom-0.1.3 → libcom-0.1.4}/libcom/image_harmonization/source/functions.py +0 -0
  56. {libcom-0.1.3 → libcom-0.1.4}/libcom/image_harmonization/source/pct_net.py +0 -0
  57. {libcom-0.1.3 → libcom-0.1.4}/libcom/inharmonious_region_localization/__init__.py +0 -0
  58. {libcom-0.1.3 → libcom-0.1.4}/libcom/inharmonious_region_localization/inharmonious_region_localization.py +0 -0
  59. {libcom-0.1.3 → libcom-0.1.4}/libcom/inharmonious_region_localization/source/__init__.py +0 -0
  60. {libcom-0.1.3 → libcom-0.1.4}/libcom/inharmonious_region_localization/source/blocks.py +0 -0
  61. {libcom-0.1.3 → libcom-0.1.4}/libcom/inharmonious_region_localization/source/functions.py +0 -0
  62. {libcom-0.1.3 → libcom-0.1.4}/libcom/inharmonious_region_localization/source/madis_net.py +0 -0
  63. {libcom-0.1.3 → libcom-0.1.4}/libcom/insert_anything/__init__.py +0 -0
  64. {libcom-0.1.3 → libcom-0.1.4}/libcom/insert_anything/insert_anything.py +0 -0
  65. {libcom-0.1.3 → libcom-0.1.4}/libcom/insert_anything/source/__init__.py +0 -0
  66. {libcom-0.1.3 → libcom-0.1.4}/libcom/insert_anything/source/utils.py +0 -0
  67. {libcom-0.1.3 → libcom-0.1.4}/libcom/kontext_blending_harmonization/__init__.py +0 -0
  68. {libcom-0.1.3 → libcom-0.1.4}/libcom/kontext_blending_harmonization/kontext_blending_harmonization.py +0 -0
  69. {libcom-0.1.3 → libcom-0.1.4}/libcom/kontext_blending_harmonization/source/__init__.py +0 -0
  70. {libcom-0.1.3 → libcom-0.1.4}/libcom/kontext_blending_harmonization/source/pipeline.py +0 -0
  71. {libcom-0.1.3 → libcom-0.1.4}/libcom/naive_composition/__init__.py +0 -0
  72. {libcom-0.1.3 → libcom-0.1.4}/libcom/naive_composition/generate_composite_image.py +0 -0
  73. {libcom-0.1.3 → libcom-0.1.4}/libcom/opa_score/__init__.py +0 -0
  74. {libcom-0.1.3 → libcom-0.1.4}/libcom/opa_score/opa_score_prediction.py +0 -0
  75. {libcom-0.1.3 → libcom-0.1.4}/libcom/opa_score/source/__init__.py +0 -0
  76. {libcom-0.1.3 → libcom-0.1.4}/libcom/opa_score/source/object_place_net.py +0 -0
  77. {libcom-0.1.3 → libcom-0.1.4}/libcom/opa_score/source/oblect_place_config.py +0 -0
  78. {libcom-0.1.3 → libcom-0.1.4}/libcom/opa_score/source/resnet_4ch.py +0 -0
  79. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/__init__.py +0 -0
  80. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/painterly_image_harmonization.py +0 -0
  81. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDNet/__init__.py +0 -0
  82. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDNet/networks.py +0 -0
  83. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDNet/phdnet.py +0 -0
  84. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDNet/phdnet_config.py +0 -0
  85. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/__init__.py +0 -0
  86. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/__init__.py +0 -0
  87. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/inference_base.py +0 -0
  88. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/lr_scheduler.py +0 -0
  89. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/__init__.py +0 -0
  90. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/autoencoder.py +0 -0
  91. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/__init__.py +0 -0
  92. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/ddim.py +0 -0
  93. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/ddpm.py +0 -0
  94. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/dpm_solver/__init__.py +0 -0
  95. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/dpm_solver/dpm_solver.py +0 -0
  96. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/dpm_solver/sampler.py +0 -0
  97. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/plms.py +0 -0
  98. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/models/diffusion/scheduling_pndm.py +0 -0
  99. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/__init__.py +0 -0
  100. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/attention.py +0 -0
  101. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/diffusionmodules/__init__.py +0 -0
  102. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/diffusionmodules/model.py +0 -0
  103. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/diffusionmodules/openaimodel.py +0 -0
  104. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/diffusionmodules/util.py +0 -0
  105. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/distributions/__init__.py +0 -0
  106. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/distributions/distributions.py +0 -0
  107. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/ema.py +0 -0
  108. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/encoders/__init__.py +0 -0
  109. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/encoders/adapter.py +0 -0
  110. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/encoders/modules.py +0 -0
  111. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/__init__.py +0 -0
  112. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/api.py +0 -0
  113. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/__init__.py +0 -0
  114. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/api.py +0 -0
  115. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/midas/__init__.py +0 -0
  116. {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
  117. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/midas/blocks.py +0 -0
  118. {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
  119. {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
  120. {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
  121. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/midas/transforms.py +0 -0
  122. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/midas/vit.py +0 -0
  123. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/midas/utils.py +0 -0
  124. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/model_edge.py +0 -0
  125. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/openpose/__init__.py +0 -0
  126. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/openpose/api.py +0 -0
  127. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/openpose/body.py +0 -0
  128. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/openpose/hand.py +0 -0
  129. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/openpose/model.py +0 -0
  130. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/openpose/util.py +0 -0
  131. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/extra_condition/utils.py +0 -0
  132. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/fusion/__init__.py +0 -0
  133. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/fusion/dual_encoder_fusion.py +0 -0
  134. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/image_degradation/__init__.py +0 -0
  135. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/image_degradation/bsrgan.py +0 -0
  136. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/image_degradation/bsrgan_light.py +0 -0
  137. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/modules/image_degradation/utils_image.py +0 -0
  138. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/ldm/util.py +0 -0
  139. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/PHDiffusion/stable_diffusion.yaml +0 -0
  140. {libcom-0.1.3 → libcom-0.1.4}/libcom/painterly_image_harmonization/source/__init__.py +0 -0
  141. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/__init__.py +0 -0
  142. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/reflection_generation.py +0 -0
  143. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/PostProcessModel.py +0 -0
  144. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/__init__.py +0 -0
  145. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/cldm/__init__.py +0 -0
  146. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/cldm/base_network.py +0 -0
  147. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/cldm/cldm.py +0 -0
  148. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/cldm/ddim_hacked.py +0 -0
  149. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/cldm/hack.py +0 -0
  150. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/cldm/logger.py +0 -0
  151. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/cldm/model.py +0 -0
  152. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/cldm_v15.yaml +0 -0
  153. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/cluster_feature.py +0 -0
  154. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/__init__.py +0 -0
  155. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/models/__init__.py +0 -0
  156. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/models/autoencoder.py +0 -0
  157. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/models/diffusion/__init__.py +0 -0
  158. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/models/diffusion/attention_processor.py +0 -0
  159. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/models/diffusion/ddim.py +0 -0
  160. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/models/diffusion/ddpm.py +0 -0
  161. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/models/diffusion/dpm_solver/__init__.py +0 -0
  162. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/models/diffusion/dpm_solver/dpm_solver.py +0 -0
  163. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/models/diffusion/dpm_solver/sampler.py +0 -0
  164. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/models/diffusion/ip_adapter.py +0 -0
  165. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/models/diffusion/plms.py +0 -0
  166. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/models/diffusion/sampling_util.py +0 -0
  167. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/modules/__init__.py +0 -0
  168. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/modules/attention.py +0 -0
  169. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/modules/diffusionmodules/__init__.py +0 -0
  170. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/modules/diffusionmodules/model.py +0 -0
  171. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/modules/diffusionmodules/openaimodel.py +0 -0
  172. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/modules/diffusionmodules/upscaling.py +0 -0
  173. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/modules/diffusionmodules/util.py +0 -0
  174. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/modules/distributions/__init__.py +0 -0
  175. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/modules/distributions/distributions.py +0 -0
  176. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/modules/ema.py +0 -0
  177. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/modules/encoders/__init__.py +0 -0
  178. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/modules/encoders/modules.py +0 -0
  179. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/modules/image_degradation/__init__.py +0 -0
  180. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/modules/image_degradation/bsrgan.py +0 -0
  181. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/modules/image_degradation/bsrgan_light.py +0 -0
  182. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/modules/image_degradation/utils_image.py +0 -0
  183. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/ldm/util.py +0 -0
  184. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/local_clip.py +0 -0
  185. {libcom-0.1.3 → libcom-0.1.4}/libcom/reflection_generation/source/tool_add_control.py +0 -0
  186. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/__init__.py +0 -0
  187. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/PostProcessModel.py +0 -0
  188. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/__init__.py +0 -0
  189. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/attention_processor.py +0 -0
  190. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/cldm/__init__.py +0 -0
  191. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/cldm/base_network.py +0 -0
  192. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/cldm/cldm.py +0 -0
  193. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/cldm/model.py +0 -0
  194. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/__init__.py +0 -0
  195. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/models/__init__.py +0 -0
  196. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/models/autoencoder.py +0 -0
  197. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/models/diffusion/__init__.py +0 -0
  198. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/models/diffusion/attention_processor.py +0 -0
  199. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/models/diffusion/ddim.py +0 -0
  200. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/models/diffusion/ddpm.py +0 -0
  201. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/models/diffusion/dpm_solver/__init__.py +0 -0
  202. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/models/diffusion/dpm_solver/dpm_solver.py +0 -0
  203. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/models/diffusion/dpm_solver/sampler.py +0 -0
  204. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/models/diffusion/ip_adapter.py +0 -0
  205. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/models/diffusion/plms.py +0 -0
  206. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/models/diffusion/sampling_util.py +0 -0
  207. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/__init__.py +0 -0
  208. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/attention.py +0 -0
  209. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/diffusionmodules/__init__.py +0 -0
  210. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/diffusionmodules/model.py +0 -0
  211. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/diffusionmodules/openaimodel.py +0 -0
  212. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/diffusionmodules/upscaling.py +0 -0
  213. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/diffusionmodules/util.py +0 -0
  214. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/distributions/__init__.py +0 -0
  215. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/distributions/distributions.py +0 -0
  216. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/ema.py +0 -0
  217. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/encoders/__init__.py +0 -0
  218. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/encoders/modules.py +0 -0
  219. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/image_degradation/__init__.py +0 -0
  220. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/image_degradation/bsrgan.py +0 -0
  221. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/image_degradation/bsrgan_light.py +0 -0
  222. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/image_degradation/utils_image.py +0 -0
  223. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/midas/__init__.py +0 -0
  224. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/midas/api.py +0 -0
  225. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/midas/midas/__init__.py +0 -0
  226. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/midas/midas/base_model.py +0 -0
  227. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/midas/midas/blocks.py +0 -0
  228. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/midas/midas/dpt_depth.py +0 -0
  229. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/midas/midas/midas_net.py +0 -0
  230. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/midas/midas/midas_net_custom.py +0 -0
  231. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/midas/midas/transforms.py +0 -0
  232. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/midas/midas/vit.py +0 -0
  233. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/modules/midas/utils.py +0 -0
  234. {libcom-0.1.3 → libcom-0.1.4}/libcom/shadow_generation/source/ldm/util.py +0 -0
  235. {libcom-0.1.3 → libcom-0.1.4}/libcom/utils/__init__.py +0 -0
  236. {libcom-0.1.3 → libcom-0.1.4}/libcom/utils/environment.py +0 -0
  237. {libcom-0.1.3 → libcom-0.1.4}/libcom/utils/model_download.py +0 -0
  238. {libcom-0.1.3 → libcom-0.1.4}/libcom/utils/process_image.py +0 -0
  239. {libcom-0.1.3 → libcom-0.1.4}/libcom.egg-info/dependency_links.txt +0 -0
  240. {libcom-0.1.3 → libcom-0.1.4}/libcom.egg-info/requires.txt +0 -0
  241. {libcom-0.1.3 → libcom-0.1.4}/libcom.egg-info/top_level.txt +0 -0
  242. {libcom-0.1.3 → libcom-0.1.4}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: libcom
3
- Version: 0.1.3
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
  [![PyPI](https://img.shields.io/pypi/v/libcom)](https://pypi.org/project/libcom)
28
60
  [![Downloads](https://static.pepy.tech/badge/libcom)](https://pepy.tech/project/libcom)
29
61
  [![Hits](https://hits.sh/github.com/bcmi/libcom.svg?label=views)](https://hits.sh/github.com/bcmi/libcom/)
30
- [![Static Badge](https://img.shields.io/badge/Online_Demo-Green)](https://bcmi.sjtu.edu.cn/home/niuli/demo_image_composition/)
62
+ [![Static Badge](https://img.shields.io/badge/Online_Workbench-yellow)](http://libcom.ustcnewly.com/)
31
63
  [![Static Badge](https://img.shields.io/badge/Dataset&Code_Resources-green)](https://github.com/bcmi/Awesome-Object-Insertion)
32
64
  [![Static Badge](https://img.shields.io/badge/survey-arxiv%3A2106.14490-red)](https://arxiv.org/pdf/2106.14490.pdf)
33
65
  [![Static Badge](https://img.shields.io/github/stars/bcmi/libcom.svg?style=social)](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
- ### Main Functions
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
  [![PyPI](https://img.shields.io/pypi/v/libcom)](https://pypi.org/project/libcom)
12
12
  [![Downloads](https://static.pepy.tech/badge/libcom)](https://pepy.tech/project/libcom)
13
13
  [![Hits](https://hits.sh/github.com/bcmi/libcom.svg?label=views)](https://hits.sh/github.com/bcmi/libcom/)
14
- [![Static Badge](https://img.shields.io/badge/Online_Demo-Green)](https://bcmi.sjtu.edu.cn/home/niuli/demo_image_composition/)
14
+ [![Static Badge](https://img.shields.io/badge/Online_Workbench-yellow)](http://libcom.ustcnewly.com/)
15
15
  [![Static Badge](https://img.shields.io/badge/Dataset&Code_Resources-green)](https://github.com/bcmi/Awesome-Object-Insertion)
16
16
  [![Static Badge](https://img.shields.io/badge/survey-arxiv%3A2106.14490-red)](https://arxiv.org/pdf/2106.14490.pdf)
17
17
  [![Static Badge](https://img.shields.io/github/stars/bcmi/libcom.svg?style=social)](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
- ### Main Functions
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 = 256, 256
574
- decoded_256 = cv2.resize(decoded, (width, height))
575
- shadowfree_img_256 = cv2.resize(shadowfree_img, (width, height))
576
- object_mask_256 = cv2.resize(object_mask, (width, height))
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 = shadowfree_img_256.astype(np.float32)/127.5 - 1.0
579
- obj_mask = object_mask_256[:,:,np.newaxis].astype(np.float32)/255.0
580
- image_scaled = decoded_256.astype(np.float32)/127.5 - 1.0
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
1
+ Metadata-Version: 2.4
2
2
  Name: libcom
3
- Version: 0.1.3
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
  [![PyPI](https://img.shields.io/pypi/v/libcom)](https://pypi.org/project/libcom)
28
60
  [![Downloads](https://static.pepy.tech/badge/libcom)](https://pepy.tech/project/libcom)
29
61
  [![Hits](https://hits.sh/github.com/bcmi/libcom.svg?label=views)](https://hits.sh/github.com/bcmi/libcom/)
30
- [![Static Badge](https://img.shields.io/badge/Online_Demo-Green)](https://bcmi.sjtu.edu.cn/home/niuli/demo_image_composition/)
62
+ [![Static Badge](https://img.shields.io/badge/Online_Workbench-yellow)](http://libcom.ustcnewly.com/)
31
63
  [![Static Badge](https://img.shields.io/badge/Dataset&Code_Resources-green)](https://github.com/bcmi/Awesome-Object-Insertion)
32
64
  [![Static Badge](https://img.shields.io/badge/survey-arxiv%3A2106.14490-red)](https://arxiv.org/pdf/2106.14490.pdf)
33
65
  [![Static Badge](https://img.shields.io/github/stars/bcmi/libcom.svg?style=social)](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
- ### Main Functions
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.3',
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')