clarifai 9.10.1__py3-none-any.whl → 9.10.3__py3-none-any.whl

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 (323) hide show
  1. clarifai/client/__init__.py +3 -2
  2. clarifai/client/app.py +39 -23
  3. clarifai/client/base.py +6 -6
  4. clarifai/client/dataset.py +113 -55
  5. clarifai/client/input.py +47 -55
  6. clarifai/client/model.py +27 -25
  7. clarifai/client/module.py +13 -11
  8. clarifai/client/runner.py +5 -3
  9. clarifai/client/search.py +29 -10
  10. clarifai/client/user.py +14 -8
  11. clarifai/client/workflow.py +22 -20
  12. clarifai/constants/dataset.py +22 -0
  13. clarifai/datasets/upload/base.py +9 -7
  14. clarifai/datasets/upload/features.py +3 -3
  15. clarifai/datasets/upload/image.py +49 -50
  16. clarifai/datasets/upload/loaders/coco_captions.py +26 -80
  17. clarifai/datasets/upload/loaders/coco_detection.py +56 -115
  18. clarifai/datasets/upload/loaders/coco_segmentation.py +69 -137
  19. clarifai/datasets/upload/loaders/imagenet_classification.py +2 -3
  20. clarifai/datasets/upload/loaders/xview_detection.py +3 -3
  21. clarifai/datasets/upload/text.py +16 -16
  22. clarifai/datasets/upload/utils.py +196 -21
  23. clarifai/utils/misc.py +21 -0
  24. clarifai/versions.py +1 -1
  25. {clarifai-9.10.1.dist-info → clarifai-9.10.3.dist-info}/METADATA +3 -3
  26. clarifai-9.10.3.dist-info/RECORD +96 -0
  27. clarifai-9.10.3.dist-info/top_level.txt +1 -0
  28. clarifai/auth/__init__.py +0 -6
  29. clarifai/auth/helper.py +0 -367
  30. clarifai/auth/register.py +0 -23
  31. clarifai/auth/stub.py +0 -127
  32. clarifai/datasets/upload/examples/README.md +0 -31
  33. clarifai/datasets/upload/examples/image_classification/__init__.py +0 -0
  34. clarifai/datasets/upload/examples/image_classification/cifar10/__init__.py +0 -0
  35. clarifai/datasets/upload/examples/image_classification/cifar10/cifar_small_test.csv +0 -10
  36. clarifai/datasets/upload/examples/image_classification/cifar10/cifar_small_train.csv +0 -10
  37. clarifai/datasets/upload/examples/image_classification/cifar10/dataset.py +0 -46
  38. clarifai/datasets/upload/examples/image_classification/cifar10/images/test_batch_700.jpg +0 -0
  39. clarifai/datasets/upload/examples/image_classification/cifar10/images/test_batch_701.jpg +0 -0
  40. clarifai/datasets/upload/examples/image_classification/cifar10/images/test_batch_702.jpg +0 -0
  41. clarifai/datasets/upload/examples/image_classification/cifar10/images/test_batch_703.jpg +0 -0
  42. clarifai/datasets/upload/examples/image_classification/cifar10/images/test_batch_704.jpg +0 -0
  43. clarifai/datasets/upload/examples/image_classification/cifar10/images/test_batch_705.jpg +0 -0
  44. clarifai/datasets/upload/examples/image_classification/cifar10/images/test_batch_706.jpg +0 -0
  45. clarifai/datasets/upload/examples/image_classification/cifar10/images/test_batch_707.jpg +0 -0
  46. clarifai/datasets/upload/examples/image_classification/cifar10/images/test_batch_708.jpg +0 -0
  47. clarifai/datasets/upload/examples/image_classification/cifar10/images/test_batch_709.jpg +0 -0
  48. clarifai/datasets/upload/examples/image_classification/food-101/__init__.py +0 -0
  49. clarifai/datasets/upload/examples/image_classification/food-101/dataset.py +0 -39
  50. clarifai/datasets/upload/examples/image_classification/food-101/images/beignets/1420783.jpg +0 -0
  51. clarifai/datasets/upload/examples/image_classification/food-101/images/beignets/3287885.jpg +0 -0
  52. clarifai/datasets/upload/examples/image_classification/food-101/images/beignets/3617075.jpg +0 -0
  53. clarifai/datasets/upload/examples/image_classification/food-101/images/beignets/38052.jpg +0 -0
  54. clarifai/datasets/upload/examples/image_classification/food-101/images/beignets/39147.jpg +0 -0
  55. clarifai/datasets/upload/examples/image_classification/food-101/images/hamburger/139558.jpg +0 -0
  56. clarifai/datasets/upload/examples/image_classification/food-101/images/hamburger/1636096.jpg +0 -0
  57. clarifai/datasets/upload/examples/image_classification/food-101/images/hamburger/2480925.jpg +0 -0
  58. clarifai/datasets/upload/examples/image_classification/food-101/images/hamburger/3385808.jpg +0 -0
  59. clarifai/datasets/upload/examples/image_classification/food-101/images/hamburger/3647386.jpg +0 -0
  60. clarifai/datasets/upload/examples/image_classification/food-101/images/prime_rib/1826869.jpg +0 -0
  61. clarifai/datasets/upload/examples/image_classification/food-101/images/prime_rib/2243245.jpg +0 -0
  62. clarifai/datasets/upload/examples/image_classification/food-101/images/prime_rib/259212.jpg +0 -0
  63. clarifai/datasets/upload/examples/image_classification/food-101/images/prime_rib/2842688.jpg +0 -0
  64. clarifai/datasets/upload/examples/image_classification/food-101/images/prime_rib/3035414.jpg +0 -0
  65. clarifai/datasets/upload/examples/image_classification/food-101/images/ramen/1545393.jpg +0 -0
  66. clarifai/datasets/upload/examples/image_classification/food-101/images/ramen/2427642.jpg +0 -0
  67. clarifai/datasets/upload/examples/image_classification/food-101/images/ramen/3520891.jpg +0 -0
  68. clarifai/datasets/upload/examples/image_classification/food-101/images/ramen/377566.jpg +0 -0
  69. clarifai/datasets/upload/examples/image_classification/food-101/images/ramen/503504.jpg +0 -0
  70. clarifai/datasets/upload/examples/text_classification/__init__.py +0 -0
  71. clarifai/datasets/upload/examples/text_classification/imdb_dataset/__init__.py +0 -0
  72. clarifai/datasets/upload/examples/text_classification/imdb_dataset/dataset.py +0 -42
  73. clarifai/datasets/upload/examples/text_classification/imdb_dataset/test.csv +0 -201
  74. clarifai/datasets/upload/examples/text_classification/imdb_dataset/train.csv +0 -201
  75. clarifai/datasets/upload/loaders/README.md +0 -49
  76. clarifai/models/model_serving/README.md +0 -155
  77. clarifai/models/model_serving/docs/custom_config.md +0 -33
  78. clarifai/models/model_serving/docs/dependencies.md +0 -11
  79. clarifai/models/model_serving/docs/inference_parameters.md +0 -134
  80. clarifai/models/model_serving/docs/model_types.md +0 -20
  81. clarifai/models/model_serving/docs/output.md +0 -28
  82. clarifai/models/model_serving/examples/README.md +0 -7
  83. clarifai/models/model_serving/examples/image_classification/README.md +0 -9
  84. clarifai/models/model_serving/examples/image_classification/age_vit/1/vit-age-classifier/README.md +0 -11
  85. clarifai/models/model_serving/examples/image_classification/age_vit/1/vit-age-classifier/config.json +0 -42
  86. clarifai/models/model_serving/examples/image_classification/age_vit/1/vit-age-classifier/preprocessor_config.json +0 -15
  87. clarifai/models/model_serving/examples/image_classification/age_vit/config.pbtxt +0 -23
  88. clarifai/models/model_serving/examples/image_classification/age_vit/labels.txt +0 -9
  89. clarifai/models/model_serving/examples/image_classification/age_vit/requirements.txt +0 -7
  90. clarifai/models/model_serving/examples/text_classification/README.md +0 -9
  91. clarifai/models/model_serving/examples/text_classification/xlm-roberta/1/twitter-xlm-roberta-base-sentiment/README.md +0 -12
  92. clarifai/models/model_serving/examples/text_classification/xlm-roberta/1/twitter-xlm-roberta-base-sentiment/config.json +0 -34
  93. clarifai/models/model_serving/examples/text_classification/xlm-roberta/1/twitter-xlm-roberta-base-sentiment/special_tokens_map.json +0 -1
  94. clarifai/models/model_serving/examples/text_classification/xlm-roberta/config.pbtxt +0 -21
  95. clarifai/models/model_serving/examples/text_classification/xlm-roberta/labels.txt +0 -3
  96. clarifai/models/model_serving/examples/text_classification/xlm-roberta/requirements.txt +0 -7
  97. clarifai/models/model_serving/examples/text_embedding/README.md +0 -9
  98. clarifai/models/model_serving/examples/text_to_image/README.md +0 -9
  99. clarifai/models/model_serving/examples/text_to_image/sd-v1.5/1/__init__.py +0 -0
  100. clarifai/models/model_serving/examples/text_to_image/sd-v1.5/1/inference.py +0 -52
  101. clarifai/models/model_serving/examples/text_to_image/sd-v1.5/1/model.py +0 -60
  102. clarifai/models/model_serving/examples/text_to_image/sd-v1.5/config.pbtxt +0 -22
  103. clarifai/models/model_serving/examples/text_to_image/sd-v1.5/requirements.txt +0 -6
  104. clarifai/models/model_serving/examples/text_to_text/README.md +0 -10
  105. clarifai/models/model_serving/examples/text_to_text/bart-summarize/config.pbtxt +0 -20
  106. clarifai/models/model_serving/examples/text_to_text/bart-summarize/requirements.txt +0 -4
  107. clarifai/models/model_serving/examples/visual_detection/README.md +0 -11
  108. clarifai/models/model_serving/examples/visual_detection/yolov5x/config.pbtxt +0 -36
  109. clarifai/models/model_serving/examples/visual_detection/yolov5x/labels.txt +0 -80
  110. clarifai/models/model_serving/examples/visual_detection/yolov5x/requirements.txt +0 -12
  111. clarifai/models/model_serving/examples/visual_embedding/README.md +0 -9
  112. clarifai/models/model_serving/examples/visual_embedding/vit-base/config.pbtxt +0 -22
  113. clarifai/models/model_serving/examples/visual_embedding/vit-base/requirements.txt +0 -5
  114. clarifai/models/model_serving/examples/visual_segmentation/README.md +0 -9
  115. clarifai/models/model_serving/examples/visual_segmentation/segformer-b2/config.pbtxt +0 -24
  116. clarifai/models/model_serving/examples/visual_segmentation/segformer-b2/labels.txt +0 -18
  117. clarifai/models/model_serving/examples/visual_segmentation/segformer-b2/requirements.txt +0 -5
  118. clarifai/models/model_serving/model_config/model_types_config/multimodal-embedder.yaml +0 -24
  119. clarifai/models/model_serving/model_config/model_types_config/text-classifier.yaml +0 -18
  120. clarifai/models/model_serving/model_config/model_types_config/text-embedder.yaml +0 -18
  121. clarifai/models/model_serving/model_config/model_types_config/text-to-image.yaml +0 -18
  122. clarifai/models/model_serving/model_config/model_types_config/text-to-text.yaml +0 -18
  123. clarifai/models/model_serving/model_config/model_types_config/visual-classifier.yaml +0 -18
  124. clarifai/models/model_serving/model_config/model_types_config/visual-detector.yaml +0 -28
  125. clarifai/models/model_serving/model_config/model_types_config/visual-embedder.yaml +0 -18
  126. clarifai/models/model_serving/model_config/model_types_config/visual-segmenter.yaml +0 -18
  127. clarifai/modules/README.md +0 -5
  128. clarifai/modules/style.css +0 -217
  129. clarifai-9.10.1.dist-info/RECORD +0 -386
  130. clarifai-9.10.1.dist-info/top_level.txt +0 -2
  131. clarifai_utils/__init__.py +0 -0
  132. clarifai_utils/auth/__init__.py +0 -6
  133. clarifai_utils/auth/helper.py +0 -367
  134. clarifai_utils/auth/register.py +0 -23
  135. clarifai_utils/auth/stub.py +0 -127
  136. clarifai_utils/cli.py +0 -0
  137. clarifai_utils/client/__init__.py +0 -16
  138. clarifai_utils/client/app.py +0 -684
  139. clarifai_utils/client/auth/__init__.py +0 -4
  140. clarifai_utils/client/auth/helper.py +0 -367
  141. clarifai_utils/client/auth/register.py +0 -23
  142. clarifai_utils/client/auth/stub.py +0 -127
  143. clarifai_utils/client/base.py +0 -131
  144. clarifai_utils/client/dataset.py +0 -442
  145. clarifai_utils/client/input.py +0 -892
  146. clarifai_utils/client/lister.py +0 -54
  147. clarifai_utils/client/model.py +0 -575
  148. clarifai_utils/client/module.py +0 -94
  149. clarifai_utils/client/runner.py +0 -161
  150. clarifai_utils/client/search.py +0 -239
  151. clarifai_utils/client/user.py +0 -253
  152. clarifai_utils/client/workflow.py +0 -223
  153. clarifai_utils/constants/model.py +0 -4
  154. clarifai_utils/constants/search.py +0 -2
  155. clarifai_utils/datasets/__init__.py +0 -0
  156. clarifai_utils/datasets/export/__init__.py +0 -0
  157. clarifai_utils/datasets/export/inputs_annotations.py +0 -222
  158. clarifai_utils/datasets/upload/__init__.py +0 -0
  159. clarifai_utils/datasets/upload/base.py +0 -66
  160. clarifai_utils/datasets/upload/examples/README.md +0 -31
  161. clarifai_utils/datasets/upload/examples/image_classification/__init__.py +0 -0
  162. clarifai_utils/datasets/upload/examples/image_classification/cifar10/__init__.py +0 -0
  163. clarifai_utils/datasets/upload/examples/image_classification/cifar10/cifar_small_test.csv +0 -10
  164. clarifai_utils/datasets/upload/examples/image_classification/cifar10/cifar_small_train.csv +0 -10
  165. clarifai_utils/datasets/upload/examples/image_classification/cifar10/dataset.py +0 -46
  166. clarifai_utils/datasets/upload/examples/image_classification/cifar10/images/test_batch_700.jpg +0 -0
  167. clarifai_utils/datasets/upload/examples/image_classification/cifar10/images/test_batch_701.jpg +0 -0
  168. clarifai_utils/datasets/upload/examples/image_classification/cifar10/images/test_batch_702.jpg +0 -0
  169. clarifai_utils/datasets/upload/examples/image_classification/cifar10/images/test_batch_703.jpg +0 -0
  170. clarifai_utils/datasets/upload/examples/image_classification/cifar10/images/test_batch_704.jpg +0 -0
  171. clarifai_utils/datasets/upload/examples/image_classification/cifar10/images/test_batch_705.jpg +0 -0
  172. clarifai_utils/datasets/upload/examples/image_classification/cifar10/images/test_batch_706.jpg +0 -0
  173. clarifai_utils/datasets/upload/examples/image_classification/cifar10/images/test_batch_707.jpg +0 -0
  174. clarifai_utils/datasets/upload/examples/image_classification/cifar10/images/test_batch_708.jpg +0 -0
  175. clarifai_utils/datasets/upload/examples/image_classification/cifar10/images/test_batch_709.jpg +0 -0
  176. clarifai_utils/datasets/upload/examples/image_classification/food-101/__init__.py +0 -0
  177. clarifai_utils/datasets/upload/examples/image_classification/food-101/dataset.py +0 -39
  178. clarifai_utils/datasets/upload/examples/image_classification/food-101/images/beignets/1420783.jpg +0 -0
  179. clarifai_utils/datasets/upload/examples/image_classification/food-101/images/beignets/3287885.jpg +0 -0
  180. clarifai_utils/datasets/upload/examples/image_classification/food-101/images/beignets/3617075.jpg +0 -0
  181. clarifai_utils/datasets/upload/examples/image_classification/food-101/images/beignets/38052.jpg +0 -0
  182. clarifai_utils/datasets/upload/examples/image_classification/food-101/images/beignets/39147.jpg +0 -0
  183. clarifai_utils/datasets/upload/examples/image_classification/food-101/images/hamburger/139558.jpg +0 -0
  184. clarifai_utils/datasets/upload/examples/image_classification/food-101/images/hamburger/1636096.jpg +0 -0
  185. clarifai_utils/datasets/upload/examples/image_classification/food-101/images/hamburger/2480925.jpg +0 -0
  186. clarifai_utils/datasets/upload/examples/image_classification/food-101/images/hamburger/3385808.jpg +0 -0
  187. clarifai_utils/datasets/upload/examples/image_classification/food-101/images/hamburger/3647386.jpg +0 -0
  188. clarifai_utils/datasets/upload/examples/image_classification/food-101/images/prime_rib/1826869.jpg +0 -0
  189. clarifai_utils/datasets/upload/examples/image_classification/food-101/images/prime_rib/2243245.jpg +0 -0
  190. clarifai_utils/datasets/upload/examples/image_classification/food-101/images/prime_rib/259212.jpg +0 -0
  191. clarifai_utils/datasets/upload/examples/image_classification/food-101/images/prime_rib/2842688.jpg +0 -0
  192. clarifai_utils/datasets/upload/examples/image_classification/food-101/images/prime_rib/3035414.jpg +0 -0
  193. clarifai_utils/datasets/upload/examples/image_classification/food-101/images/ramen/1545393.jpg +0 -0
  194. clarifai_utils/datasets/upload/examples/image_classification/food-101/images/ramen/2427642.jpg +0 -0
  195. clarifai_utils/datasets/upload/examples/image_classification/food-101/images/ramen/3520891.jpg +0 -0
  196. clarifai_utils/datasets/upload/examples/image_classification/food-101/images/ramen/377566.jpg +0 -0
  197. clarifai_utils/datasets/upload/examples/image_classification/food-101/images/ramen/503504.jpg +0 -0
  198. clarifai_utils/datasets/upload/examples/text_classification/__init__.py +0 -0
  199. clarifai_utils/datasets/upload/examples/text_classification/imdb_dataset/__init__.py +0 -0
  200. clarifai_utils/datasets/upload/examples/text_classification/imdb_dataset/dataset.py +0 -42
  201. clarifai_utils/datasets/upload/examples/text_classification/imdb_dataset/test.csv +0 -201
  202. clarifai_utils/datasets/upload/examples/text_classification/imdb_dataset/train.csv +0 -201
  203. clarifai_utils/datasets/upload/features.py +0 -44
  204. clarifai_utils/datasets/upload/image.py +0 -165
  205. clarifai_utils/datasets/upload/loaders/README.md +0 -49
  206. clarifai_utils/datasets/upload/loaders/__init__.py +0 -0
  207. clarifai_utils/datasets/upload/loaders/coco_captions.py +0 -103
  208. clarifai_utils/datasets/upload/loaders/coco_detection.py +0 -134
  209. clarifai_utils/datasets/upload/loaders/coco_segmentation.py +0 -166
  210. clarifai_utils/datasets/upload/loaders/imagenet_classification.py +0 -59
  211. clarifai_utils/datasets/upload/loaders/xview_detection.py +0 -148
  212. clarifai_utils/datasets/upload/text.py +0 -53
  213. clarifai_utils/datasets/upload/utils.py +0 -63
  214. clarifai_utils/errors.py +0 -89
  215. clarifai_utils/models/__init__.py +0 -0
  216. clarifai_utils/models/api.py +0 -283
  217. clarifai_utils/models/model_serving/README.md +0 -155
  218. clarifai_utils/models/model_serving/__init__.py +0 -12
  219. clarifai_utils/models/model_serving/cli/__init__.py +0 -12
  220. clarifai_utils/models/model_serving/cli/deploy_cli.py +0 -123
  221. clarifai_utils/models/model_serving/cli/model_zip.py +0 -61
  222. clarifai_utils/models/model_serving/cli/repository.py +0 -87
  223. clarifai_utils/models/model_serving/constants.py +0 -1
  224. clarifai_utils/models/model_serving/docs/custom_config.md +0 -33
  225. clarifai_utils/models/model_serving/docs/dependencies.md +0 -11
  226. clarifai_utils/models/model_serving/docs/inference_parameters.md +0 -134
  227. clarifai_utils/models/model_serving/docs/model_types.md +0 -20
  228. clarifai_utils/models/model_serving/docs/output.md +0 -28
  229. clarifai_utils/models/model_serving/examples/README.md +0 -7
  230. clarifai_utils/models/model_serving/examples/image_classification/README.md +0 -9
  231. clarifai_utils/models/model_serving/examples/image_classification/age_vit/1/__init__.py +0 -0
  232. clarifai_utils/models/model_serving/examples/image_classification/age_vit/1/inference.py +0 -56
  233. clarifai_utils/models/model_serving/examples/image_classification/age_vit/1/model.py +0 -61
  234. clarifai_utils/models/model_serving/examples/image_classification/age_vit/1/vit-age-classifier/README.md +0 -11
  235. clarifai_utils/models/model_serving/examples/image_classification/age_vit/1/vit-age-classifier/config.json +0 -42
  236. clarifai_utils/models/model_serving/examples/image_classification/age_vit/1/vit-age-classifier/preprocessor_config.json +0 -15
  237. clarifai_utils/models/model_serving/examples/image_classification/age_vit/config.pbtxt +0 -23
  238. clarifai_utils/models/model_serving/examples/image_classification/age_vit/labels.txt +0 -9
  239. clarifai_utils/models/model_serving/examples/image_classification/age_vit/requirements.txt +0 -7
  240. clarifai_utils/models/model_serving/examples/text_classification/README.md +0 -9
  241. clarifai_utils/models/model_serving/examples/text_classification/xlm-roberta/1/__init__.py +0 -0
  242. clarifai_utils/models/model_serving/examples/text_classification/xlm-roberta/1/inference.py +0 -55
  243. clarifai_utils/models/model_serving/examples/text_classification/xlm-roberta/1/model.py +0 -61
  244. clarifai_utils/models/model_serving/examples/text_classification/xlm-roberta/1/twitter-xlm-roberta-base-sentiment/README.md +0 -12
  245. clarifai_utils/models/model_serving/examples/text_classification/xlm-roberta/1/twitter-xlm-roberta-base-sentiment/config.json +0 -34
  246. clarifai_utils/models/model_serving/examples/text_classification/xlm-roberta/1/twitter-xlm-roberta-base-sentiment/special_tokens_map.json +0 -1
  247. clarifai_utils/models/model_serving/examples/text_classification/xlm-roberta/config.pbtxt +0 -21
  248. clarifai_utils/models/model_serving/examples/text_classification/xlm-roberta/labels.txt +0 -3
  249. clarifai_utils/models/model_serving/examples/text_classification/xlm-roberta/requirements.txt +0 -7
  250. clarifai_utils/models/model_serving/examples/text_embedding/README.md +0 -9
  251. clarifai_utils/models/model_serving/examples/text_to_image/README.md +0 -9
  252. clarifai_utils/models/model_serving/examples/text_to_image/sd-v1.5/1/__init__.py +0 -0
  253. clarifai_utils/models/model_serving/examples/text_to_image/sd-v1.5/1/inference.py +0 -52
  254. clarifai_utils/models/model_serving/examples/text_to_image/sd-v1.5/1/model.py +0 -60
  255. clarifai_utils/models/model_serving/examples/text_to_image/sd-v1.5/config.pbtxt +0 -22
  256. clarifai_utils/models/model_serving/examples/text_to_image/sd-v1.5/requirements.txt +0 -6
  257. clarifai_utils/models/model_serving/examples/text_to_text/README.md +0 -10
  258. clarifai_utils/models/model_serving/examples/text_to_text/bart-summarize/1/__init__.py +0 -0
  259. clarifai_utils/models/model_serving/examples/text_to_text/bart-summarize/1/inference.py +0 -47
  260. clarifai_utils/models/model_serving/examples/text_to_text/bart-summarize/1/model.py +0 -60
  261. clarifai_utils/models/model_serving/examples/text_to_text/bart-summarize/config.pbtxt +0 -20
  262. clarifai_utils/models/model_serving/examples/text_to_text/bart-summarize/requirements.txt +0 -4
  263. clarifai_utils/models/model_serving/examples/visual_detection/README.md +0 -11
  264. clarifai_utils/models/model_serving/examples/visual_detection/yolov5x/1/inference.py +0 -72
  265. clarifai_utils/models/model_serving/examples/visual_detection/yolov5x/1/model.py +0 -61
  266. clarifai_utils/models/model_serving/examples/visual_detection/yolov5x/config.pbtxt +0 -36
  267. clarifai_utils/models/model_serving/examples/visual_detection/yolov5x/labels.txt +0 -80
  268. clarifai_utils/models/model_serving/examples/visual_detection/yolov5x/requirements.txt +0 -12
  269. clarifai_utils/models/model_serving/examples/visual_embedding/README.md +0 -9
  270. clarifai_utils/models/model_serving/examples/visual_embedding/vit-base/1/__init__.py +0 -0
  271. clarifai_utils/models/model_serving/examples/visual_embedding/vit-base/1/inference.py +0 -51
  272. clarifai_utils/models/model_serving/examples/visual_embedding/vit-base/1/model.py +0 -60
  273. clarifai_utils/models/model_serving/examples/visual_embedding/vit-base/config.pbtxt +0 -22
  274. clarifai_utils/models/model_serving/examples/visual_embedding/vit-base/requirements.txt +0 -5
  275. clarifai_utils/models/model_serving/examples/visual_segmentation/README.md +0 -9
  276. clarifai_utils/models/model_serving/examples/visual_segmentation/segformer-b2/1/__init__.py +0 -0
  277. clarifai_utils/models/model_serving/examples/visual_segmentation/segformer-b2/1/inference.py +0 -55
  278. clarifai_utils/models/model_serving/examples/visual_segmentation/segformer-b2/1/model.py +0 -60
  279. clarifai_utils/models/model_serving/examples/visual_segmentation/segformer-b2/config.pbtxt +0 -24
  280. clarifai_utils/models/model_serving/examples/visual_segmentation/segformer-b2/labels.txt +0 -18
  281. clarifai_utils/models/model_serving/examples/visual_segmentation/segformer-b2/requirements.txt +0 -5
  282. clarifai_utils/models/model_serving/model_config/__init__.py +0 -14
  283. clarifai_utils/models/model_serving/model_config/config.py +0 -302
  284. clarifai_utils/models/model_serving/model_config/inference_parameter.py +0 -124
  285. clarifai_utils/models/model_serving/model_config/model_types_config/multimodal-embedder.yaml +0 -24
  286. clarifai_utils/models/model_serving/model_config/model_types_config/text-classifier.yaml +0 -18
  287. clarifai_utils/models/model_serving/model_config/model_types_config/text-embedder.yaml +0 -18
  288. clarifai_utils/models/model_serving/model_config/model_types_config/text-to-image.yaml +0 -18
  289. clarifai_utils/models/model_serving/model_config/model_types_config/text-to-text.yaml +0 -18
  290. clarifai_utils/models/model_serving/model_config/model_types_config/visual-classifier.yaml +0 -18
  291. clarifai_utils/models/model_serving/model_config/model_types_config/visual-detector.yaml +0 -28
  292. clarifai_utils/models/model_serving/model_config/model_types_config/visual-embedder.yaml +0 -18
  293. clarifai_utils/models/model_serving/model_config/model_types_config/visual-segmenter.yaml +0 -18
  294. clarifai_utils/models/model_serving/model_config/serializer.py +0 -134
  295. clarifai_utils/models/model_serving/models/__init__.py +0 -12
  296. clarifai_utils/models/model_serving/models/default_test.py +0 -275
  297. clarifai_utils/models/model_serving/models/inference.py +0 -42
  298. clarifai_utils/models/model_serving/models/model_types.py +0 -265
  299. clarifai_utils/models/model_serving/models/output.py +0 -124
  300. clarifai_utils/models/model_serving/models/pb_model.py +0 -74
  301. clarifai_utils/models/model_serving/models/test.py +0 -64
  302. clarifai_utils/models/model_serving/pb_model_repository.py +0 -101
  303. clarifai_utils/modules/README.md +0 -5
  304. clarifai_utils/modules/__init__.py +0 -0
  305. clarifai_utils/modules/css.py +0 -60
  306. clarifai_utils/modules/pages.py +0 -42
  307. clarifai_utils/modules/style.css +0 -217
  308. clarifai_utils/runners/__init__.py +0 -0
  309. clarifai_utils/runners/example.py +0 -33
  310. clarifai_utils/schema/search.py +0 -69
  311. clarifai_utils/urls/helper.py +0 -103
  312. clarifai_utils/utils/__init__.py +0 -0
  313. clarifai_utils/utils/logging.py +0 -90
  314. clarifai_utils/utils/misc.py +0 -33
  315. clarifai_utils/utils/model_train.py +0 -157
  316. clarifai_utils/versions.py +0 -6
  317. clarifai_utils/workflows/__init__.py +0 -0
  318. clarifai_utils/workflows/export.py +0 -68
  319. clarifai_utils/workflows/utils.py +0 -59
  320. clarifai_utils/workflows/validate.py +0 -67
  321. {clarifai-9.10.1.dist-info → clarifai-9.10.3.dist-info}/LICENSE +0 -0
  322. {clarifai-9.10.1.dist-info → clarifai-9.10.3.dist-info}/WHEEL +0 -0
  323. {clarifai-9.10.1.dist-info → clarifai-9.10.3.dist-info}/entry_points.txt +0 -0
clarifai/client/user.py CHANGED
@@ -15,18 +15,23 @@ from clarifai.utils.logging import get_logger
15
15
  class User(Lister, BaseClient):
16
16
  """User is a class that provides access to Clarifai API endpoints related to user information."""
17
17
 
18
- def __init__(self, user_id: str = "", base_url: str = "https://api.clarifai.com", **kwargs):
18
+ def __init__(self,
19
+ user_id: str = None,
20
+ base_url: str = "https://api.clarifai.com",
21
+ pat: str = None,
22
+ **kwargs):
19
23
  """Initializes an User object.
20
24
 
21
25
  Args:
22
26
  user_id (str): The user ID for the user to interact with.
23
27
  base_url (str): Base API url. Default "https://api.clarifai.com"
28
+ pat (str): A personal access token for authentication. Can be set as env var CLARIFAI_PAT
24
29
  **kwargs: Additional keyword arguments to be passed to the User.
25
30
  """
26
31
  self.kwargs = {**kwargs, 'id': user_id}
27
32
  self.user_info = resources_pb2.User(**self.kwargs)
28
33
  self.logger = get_logger(logger_level="INFO", name=__name__)
29
- BaseClient.__init__(self, user_id=self.id, app_id="", base=base_url)
34
+ BaseClient.__init__(self, user_id=self.id, app_id="", base=base_url, pat=pat)
30
35
  Lister.__init__(self)
31
36
 
32
37
  def list_apps(self, filter_by: Dict[str, Any] = {}, page_no: int = None,
@@ -57,7 +62,7 @@ class User(Lister, BaseClient):
57
62
  per_page=per_page,
58
63
  page_no=page_no)
59
64
  for app_info in all_apps_info:
60
- yield App(base_url=self.base, **app_info)
65
+ yield App(base_url=self.base, pat=self.pat, **app_info)
61
66
 
62
67
  def list_runners(self, filter_by: Dict[str, Any] = {}, page_no: int = None,
63
68
  per_page: int = None) -> Generator[Runner, None, None]:
@@ -89,7 +94,7 @@ class User(Lister, BaseClient):
89
94
  page_no=page_no)
90
95
 
91
96
  for runner_info in all_runners_info:
92
- yield Runner(check_runner_exists=False, base_url=self.base, **runner_info)
97
+ yield Runner(check_runner_exists=False, base_url=self.base, pat=self.pat, **runner_info)
93
98
 
94
99
  def create_app(self, app_id: str, base_workflow: str = 'Empty', **kwargs) -> App:
95
100
  """Creates an app for the user.
@@ -115,7 +120,7 @@ class User(Lister, BaseClient):
115
120
  if response.status.code != status_code_pb2.SUCCESS:
116
121
  raise Exception(response.status)
117
122
  self.logger.info("\nApp created\n%s", response.status)
118
- kwargs.update({'user_id': self.id, 'base_url': self.base})
123
+ kwargs.update({'user_id': self.id, 'base_url': self.base, 'pat': self.pat})
119
124
  return App(app_id=app_id, **kwargs)
120
125
 
121
126
  def create_runner(self, runner_id: str, labels: List[str], description: str) -> Runner:
@@ -152,7 +157,8 @@ class User(Lister, BaseClient):
152
157
  labels=labels,
153
158
  description=description,
154
159
  check_runner_exists=False,
155
- base_url=self.base)
160
+ base_url=self.base,
161
+ pat=self.pat)
156
162
 
157
163
  def app(self, app_id: str, **kwargs) -> App:
158
164
  """Returns an App object for the specified app ID.
@@ -175,7 +181,7 @@ class User(Lister, BaseClient):
175
181
  raise Exception(response.status)
176
182
 
177
183
  kwargs['user_id'] = self.id
178
- kwargs.update({'base_url': self.base})
184
+ kwargs.update({'base_url': self.base, 'pat': self.pat})
179
185
  return App(app_id=app_id, **kwargs)
180
186
 
181
187
  def runner(self, runner_id: str) -> Runner:
@@ -204,7 +210,7 @@ class User(Lister, BaseClient):
204
210
  kwargs = self.process_response_keys(dict_response[list(dict_response.keys())[1]],
205
211
  list(dict_response.keys())[1])
206
212
 
207
- return Runner(check_runner_exists=False, base_url=self.base, **kwargs)
213
+ return Runner(check_runner_exists=False, base_url=self.base, pat=self.pat, **kwargs)
208
214
 
209
215
  def delete_app(self, app_id: str) -> None:
210
216
  """Deletes an app for the user.
@@ -18,16 +18,17 @@ class Workflow(Lister, BaseClient):
18
18
  """Workflow is a class that provides access to Clarifai API endpoints related to Workflow information."""
19
19
 
20
20
  def __init__(self,
21
- url_init: str = "",
22
- workflow_id: str = "",
21
+ url: str = None,
22
+ workflow_id: str = None,
23
23
  workflow_version: Dict = {'id': ""},
24
24
  output_config: Dict = {'min_value': 0},
25
25
  base_url: str = "https://api.clarifai.com",
26
+ pat: str = None,
26
27
  **kwargs):
27
28
  """Initializes a Workflow object.
28
29
 
29
30
  Args:
30
- url_init (str): The URL to initialize the workflow object.
31
+ url (str): The URL to initialize the workflow object.
31
32
  workflow_id (str): The Workflow ID to interact with.
32
33
  workflow_version (dict): The Workflow Version to interact with.
33
34
  output_config (dict): The output config to interact with.
@@ -38,20 +39,20 @@ class Workflow(Lister, BaseClient):
38
39
  base_url (str): Base API url. Default "https://api.clarifai.com"
39
40
  **kwargs: Additional keyword arguments to be passed to the Workflow.
40
41
  """
41
- if url_init != "" and workflow_id != "":
42
- raise UserError("You can only specify one of url_init or workflow_id.")
43
- if url_init == "" and workflow_id == "":
44
- raise UserError("You must specify one of url_init or workflow_id.")
45
- if url_init != "":
42
+ if url and workflow_id:
43
+ raise UserError("You can only specify one of url or workflow_id.")
44
+ if not url and not workflow_id:
45
+ raise UserError("You must specify one of url or workflow_id.")
46
+ if url:
46
47
  user_id, app_id, _, workflow_id, workflow_version_id = ClarifaiUrlHelper.split_clarifai_url(
47
- url_init)
48
+ url)
48
49
  workflow_version = {'id': workflow_version_id}
49
50
  kwargs = {'user_id': user_id, 'app_id': app_id}
50
51
  self.kwargs = {**kwargs, 'id': workflow_id, 'version': workflow_version}
51
52
  self.output_config = output_config
52
53
  self.workflow_info = resources_pb2.Workflow(**self.kwargs)
53
54
  self.logger = get_logger(logger_level="INFO")
54
- BaseClient.__init__(self, user_id=self.user_id, app_id=self.app_id, base=base_url)
55
+ BaseClient.__init__(self, user_id=self.user_id, app_id=self.app_id, base=base_url, pat=pat)
55
56
  Lister.__init__(self)
56
57
 
57
58
  def predict(self, inputs: List[Input]):
@@ -84,7 +85,7 @@ class Workflow(Lister, BaseClient):
84
85
 
85
86
  Example:
86
87
  >>> from clarifai.client.workflow import Workflow
87
- >>> workflow = Workflow("workflow_url") # Example: https://clarifai.com/clarifai/main/workflows/Face-Sentiment
88
+ >>> workflow = Workflow("url") # Example: https://clarifai.com/clarifai/main/workflows/Face-Sentiment
88
89
  or
89
90
  >>> workflow = Workflow(user_id='user_id', app_id='app_id', workflow_id='workflow_id')
90
91
  >>> workflow_prediction = workflow.predict_by_filepath('filepath', 'image')
@@ -112,13 +113,13 @@ class Workflow(Lister, BaseClient):
112
113
  raise UserError('Invalid bytes.')
113
114
 
114
115
  if input_type == "image":
115
- input_proto = Inputs().get_input_from_bytes("", image_bytes=input_bytes)
116
+ input_proto = Inputs.get_input_from_bytes("", image_bytes=input_bytes)
116
117
  elif input_type == "text":
117
- input_proto = Inputs().get_input_from_bytes("", text_bytes=input_bytes)
118
+ input_proto = Inputs.get_input_from_bytes("", text_bytes=input_bytes)
118
119
  elif input_type == "video":
119
- input_proto = Inputs().get_input_from_bytes("", video_bytes=input_bytes)
120
+ input_proto = Inputs.get_input_from_bytes("", video_bytes=input_bytes)
120
121
  elif input_type == "audio":
121
- input_proto = Inputs().get_input_from_bytes("", audio_bytes=input_bytes)
122
+ input_proto = Inputs.get_input_from_bytes("", audio_bytes=input_bytes)
122
123
 
123
124
  return self.predict(inputs=[input_proto])
124
125
 
@@ -131,7 +132,7 @@ class Workflow(Lister, BaseClient):
131
132
 
132
133
  Example:
133
134
  >>> from clarifai.client.workflow import Workflow
134
- >>> workflow = Workflow("workflow_url") # Example: https://clarifai.com/clarifai/main/workflows/Face-Sentiment
135
+ >>> workflow = Workflow("url") # Example: https://clarifai.com/clarifai/main/workflows/Face-Sentiment
135
136
  or
136
137
  >>> workflow = Workflow(user_id='user_id', app_id='app_id', workflow_id='workflow_id')
137
138
  >>> workflow_prediction = workflow.predict_by_url('url', 'image')
@@ -140,13 +141,13 @@ class Workflow(Lister, BaseClient):
140
141
  raise UserError('Invalid input type it should be image, text, video or audio.')
141
142
 
142
143
  if input_type == "image":
143
- input_proto = Inputs().get_input_from_url("", image_url=url)
144
+ input_proto = Inputs.get_input_from_url("", image_url=url)
144
145
  elif input_type == "text":
145
- input_proto = Inputs().get_input_from_url("", text_url=url)
146
+ input_proto = Inputs.get_input_from_url("", text_url=url)
146
147
  elif input_type == "video":
147
- input_proto = Inputs().get_input_from_url("", video_url=url)
148
+ input_proto = Inputs.get_input_from_url("", video_url=url)
148
149
  elif input_type == "audio":
149
- input_proto = Inputs().get_input_from_url("", audio_url=url)
150
+ input_proto = Inputs.get_input_from_url("", audio_url=url)
150
151
 
151
152
  return self.predict(inputs=[input_proto])
152
153
 
@@ -187,6 +188,7 @@ class Workflow(Lister, BaseClient):
187
188
  yield Workflow(
188
189
  workflow_id=self.id,
189
190
  base_url=self.base,
191
+ pat=self.pat,
190
192
  **dict(self.kwargs, version=workflow_version_info))
191
193
 
192
194
  def export(self, out_path: str):
@@ -0,0 +1,22 @@
1
+ DATASET_UPLOAD_TASKS = [
2
+ "visual_classification", "text_classification", "visual_detection", "visual_segmentation",
3
+ "visual_captioning"
4
+ ]
5
+
6
+ TASK_TO_ANNOTATION_TYPE = {
7
+ "visual_classification": {
8
+ "concepts": "labels"
9
+ },
10
+ "text_classification": {
11
+ "concepts": "labels"
12
+ },
13
+ "visual_captioning": {
14
+ "concepts": "labels"
15
+ },
16
+ "visual_detection": {
17
+ "bboxes": "bboxes"
18
+ },
19
+ "visual_segmentation": {
20
+ "polygons": "polygons"
21
+ },
22
+ }
@@ -3,7 +3,7 @@ from typing import Iterator, List, Tuple, TypeVar, Union
3
3
 
4
4
  from clarifai_grpc.grpc.api import resources_pb2
5
5
 
6
- from clarifai.client.input import Inputs
6
+ from clarifai.constants.dataset import DATASET_UPLOAD_TASKS
7
7
  from clarifai.datasets.upload.features import (TextFeatures, VisualClassificationFeatures,
8
8
  VisualDetectionFeatures, VisualSegmentationFeatures)
9
9
 
@@ -16,18 +16,16 @@ OutputFeaturesType = TypeVar(
16
16
  class ClarifaiDataset:
17
17
  """Clarifai datasets base class."""
18
18
 
19
- def __init__(self, datagen_object: Iterator, dataset_id: str, split: str) -> None:
20
- self.datagen_object = datagen_object
19
+ def __init__(self, data_generator: 'ClarifaiDataLoader', dataset_id: str) -> None:
20
+ self.data_generator = data_generator
21
21
  self.dataset_id = dataset_id
22
- self.split = split
23
22
  self.all_input_ids = {}
24
23
  self._all_input_protos = {}
25
24
  self._all_annotation_protos = defaultdict(list)
26
- self.input_object = Inputs()
27
25
 
28
26
  def __len__(self) -> int:
29
27
  """Get size of all input protos"""
30
- return len(self.datagen_object)
28
+ return len(self.data_generator)
31
29
 
32
30
  def _to_list(self, input_protos: Iterator) -> List:
33
31
  """Parse protos iterator to list."""
@@ -53,9 +51,13 @@ class ClarifaiDataset:
53
51
  class ClarifaiDataLoader:
54
52
  """Clarifai data loader base class."""
55
53
 
56
- def __init__(self, split: str) -> None:
54
+ def __init__(self) -> None:
57
55
  pass
58
56
 
57
+ @property
58
+ def task(self):
59
+ raise NotImplementedError("Task should be one of {}".format(DATASET_UPLOAD_TASKS))
60
+
59
61
  def load_data(self) -> None:
60
62
  raise NotImplementedError()
61
63
 
@@ -16,7 +16,7 @@ class TextFeatures:
16
16
  class VisualClassificationFeatures:
17
17
  """Image classification datasets preprocessing output features."""
18
18
  image_path: str
19
- label: Union[str, int]
19
+ labels: List[Union[str, int]] # List[str or int] to cater for multi-class tasks
20
20
  geo_info: Optional[List[float]] = None #[Longitude, Latitude]
21
21
  id: Optional[int] = None # image_id
22
22
  metadata: Optional[dict] = None
@@ -26,7 +26,7 @@ class VisualClassificationFeatures:
26
26
  class VisualDetectionFeatures:
27
27
  """Image Detection datasets preprocessing output features."""
28
28
  image_path: str
29
- classes: List[Union[str, int]]
29
+ labels: List[Union[str, int]]
30
30
  bboxes: List[List[float]]
31
31
  geo_info: Optional[List[float]] = None #[Longitude, Latitude]
32
32
  id: Optional[int] = None # image_id
@@ -37,7 +37,7 @@ class VisualDetectionFeatures:
37
37
  class VisualSegmentationFeatures:
38
38
  """Image Segmentation datasets preprocessing output features."""
39
39
  image_path: str
40
- classes: List[Union[str, int]]
40
+ labels: List[Union[str, int]]
41
41
  polygons: List[List[List[float]]]
42
42
  geo_info: Optional[List[float]] = None #[Longitude, Latitude]
43
43
  id: Optional[int] = None # image_id
@@ -1,17 +1,18 @@
1
1
  import os
2
2
  from concurrent.futures import ThreadPoolExecutor
3
- from typing import Iterator, List, Tuple
3
+ from typing import List, Tuple, Type
4
4
 
5
5
  from clarifai_grpc.grpc.api import resources_pb2
6
6
  from google.protobuf.struct_pb2 import Struct
7
7
 
8
- from .base import ClarifaiDataset
8
+ from clarifai.client.input import Inputs
9
+ from clarifai.datasets.upload.base import ClarifaiDataLoader, ClarifaiDataset
9
10
 
10
11
 
11
12
  class VisualClassificationDataset(ClarifaiDataset):
12
13
 
13
- def __init__(self, datagen_object: Iterator, dataset_id: str, split: str) -> None:
14
- super().__init__(datagen_object, dataset_id, split)
14
+ def __init__(self, data_generator: Type[ClarifaiDataLoader], dataset_id: str) -> None:
15
+ super().__init__(data_generator, dataset_id)
15
16
 
16
17
  def _extract_protos(self, batch_input_ids: List[str]
17
18
  ) -> Tuple[List[resources_pb2.Input], List[resources_pb2.Annotation]]:
@@ -24,31 +25,31 @@ class VisualClassificationDataset(ClarifaiDataset):
24
25
  """
25
26
  input_protos, annotation_protos = [], []
26
27
 
27
- def process_datagen_item(id):
28
- datagen_item = self.datagen_object[id]
28
+ def process_data_item(id):
29
+ data_item = self.data_generator[id]
29
30
  metadata = Struct()
30
- image_path = datagen_item.image_path
31
- label = datagen_item.label if isinstance(datagen_item.label,
32
- list) else [datagen_item.label] # clarifai concept
33
- input_id = f"{self.dataset_id}-{self.split}-{id}" if datagen_item.id is None else f"{self.dataset_id}-{self.split}-{str(datagen_item.id)}"
34
- geo_info = datagen_item.geo_info
35
- if datagen_item.metadata is not None:
36
- metadata.update(datagen_item.metadata)
31
+ image_path = data_item.image_path
32
+ labels = data_item.labels if isinstance(data_item.labels,
33
+ list) else [data_item.labels] # clarifai concept
34
+ input_id = f"{self.dataset_id}-{id}" if data_item.id is None else f"{self.dataset_id}-{str(data_item.id)}"
35
+ geo_info = data_item.geo_info
36
+ if data_item.metadata is not None:
37
+ metadata.update(data_item.metadata)
37
38
  else:
38
- metadata.update({"filename": os.path.basename(image_path), "split": self.split})
39
+ metadata.update({"filename": os.path.basename(image_path)})
39
40
 
40
41
  self.all_input_ids[id] = input_id
41
42
  input_protos.append(
42
- self.input_object.get_input_from_file(
43
+ Inputs.get_input_from_file(
43
44
  input_id=input_id,
44
45
  image_file=image_path,
45
46
  dataset_id=self.dataset_id,
46
- labels=label,
47
+ labels=labels,
47
48
  geo_info=geo_info,
48
49
  metadata=metadata))
49
50
 
50
51
  with ThreadPoolExecutor(max_workers=4) as executor:
51
- futures = [executor.submit(process_datagen_item, id) for id in batch_input_ids]
52
+ futures = [executor.submit(process_data_item, id) for id in batch_input_ids]
52
53
  for job in futures:
53
54
  job.result()
54
55
 
@@ -58,8 +59,8 @@ class VisualClassificationDataset(ClarifaiDataset):
58
59
  class VisualDetectionDataset(ClarifaiDataset):
59
60
  """Visual detection dataset proto class."""
60
61
 
61
- def __init__(self, datagen_object: Iterator, dataset_id: str, split: str) -> None:
62
- super().__init__(datagen_object, dataset_id, split)
62
+ def __init__(self, data_generator: Type[ClarifaiDataLoader], dataset_id: str) -> None:
63
+ super().__init__(data_generator, dataset_id)
63
64
 
64
65
  def _extract_protos(self, batch_input_ids: List[int]
65
66
  ) -> Tuple[List[resources_pb2.Input], List[resources_pb2.Annotation]]:
@@ -72,36 +73,35 @@ class VisualDetectionDataset(ClarifaiDataset):
72
73
  """
73
74
  input_protos, annotation_protos = [], []
74
75
 
75
- def process_datagen_item(id):
76
- datagen_item = self.datagen_object[id]
76
+ def process_data_item(id):
77
+ data_item = self.data_generator[id]
77
78
  metadata = Struct()
78
- image = datagen_item.image_path
79
- labels = datagen_item.classes # list:[l1,...,ln]
80
- bboxes = datagen_item.bboxes # [[xmin,ymin,xmax,ymax],...,[xmin,ymin,xmax,ymax]]
81
- input_id = f"{self.dataset_id}-{self.split}-{id}" if datagen_item.id is None else f"{self.dataset_id}-{self.split}-{str(datagen_item.id)}"
82
- if datagen_item.metadata is not None:
83
- metadata.update(datagen_item.metadata)
79
+ image = data_item.image_path
80
+ labels = data_item.labels # list:[l1,...,ln]
81
+ bboxes = data_item.bboxes # [[xmin,ymin,xmax,ymax],...,[xmin,ymin,xmax,ymax]]
82
+ input_id = f"{self.dataset_id}-{id}" if data_item.id is None else f"{self.dataset_id}-{str(data_item.id)}"
83
+ if data_item.metadata is not None:
84
+ metadata.update(data_item.metadata)
84
85
  else:
85
- metadata.update({"filename": os.path.basename(image), "split": self.split})
86
- geo_info = datagen_item.geo_info
86
+ metadata.update({"filename": os.path.basename(image)})
87
+ geo_info = data_item.geo_info
87
88
 
88
89
  self.all_input_ids[id] = input_id
89
90
  input_protos.append(
90
- self.input_object.get_input_from_file(
91
+ Inputs.get_input_from_file(
91
92
  input_id=input_id,
92
93
  image_file=image,
93
94
  dataset_id=self.dataset_id,
94
95
  geo_info=geo_info,
95
96
  metadata=metadata))
96
- # iter over bboxes and classes
97
+ # iter over bboxes and labels
97
98
  # one id could have more than one bbox and label
98
99
  for i in range(len(bboxes)):
99
100
  annotation_protos.append(
100
- self.input_object.get_annotation_proto(
101
- input_id=input_id, label=labels[i], annotations=bboxes[i]))
101
+ Inputs.get_annotation_proto(input_id=input_id, label=labels[i], annotations=bboxes[i]))
102
102
 
103
103
  with ThreadPoolExecutor(max_workers=4) as executor:
104
- futures = [executor.submit(process_datagen_item, id) for id in batch_input_ids]
104
+ futures = [executor.submit(process_data_item, id) for id in batch_input_ids]
105
105
  for job in futures:
106
106
  job.result()
107
107
 
@@ -111,8 +111,8 @@ class VisualDetectionDataset(ClarifaiDataset):
111
111
  class VisualSegmentationDataset(ClarifaiDataset):
112
112
  """Visual segmentation dataset proto class."""
113
113
 
114
- def __init__(self, datagen_object: Iterator, dataset_id: str, split: str) -> None:
115
- super().__init__(datagen_object, dataset_id, split)
114
+ def __init__(self, data_generator: Type[ClarifaiDataLoader], dataset_id: str) -> None:
115
+ super().__init__(data_generator, dataset_id)
116
116
 
117
117
  def _extract_protos(self, batch_input_ids: List[str]
118
118
  ) -> Tuple[List[resources_pb2.Input], List[resources_pb2.Annotation]]:
@@ -125,22 +125,22 @@ class VisualSegmentationDataset(ClarifaiDataset):
125
125
  """
126
126
  input_protos, annotation_protos = [], []
127
127
 
128
- def process_datagen_item(id):
129
- datagen_item = self.datagen_object[id]
128
+ def process_data_item(id):
129
+ data_item = self.data_generator[id]
130
130
  metadata = Struct()
131
- image = datagen_item.image_path
132
- labels = datagen_item.classes
133
- _polygons = datagen_item.polygons # list of polygons: [[[x,y],...,[x,y]],...]
134
- input_id = f"{self.dataset_id}-{self.split}-{id}" if datagen_item.id is None else f"{self.dataset_id}-{self.split}-{str(datagen_item.id)}"
135
- if datagen_item.metadata is not None:
136
- metadata.update(datagen_item.metadata)
131
+ image = data_item.image_path
132
+ labels = data_item.labels
133
+ _polygons = data_item.polygons # list of polygons: [[[x,y],...,[x,y]],...]
134
+ input_id = f"{self.dataset_id}-{id}" if data_item.id is None else f"{self.dataset_id}-{str(data_item.id)}"
135
+ if data_item.metadata is not None:
136
+ metadata.update(data_item.metadata)
137
137
  else:
138
- metadata.update({"filename": os.path.basename(image), "split": self.split})
139
- geo_info = datagen_item.geo_info
138
+ metadata.update({"filename": os.path.basename(image)})
139
+ geo_info = data_item.geo_info
140
140
 
141
141
  self.all_input_ids[id] = input_id
142
142
  input_protos.append(
143
- self.input_object.get_input_from_file(
143
+ Inputs.get_input_from_file(
144
144
  input_id=input_id,
145
145
  image_file=image,
146
146
  dataset_id=self.dataset_id,
@@ -152,13 +152,12 @@ class VisualSegmentationDataset(ClarifaiDataset):
152
152
  for i, _polygon in enumerate(_polygons):
153
153
  try:
154
154
  annotation_protos.append(
155
- self.input_object.get_mask_proto(
156
- input_id=input_id, label=labels[i], polygons=_polygon))
155
+ Inputs.get_mask_proto(input_id=input_id, label=labels[i], polygons=_polygon))
157
156
  except IndexError:
158
157
  continue
159
158
 
160
159
  with ThreadPoolExecutor(max_workers=4) as executor:
161
- futures = [executor.submit(process_datagen_item, id) for id in batch_input_ids]
160
+ futures = [executor.submit(process_data_item, id) for id in batch_input_ids]
162
161
  for job in futures:
163
162
  job.result()
164
163
 
@@ -1,12 +1,8 @@
1
- #! COCO 2017 image captioning dataset
1
+ #! COCO image captioning dataset
2
2
 
3
3
  import os
4
- import zipfile
5
- from glob import glob
6
4
 
7
- import requests
8
5
  from pycocotools.coco import COCO
9
- from tqdm import tqdm
10
6
 
11
7
  from clarifai.datasets.upload.base import ClarifaiDataLoader
12
8
 
@@ -14,90 +10,40 @@ from ..features import VisualClassificationFeatures
14
10
 
15
11
 
16
12
  class COCOCaptionsDataLoader(ClarifaiDataLoader):
17
- """COCO 2017 Image Captioning Dataset."""
13
+ """COCO Image Captioning Dataset."""
18
14
 
19
- def __init__(self, split: str = "train"):
20
- """Initialize coco dataset.
15
+ def __init__(self, images_dir, label_filepath):
16
+ """
21
17
  Args:
22
- filenames: the coco zip filenames: Dict[str, str] to be downloaded if download=True,
23
- data_dir: the local coco dataset directory.
24
- split: "train" or "val"
18
+ images_dir: Directory containing the images.
19
+ label_filepath: Path to the COCO annotation file.
25
20
  """
26
- self.filenames = {
27
- "train": "train2017.zip",
28
- "val": "val2017.zip",
29
- "annotations": "annotations_trainval2017.zip"
30
- }
31
- self.split = split
32
- self.url = "http://images.cocodataset.org/zips/" # coco base image-zip url
33
- self.data_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)),
34
- "data") # data storage directory
35
- self.extracted_coco_dirs = {"train": None, "val": None, "annotations": None}
21
+ self.images_dir = images_dir
22
+ self.label_filepath = label_filepath
36
23
 
24
+ self.map_ids = {}
37
25
  self.load_data()
38
26
 
39
- def coco_download(self, save_dir):
40
- """Download coco dataset."""
41
- if not os.path.exists(save_dir):
42
- os.mkdir(save_dir)
43
-
44
- #check if train, val and annotation dirs exist
45
- #so that the coco2017 data isn't downloaded
46
- for key, filename in self.filenames.items():
47
- existing_files = glob(f"{save_dir}/{key}*")
48
- if existing_files:
49
- print(f"{key} dataset already downloded and extracted")
50
- continue
51
-
52
- print("-" * 80)
53
- print(f"Downloading {filename}")
54
- print("-" * 80)
55
-
56
- if "annotations" in filename:
57
- self.url = "http://images.cocodataset.org/annotations/"
27
+ @property
28
+ def task(self):
29
+ return "visual_captioning"
58
30
 
59
- response = requests.get(self.url + filename, stream=True)
60
- response.raise_for_status()
61
- with open(os.path.join(save_dir, filename), "wb") as _file:
62
- for chunk in tqdm(response.iter_content(chunk_size=5124000)):
63
- if chunk:
64
- _file.write(chunk)
65
- print("Data download complete...")
31
+ def load_data(self) -> None:
32
+ self.coco = COCO(self.label_filepath)
33
+ self.map_ids = {i: img_id for i, img_id in enumerate(list(self.coco.imgs.keys()))}
66
34
 
67
- #extract files
68
- zf = zipfile.ZipFile(os.path.join(save_dir, filename))
69
- print(f" Extracting {filename} file")
70
- zf.extractall(path=save_dir)
71
- # Delete coco zip
72
- print(f" Deleting {filename}")
73
- os.remove(path=os.path.join(save_dir, filename))
74
-
75
- def load_data(self):
76
- if isinstance(self.filenames, dict) and len(self.filenames) == 3:
77
- self.coco_download(self.data_dir)
78
- self.extracted_coco_dirs["train"] = [os.path.join(self.data_dir, i) \
79
- for i in os.listdir(self.data_dir) if "train" in i][0]
80
- self.extracted_coco_dirs["val"] = [os.path.join(self.data_dir, i) \
81
- for i in os.listdir(self.data_dir) if "val" in i][0]
82
-
83
- self.extracted_coco_dirs["annotations"] = [os.path.join(self.data_dir, i) \
84
- for i in os.listdir(self.data_dir) if "annotations" in i][0]
85
- else:
86
- raise Exception(f"`filenames` must be a dict of atleast 2 coco zip file names; \
87
- train, val and annotations. Found {len(self.filenames)} items instead.")
35
+ def __len__(self):
36
+ return len(self.coco.imgs)
88
37
 
89
- annot_file = glob(self.extracted_coco_dirs["annotations"] + "/" + f"captions_{self.split}*")[0]
90
- coco = COCO(annot_file)
91
- annot_ids = coco.getAnnIds()
92
- self.annotations = coco.loadAnns(annot_ids)
38
+ def __getitem__(self, index):
39
+ value = self.coco.imgs[self.map_ids[index]]
40
+ image_path = os.path.join(self.images_dir, value['file_name'])
41
+ annots = []
93
42
 
94
- def __len__(self):
95
- return len(self.annotations)
43
+ input_ann_ids = self.coco.getAnnIds(imgIds=[value['id']])
44
+ input_anns = self.coco.loadAnns(input_ann_ids)
96
45
 
97
- def __getitem__(self, idx):
98
- annot = self.annotations[idx]
99
- image_path = glob(
100
- os.path.join(self.extracted_coco_dirs[self.split],
101
- f"{str(annot['image_id']).zfill(12)}*"))[0]
46
+ for ann in input_anns:
47
+ annots.append(ann['caption'])
102
48
 
103
- return VisualClassificationFeatures(image_path, annot["caption"], id=annot["image_id"])
49
+ return VisualClassificationFeatures(image_path, labels=annots[0], id=str(value['id']))