cv-suite 0.0.1__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 (314) hide show
  1. cv_suite-0.0.1/LICENSE +21 -0
  2. cv_suite-0.0.1/PKG-INFO +115 -0
  3. cv_suite-0.0.1/README.md +80 -0
  4. cv_suite-0.0.1/pyproject.toml +61 -0
  5. cv_suite-0.0.1/setup.cfg +4 -0
  6. cv_suite-0.0.1/src/cv_suite.egg-info/PKG-INFO +115 -0
  7. cv_suite-0.0.1/src/cv_suite.egg-info/SOURCES.txt +312 -0
  8. cv_suite-0.0.1/src/cv_suite.egg-info/dependency_links.txt +1 -0
  9. cv_suite-0.0.1/src/cv_suite.egg-info/entry_points.txt +2 -0
  10. cv_suite-0.0.1/src/cv_suite.egg-info/requires.txt +12 -0
  11. cv_suite-0.0.1/src/cv_suite.egg-info/top_level.txt +1 -0
  12. cv_suite-0.0.1/src/cvsuite/__init__.py +1 -0
  13. cv_suite-0.0.1/src/cvsuite/branch_cli.py +158 -0
  14. cv_suite-0.0.1/src/cvsuite/classify/__init__.py +1 -0
  15. cv_suite-0.0.1/src/cvsuite/classify/cli.py +119 -0
  16. cv_suite-0.0.1/src/cvsuite/classify/core/__init__.py +1 -0
  17. cv_suite-0.0.1/src/cvsuite/classify/core/io.py +637 -0
  18. cv_suite-0.0.1/src/cvsuite/classify/output/__init__.py +1 -0
  19. cv_suite-0.0.1/src/cvsuite/classify/output/commands/__init__.py +1 -0
  20. cv_suite-0.0.1/src/cvsuite/classify/output/commands/to_class_dir.py +108 -0
  21. cv_suite-0.0.1/src/cvsuite/classify/tests/__init__.py +1 -0
  22. cv_suite-0.0.1/src/cvsuite/classify/tests/test_output_stats.py +88 -0
  23. cv_suite-0.0.1/src/cvsuite/classify/tests/test_run_command.py +928 -0
  24. cv_suite-0.0.1/src/cvsuite/classify/transform/__init__.py +1 -0
  25. cv_suite-0.0.1/src/cvsuite/classify/transform/commands/__init__.py +1 -0
  26. cv_suite-0.0.1/src/cvsuite/classify/transform/commands/infer.py +15 -0
  27. cv_suite-0.0.1/src/cvsuite/classify/transform/commands/sample.py +15 -0
  28. cv_suite-0.0.1/src/cvsuite/classify/transform/core/__init__.py +1 -0
  29. cv_suite-0.0.1/src/cvsuite/classify/transform/core/infer.py +80 -0
  30. cv_suite-0.0.1/src/cvsuite/classify/transform/core/sample.py +199 -0
  31. cv_suite-0.0.1/src/cvsuite/cli.py +61 -0
  32. cv_suite-0.0.1/src/cvsuite/common/__init__.py +1 -0
  33. cv_suite-0.0.1/src/cvsuite/common/cache/__init__.py +1 -0
  34. cv_suite-0.0.1/src/cvsuite/common/cache/commands/__init__.py +1 -0
  35. cv_suite-0.0.1/src/cvsuite/common/cache/commands/list.py +121 -0
  36. cv_suite-0.0.1/src/cvsuite/common/cache/commands/path.py +30 -0
  37. cv_suite-0.0.1/src/cvsuite/common/cache/commands/purge.py +87 -0
  38. cv_suite-0.0.1/src/cvsuite/common/cache/core.py +255 -0
  39. cv_suite-0.0.1/src/cvsuite/common/cli.py +12 -0
  40. cv_suite-0.0.1/src/cvsuite/common/core/__init__.py +58 -0
  41. cv_suite-0.0.1/src/cvsuite/common/core/enums.py +43 -0
  42. cv_suite-0.0.1/src/cvsuite/common/core/records.py +144 -0
  43. cv_suite-0.0.1/src/cvsuite/common/core/types.py +235 -0
  44. cv_suite-0.0.1/src/cvsuite/common/core/utils.py +144 -0
  45. cv_suite-0.0.1/src/cvsuite/common/fm/__init__.py +5 -0
  46. cv_suite-0.0.1/src/cvsuite/common/fm/core/__init__.py +34 -0
  47. cv_suite-0.0.1/src/cvsuite/common/fm/core/export.py +11 -0
  48. cv_suite-0.0.1/src/cvsuite/common/fm/core/paths.py +256 -0
  49. cv_suite-0.0.1/src/cvsuite/common/fm/core/prompt_utils.py +89 -0
  50. cv_suite-0.0.1/src/cvsuite/common/fm/core/runner.py +575 -0
  51. cv_suite-0.0.1/src/cvsuite/common/fm/core/sam3_patch.py +88 -0
  52. cv_suite-0.0.1/src/cvsuite/common/fm/core/utils.py +898 -0
  53. cv_suite-0.0.1/src/cvsuite/common/fm/providers/__init__.py +41 -0
  54. cv_suite-0.0.1/src/cvsuite/common/fm/providers/_template.py +79 -0
  55. cv_suite-0.0.1/src/cvsuite/common/fm/providers/api/__init__.py +1 -0
  56. cv_suite-0.0.1/src/cvsuite/common/fm/providers/api/openrouter_common.py +103 -0
  57. cv_suite-0.0.1/src/cvsuite/common/fm/providers/api/openrouter_gen.py +230 -0
  58. cv_suite-0.0.1/src/cvsuite/common/fm/providers/api/openrouter_vlm.py +108 -0
  59. cv_suite-0.0.1/src/cvsuite/common/fm/providers/base.py +857 -0
  60. cv_suite-0.0.1/src/cvsuite/common/fm/providers/bases/__init__.py +58 -0
  61. cv_suite-0.0.1/src/cvsuite/common/fm/providers/bases/classification.py +92 -0
  62. cv_suite-0.0.1/src/cvsuite/common/fm/providers/bases/create.py +196 -0
  63. cv_suite-0.0.1/src/cvsuite/common/fm/providers/bases/diffusion.py +594 -0
  64. cv_suite-0.0.1/src/cvsuite/common/fm/providers/bases/edit.py +201 -0
  65. cv_suite-0.0.1/src/cvsuite/common/fm/providers/bases/edit_custom.py +566 -0
  66. cv_suite-0.0.1/src/cvsuite/common/fm/providers/bases/gen.py +350 -0
  67. cv_suite-0.0.1/src/cvsuite/common/fm/providers/bases/ground.py +141 -0
  68. cv_suite-0.0.1/src/cvsuite/common/fm/providers/bases/ocr.py +101 -0
  69. cv_suite-0.0.1/src/cvsuite/common/fm/providers/bases/qwen_image.py +131 -0
  70. cv_suite-0.0.1/src/cvsuite/common/fm/providers/bases/record_image.py +100 -0
  71. cv_suite-0.0.1/src/cvsuite/common/fm/providers/bases/vlm.py +504 -0
  72. cv_suite-0.0.1/src/cvsuite/common/fm/providers/classify/__init__.py +1 -0
  73. cv_suite-0.0.1/src/cvsuite/common/fm/providers/classify/clip.py +264 -0
  74. cv_suite-0.0.1/src/cvsuite/common/fm/providers/classify/deep_orientation.py +259 -0
  75. cv_suite-0.0.1/src/cvsuite/common/fm/providers/classify/siglip2.py +261 -0
  76. cv_suite-0.0.1/src/cvsuite/common/fm/providers/create/__init__.py +1 -0
  77. cv_suite-0.0.1/src/cvsuite/common/fm/providers/create/flux.py +54 -0
  78. cv_suite-0.0.1/src/cvsuite/common/fm/providers/create/qwen_image.py +61 -0
  79. cv_suite-0.0.1/src/cvsuite/common/fm/providers/create/sana.py +49 -0
  80. cv_suite-0.0.1/src/cvsuite/common/fm/providers/create/stable_diffusion.py +71 -0
  81. cv_suite-0.0.1/src/cvsuite/common/fm/providers/edit/__init__.py +1 -0
  82. cv_suite-0.0.1/src/cvsuite/common/fm/providers/edit/dim_edit.py +1205 -0
  83. cv_suite-0.0.1/src/cvsuite/common/fm/providers/edit/flux2_klein.py +50 -0
  84. cv_suite-0.0.1/src/cvsuite/common/fm/providers/edit/instruct_pix2pix.py +68 -0
  85. cv_suite-0.0.1/src/cvsuite/common/fm/providers/edit/ovis_u1_3b.py +44 -0
  86. cv_suite-0.0.1/src/cvsuite/common/fm/providers/edit/qwen_image_edit.py +60 -0
  87. cv_suite-0.0.1/src/cvsuite/common/fm/providers/edit/step1x_edit.py +48 -0
  88. cv_suite-0.0.1/src/cvsuite/common/fm/providers/ground/__init__.py +1 -0
  89. cv_suite-0.0.1/src/cvsuite/common/fm/providers/ground/gdino.py +224 -0
  90. cv_suite-0.0.1/src/cvsuite/common/fm/providers/ground/gsam.py +408 -0
  91. cv_suite-0.0.1/src/cvsuite/common/fm/providers/ground/llmdet.py +288 -0
  92. cv_suite-0.0.1/src/cvsuite/common/fm/providers/ground/locate_anything.py +424 -0
  93. cv_suite-0.0.1/src/cvsuite/common/fm/providers/ground/rex_omni.py +297 -0
  94. cv_suite-0.0.1/src/cvsuite/common/fm/providers/ground/sam3.py +468 -0
  95. cv_suite-0.0.1/src/cvsuite/common/fm/providers/ground/yolo_e.py +358 -0
  96. cv_suite-0.0.1/src/cvsuite/common/fm/providers/ocr/__init__.py +1 -0
  97. cv_suite-0.0.1/src/cvsuite/common/fm/providers/ocr/paddleocr.py +235 -0
  98. cv_suite-0.0.1/src/cvsuite/common/fm/providers/registry.py +321 -0
  99. cv_suite-0.0.1/src/cvsuite/common/fm/providers/setup_venv/blip.sh +33 -0
  100. cv_suite-0.0.1/src/cvsuite/common/fm/providers/setup_venv/clip.sh +25 -0
  101. cv_suite-0.0.1/src/cvsuite/common/fm/providers/setup_venv/cogvlm.sh +33 -0
  102. cv_suite-0.0.1/src/cvsuite/common/fm/providers/setup_venv/deep_orientation.sh +23 -0
  103. cv_suite-0.0.1/src/cvsuite/common/fm/providers/setup_venv/dim_edit.sh +72 -0
  104. cv_suite-0.0.1/src/cvsuite/common/fm/providers/setup_venv/flux.sh +51 -0
  105. cv_suite-0.0.1/src/cvsuite/common/fm/providers/setup_venv/flux2_klein.sh +51 -0
  106. cv_suite-0.0.1/src/cvsuite/common/fm/providers/setup_venv/gdino.sh +24 -0
  107. cv_suite-0.0.1/src/cvsuite/common/fm/providers/setup_venv/gsam.sh +48 -0
  108. cv_suite-0.0.1/src/cvsuite/common/fm/providers/setup_venv/instruct_pix2pix.sh +51 -0
  109. cv_suite-0.0.1/src/cvsuite/common/fm/providers/setup_venv/internvl.sh +33 -0
  110. cv_suite-0.0.1/src/cvsuite/common/fm/providers/setup_venv/llava.sh +33 -0
  111. cv_suite-0.0.1/src/cvsuite/common/fm/providers/setup_venv/llmdet.sh +40 -0
  112. cv_suite-0.0.1/src/cvsuite/common/fm/providers/setup_venv/locate_anything.sh +47 -0
  113. cv_suite-0.0.1/src/cvsuite/common/fm/providers/setup_venv/minicpm_v.sh +34 -0
  114. cv_suite-0.0.1/src/cvsuite/common/fm/providers/setup_venv/ovis_u1_3b.sh +49 -0
  115. cv_suite-0.0.1/src/cvsuite/common/fm/providers/setup_venv/paddleocr.sh +57 -0
  116. cv_suite-0.0.1/src/cvsuite/common/fm/providers/setup_venv/paligemma.sh +33 -0
  117. cv_suite-0.0.1/src/cvsuite/common/fm/providers/setup_venv/qwen.sh +33 -0
  118. cv_suite-0.0.1/src/cvsuite/common/fm/providers/setup_venv/qwen_image.sh +51 -0
  119. cv_suite-0.0.1/src/cvsuite/common/fm/providers/setup_venv/qwen_image_edit.sh +51 -0
  120. cv_suite-0.0.1/src/cvsuite/common/fm/providers/setup_venv/rex_omni.sh +27 -0
  121. cv_suite-0.0.1/src/cvsuite/common/fm/providers/setup_venv/sam3.sh +63 -0
  122. cv_suite-0.0.1/src/cvsuite/common/fm/providers/setup_venv/sana.sh +48 -0
  123. cv_suite-0.0.1/src/cvsuite/common/fm/providers/setup_venv/siglip2.sh +25 -0
  124. cv_suite-0.0.1/src/cvsuite/common/fm/providers/setup_venv/stable_diffusion.sh +51 -0
  125. cv_suite-0.0.1/src/cvsuite/common/fm/providers/setup_venv/step1x_edit.sh +48 -0
  126. cv_suite-0.0.1/src/cvsuite/common/fm/providers/setup_venv/yolo_e.sh +24 -0
  127. cv_suite-0.0.1/src/cvsuite/common/fm/providers/vlm/__init__.py +1 -0
  128. cv_suite-0.0.1/src/cvsuite/common/fm/providers/vlm/blip.py +154 -0
  129. cv_suite-0.0.1/src/cvsuite/common/fm/providers/vlm/cogvlm.py +189 -0
  130. cv_suite-0.0.1/src/cvsuite/common/fm/providers/vlm/internvl.py +839 -0
  131. cv_suite-0.0.1/src/cvsuite/common/fm/providers/vlm/llava.py +170 -0
  132. cv_suite-0.0.1/src/cvsuite/common/fm/providers/vlm/minicpm_v.py +319 -0
  133. cv_suite-0.0.1/src/cvsuite/common/fm/providers/vlm/paligemma.py +173 -0
  134. cv_suite-0.0.1/src/cvsuite/common/fm/providers/vlm/qwen.py +203 -0
  135. cv_suite-0.0.1/src/cvsuite/common/io/__init__.py +27 -0
  136. cv_suite-0.0.1/src/cvsuite/common/io/class_dir.py +535 -0
  137. cv_suite-0.0.1/src/cvsuite/common/io/coco.py +471 -0
  138. cv_suite-0.0.1/src/cvsuite/common/io/common.py +385 -0
  139. cv_suite-0.0.1/src/cvsuite/common/io/flat.py +60 -0
  140. cv_suite-0.0.1/src/cvsuite/common/io/flat_vlm_json.py +230 -0
  141. cv_suite-0.0.1/src/cvsuite/common/io/labelme.py +490 -0
  142. cv_suite-0.0.1/src/cvsuite/common/io/router.py +166 -0
  143. cv_suite-0.0.1/src/cvsuite/common/io/semseg_mask.py +110 -0
  144. cv_suite-0.0.1/src/cvsuite/common/io/shards_vlm.py +250 -0
  145. cv_suite-0.0.1/src/cvsuite/common/io/vqa_style.py +467 -0
  146. cv_suite-0.0.1/src/cvsuite/common/io/yolo.py +667 -0
  147. cv_suite-0.0.1/src/cvsuite/common/stats/__init__.py +20 -0
  148. cv_suite-0.0.1/src/cvsuite/common/stats/attach.py +11 -0
  149. cv_suite-0.0.1/src/cvsuite/common/stats/builders.py +213 -0
  150. cv_suite-0.0.1/src/cvsuite/common/stats/utils.py +168 -0
  151. cv_suite-0.0.1/src/cvsuite/common/tests/__init__.py +1 -0
  152. cv_suite-0.0.1/src/cvsuite/common/tests/test_base_model.py +240 -0
  153. cv_suite-0.0.1/src/cvsuite/common/tests/test_cache_commands.py +164 -0
  154. cv_suite-0.0.1/src/cvsuite/common/tests/test_contracts.py +37 -0
  155. cv_suite-0.0.1/src/cvsuite/common/tests/test_device_utils.py +475 -0
  156. cv_suite-0.0.1/src/cvsuite/common/tests/test_fm_hub_share.py +223 -0
  157. cv_suite-0.0.1/src/cvsuite/common/tests/test_fm_model_bases.py +450 -0
  158. cv_suite-0.0.1/src/cvsuite/common/tests/test_fm_paths.py +176 -0
  159. cv_suite-0.0.1/src/cvsuite/common/tests/test_fm_prompt_utils.py +49 -0
  160. cv_suite-0.0.1/src/cvsuite/common/tests/test_gen_model.py +152 -0
  161. cv_suite-0.0.1/src/cvsuite/common/tests/test_gen_wrappers.py +799 -0
  162. cv_suite-0.0.1/src/cvsuite/common/tests/test_grounding_wrappers.py +1331 -0
  163. cv_suite-0.0.1/src/cvsuite/common/tests/test_internvl_model.py +904 -0
  164. cv_suite-0.0.1/src/cvsuite/common/tests/test_minicpm_v_model.py +350 -0
  165. cv_suite-0.0.1/src/cvsuite/common/tests/test_model_specs.py +43 -0
  166. cv_suite-0.0.1/src/cvsuite/common/tests/test_openrouter_providers.py +134 -0
  167. cv_suite-0.0.1/src/cvsuite/common/tests/test_paddleocr_model.py +81 -0
  168. cv_suite-0.0.1/src/cvsuite/common/tests/test_qwen_model.py +404 -0
  169. cv_suite-0.0.1/src/cvsuite/common/tests/test_runner.py +851 -0
  170. cv_suite-0.0.1/src/cvsuite/common/tests/test_siglip2_model.py +19 -0
  171. cv_suite-0.0.1/src/cvsuite/common/tests/test_stats.py +163 -0
  172. cv_suite-0.0.1/src/cvsuite/gen/__init__.py +1 -0
  173. cv_suite-0.0.1/src/cvsuite/gen/cli.py +111 -0
  174. cv_suite-0.0.1/src/cvsuite/gen/core/__init__.py +22 -0
  175. cv_suite-0.0.1/src/cvsuite/gen/core/batch.py +275 -0
  176. cv_suite-0.0.1/src/cvsuite/gen/core/router.py +16 -0
  177. cv_suite-0.0.1/src/cvsuite/gen/output/__init__.py +1 -0
  178. cv_suite-0.0.1/src/cvsuite/gen/output/commands/__init__.py +1 -0
  179. cv_suite-0.0.1/src/cvsuite/gen/output/commands/to_dst.py +183 -0
  180. cv_suite-0.0.1/src/cvsuite/gen/tests/__init__.py +1 -0
  181. cv_suite-0.0.1/src/cvsuite/gen/tests/test_commands.py +1024 -0
  182. cv_suite-0.0.1/src/cvsuite/gen/tests/test_output_stats.py +45 -0
  183. cv_suite-0.0.1/src/cvsuite/gen/transform/__init__.py +1 -0
  184. cv_suite-0.0.1/src/cvsuite/gen/transform/commands/__init__.py +1 -0
  185. cv_suite-0.0.1/src/cvsuite/gen/transform/commands/create.py +47 -0
  186. cv_suite-0.0.1/src/cvsuite/gen/transform/commands/edit.py +58 -0
  187. cv_suite-0.0.1/src/cvsuite/gen/transform/core/__init__.py +3 -0
  188. cv_suite-0.0.1/src/cvsuite/gen/transform/core/runtime.py +199 -0
  189. cv_suite-0.0.1/src/cvsuite/label/__init__.py +1 -0
  190. cv_suite-0.0.1/src/cvsuite/label/cli.py +183 -0
  191. cv_suite-0.0.1/src/cvsuite/label/core/annotate/__init__.py +16 -0
  192. cv_suite-0.0.1/src/cvsuite/label/core/annotate/letterbox.py +39 -0
  193. cv_suite-0.0.1/src/cvsuite/label/core/annotate/overlay.py +316 -0
  194. cv_suite-0.0.1/src/cvsuite/label/core/annotate/preview.py +134 -0
  195. cv_suite-0.0.1/src/cvsuite/label/core/annotate/utils.py +17 -0
  196. cv_suite-0.0.1/src/cvsuite/label/core/audit.py +86 -0
  197. cv_suite-0.0.1/src/cvsuite/label/core/crops.py +117 -0
  198. cv_suite-0.0.1/src/cvsuite/label/core/router.py +260 -0
  199. cv_suite-0.0.1/src/cvsuite/label/core/schema.py +136 -0
  200. cv_suite-0.0.1/src/cvsuite/label/output/__init__.py +1 -0
  201. cv_suite-0.0.1/src/cvsuite/label/output/commands/__init__.py +1 -0
  202. cv_suite-0.0.1/src/cvsuite/label/output/commands/audit.py +45 -0
  203. cv_suite-0.0.1/src/cvsuite/label/output/commands/inspect.py +54 -0
  204. cv_suite-0.0.1/src/cvsuite/label/output/commands/to_coco.py +71 -0
  205. cv_suite-0.0.1/src/cvsuite/label/output/commands/to_labelme.py +49 -0
  206. cv_suite-0.0.1/src/cvsuite/label/output/commands/to_results.py +99 -0
  207. cv_suite-0.0.1/src/cvsuite/label/output/commands/to_yolo.py +105 -0
  208. cv_suite-0.0.1/src/cvsuite/label/output/common.py +68 -0
  209. cv_suite-0.0.1/src/cvsuite/label/tests/test_cli.py +298 -0
  210. cv_suite-0.0.1/src/cvsuite/label/tests/test_filter_transform.py +217 -0
  211. cv_suite-0.0.1/src/cvsuite/label/tests/test_full_manual.py +226 -0
  212. cv_suite-0.0.1/src/cvsuite/label/tests/test_ground_transform.py +756 -0
  213. cv_suite-0.0.1/src/cvsuite/label/tests/test_label_commands.py +1037 -0
  214. cv_suite-0.0.1/src/cvsuite/label/tests/test_multisrc.py +356 -0
  215. cv_suite-0.0.1/src/cvsuite/label/tests/test_output_stats.py +59 -0
  216. cv_suite-0.0.1/src/cvsuite/label/tests/test_preview.py +58 -0
  217. cv_suite-0.0.1/src/cvsuite/label/tests/test_sample_transform.py +87 -0
  218. cv_suite-0.0.1/src/cvsuite/label/tests/test_to_coco.py +70 -0
  219. cv_suite-0.0.1/src/cvsuite/label/tests/test_yolo_layouts.py +34 -0
  220. cv_suite-0.0.1/src/cvsuite/label/transform/filter/__init__.py +2 -0
  221. cv_suite-0.0.1/src/cvsuite/label/transform/filter/commands/__init__.py +2 -0
  222. cv_suite-0.0.1/src/cvsuite/label/transform/filter/commands/apply.py +118 -0
  223. cv_suite-0.0.1/src/cvsuite/label/transform/filter/commands/logistic_opt.py +191 -0
  224. cv_suite-0.0.1/src/cvsuite/label/transform/filter/commands/run.py +30 -0
  225. cv_suite-0.0.1/src/cvsuite/label/transform/filter/commands/threshold.py +40 -0
  226. cv_suite-0.0.1/src/cvsuite/label/transform/filter/core/__init__.py +42 -0
  227. cv_suite-0.0.1/src/cvsuite/label/transform/filter/core/config.py +142 -0
  228. cv_suite-0.0.1/src/cvsuite/label/transform/filter/core/features.py +207 -0
  229. cv_suite-0.0.1/src/cvsuite/label/transform/filter/core/filters.py +376 -0
  230. cv_suite-0.0.1/src/cvsuite/label/transform/filter/core/optimizer.py +480 -0
  231. cv_suite-0.0.1/src/cvsuite/label/transform/filter/core/records.py +220 -0
  232. cv_suite-0.0.1/src/cvsuite/label/transform/filter/core/types.py +86 -0
  233. cv_suite-0.0.1/src/cvsuite/label/transform/filter/core/utils.py +107 -0
  234. cv_suite-0.0.1/src/cvsuite/label/transform/filter/core/utils_optimizer.py +777 -0
  235. cv_suite-0.0.1/src/cvsuite/label/transform/ground/__init__.py +1 -0
  236. cv_suite-0.0.1/src/cvsuite/label/transform/ground/commands/__init__.py +1 -0
  237. cv_suite-0.0.1/src/cvsuite/label/transform/ground/commands/run.py +137 -0
  238. cv_suite-0.0.1/src/cvsuite/label/transform/ground/core.py +543 -0
  239. cv_suite-0.0.1/src/cvsuite/label/transform/ocr/__init__.py +1 -0
  240. cv_suite-0.0.1/src/cvsuite/label/transform/ocr/commands/__init__.py +1 -0
  241. cv_suite-0.0.1/src/cvsuite/label/transform/ocr/commands/run.py +45 -0
  242. cv_suite-0.0.1/src/cvsuite/label/transform/ops/__init__.py +1 -0
  243. cv_suite-0.0.1/src/cvsuite/label/transform/ops/commands/__init__.py +1 -0
  244. cv_suite-0.0.1/src/cvsuite/label/transform/ops/commands/crop_dets.py +46 -0
  245. cv_suite-0.0.1/src/cvsuite/label/transform/ops/commands/inverse_crop_dets.py +20 -0
  246. cv_suite-0.0.1/src/cvsuite/label/transform/ops/commands/make_negatives.py +109 -0
  247. cv_suite-0.0.1/src/cvsuite/label/transform/ops/commands/rebox.py +51 -0
  248. cv_suite-0.0.1/src/cvsuite/label/transform/ops/commands/run.py +32 -0
  249. cv_suite-0.0.1/src/cvsuite/label/transform/ops/core/crop_dets.py +698 -0
  250. cv_suite-0.0.1/src/cvsuite/label/transform/ops/core/inverse_crop_dets.py +448 -0
  251. cv_suite-0.0.1/src/cvsuite/label/transform/ops/core/negatives.py +53 -0
  252. cv_suite-0.0.1/src/cvsuite/label/transform/ops/core/rebox.py +29 -0
  253. cv_suite-0.0.1/src/cvsuite/label/transform/sample/__init__.py +1 -0
  254. cv_suite-0.0.1/src/cvsuite/label/transform/sample/commands/__init__.py +1 -0
  255. cv_suite-0.0.1/src/cvsuite/label/transform/sample/commands/run.py +71 -0
  256. cv_suite-0.0.1/src/cvsuite/prep/__init__.py +1 -0
  257. cv_suite-0.0.1/src/cvsuite/prep/cli.py +42 -0
  258. cv_suite-0.0.1/src/cvsuite/prep/commands/arrange.py +144 -0
  259. cv_suite-0.0.1/src/cvsuite/prep/commands/orient.py +91 -0
  260. cv_suite-0.0.1/src/cvsuite/prep/commands/process.py +171 -0
  261. cv_suite-0.0.1/src/cvsuite/prep/commands/sample.py +84 -0
  262. cv_suite-0.0.1/src/cvsuite/prep/core/actions.py +62 -0
  263. cv_suite-0.0.1/src/cvsuite/prep/core/arrange/core.py +39 -0
  264. cv_suite-0.0.1/src/cvsuite/prep/core/arrange/ops.py +260 -0
  265. cv_suite-0.0.1/src/cvsuite/prep/core/config.py +81 -0
  266. cv_suite-0.0.1/src/cvsuite/prep/core/fs.py +119 -0
  267. cv_suite-0.0.1/src/cvsuite/prep/core/logging.py +17 -0
  268. cv_suite-0.0.1/src/cvsuite/prep/core/manifest.py +46 -0
  269. cv_suite-0.0.1/src/cvsuite/prep/core/orient/clip.py +62 -0
  270. cv_suite-0.0.1/src/cvsuite/prep/core/orient/core.py +328 -0
  271. cv_suite-0.0.1/src/cvsuite/prep/core/orient/deep_orientation.py +102 -0
  272. cv_suite-0.0.1/src/cvsuite/prep/core/process/core.py +116 -0
  273. cv_suite-0.0.1/src/cvsuite/prep/core/process/ops.py +168 -0
  274. cv_suite-0.0.1/src/cvsuite/prep/core/process/vsample.py +132 -0
  275. cv_suite-0.0.1/src/cvsuite/prep/core/sample/core.py +154 -0
  276. cv_suite-0.0.1/src/cvsuite/prep/tests/__init__.py +1 -0
  277. cv_suite-0.0.1/src/cvsuite/prep/tests/manual_flow.py +136 -0
  278. cv_suite-0.0.1/src/cvsuite/prep/tests/test_fs.py +50 -0
  279. cv_suite-0.0.1/src/cvsuite/prep/tests/test_incremental_arrange_process.py +237 -0
  280. cv_suite-0.0.1/src/cvsuite/prep/tests/test_orient_command.py +162 -0
  281. cv_suite-0.0.1/src/cvsuite/prep/tests/test_sample_command.py +113 -0
  282. cv_suite-0.0.1/src/cvsuite/tests/__init__.py +1 -0
  283. cv_suite-0.0.1/src/cvsuite/tests/test_cli_structure.py +258 -0
  284. cv_suite-0.0.1/src/cvsuite/vlm/__init__.py +1 -0
  285. cv_suite-0.0.1/src/cvsuite/vlm/cli.py +160 -0
  286. cv_suite-0.0.1/src/cvsuite/vlm/core/__init__.py +5 -0
  287. cv_suite-0.0.1/src/cvsuite/vlm/core/adapters/__init__.py +8 -0
  288. cv_suite-0.0.1/src/cvsuite/vlm/core/adapters/flat_json_io.py +153 -0
  289. cv_suite-0.0.1/src/cvsuite/vlm/core/adapters/images_io.py +38 -0
  290. cv_suite-0.0.1/src/cvsuite/vlm/core/adapters/shards_io.py +220 -0
  291. cv_suite-0.0.1/src/cvsuite/vlm/core/adapters/vqa_style_io.py +460 -0
  292. cv_suite-0.0.1/src/cvsuite/vlm/core/inspect.py +133 -0
  293. cv_suite-0.0.1/src/cvsuite/vlm/core/io.py +332 -0
  294. cv_suite-0.0.1/src/cvsuite/vlm/core/router.py +61 -0
  295. cv_suite-0.0.1/src/cvsuite/vlm/output/__init__.py +1 -0
  296. cv_suite-0.0.1/src/cvsuite/vlm/output/commands/__init__.py +1 -0
  297. cv_suite-0.0.1/src/cvsuite/vlm/output/commands/inspect.py +21 -0
  298. cv_suite-0.0.1/src/cvsuite/vlm/output/commands/to_json.py +55 -0
  299. cv_suite-0.0.1/src/cvsuite/vlm/output/commands/to_shards.py +66 -0
  300. cv_suite-0.0.1/src/cvsuite/vlm/output/commands/to_vqa_style.py +55 -0
  301. cv_suite-0.0.1/src/cvsuite/vlm/output/common.py +110 -0
  302. cv_suite-0.0.1/src/cvsuite/vlm/tests/__init__.py +2 -0
  303. cv_suite-0.0.1/src/cvsuite/vlm/tests/test_commands.py +756 -0
  304. cv_suite-0.0.1/src/cvsuite/vlm/tests/test_map_answers.py +166 -0
  305. cv_suite-0.0.1/src/cvsuite/vlm/tests/test_output_stats.py +50 -0
  306. cv_suite-0.0.1/src/cvsuite/vlm/transform/__init__.py +1 -0
  307. cv_suite-0.0.1/src/cvsuite/vlm/transform/commands/__init__.py +1 -0
  308. cv_suite-0.0.1/src/cvsuite/vlm/transform/commands/ask.py +17 -0
  309. cv_suite-0.0.1/src/cvsuite/vlm/transform/commands/caption.py +16 -0
  310. cv_suite-0.0.1/src/cvsuite/vlm/transform/commands/map_answers.py +23 -0
  311. cv_suite-0.0.1/src/cvsuite/vlm/transform/commands/vqa.py +17 -0
  312. cv_suite-0.0.1/src/cvsuite/vlm/transform/core/__init__.py +1 -0
  313. cv_suite-0.0.1/src/cvsuite/vlm/transform/core/map_answers.py +355 -0
  314. cv_suite-0.0.1/src/cvsuite/vlm/transform/core/runtime.py +393 -0
cv_suite-0.0.1/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Pedro Tonso
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,115 @@
1
+ Metadata-Version: 2.4
2
+ Name: cv-suite
3
+ Version: 0.0.1
4
+ Summary: Unified computer vision toolkit with shared FM runtime and branch-owned I/O.
5
+ Author-email: Pedro Tonso <ptonso@gmail.com>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/ptonso/cv-suite
8
+ Project-URL: Repository, https://github.com/ptonso/cv-suite
9
+ Project-URL: Issues, https://github.com/ptonso/cv-suite/issues
10
+ Keywords: computer-vision,dataset,annotation,foundation-models,cli,yolo,coco
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: Intended Audience :: Science/Research
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.10
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Topic :: Scientific/Engineering :: Image Processing
19
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
20
+ Requires-Python: >=3.10
21
+ Description-Content-Type: text/markdown
22
+ License-File: LICENSE
23
+ Requires-Dist: numpy>=1.23
24
+ Requires-Dist: pillow>=9.5
25
+ Requires-Dist: imagehash>=4.3
26
+ Requires-Dist: opencv-python>=4.8
27
+ Requires-Dist: pyyaml>=6.0
28
+ Requires-Dist: tqdm>=4.66
29
+ Provides-Extra: dev
30
+ Requires-Dist: pytest>=7.4; extra == "dev"
31
+ Requires-Dist: pytest-cov>=4.1; extra == "dev"
32
+ Requires-Dist: ruff>=0.6; extra == "dev"
33
+ Requires-Dist: mypy>=1.7; extra == "dev"
34
+ Dynamic: license-file
35
+
36
+ # cvsuite
37
+
38
+ `cvsuite` is a computer vision toolkit for reproducible, filesystem-to-filesystem dataset work, organized around one CLI:
39
+
40
+ ```bash
41
+ cvsuite <branch> <src> [transform] <output>
42
+ ```
43
+
44
+ Convert between annotation formats (YOLO, COCO, LabelMe, class folders, segmentation masks, VQA manifests). Auto-label raw images from a text prompt with foundation grounding models such as SAM 3 or Grounding DINO. Caption them or answer questions about them with vision-language models. Sort them into class folders with zero-shot classifiers. Read text off them with OCR. Generate and edit images with diffusion models. Then do the unglamorous half of the job: unzip and flatten a dump of files, drop exact and near-duplicates, fix orientation, normalize size and format, and draw a balanced sample for training.
45
+
46
+ ```bash
47
+ cvsuite label ./dataset-yolo to-coco ./dataset-coco
48
+ cvsuite label ./images ground --provider gsam --prompt "fire, smoke" to-coco ./labeled
49
+ cvsuite vlm ./images caption --provider qwen to-json ./captions
50
+ cvsuite class ./images infer --provider clip --prompt "good,bad" to-class-dir ./sorted
51
+ cvsuite gen create --provider flux --prompt "a red fox in the snow" to-dst ./fox.png
52
+ cvsuite prep arrange ./dump ./clean --unzip --exact-dedup --rename-seq
53
+ ```
54
+
55
+ More in the [cookbook](https://github.com/ptonso/cv-suite/blob/main/docs/cookbook.md).
56
+
57
+ You point a branch at a source, optionally run a transform, and materialize a destination layout. There is deliberately no universal "convert anything to anything" command.
58
+
59
+ ## How it works
60
+
61
+ ```mermaid
62
+ flowchart LR
63
+ SRC["source<br/>yolo · coco · labelme<br/>images · shards · …"] --> TOOL
64
+
65
+ TOOL{"pick a tool<br/>label · class · vlm · gen"} -->|ingest| DS["VisionDataset"]
66
+
67
+ DS --> TF["one transform<br/>sample · ground · ocr<br/>infer · caption · vqa"]
68
+ TF -->|"chain runs to stack"| DS
69
+
70
+ DS -->|output command| DST["destination<br/>yolo · coco · class-dir<br/>json · shards · …"]
71
+ ```
72
+
73
+ Whichever tool you pick, the spine is the same: the source is ingested into a shared `VisionDataset`, transforms mutate that dataset, and an output command materializes it. What differs per tool is the ingest heuristics, which transforms exist, and the export rules.
74
+
75
+ Each run applies at most one transform, so you stack them by chaining runs: the destination of one becomes the source of the next. FM-backed transforms (`ground`, `ocr`, `infer`, `caption`, `vqa`, and the `gen` actions) hand the dataset to an isolated provider subprocess that mutates records in place. `cvsuite prep` is the exception to all of this, since it works directly on folders and never builds a dataset.
76
+
77
+ ## Branches
78
+
79
+ | Branch | Purpose |
80
+ |---|---|
81
+ | `cvsuite label` | annotated datasets: YOLO / COCO / LabelMe / image-only ingest, `sample` / `ground` / `ocr` / `ops` / `filter` transforms, export to any label format |
82
+ | `cvsuite class` | class-directory datasets: `infer` with zero-shot classifiers, class-aware `sample`, export via `to-class-dir` |
83
+ | `cvsuite vlm` | vision-language datasets: `caption` / `ask` / `vqa` / `map-answers`, export to flat JSON / shards / VQA-style |
84
+ | `cvsuite gen` | text-to-image and image-edit generation, materialized via `to-dst` |
85
+ | `cvsuite prep` | raw image folder cleanup: `arrange` / `process` / `sample` / `orient`, file-first |
86
+ | `cvsuite common` | shared operations: FM cache paths, inspection, and purge |
87
+
88
+ ## Install
89
+
90
+ ```bash
91
+ pip install cv-suite
92
+ ```
93
+
94
+ Or from source:
95
+
96
+ ```bash
97
+ git clone https://github.com/ptonso/cv-suite
98
+ pip install -e ./cv-suite
99
+ ```
100
+
101
+ The base install ships the CLI and the I/O layer. Foundation-model backends run in isolated per-model virtualenvs provisioned on first use. See [`docs/getting-started.md`](https://github.com/ptonso/cv-suite/blob/main/docs/getting-started.md).
102
+
103
+ ## Documentation
104
+
105
+ - [`docs/`](https://github.com/ptonso/cv-suite/tree/main/docs) contains the guides: the [mental model](https://github.com/ptonso/cv-suite/blob/main/docs/index.md), [getting started](https://github.com/ptonso/cv-suite/blob/main/docs/getting-started.md), and a [cookbook](https://github.com/ptonso/cv-suite/blob/main/docs/cookbook.md) of common workflows.
106
+ - [`specs/`](https://github.com/ptonso/cv-suite/tree/main/specs) is the technical source of truth: architecture, the dataset contract, per-branch behavior, business decisions, and the guardrails that must not break.
107
+
108
+ ## Names
109
+
110
+ - PyPI distribution: `cv-suite`
111
+ - import package and CLI: `cvsuite`
112
+
113
+ ## License
114
+
115
+ MIT. See [LICENSE](https://github.com/ptonso/cv-suite/blob/main/LICENSE).
@@ -0,0 +1,80 @@
1
+ # cvsuite
2
+
3
+ `cvsuite` is a computer vision toolkit for reproducible, filesystem-to-filesystem dataset work, organized around one CLI:
4
+
5
+ ```bash
6
+ cvsuite <branch> <src> [transform] <output>
7
+ ```
8
+
9
+ Convert between annotation formats (YOLO, COCO, LabelMe, class folders, segmentation masks, VQA manifests). Auto-label raw images from a text prompt with foundation grounding models such as SAM 3 or Grounding DINO. Caption them or answer questions about them with vision-language models. Sort them into class folders with zero-shot classifiers. Read text off them with OCR. Generate and edit images with diffusion models. Then do the unglamorous half of the job: unzip and flatten a dump of files, drop exact and near-duplicates, fix orientation, normalize size and format, and draw a balanced sample for training.
10
+
11
+ ```bash
12
+ cvsuite label ./dataset-yolo to-coco ./dataset-coco
13
+ cvsuite label ./images ground --provider gsam --prompt "fire, smoke" to-coco ./labeled
14
+ cvsuite vlm ./images caption --provider qwen to-json ./captions
15
+ cvsuite class ./images infer --provider clip --prompt "good,bad" to-class-dir ./sorted
16
+ cvsuite gen create --provider flux --prompt "a red fox in the snow" to-dst ./fox.png
17
+ cvsuite prep arrange ./dump ./clean --unzip --exact-dedup --rename-seq
18
+ ```
19
+
20
+ More in the [cookbook](https://github.com/ptonso/cv-suite/blob/main/docs/cookbook.md).
21
+
22
+ You point a branch at a source, optionally run a transform, and materialize a destination layout. There is deliberately no universal "convert anything to anything" command.
23
+
24
+ ## How it works
25
+
26
+ ```mermaid
27
+ flowchart LR
28
+ SRC["source<br/>yolo · coco · labelme<br/>images · shards · …"] --> TOOL
29
+
30
+ TOOL{"pick a tool<br/>label · class · vlm · gen"} -->|ingest| DS["VisionDataset"]
31
+
32
+ DS --> TF["one transform<br/>sample · ground · ocr<br/>infer · caption · vqa"]
33
+ TF -->|"chain runs to stack"| DS
34
+
35
+ DS -->|output command| DST["destination<br/>yolo · coco · class-dir<br/>json · shards · …"]
36
+ ```
37
+
38
+ Whichever tool you pick, the spine is the same: the source is ingested into a shared `VisionDataset`, transforms mutate that dataset, and an output command materializes it. What differs per tool is the ingest heuristics, which transforms exist, and the export rules.
39
+
40
+ Each run applies at most one transform, so you stack them by chaining runs: the destination of one becomes the source of the next. FM-backed transforms (`ground`, `ocr`, `infer`, `caption`, `vqa`, and the `gen` actions) hand the dataset to an isolated provider subprocess that mutates records in place. `cvsuite prep` is the exception to all of this, since it works directly on folders and never builds a dataset.
41
+
42
+ ## Branches
43
+
44
+ | Branch | Purpose |
45
+ |---|---|
46
+ | `cvsuite label` | annotated datasets: YOLO / COCO / LabelMe / image-only ingest, `sample` / `ground` / `ocr` / `ops` / `filter` transforms, export to any label format |
47
+ | `cvsuite class` | class-directory datasets: `infer` with zero-shot classifiers, class-aware `sample`, export via `to-class-dir` |
48
+ | `cvsuite vlm` | vision-language datasets: `caption` / `ask` / `vqa` / `map-answers`, export to flat JSON / shards / VQA-style |
49
+ | `cvsuite gen` | text-to-image and image-edit generation, materialized via `to-dst` |
50
+ | `cvsuite prep` | raw image folder cleanup: `arrange` / `process` / `sample` / `orient`, file-first |
51
+ | `cvsuite common` | shared operations: FM cache paths, inspection, and purge |
52
+
53
+ ## Install
54
+
55
+ ```bash
56
+ pip install cv-suite
57
+ ```
58
+
59
+ Or from source:
60
+
61
+ ```bash
62
+ git clone https://github.com/ptonso/cv-suite
63
+ pip install -e ./cv-suite
64
+ ```
65
+
66
+ The base install ships the CLI and the I/O layer. Foundation-model backends run in isolated per-model virtualenvs provisioned on first use. See [`docs/getting-started.md`](https://github.com/ptonso/cv-suite/blob/main/docs/getting-started.md).
67
+
68
+ ## Documentation
69
+
70
+ - [`docs/`](https://github.com/ptonso/cv-suite/tree/main/docs) contains the guides: the [mental model](https://github.com/ptonso/cv-suite/blob/main/docs/index.md), [getting started](https://github.com/ptonso/cv-suite/blob/main/docs/getting-started.md), and a [cookbook](https://github.com/ptonso/cv-suite/blob/main/docs/cookbook.md) of common workflows.
71
+ - [`specs/`](https://github.com/ptonso/cv-suite/tree/main/specs) is the technical source of truth: architecture, the dataset contract, per-branch behavior, business decisions, and the guardrails that must not break.
72
+
73
+ ## Names
74
+
75
+ - PyPI distribution: `cv-suite`
76
+ - import package and CLI: `cvsuite`
77
+
78
+ ## License
79
+
80
+ MIT. See [LICENSE](https://github.com/ptonso/cv-suite/blob/main/LICENSE).
@@ -0,0 +1,61 @@
1
+ [build-system]
2
+ requires = ["setuptools>=77", "wheel"]
3
+ build-backend = "setuptools.build_meta"
4
+
5
+ [project]
6
+ name = "cv-suite"
7
+ version = "0.0.1"
8
+ description = "Unified computer vision toolkit with shared FM runtime and branch-owned I/O."
9
+ readme = "README.md"
10
+ requires-python = ">=3.10"
11
+ license = "MIT"
12
+ license-files = ["LICENSE"]
13
+ authors = [{ name = "Pedro Tonso", email = "ptonso@gmail.com" }]
14
+ keywords = ["computer-vision", "dataset", "annotation", "foundation-models", "cli", "yolo", "coco"]
15
+ classifiers = [
16
+ "Development Status :: 3 - Alpha",
17
+ "Intended Audience :: Developers",
18
+ "Intended Audience :: Science/Research",
19
+ "Programming Language :: Python :: 3",
20
+ "Programming Language :: Python :: 3.10",
21
+ "Programming Language :: Python :: 3.11",
22
+ "Programming Language :: Python :: 3.12",
23
+ "Topic :: Scientific/Engineering :: Image Processing",
24
+ "Topic :: Scientific/Engineering :: Artificial Intelligence",
25
+ ]
26
+ dependencies = [
27
+ "numpy>=1.23",
28
+ "pillow>=9.5",
29
+ "imagehash>=4.3",
30
+ "opencv-python>=4.8",
31
+ "pyyaml>=6.0",
32
+ "tqdm>=4.66",
33
+ ]
34
+
35
+ [project.optional-dependencies]
36
+ dev = [
37
+ "pytest>=7.4",
38
+ "pytest-cov>=4.1",
39
+ "ruff>=0.6",
40
+ "mypy>=1.7",
41
+ ]
42
+
43
+ [project.urls]
44
+ Homepage = "https://github.com/ptonso/cv-suite"
45
+ Repository = "https://github.com/ptonso/cv-suite"
46
+ Issues = "https://github.com/ptonso/cv-suite/issues"
47
+
48
+ [project.scripts]
49
+ cvsuite = "cvsuite.cli:main"
50
+
51
+ [tool.setuptools.packages.find]
52
+ where = ["src"]
53
+ include = ["cvsuite*"]
54
+
55
+ [tool.setuptools.package-data]
56
+ cvsuite = ["common/fm/providers/setup_venv/*.sh"]
57
+
58
+ [tool.pytest.ini_options]
59
+ minversion = "7.0"
60
+ addopts = "-q"
61
+ pythonpath = ["src"]
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,115 @@
1
+ Metadata-Version: 2.4
2
+ Name: cv-suite
3
+ Version: 0.0.1
4
+ Summary: Unified computer vision toolkit with shared FM runtime and branch-owned I/O.
5
+ Author-email: Pedro Tonso <ptonso@gmail.com>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/ptonso/cv-suite
8
+ Project-URL: Repository, https://github.com/ptonso/cv-suite
9
+ Project-URL: Issues, https://github.com/ptonso/cv-suite/issues
10
+ Keywords: computer-vision,dataset,annotation,foundation-models,cli,yolo,coco
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Intended Audience :: Developers
13
+ Classifier: Intended Audience :: Science/Research
14
+ Classifier: Programming Language :: Python :: 3
15
+ Classifier: Programming Language :: Python :: 3.10
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Topic :: Scientific/Engineering :: Image Processing
19
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
20
+ Requires-Python: >=3.10
21
+ Description-Content-Type: text/markdown
22
+ License-File: LICENSE
23
+ Requires-Dist: numpy>=1.23
24
+ Requires-Dist: pillow>=9.5
25
+ Requires-Dist: imagehash>=4.3
26
+ Requires-Dist: opencv-python>=4.8
27
+ Requires-Dist: pyyaml>=6.0
28
+ Requires-Dist: tqdm>=4.66
29
+ Provides-Extra: dev
30
+ Requires-Dist: pytest>=7.4; extra == "dev"
31
+ Requires-Dist: pytest-cov>=4.1; extra == "dev"
32
+ Requires-Dist: ruff>=0.6; extra == "dev"
33
+ Requires-Dist: mypy>=1.7; extra == "dev"
34
+ Dynamic: license-file
35
+
36
+ # cvsuite
37
+
38
+ `cvsuite` is a computer vision toolkit for reproducible, filesystem-to-filesystem dataset work, organized around one CLI:
39
+
40
+ ```bash
41
+ cvsuite <branch> <src> [transform] <output>
42
+ ```
43
+
44
+ Convert between annotation formats (YOLO, COCO, LabelMe, class folders, segmentation masks, VQA manifests). Auto-label raw images from a text prompt with foundation grounding models such as SAM 3 or Grounding DINO. Caption them or answer questions about them with vision-language models. Sort them into class folders with zero-shot classifiers. Read text off them with OCR. Generate and edit images with diffusion models. Then do the unglamorous half of the job: unzip and flatten a dump of files, drop exact and near-duplicates, fix orientation, normalize size and format, and draw a balanced sample for training.
45
+
46
+ ```bash
47
+ cvsuite label ./dataset-yolo to-coco ./dataset-coco
48
+ cvsuite label ./images ground --provider gsam --prompt "fire, smoke" to-coco ./labeled
49
+ cvsuite vlm ./images caption --provider qwen to-json ./captions
50
+ cvsuite class ./images infer --provider clip --prompt "good,bad" to-class-dir ./sorted
51
+ cvsuite gen create --provider flux --prompt "a red fox in the snow" to-dst ./fox.png
52
+ cvsuite prep arrange ./dump ./clean --unzip --exact-dedup --rename-seq
53
+ ```
54
+
55
+ More in the [cookbook](https://github.com/ptonso/cv-suite/blob/main/docs/cookbook.md).
56
+
57
+ You point a branch at a source, optionally run a transform, and materialize a destination layout. There is deliberately no universal "convert anything to anything" command.
58
+
59
+ ## How it works
60
+
61
+ ```mermaid
62
+ flowchart LR
63
+ SRC["source<br/>yolo · coco · labelme<br/>images · shards · …"] --> TOOL
64
+
65
+ TOOL{"pick a tool<br/>label · class · vlm · gen"} -->|ingest| DS["VisionDataset"]
66
+
67
+ DS --> TF["one transform<br/>sample · ground · ocr<br/>infer · caption · vqa"]
68
+ TF -->|"chain runs to stack"| DS
69
+
70
+ DS -->|output command| DST["destination<br/>yolo · coco · class-dir<br/>json · shards · …"]
71
+ ```
72
+
73
+ Whichever tool you pick, the spine is the same: the source is ingested into a shared `VisionDataset`, transforms mutate that dataset, and an output command materializes it. What differs per tool is the ingest heuristics, which transforms exist, and the export rules.
74
+
75
+ Each run applies at most one transform, so you stack them by chaining runs: the destination of one becomes the source of the next. FM-backed transforms (`ground`, `ocr`, `infer`, `caption`, `vqa`, and the `gen` actions) hand the dataset to an isolated provider subprocess that mutates records in place. `cvsuite prep` is the exception to all of this, since it works directly on folders and never builds a dataset.
76
+
77
+ ## Branches
78
+
79
+ | Branch | Purpose |
80
+ |---|---|
81
+ | `cvsuite label` | annotated datasets: YOLO / COCO / LabelMe / image-only ingest, `sample` / `ground` / `ocr` / `ops` / `filter` transforms, export to any label format |
82
+ | `cvsuite class` | class-directory datasets: `infer` with zero-shot classifiers, class-aware `sample`, export via `to-class-dir` |
83
+ | `cvsuite vlm` | vision-language datasets: `caption` / `ask` / `vqa` / `map-answers`, export to flat JSON / shards / VQA-style |
84
+ | `cvsuite gen` | text-to-image and image-edit generation, materialized via `to-dst` |
85
+ | `cvsuite prep` | raw image folder cleanup: `arrange` / `process` / `sample` / `orient`, file-first |
86
+ | `cvsuite common` | shared operations: FM cache paths, inspection, and purge |
87
+
88
+ ## Install
89
+
90
+ ```bash
91
+ pip install cv-suite
92
+ ```
93
+
94
+ Or from source:
95
+
96
+ ```bash
97
+ git clone https://github.com/ptonso/cv-suite
98
+ pip install -e ./cv-suite
99
+ ```
100
+
101
+ The base install ships the CLI and the I/O layer. Foundation-model backends run in isolated per-model virtualenvs provisioned on first use. See [`docs/getting-started.md`](https://github.com/ptonso/cv-suite/blob/main/docs/getting-started.md).
102
+
103
+ ## Documentation
104
+
105
+ - [`docs/`](https://github.com/ptonso/cv-suite/tree/main/docs) contains the guides: the [mental model](https://github.com/ptonso/cv-suite/blob/main/docs/index.md), [getting started](https://github.com/ptonso/cv-suite/blob/main/docs/getting-started.md), and a [cookbook](https://github.com/ptonso/cv-suite/blob/main/docs/cookbook.md) of common workflows.
106
+ - [`specs/`](https://github.com/ptonso/cv-suite/tree/main/specs) is the technical source of truth: architecture, the dataset contract, per-branch behavior, business decisions, and the guardrails that must not break.
107
+
108
+ ## Names
109
+
110
+ - PyPI distribution: `cv-suite`
111
+ - import package and CLI: `cvsuite`
112
+
113
+ ## License
114
+
115
+ MIT. See [LICENSE](https://github.com/ptonso/cv-suite/blob/main/LICENSE).