dnt 0.2.1__py3-none-any.whl → 0.3.1.8__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 (315) hide show
  1. dnt/__init__.py +4 -1
  2. dnt/analysis/__init__.py +3 -1
  3. dnt/analysis/count.py +107 -0
  4. dnt/analysis/interaction2.py +518 -0
  5. dnt/analysis/position.py +12 -0
  6. dnt/analysis/stop.py +92 -33
  7. dnt/analysis/stop2.py +289 -0
  8. dnt/analysis/stop3.py +758 -0
  9. dnt/detect/__init__.py +1 -1
  10. dnt/detect/signal/detector.py +326 -0
  11. dnt/detect/timestamp.py +105 -0
  12. dnt/detect/yolov8/detector.py +182 -35
  13. dnt/detect/yolov8/segmentor.py +171 -0
  14. dnt/engine/__init__.py +8 -0
  15. dnt/engine/bbox_interp.py +83 -0
  16. dnt/engine/bbox_iou.py +20 -0
  17. dnt/engine/cluster.py +31 -0
  18. dnt/engine/iob.py +66 -0
  19. dnt/filter/__init__.py +4 -0
  20. dnt/filter/filter.py +450 -21
  21. dnt/label/__init__.py +1 -1
  22. dnt/label/labeler.py +215 -14
  23. dnt/label/labeler2.py +631 -0
  24. dnt/shared/__init__.py +2 -1
  25. dnt/shared/data/coco.names +0 -0
  26. dnt/shared/data/openimages.names +0 -0
  27. dnt/shared/data/voc.names +0 -0
  28. dnt/shared/download.py +12 -0
  29. dnt/shared/synhcro.py +150 -0
  30. dnt/shared/util.py +17 -4
  31. dnt/third_party/fast-reid/__init__.py +1 -0
  32. dnt/third_party/fast-reid/configs/Base-AGW.yml +19 -0
  33. dnt/third_party/fast-reid/configs/Base-MGN.yml +12 -0
  34. dnt/third_party/fast-reid/configs/Base-SBS.yml +63 -0
  35. dnt/third_party/fast-reid/configs/Base-bagtricks.yml +76 -0
  36. dnt/third_party/fast-reid/configs/DukeMTMC/AGW_R101-ibn.yml +12 -0
  37. dnt/third_party/fast-reid/configs/DukeMTMC/AGW_R50-ibn.yml +11 -0
  38. dnt/third_party/fast-reid/configs/DukeMTMC/AGW_R50.yml +7 -0
  39. dnt/third_party/fast-reid/configs/DukeMTMC/AGW_S50.yml +11 -0
  40. dnt/third_party/fast-reid/configs/DukeMTMC/bagtricks_R101-ibn.yml +12 -0
  41. dnt/third_party/fast-reid/configs/DukeMTMC/bagtricks_R50-ibn.yml +11 -0
  42. dnt/third_party/fast-reid/configs/DukeMTMC/bagtricks_R50.yml +7 -0
  43. dnt/third_party/fast-reid/configs/DukeMTMC/bagtricks_S50.yml +11 -0
  44. dnt/third_party/fast-reid/configs/DukeMTMC/mgn_R50-ibn.yml +11 -0
  45. dnt/third_party/fast-reid/configs/DukeMTMC/sbs_R101-ibn.yml +12 -0
  46. dnt/third_party/fast-reid/configs/DukeMTMC/sbs_R50-ibn.yml +11 -0
  47. dnt/third_party/fast-reid/configs/DukeMTMC/sbs_R50.yml +7 -0
  48. dnt/third_party/fast-reid/configs/DukeMTMC/sbs_S50.yml +11 -0
  49. dnt/third_party/fast-reid/configs/MOT17/AGW_R101-ibn.yml +12 -0
  50. dnt/third_party/fast-reid/configs/MOT17/AGW_R50-ibn.yml +11 -0
  51. dnt/third_party/fast-reid/configs/MOT17/AGW_R50.yml +7 -0
  52. dnt/third_party/fast-reid/configs/MOT17/AGW_S50.yml +11 -0
  53. dnt/third_party/fast-reid/configs/MOT17/bagtricks_R101-ibn.yml +12 -0
  54. dnt/third_party/fast-reid/configs/MOT17/bagtricks_R50-ibn.yml +11 -0
  55. dnt/third_party/fast-reid/configs/MOT17/bagtricks_R50.yml +7 -0
  56. dnt/third_party/fast-reid/configs/MOT17/bagtricks_S50.yml +11 -0
  57. dnt/third_party/fast-reid/configs/MOT17/mgn_R50-ibn.yml +11 -0
  58. dnt/third_party/fast-reid/configs/MOT17/sbs_R101-ibn.yml +12 -0
  59. dnt/third_party/fast-reid/configs/MOT17/sbs_R50-ibn.yml +11 -0
  60. dnt/third_party/fast-reid/configs/MOT17/sbs_R50.yml +7 -0
  61. dnt/third_party/fast-reid/configs/MOT17/sbs_S50.yml +11 -0
  62. dnt/third_party/fast-reid/configs/MOT20/AGW_R101-ibn.yml +12 -0
  63. dnt/third_party/fast-reid/configs/MOT20/AGW_R50-ibn.yml +11 -0
  64. dnt/third_party/fast-reid/configs/MOT20/AGW_R50.yml +7 -0
  65. dnt/third_party/fast-reid/configs/MOT20/AGW_S50.yml +11 -0
  66. dnt/third_party/fast-reid/configs/MOT20/bagtricks_R101-ibn.yml +12 -0
  67. dnt/third_party/fast-reid/configs/MOT20/bagtricks_R50-ibn.yml +11 -0
  68. dnt/third_party/fast-reid/configs/MOT20/bagtricks_R50.yml +7 -0
  69. dnt/third_party/fast-reid/configs/MOT20/bagtricks_S50.yml +11 -0
  70. dnt/third_party/fast-reid/configs/MOT20/mgn_R50-ibn.yml +11 -0
  71. dnt/third_party/fast-reid/configs/MOT20/sbs_R101-ibn.yml +12 -0
  72. dnt/third_party/fast-reid/configs/MOT20/sbs_R50-ibn.yml +11 -0
  73. dnt/third_party/fast-reid/configs/MOT20/sbs_R50.yml +7 -0
  74. dnt/third_party/fast-reid/configs/MOT20/sbs_S50.yml +11 -0
  75. dnt/third_party/fast-reid/configs/MSMT17/AGW_R101-ibn.yml +12 -0
  76. dnt/third_party/fast-reid/configs/MSMT17/AGW_R50-ibn.yml +11 -0
  77. dnt/third_party/fast-reid/configs/MSMT17/AGW_R50.yml +7 -0
  78. dnt/third_party/fast-reid/configs/MSMT17/AGW_S50.yml +11 -0
  79. dnt/third_party/fast-reid/configs/MSMT17/bagtricks_R101-ibn.yml +13 -0
  80. dnt/third_party/fast-reid/configs/MSMT17/bagtricks_R50-ibn.yml +12 -0
  81. dnt/third_party/fast-reid/configs/MSMT17/bagtricks_R50.yml +7 -0
  82. dnt/third_party/fast-reid/configs/MSMT17/bagtricks_S50.yml +12 -0
  83. dnt/third_party/fast-reid/configs/MSMT17/mgn_R50-ibn.yml +11 -0
  84. dnt/third_party/fast-reid/configs/MSMT17/sbs_R101-ibn.yml +12 -0
  85. dnt/third_party/fast-reid/configs/MSMT17/sbs_R50-ibn.yml +11 -0
  86. dnt/third_party/fast-reid/configs/MSMT17/sbs_R50.yml +7 -0
  87. dnt/third_party/fast-reid/configs/MSMT17/sbs_S50.yml +11 -0
  88. dnt/third_party/fast-reid/configs/Market1501/AGW_R101-ibn.yml +12 -0
  89. dnt/third_party/fast-reid/configs/Market1501/AGW_R50-ibn.yml +11 -0
  90. dnt/third_party/fast-reid/configs/Market1501/AGW_R50.yml +7 -0
  91. dnt/third_party/fast-reid/configs/Market1501/AGW_S50.yml +11 -0
  92. dnt/third_party/fast-reid/configs/Market1501/bagtricks_R101-ibn.yml +12 -0
  93. dnt/third_party/fast-reid/configs/Market1501/bagtricks_R50-ibn.yml +11 -0
  94. dnt/third_party/fast-reid/configs/Market1501/bagtricks_R50.yml +7 -0
  95. dnt/third_party/fast-reid/configs/Market1501/bagtricks_S50.yml +11 -0
  96. dnt/third_party/fast-reid/configs/Market1501/bagtricks_vit.yml +88 -0
  97. dnt/third_party/fast-reid/configs/Market1501/mgn_R50-ibn.yml +11 -0
  98. dnt/third_party/fast-reid/configs/Market1501/sbs_R101-ibn.yml +12 -0
  99. dnt/third_party/fast-reid/configs/Market1501/sbs_R50-ibn.yml +11 -0
  100. dnt/third_party/fast-reid/configs/Market1501/sbs_R50.yml +7 -0
  101. dnt/third_party/fast-reid/configs/Market1501/sbs_S50.yml +11 -0
  102. dnt/third_party/fast-reid/configs/VERIWild/bagtricks_R50-ibn.yml +35 -0
  103. dnt/third_party/fast-reid/configs/VeRi/sbs_R50-ibn.yml +35 -0
  104. dnt/third_party/fast-reid/configs/VehicleID/bagtricks_R50-ibn.yml +36 -0
  105. dnt/third_party/fast-reid/configs/__init__.py +0 -0
  106. dnt/third_party/fast-reid/fast_reid_interfece.py +175 -0
  107. dnt/third_party/fast-reid/fastreid/__init__.py +6 -0
  108. dnt/third_party/fast-reid/fastreid/config/__init__.py +15 -0
  109. dnt/third_party/fast-reid/fastreid/config/config.py +319 -0
  110. dnt/third_party/fast-reid/fastreid/config/defaults.py +329 -0
  111. dnt/third_party/fast-reid/fastreid/data/__init__.py +17 -0
  112. dnt/third_party/fast-reid/fastreid/data/build.py +194 -0
  113. dnt/third_party/fast-reid/fastreid/data/common.py +58 -0
  114. dnt/third_party/fast-reid/fastreid/data/data_utils.py +202 -0
  115. dnt/third_party/fast-reid/fastreid/data/datasets/AirportALERT.py +50 -0
  116. dnt/third_party/fast-reid/fastreid/data/datasets/__init__.py +43 -0
  117. dnt/third_party/fast-reid/fastreid/data/datasets/bases.py +183 -0
  118. dnt/third_party/fast-reid/fastreid/data/datasets/caviara.py +44 -0
  119. dnt/third_party/fast-reid/fastreid/data/datasets/cuhk03.py +274 -0
  120. dnt/third_party/fast-reid/fastreid/data/datasets/cuhk_sysu.py +58 -0
  121. dnt/third_party/fast-reid/fastreid/data/datasets/dukemtmcreid.py +70 -0
  122. dnt/third_party/fast-reid/fastreid/data/datasets/grid.py +44 -0
  123. dnt/third_party/fast-reid/fastreid/data/datasets/iLIDS.py +45 -0
  124. dnt/third_party/fast-reid/fastreid/data/datasets/lpw.py +49 -0
  125. dnt/third_party/fast-reid/fastreid/data/datasets/market1501.py +89 -0
  126. dnt/third_party/fast-reid/fastreid/data/datasets/msmt17.py +114 -0
  127. dnt/third_party/fast-reid/fastreid/data/datasets/pes3d.py +44 -0
  128. dnt/third_party/fast-reid/fastreid/data/datasets/pku.py +44 -0
  129. dnt/third_party/fast-reid/fastreid/data/datasets/prai.py +43 -0
  130. dnt/third_party/fast-reid/fastreid/data/datasets/prid.py +41 -0
  131. dnt/third_party/fast-reid/fastreid/data/datasets/saivt.py +47 -0
  132. dnt/third_party/fast-reid/fastreid/data/datasets/sensereid.py +47 -0
  133. dnt/third_party/fast-reid/fastreid/data/datasets/shinpuhkan.py +48 -0
  134. dnt/third_party/fast-reid/fastreid/data/datasets/sysu_mm.py +47 -0
  135. dnt/third_party/fast-reid/fastreid/data/datasets/thermalworld.py +43 -0
  136. dnt/third_party/fast-reid/fastreid/data/datasets/vehicleid.py +126 -0
  137. dnt/third_party/fast-reid/fastreid/data/datasets/veri.py +69 -0
  138. dnt/third_party/fast-reid/fastreid/data/datasets/veriwild.py +140 -0
  139. dnt/third_party/fast-reid/fastreid/data/datasets/viper.py +45 -0
  140. dnt/third_party/fast-reid/fastreid/data/datasets/wildtracker.py +59 -0
  141. dnt/third_party/fast-reid/fastreid/data/samplers/__init__.py +18 -0
  142. dnt/third_party/fast-reid/fastreid/data/samplers/data_sampler.py +85 -0
  143. dnt/third_party/fast-reid/fastreid/data/samplers/imbalance_sampler.py +67 -0
  144. dnt/third_party/fast-reid/fastreid/data/samplers/triplet_sampler.py +260 -0
  145. dnt/third_party/fast-reid/fastreid/data/transforms/__init__.py +11 -0
  146. dnt/third_party/fast-reid/fastreid/data/transforms/autoaugment.py +806 -0
  147. dnt/third_party/fast-reid/fastreid/data/transforms/build.py +100 -0
  148. dnt/third_party/fast-reid/fastreid/data/transforms/functional.py +180 -0
  149. dnt/third_party/fast-reid/fastreid/data/transforms/transforms.py +161 -0
  150. dnt/third_party/fast-reid/fastreid/engine/__init__.py +15 -0
  151. dnt/third_party/fast-reid/fastreid/engine/defaults.py +490 -0
  152. dnt/third_party/fast-reid/fastreid/engine/hooks.py +534 -0
  153. dnt/third_party/fast-reid/fastreid/engine/launch.py +103 -0
  154. dnt/third_party/fast-reid/fastreid/engine/train_loop.py +357 -0
  155. dnt/third_party/fast-reid/fastreid/evaluation/__init__.py +6 -0
  156. dnt/third_party/fast-reid/fastreid/evaluation/clas_evaluator.py +81 -0
  157. dnt/third_party/fast-reid/fastreid/evaluation/evaluator.py +176 -0
  158. dnt/third_party/fast-reid/fastreid/evaluation/query_expansion.py +46 -0
  159. dnt/third_party/fast-reid/fastreid/evaluation/rank.py +200 -0
  160. dnt/third_party/fast-reid/fastreid/evaluation/rank_cylib/__init__.py +20 -0
  161. dnt/third_party/fast-reid/fastreid/evaluation/rank_cylib/setup.py +32 -0
  162. dnt/third_party/fast-reid/fastreid/evaluation/rank_cylib/test_cython.py +106 -0
  163. dnt/third_party/fast-reid/fastreid/evaluation/reid_evaluation.py +143 -0
  164. dnt/third_party/fast-reid/fastreid/evaluation/rerank.py +73 -0
  165. dnt/third_party/fast-reid/fastreid/evaluation/roc.py +90 -0
  166. dnt/third_party/fast-reid/fastreid/evaluation/testing.py +88 -0
  167. dnt/third_party/fast-reid/fastreid/layers/__init__.py +19 -0
  168. dnt/third_party/fast-reid/fastreid/layers/activation.py +59 -0
  169. dnt/third_party/fast-reid/fastreid/layers/any_softmax.py +80 -0
  170. dnt/third_party/fast-reid/fastreid/layers/batch_norm.py +205 -0
  171. dnt/third_party/fast-reid/fastreid/layers/context_block.py +113 -0
  172. dnt/third_party/fast-reid/fastreid/layers/drop.py +161 -0
  173. dnt/third_party/fast-reid/fastreid/layers/frn.py +199 -0
  174. dnt/third_party/fast-reid/fastreid/layers/gather_layer.py +30 -0
  175. dnt/third_party/fast-reid/fastreid/layers/helpers.py +31 -0
  176. dnt/third_party/fast-reid/fastreid/layers/non_local.py +54 -0
  177. dnt/third_party/fast-reid/fastreid/layers/pooling.py +124 -0
  178. dnt/third_party/fast-reid/fastreid/layers/se_layer.py +25 -0
  179. dnt/third_party/fast-reid/fastreid/layers/splat.py +109 -0
  180. dnt/third_party/fast-reid/fastreid/layers/weight_init.py +122 -0
  181. dnt/third_party/fast-reid/fastreid/modeling/__init__.py +23 -0
  182. dnt/third_party/fast-reid/fastreid/modeling/backbones/__init__.py +18 -0
  183. dnt/third_party/fast-reid/fastreid/modeling/backbones/build.py +27 -0
  184. dnt/third_party/fast-reid/fastreid/modeling/backbones/mobilenet.py +195 -0
  185. dnt/third_party/fast-reid/fastreid/modeling/backbones/mobilenetv3.py +283 -0
  186. dnt/third_party/fast-reid/fastreid/modeling/backbones/osnet.py +525 -0
  187. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/__init__.py +4 -0
  188. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/config.py +396 -0
  189. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/effnet/EN-B0_dds_8gpu.yaml +27 -0
  190. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/effnet/EN-B1_dds_8gpu.yaml +27 -0
  191. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/effnet/EN-B2_dds_8gpu.yaml +27 -0
  192. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/effnet/EN-B3_dds_8gpu.yaml +27 -0
  193. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/effnet/EN-B4_dds_8gpu.yaml +27 -0
  194. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/effnet/EN-B5_dds_8gpu.yaml +27 -0
  195. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/effnet.py +281 -0
  196. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnet.py +596 -0
  197. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnetx/RegNetX-1.6GF_dds_8gpu.yaml +26 -0
  198. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnetx/RegNetX-12GF_dds_8gpu.yaml +26 -0
  199. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnetx/RegNetX-16GF_dds_8gpu.yaml +26 -0
  200. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnetx/RegNetX-200MF_dds_8gpu.yaml +26 -0
  201. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnetx/RegNetX-3.2GF_dds_8gpu.yaml +26 -0
  202. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnetx/RegNetX-32GF_dds_8gpu.yaml +26 -0
  203. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnetx/RegNetX-4.0GF_dds_8gpu.yaml +26 -0
  204. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnetx/RegNetX-400MF_dds_8gpu.yaml +26 -0
  205. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnetx/RegNetX-6.4GF_dds_8gpu.yaml +26 -0
  206. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnetx/RegNetX-600MF_dds_8gpu.yaml +26 -0
  207. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnetx/RegNetX-8.0GF_dds_8gpu.yaml +26 -0
  208. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnetx/RegNetX-800MF_dds_8gpu.yaml +26 -0
  209. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnety/RegNetY-1.6GF_dds_8gpu.yaml +27 -0
  210. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnety/RegNetY-12GF_dds_8gpu.yaml +27 -0
  211. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnety/RegNetY-16GF_dds_8gpu.yaml +27 -0
  212. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnety/RegNetY-200MF_dds_8gpu.yaml +26 -0
  213. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnety/RegNetY-3.2GF_dds_8gpu.yaml +27 -0
  214. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnety/RegNetY-32GF_dds_8gpu.yaml +27 -0
  215. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnety/RegNetY-4.0GF_dds_8gpu.yaml +27 -0
  216. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnety/RegNetY-400MF_dds_8gpu.yaml +27 -0
  217. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnety/RegNetY-6.4GF_dds_8gpu.yaml +27 -0
  218. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnety/RegNetY-600MF_dds_8gpu.yaml +27 -0
  219. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnety/RegNetY-8.0GF_dds_8gpu.yaml +27 -0
  220. dnt/third_party/fast-reid/fastreid/modeling/backbones/regnet/regnety/RegNetY-800MF_dds_8gpu.yaml +27 -0
  221. dnt/third_party/fast-reid/fastreid/modeling/backbones/repvgg.py +309 -0
  222. dnt/third_party/fast-reid/fastreid/modeling/backbones/resnest.py +365 -0
  223. dnt/third_party/fast-reid/fastreid/modeling/backbones/resnet.py +364 -0
  224. dnt/third_party/fast-reid/fastreid/modeling/backbones/resnext.py +335 -0
  225. dnt/third_party/fast-reid/fastreid/modeling/backbones/shufflenet.py +203 -0
  226. dnt/third_party/fast-reid/fastreid/modeling/backbones/vision_transformer.py +399 -0
  227. dnt/third_party/fast-reid/fastreid/modeling/heads/__init__.py +11 -0
  228. dnt/third_party/fast-reid/fastreid/modeling/heads/build.py +25 -0
  229. dnt/third_party/fast-reid/fastreid/modeling/heads/clas_head.py +36 -0
  230. dnt/third_party/fast-reid/fastreid/modeling/heads/embedding_head.py +151 -0
  231. dnt/third_party/fast-reid/fastreid/modeling/losses/__init__.py +12 -0
  232. dnt/third_party/fast-reid/fastreid/modeling/losses/circle_loss.py +71 -0
  233. dnt/third_party/fast-reid/fastreid/modeling/losses/cross_entroy_loss.py +54 -0
  234. dnt/third_party/fast-reid/fastreid/modeling/losses/focal_loss.py +92 -0
  235. dnt/third_party/fast-reid/fastreid/modeling/losses/triplet_loss.py +113 -0
  236. dnt/third_party/fast-reid/fastreid/modeling/losses/utils.py +48 -0
  237. dnt/third_party/fast-reid/fastreid/modeling/meta_arch/__init__.py +14 -0
  238. dnt/third_party/fast-reid/fastreid/modeling/meta_arch/baseline.py +188 -0
  239. dnt/third_party/fast-reid/fastreid/modeling/meta_arch/build.py +26 -0
  240. dnt/third_party/fast-reid/fastreid/modeling/meta_arch/distiller.py +140 -0
  241. dnt/third_party/fast-reid/fastreid/modeling/meta_arch/mgn.py +394 -0
  242. dnt/third_party/fast-reid/fastreid/modeling/meta_arch/moco.py +126 -0
  243. dnt/third_party/fast-reid/fastreid/solver/__init__.py +8 -0
  244. dnt/third_party/fast-reid/fastreid/solver/build.py +348 -0
  245. dnt/third_party/fast-reid/fastreid/solver/lr_scheduler.py +66 -0
  246. dnt/third_party/fast-reid/fastreid/solver/optim/__init__.py +10 -0
  247. dnt/third_party/fast-reid/fastreid/solver/optim/lamb.py +123 -0
  248. dnt/third_party/fast-reid/fastreid/solver/optim/radam.py +149 -0
  249. dnt/third_party/fast-reid/fastreid/solver/optim/swa.py +246 -0
  250. dnt/third_party/fast-reid/fastreid/utils/__init__.py +6 -0
  251. dnt/third_party/fast-reid/fastreid/utils/checkpoint.py +503 -0
  252. dnt/third_party/fast-reid/fastreid/utils/collect_env.py +158 -0
  253. dnt/third_party/fast-reid/fastreid/utils/comm.py +255 -0
  254. dnt/third_party/fast-reid/fastreid/utils/compute_dist.py +200 -0
  255. dnt/third_party/fast-reid/fastreid/utils/env.py +119 -0
  256. dnt/third_party/fast-reid/fastreid/utils/events.py +461 -0
  257. dnt/third_party/fast-reid/fastreid/utils/faiss_utils.py +127 -0
  258. dnt/third_party/fast-reid/fastreid/utils/file_io.py +520 -0
  259. dnt/third_party/fast-reid/fastreid/utils/history_buffer.py +71 -0
  260. dnt/third_party/fast-reid/fastreid/utils/logger.py +211 -0
  261. dnt/third_party/fast-reid/fastreid/utils/params.py +103 -0
  262. dnt/third_party/fast-reid/fastreid/utils/precision_bn.py +94 -0
  263. dnt/third_party/fast-reid/fastreid/utils/registry.py +66 -0
  264. dnt/third_party/fast-reid/fastreid/utils/summary.py +120 -0
  265. dnt/third_party/fast-reid/fastreid/utils/timer.py +68 -0
  266. dnt/third_party/fast-reid/fastreid/utils/visualizer.py +278 -0
  267. dnt/track/__init__.py +3 -1
  268. dnt/track/botsort/__init__.py +4 -0
  269. dnt/track/botsort/bot_tracker/__init__.py +3 -0
  270. dnt/track/botsort/bot_tracker/basetrack.py +60 -0
  271. dnt/track/botsort/bot_tracker/bot_sort.py +473 -0
  272. dnt/track/botsort/bot_tracker/gmc.py +316 -0
  273. dnt/track/botsort/bot_tracker/kalman_filter.py +269 -0
  274. dnt/track/botsort/bot_tracker/matching.py +194 -0
  275. dnt/track/botsort/bot_tracker/mc_bot_sort.py +505 -0
  276. dnt/track/{dsort/utils → botsort/bot_tracker/tracking_utils}/evaluation.py +14 -4
  277. dnt/track/{dsort/utils → botsort/bot_tracker/tracking_utils}/io.py +19 -36
  278. dnt/track/botsort/bot_tracker/tracking_utils/timer.py +37 -0
  279. dnt/track/botsort/inference.py +96 -0
  280. dnt/track/config.py +120 -0
  281. dnt/track/dsort/configs/bagtricks_R50.yml +7 -0
  282. dnt/track/dsort/configs/deep_sort.yaml +0 -0
  283. dnt/track/dsort/configs/fastreid.yaml +1 -1
  284. dnt/track/dsort/deep_sort/deep/checkpoint/ckpt.t7 +0 -0
  285. dnt/track/dsort/deep_sort/deep/feature_extractor.py +87 -8
  286. dnt/track/dsort/deep_sort/deep_sort.py +31 -21
  287. dnt/track/dsort/deep_sort/sort/detection.py +2 -1
  288. dnt/track/dsort/deep_sort/sort/iou_matching.py +0 -2
  289. dnt/track/dsort/deep_sort/sort/linear_assignment.py +0 -3
  290. dnt/track/dsort/deep_sort/sort/nn_matching.py +5 -5
  291. dnt/track/dsort/deep_sort/sort/preprocessing.py +1 -2
  292. dnt/track/dsort/deep_sort/sort/track.py +2 -1
  293. dnt/track/dsort/deep_sort/sort/tracker.py +1 -1
  294. dnt/track/dsort/dsort.py +44 -27
  295. dnt/track/re_class.py +117 -0
  296. dnt/track/sort/sort.py +9 -7
  297. dnt/track/tracker.py +225 -20
  298. dnt-0.3.1.8.dist-info/METADATA +117 -0
  299. dnt-0.3.1.8.dist-info/RECORD +315 -0
  300. {dnt-0.2.1.dist-info → dnt-0.3.1.8.dist-info}/WHEEL +1 -1
  301. dnt/track/dsort/deep_sort/deep/evaluate.py +0 -15
  302. dnt/track/dsort/deep_sort/deep/original_model.py +0 -106
  303. dnt/track/dsort/deep_sort/deep/test.py +0 -77
  304. dnt/track/dsort/deep_sort/deep/train.py +0 -189
  305. dnt/track/dsort/utils/asserts.py +0 -13
  306. dnt/track/dsort/utils/draw.py +0 -36
  307. dnt/track/dsort/utils/json_logger.py +0 -383
  308. dnt/track/dsort/utils/log.py +0 -17
  309. dnt/track/dsort/utils/parser.py +0 -35
  310. dnt/track/dsort/utils/tools.py +0 -39
  311. dnt-0.2.1.dist-info/METADATA +0 -35
  312. dnt-0.2.1.dist-info/RECORD +0 -60
  313. /dnt/{track/dsort/utils → third_party/fast-reid/checkpoint}/__init__.py +0 -0
  314. {dnt-0.2.1.dist-info → dnt-0.3.1.8.dist-info/licenses}/LICENSE +0 -0
  315. {dnt-0.2.1.dist-info → dnt-0.3.1.8.dist-info}/top_level.txt +0 -0
dnt/filter/filter.py CHANGED
@@ -1,37 +1,466 @@
1
1
  import pandas as pd
2
- from shapely import geometry
2
+ from shapely import geometry, LineString, Polygon, Point
3
3
  import geopandas as gpd
4
+ from tqdm import tqdm
4
5
 
5
6
  class Filter:
6
7
  def __init__(self) -> None:
7
8
  pass
8
9
 
10
+ @staticmethod
11
+ def filter_iou(detections: pd.DataFrame, zones: geometry.multipolygon = None,
12
+ class_list: list[int] = None, score_threshold: float = 0)->pd.DataFrame:
13
+
14
+ detections = detections.loc[detections[6]>=score_threshold].copy()
15
+
16
+ # filter classess
17
+ if class_list:
18
+ detections = detections.loc[detections[7].isin(class_list)].copy()
19
+
20
+ if zones:
21
+ # filter locations
22
+ g = [geometry.Point(xy) for xy in zip((detections[2] + detections[4]/2), (detections[3] + detections[5]/2))]
23
+ geo_detections = gpd.GeoDataFrame(detections, geometry=g)
24
+
25
+ frames = geo_detections.loc[geo_detections.geometry.within(zones)].drop(columns='geometry')
26
+
27
+ if frames:
28
+ results = pd.concat(frames)
29
+ results = results[~results.index.duplicated()].reset_index(drop=True)
30
+ else:
31
+ results = pd.DataFrame()
32
+
33
+ else:
34
+ results = detections
35
+
36
+ return results
37
+
38
+ @staticmethod
39
+ def filter_tracks(tracks:pd.DataFrame,
40
+ include_zones: geometry.MultiPolygon = None,
41
+ exclude_zones: geometry.MultiPolygon = None,
42
+ video_index:int = None, video_tot:int = None):
43
+
44
+ g = [geometry.Point(xy) for xy in zip((tracks[2] + tracks[4]/2), (tracks[3] + tracks[5]/2))]
45
+ geo_tracks = gpd.GeoDataFrame(tracks, geometry=g)
46
+
47
+ track_ids = tracks[1].unique()
48
+ include_ids = []
49
+ exclude_ids = []
50
+
51
+ pbar = tqdm(total=len(track_ids), unit=' tracks')
52
+ if video_index and video_tot:
53
+ pbar.set_description_str("Filtering zones {} of {}".format(video_index, video_tot))
54
+ else:
55
+ pbar.set_description_str("Filtering zones ")
56
+
57
+ for track_id in track_ids:
58
+ if include_zones:
59
+ selected_tracks = geo_tracks.loc[(geo_tracks[1]==track_id) & (geo_tracks.geometry.within(include_zones))]
60
+ if len(selected_tracks)>0:
61
+ include_ids.append(track_id)
62
+
63
+ if exclude_zones:
64
+ selected_tracks = geo_tracks.loc[(geo_tracks[1]==track_id) & (geo_tracks.geometry.within(exclude_zones))]
65
+ if len(selected_tracks)>0:
66
+ exclude_ids.append(track_id)
67
+
68
+ pbar.update()
69
+
70
+ pbar.close()
71
+
72
+ if len(include_ids)>0:
73
+ results = tracks.loc[tracks[1].isin(include_ids)].copy()
74
+ else:
75
+ results = tracks.copy()
76
+
77
+ if len(exclude_ids)>0:
78
+ results = results.loc[~results[1].isin(exclude_ids)].copy()
79
+
80
+ return results
9
81
 
10
- def filter_iou(detections, zones = [], class_list = [], score_threshold = 0):
82
+ @staticmethod
83
+ def filter_tracks_by_zones_agg(tracks:pd.DataFrame,
84
+ zones: geometry.MultiPolygon = None,
85
+ method: str = 'include',
86
+ ref_point: str = 'bc',
87
+ offset: tuple = (0, 0),
88
+ col_names = ['frame', 'track', 'x', 'y', 'w', 'h', 'score', 'cls', 'r3', 'r4'],
89
+ video_index:int = None, video_tot:int = None)->pd.DataFrame:
90
+ '''
91
+ Filter tracks by zones.
92
+ Inputs:
93
+ tracks: tracks
94
+ zones: a list of polygons
95
+ method - 'include' (default), 'exclude'
96
+ ref_point - the reference point of a track bbox,
97
+ defalt is br, others - bl, bc, tl, tc, tr, cl, cc, cr
98
+ offset - the offset to ref_point, default is (0, 0)
99
+ video_index - video index
100
+ video_tot - total videos
101
+ Return:
102
+ Filtered tracks
103
+ '''
11
104
 
12
- detections = detections.loc[detections[6]>=score_threshold].copy()
105
+ try:
106
+ tracks.columns = col_names
107
+ except:
108
+ print('Tracks is invalid!')
13
109
 
14
- # filter classess
15
- if class_list:
16
- detections = detections.loc[detections[7].isin(class_list)].copy()
110
+ if ref_point == 'cc':
111
+ g = [Point(xy) for xy in zip((tracks['x'] + tracks['w']/2 + offset[0]), (tracks['y'] + tracks['h']/2 + offset[1]))]
112
+ elif ref_point == 'tc':
113
+ g = [Point(xy) for xy in zip((tracks['x'] + tracks['w']/2 + offset[0]), (tracks['y'] + offset[1]))]
114
+ elif ref_point == 'bc':
115
+ g = [Point(xy) for xy in zip((tracks['x'] + tracks['w']/2 + offset[0]), (tracks['y'] + tracks['h'] + offset[1]))]
116
+ elif ref_point == 'cl':
117
+ g = [Point(xy) for xy in zip((tracks['x'] + offset[0]), (tracks['y'] + tracks['h']/2 + offset[1]))]
118
+ elif ref_point == 'cr':
119
+ g = [Point(xy) for xy in zip((tracks['x'] + tracks['w'] + offset[0]), (tracks['y'] + tracks['h']/2 + offset[1]))]
120
+ elif ref_point == 'tl':
121
+ g = [Point(xy) for xy in zip((tracks['x'] + offset[0]), (tracks['y'] + offset[1]))]
122
+ elif ref_point == 'tr':
123
+ g = [Point(xy) for xy in zip((tracks['x'] + tracks['w'] + offset[0]), (tracks['y'] + offset[1]))]
124
+ elif ref_point == 'bl':
125
+ g = [Point(xy) for xy in zip((tracks['x'] + offset[0]), (tracks['y'] + tracks['h'] + offset[1]))]
126
+ elif ref_point == 'br':
127
+ g = [Point(xy) for xy in zip((tracks['x'] + tracks['w'] + offset[0]), (tracks['y'] + tracks['h'] + offset[1]))]
128
+ else:
129
+ g = [Point(xy) for xy in zip((tracks['x'] + tracks['w']/2 + offset[0]), (tracks['y'] + tracks['h'] + offset[1]))]
17
130
 
18
- if zones:
19
- # filter locations
20
- g = [geometry.Point(xy) for xy in zip((detections[2] + detections[4]/2), (detections[3] + detections[5]/2))]
21
- geo_detections = gpd.GeoDataFrame(detections, geometry=g)
131
+ geo_tracks = gpd.GeoDataFrame(tracks, geometry=g)
132
+
133
+ matched_ids = []
134
+ pbar = tqdm(total=len(zones), unit=' zones')
135
+ if video_index and video_tot:
136
+ pbar.set_description_str("Filtering zones {} of {}".format(video_index, video_tot))
137
+ else:
138
+ pbar.set_description_str("Filtering zones ")
139
+
140
+ for zone in zones:
141
+ matched = geo_tracks[geo_tracks.geometry.within(zone)]
142
+ if len(matched)>0:
143
+ matched_ids.extend(matched['track'].unique().tolist())
144
+ pbar.update()
145
+
146
+ pbar.close()
147
+
148
+ if len(matched_ids)>0:
149
+ if method == 'include':
150
+ results = tracks.loc[tracks['track'].isin(matched_ids)].copy()
151
+ else:
152
+ results = tracks.loc[~tracks['track'].isin(matched_ids)].copy()
153
+ else:
154
+ results = tracks.copy()
155
+
156
+ return results
157
+
158
+ @staticmethod
159
+ def filter_frames_by_zones_agg(tracks:pd.DataFrame,
160
+ zones: geometry.MultiPolygon = None,
161
+ method: str = 'include',
162
+ ref_point:str = 'bc',
163
+ offset: tuple = (0, 0),
164
+ col_names = ['frame', 'track', 'x', 'y', 'w', 'h', 'score', 'cls', 'r3', 'r4'],
165
+ video_index:int = None, video_tot:int = None)->pd.DataFrame:
166
+ '''
167
+ Filter tracks by zones.
168
+ Inputs:
169
+ tracks - tracks
170
+ zones - zones (polygon)
171
+ method - 'include' (default) include the tracks if they are within the zones; 'exclude' exclude the tracks if they are within the zones
172
+ ref_point - the reference point of a track bbox, defalt is bottom_point, center_point, left_up, right_up, left_buttom, right_buttom
173
+ offset - the offset to ref_point, default is (0, 0)
174
+ video_index - video index
175
+ video_tot - total videos
176
+ Return:
177
+ Filtered tracks
178
+ '''
22
179
 
23
- frames = []
24
- for zone in zones:
25
- geo_zones = geometry.Polygon(zone)
26
- frames.append(geo_detections.loc[geo_detections.geometry.within(geo_zones)].drop(columns='geometry'))
180
+ try:
181
+ tracks.columns = col_names
182
+ except:
183
+ print('Tracks is invalid!')
27
184
 
28
- if frames:
29
- results = pd.concat(frames)
30
- results = results[~results.index.duplicated()].reset_index(drop=True)
185
+ if ref_point == 'cc':
186
+ g = [Point(xy) for xy in zip((tracks['x'] + tracks['w']/2 + offset[0]), (tracks['y'] + tracks['h']/2 + offset[1]))]
187
+ elif ref_point == 'tc':
188
+ g = [Point(xy) for xy in zip((tracks['x'] + tracks['w']/2 + offset[0]), (tracks['y'] + offset[1]))]
189
+ elif ref_point == 'bc':
190
+ g = [Point(xy) for xy in zip((tracks['x'] + tracks['w']/2 + offset[0]), (tracks['y'] + tracks['h'] + offset[1]))]
191
+ elif ref_point == 'cl':
192
+ g = [Point(xy) for xy in zip((tracks['x'] + offset[0]), (tracks['y'] + tracks['h']/2 + offset[1]))]
193
+ elif ref_point == 'cr':
194
+ g = [Point(xy) for xy in zip((tracks['x'] + tracks['w'] + offset[0]), (tracks['y'] + tracks['h']/2 + offset[1]))]
195
+ elif ref_point == 'tl':
196
+ g = [Point(xy) for xy in zip((tracks['x'] + offset[0]), (tracks['y'] + offset[1]))]
197
+ elif ref_point == 'tr':
198
+ g = [Point(xy) for xy in zip((tracks['x'] + tracks['w'] + offset[0]), (tracks['y'] + offset[1]))]
199
+ elif ref_point == 'bl':
200
+ g = [Point(xy) for xy in zip((tracks['x'] + offset[0]), (tracks['y'] + tracks['h'] + offset[1]))]
201
+ elif ref_point == 'br':
202
+ g = [Point(xy) for xy in zip((tracks['x'] + tracks['w'] + offset[0]), (tracks['y'] + tracks['h'] + offset[1]))]
203
+ else:
204
+ g = [Point(xy) for xy in zip((tracks['x'] + tracks['w']/2 + offset[0]), (tracks['y'] + tracks['h'] + offset[1]))]
205
+
206
+
207
+ geo_tracks = gpd.GeoDataFrame(tracks, geometry=g)
208
+
209
+ matched_frames = []
210
+ pbar = tqdm(total=len(zones), unit=' zones')
211
+ if video_index and video_tot:
212
+ pbar.set_description_str("Filtering zones {} of {}".format(video_index, video_tot))
31
213
  else:
32
- results = pd.DataFrame()
33
- else:
34
- results = detections
214
+ pbar.set_description_str("Filtering zones ")
215
+
216
+ for zone in zones:
217
+ matched = geo_tracks[geo_tracks.geometry.within(zone)]
218
+ if len(matched)>0:
219
+ matched_frames.extend(matched.index.values.tolist())
220
+ pbar.update()
221
+
222
+ pbar.close()
223
+
224
+ if len(matched_frames)>0:
225
+ if method == 'include':
226
+ results = tracks.iloc[matched_frames].copy()
227
+ else:
228
+ results = tracks.drop(matched_frames, axis=0).copy()
229
+ else:
230
+ results = tracks.copy()
231
+
232
+ return results
233
+
234
+ @staticmethod
235
+ def filter_tracks_by_zones(tracks:pd.DataFrame,
236
+ zones: list[Polygon] = None,
237
+ method: str = 'list',
238
+ ref_point: str = 'bc',
239
+ offset: tuple = (0, 0),
240
+ col_names = ['frame', 'track', 'x', 'y', 'w', 'h', 'score', 'cls', 'r3', 'r4'],
241
+ zone_name: str = 'zone',
242
+ video_index:int = None, video_tot:int = None)->pd.DataFrame:
243
+ '''
244
+ Filter tracks by zones.
245
+ Inputs:
246
+ tracks - tracks
247
+ zones - zones (polygon)
248
+ method - 'list' (default) - List track ids within zones
249
+ 'filter' - filter tracks within zones
250
+ 'label' - label tracks with zone index
251
+ ref_point - the reference point of a track bbox,
252
+ br - buttom_right,
253
+ bl - bottom_left
254
+ bc - bottom_center
255
+ cc - center_point,
256
+ cl - left_center,
257
+ cr - right_center,
258
+ tc - top_center,
259
+ tl - top_left,
260
+ tr - top_right,
261
+ offset - the offset to ref_point, default is (0, 0)
262
+ aggregate - combine outputs to one dataframe, add zone column
263
+ zone_name - if aggregate, the field name of zone variable, default is 'zone'
264
+ video_index - video index
265
+ video_tot - total videos
266
+ Return:
267
+ Filtered tracks
268
+ '''
269
+
270
+ try:
271
+ tracks.columns = col_names
272
+ except:
273
+ print('Tracks is invalid!')
274
+
275
+ if ref_point == 'cc':
276
+ g = [Point(xy) for xy in zip((tracks['x'] + tracks['w']/2 + offset[0]), (tracks['y'] + tracks['h']/2 + offset[1]))]
277
+ elif ref_point == 'tc':
278
+ g = [Point(xy) for xy in zip((tracks['x'] + tracks['w']/2 + offset[0]), (tracks['y'] + offset[1]))]
279
+ elif ref_point == 'bc':
280
+ g = [Point(xy) for xy in zip((tracks['x'] + tracks['w']/2 + offset[0]), (tracks['y'] + tracks['h'] + offset[1]))]
281
+ elif ref_point == 'cl':
282
+ g = [Point(xy) for xy in zip((tracks['x'] + offset[0]), (tracks['y'] + tracks['h']/2 + offset[1]))]
283
+ elif ref_point == 'cr':
284
+ g = [Point(xy) for xy in zip((tracks['x'] + tracks['w'] + offset[0]), (tracks['y'] + tracks['h']/2 + offset[1]))]
285
+ elif ref_point == 'tl':
286
+ g = [Point(xy) for xy in zip((tracks['x'] + offset[0]), (tracks['y'] + offset[1]))]
287
+ elif ref_point == 'tr':
288
+ g = [Point(xy) for xy in zip((tracks['x'] + tracks['w'] + offset[0]), (tracks['y'] + offset[1]))]
289
+ elif ref_point == 'bl':
290
+ g = [Point(xy) for xy in zip((tracks['x'] + offset[0]), (tracks['y'] + tracks['h'] + offset[1]))]
291
+ elif ref_point == 'br':
292
+ g = [Point(xy) for xy in zip((tracks['x'] + tracks['w'] + offset[0]), (tracks['y'] + tracks['h'] + offset[1]))]
293
+ else:
294
+ g = [Point(xy) for xy in zip((tracks['x'] + tracks['w']/2 + offset[0]), (tracks['y'] + tracks['h'] + offset[1]))]
295
+
296
+ geo_tracks = gpd.GeoDataFrame(tracks, geometry=g)
297
+
298
+ matched_ids = []
299
+ pbar = tqdm(total=len(zones), unit=' zones')
300
+ if video_index and video_tot:
301
+ pbar.set_description_str("Filtering zones {} of {}".format(video_index, video_tot))
302
+ else:
303
+ pbar.set_description_str("Filtering zones ")
304
+
305
+ for zone in zones:
306
+ matched = geo_tracks[geo_tracks.geometry.within(zone)]
307
+ if len(matched)>0:
308
+ matched_ids.append(matched['track'].unique().tolist())
309
+ pbar.update()
310
+
311
+ pbar.close()
312
+
313
+ if (method == 'filter') or (method == 'label'):
314
+ tracks[zone_name] = -1
315
+ for i in range(len(matched_ids)):
316
+ tracks.loc[tracks['track'].isin(matched_ids[i]), zone_name] = i
317
+ if method == 'filter':
318
+ results = tracks[tracks[zone_name]!=-1].copy()
319
+ else:
320
+ results = tracks
321
+ else:
322
+ results = []
323
+ if len(matched_ids)>0:
324
+ for i in range(len(matched_ids)):
325
+ result = tracks.loc[tracks['track'].isin(matched_ids[i])].copy()
326
+ results.append(result)
327
+
328
+ return results
329
+
330
+ @staticmethod
331
+ def filter_tracks_by_lines(tracks:pd.DataFrame,
332
+ lines: list[LineString]= None,
333
+ method: str = 'include',
334
+ video_index:int = None, video_tot:int = None) -> pd.DataFrame:
335
+ '''
336
+ Filter tracks by lines
337
+ Inputs:
338
+ tracks - a DataFrame of tracks, [FRAME, TRACK_ID, TOPX, TOPY, WIDTH, LENGTH, RESERVED, RESERVED, RESERVED]
339
+ lines - a list of LineString
340
+ method - filtering method, include (default) - including tracks crossing the lines, exclude - exclude tracks crossing the lines
341
+ video_index - the index of video for processing
342
+ video_tot - the total number of videos
343
+ Return:
344
+ a DataFrame of [FRAME, TRACK_ID, TOPX, TOPY, WIDTH, LENGTH, RESERVED, RESERVED, RESERVED]
345
+ '''
346
+
347
+ track_ids = tracks[1].unique()
348
+ ids = []
349
+
350
+ pbar = tqdm(total=len(track_ids), unit=' tracks')
351
+ if video_index and video_tot:
352
+ pbar.set_description_str("Filtering tracks {} of {}".format(video_index, video_tot))
353
+ else:
354
+ pbar.set_description_str("Filtering tracks ")
355
+
356
+ for track_id in track_ids:
357
+ selected = tracks.loc[(tracks[1]==track_id)].copy()
358
+ if len(selected)>0:
359
+ g = selected.apply(lambda track: Polygon([(track[2], track[3]), (track[2] + track[4], track[3]),
360
+ (track[2] + track[4], track[3] + track[5]), (track[2], track[3] + track[5])]), axis =1)
361
+ intersected = True
362
+ for line in lines:
363
+ intersected = intersected and any(line.intersects(g).values.tolist())
364
+
365
+ if intersected:
366
+ ids.append(track_id)
367
+
368
+ pbar.update()
369
+
370
+ pbar.close()
371
+
372
+ results = []
373
+ if method=='include':
374
+ results = tracks.loc[tracks[1].isin(ids)].copy()
375
+ elif method=='exclude':
376
+ results = tracks.loc[~tracks[1].isin(ids)].copy()
377
+
378
+ results.sort_values(by=[0, 1], inplace=True)
379
+ return results
380
+
381
+ @staticmethod
382
+ def filter_tracks_by_lines_v2(tracks:pd.DataFrame,
383
+ lines: list[LineString]= None,
384
+ method: str = 'include',
385
+ tolerance: int = 0,
386
+ bbox_size: int = 0,
387
+ force_line_indexes: list[int] = None,
388
+ video_index:int = None,
389
+ video_tot:int = None) -> pd.DataFrame:
390
+ '''
391
+ Filter tracks by lines
392
+ Inputs:
393
+ tracks - a DataFrame of tracks, [FRAME, TRACK_ID, TOPX, TOPY, WIDTH, LENGTH, RESERVED, RESERVED, RESERVED]
394
+ lines - a list of LineString
395
+ method - filtering method, include (default) - including tracks crossing the lines, exclude - exclude tracks crossing the lines
396
+ tolerance - if a bbox intesect the reference lines of (number of lanes - tolerance), it is hit. default is 0.
397
+ force_line_indexes: the line indexes that a bbox must intersect for matching
398
+ bbox_size - the size of detection bbox, default is 0 - the orginal bbox
399
+ video_index - the index of video for processing
400
+ video_tot - the total number of videos
401
+ Return:
402
+ a DataFrame of [FRAME, TRACK_ID, TOPX, TOPY, WIDTH, LENGTH, RESERVED, RESERVED, RESERVED]
403
+ '''
404
+ tracks.columns = ['frame', 'track', 'x', 'y', 'w', 'h', 'score', 'cls', 'r3', 'r4']
405
+ track_ids = tracks['track'].unique()
406
+ ids = []
407
+
408
+ # set hit criterion
409
+ hit_criterion = len(lines) - tolerance
410
+ if (hit_criterion < 1) or (hit_criterion > len(lines)):
411
+ hit_criterion = len(lines)
412
+
413
+ pbar = tqdm(total=len(track_ids), unit=' tracks')
414
+ if video_index and video_tot:
415
+ pbar.set_description_str("Filtering tracks {} of {}".format(video_index, video_tot))
416
+ else:
417
+ pbar.set_description_str("Filtering tracks ")
418
+
419
+ for track_id in track_ids:
420
+ selected = tracks.loc[(tracks['track']==track_id)].copy()
421
+ hit_cnt = 0
422
+ hit_force = True
423
+ if len(selected)>0:
424
+ if bbox_size == 0:
425
+ g = selected.apply(lambda track: Polygon([(track['x'], track['y']), (track['x'] + track['w'], track['y']),
426
+ (track['x'] + track['w'], track['y'] + track['h']), (track['x'], track['y'] + track['h'])]), axis =1)
427
+ else:
428
+ g = selected.apply(lambda track: Polygon([
429
+ (track['x'] + track['w']/2 - bbox_size, track['y'] + track['h'] - bbox_size),
430
+ (track['x'] + track['w']/2 + bbox_size, track['y'] + track['h'] - bbox_size),
431
+ (track['x'] + track['w']/2 + bbox_size, track['y'] + track['h']),
432
+ (track['x'] + track['w']/2 - bbox_size, track['y'] + track['h'])
433
+ ]), axis =1)
434
+
435
+ for line in lines:
436
+ if any(line.intersects(g).values.tolist()):
437
+ hit_cnt+=1
438
+
439
+ if force_line_indexes is not None:
440
+ force_lines = [lines[i] for i in force_line_indexes]
441
+ for line in force_lines:
442
+ if any(line.intersects(g).values.tolist()):
443
+ hit_force = True
444
+ else:
445
+ hit_force = False
446
+
447
+ if (hit_cnt >= hit_criterion) and (hit_force == True):
448
+ ids.append(track_id)
449
+
450
+ pbar.update()
451
+
452
+ pbar.close()
453
+
454
+ results = []
455
+ if method=='include':
456
+ results = tracks.loc[tracks['track'].isin(ids)].copy()
457
+ elif method=='exclude':
458
+ results = tracks.loc[~tracks['track'].isin(ids)].copy()
459
+
460
+ results.sort_values(by=['frame', 'track'], inplace=True)
461
+ return results
462
+
463
+ if __name__=='__main__':
464
+ pass
35
465
 
36
- return results
37
466
 
dnt/label/__init__.py CHANGED
@@ -1,4 +1,4 @@
1
1
  import sys, os
2
2
  sys.path.append(os.path.join(os.path.dirname(__file__)))
3
3
 
4
- from labeler import Labeler
4
+ from .labeler import Labeler