diff --git a/README.md b/README.md index e970e279..bdb53356 100644 --- a/README.md +++ b/README.md @@ -338,6 +338,11 @@ python scripts/gradio_demo.py \ > [!TIP] > Live inference is provided as an independent script so that you can load this script into any deployment devices without having to install all the (large) dependencies in this repo. The script only requires `onnxruntime`, `cv2` and `numpy` to run. +There are two live inference scripts: + +1. `live_inference.py` - Run live inference on a video, image or webcam using ONNXRuntime. This script requires a pre-exported ONNX model. +2. `live_inference_pretrained.py` - Automatically download the pretrained model, convert to ONNX, and run inference in one go. + Run live inference on a video, image or webcam using ONNXRuntime. This runs on CPU by default. If you would like to use the CUDA backend, install the `onnxruntime-gpu` package and uninstall the `onnxruntime` package. @@ -378,6 +383,18 @@ Webcam video width at 320x240 pixels (240p): https://github.com/user-attachments/assets/f4afff9c-3e6d-4965-ab86-0d4de7ce1a44 +To run live inference with pretrained model on webcam, use the following command +```bash +python scripts/live_inference_pretrained.py --webcam +``` +This downloads the pretrained model, converts it to ONNX, and runs inference on the webcam. All other arguments are optional but they are similar to the `live_inference.py` script. + +The output is as follows + + +https://github.com/user-attachments/assets/5aca6044-db81-4988-937e-2447a7cbe06e + + For video inference, specify the path to the video file as the input. Output video will be saved as `onnx_result.mp4` in the current directory. @@ -393,7 +410,12 @@ python scripts/live_inference.py ``` https://github.com/user-attachments/assets/6bc1dc6a-a223-4220-954d-2dab5c75b4a8 -The following is an inference using the pre-trained model `deim_hgnetv2_x` trained on COCO. See how I exported the pre-trained model to onnx in this notebook [here](nbs/export.ipynb). + +The following is an inference using the pre-trained model `deim_hgnetv2_x` trained on COCO. + +```bash +python scripts/live_inference_pretrained.py --model deim_hgnetv2_x --video video.mp4 +``` https://github.com/user-attachments/assets/77070ea4-8407-4648-ade3-01cacd77b51b @@ -473,6 +495,11 @@ pixi run -e cuda live-inference --onnx model.onnx --webcam --provider cuda --cla pixi run -e cpu live-inference --onnx model.onnx --input video.mp4 --class-names classes.txt --inference-size 320 ``` +Live inference with pretrained model on webcam +```bash +pixi run -e cuda live-inference-pretrained --webcam +``` + Launch Gradio app ```bash pixi run gradio-demo --model "best_prep.onnx" --classes "classes.txt" --examples "Rock Paper Scissors SXSW.v14i.coco/test" diff --git a/nbs/pretrained-model-inference.ipynb b/nbs/pretrained-model-inference.ipynb index 0668ecc8..aa9ba02b 100644 --- a/nbs/pretrained-model-inference.ipynb +++ b/nbs/pretrained-model-inference.ipynb @@ -58,15 +58,15 @@ "name": "stderr", "output_type": "stream", "text": [ - "\u001b[32m2025-03-11 23:47:58.625\u001b[0m | \u001b[1mINFO \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m108\u001b[0m - \u001b[1mInitializing Predictor with device=auto\u001b[0m\n", - "\u001b[32m2025-03-11 23:47:58.646\u001b[0m | \u001b[1mINFO \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_setup_device\u001b[0m:\u001b[36m155\u001b[0m - \u001b[1mAuto-selected device: cuda\u001b[0m\n", - "\u001b[32m2025-03-11 23:47:58.693\u001b[0m | \u001b[1mINFO \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_download_checkpoint\u001b[0m:\u001b[36m189\u001b[0m - \u001b[1mUsing cached checkpoint from /home/dnth/.cache/deim/checkpoints/deim_hgnetv2_x.pth\u001b[0m\n", - "/home/dnth/Desktop/DEIMKit/src/deimkit/predictor.py:198: FutureWarning: You are using `torch.load` with `weights_only=False` (the current default value), which uses the default pickle module implicitly. It is possible to construct malicious pickle data which will execute arbitrary code during unpickling (See https://github.com/pytorch/pytorch/blob/main/SECURITY.md#untrusted-models for more details). In a future release, the default value for `weights_only` will be flipped to `True`. This limits the functions that could be executed during unpickling. Arbitrary objects will no longer be allowed to be loaded via this mode unless they are explicitly allowlisted by the user via `torch.serialization.add_safe_globals`. We recommend you start setting `weights_only=True` for any use case where you don't have full control of the loaded file. Please open an issue on GitHub for any issues related to this experimental feature.\n", - " checkpoint = torch.load(checkpoint_path, map_location=\"cpu\")\n", - "\u001b[32m2025-03-11 23:47:58.812\u001b[0m | \u001b[1mINFO \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_setup_model_config\u001b[0m:\u001b[36m219\u001b[0m - \u001b[1mLoading configuration from model name: deim_hgnetv2_x\u001b[0m\n", - "\u001b[32m2025-03-11 23:47:58.826\u001b[0m | \u001b[1mINFO \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_setup_model_config\u001b[0m:\u001b[36m226\u001b[0m - \u001b[1mUpdating model configuration for 80 classes\u001b[0m\n", - "\u001b[32m2025-03-11 23:47:59.161\u001b[0m | \u001b[1mINFO \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_load_model_weights\u001b[0m:\u001b[36m239\u001b[0m - \u001b[1mSuccessfully loaded checkpoint weights\u001b[0m\n", - "\u001b[32m2025-03-11 23:47:59.435\u001b[0m | \u001b[32m\u001b[1mSUCCESS \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m142\u001b[0m - \u001b[32m\u001b[1mPredictor initialization complete\u001b[0m\n" + "\u001b[32m2025-04-04 11:50:18.787\u001b[0m | \u001b[1mINFO \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m110\u001b[0m - \u001b[1mInitializing Predictor with device=auto\u001b[0m\n", + "\u001b[32m2025-04-04 11:50:18.835\u001b[0m | \u001b[1mINFO \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_setup_device\u001b[0m:\u001b[36m157\u001b[0m - \u001b[1mAuto-selected device: cuda\u001b[0m\n", + "\u001b[32m2025-04-04 11:50:18.837\u001b[0m | \u001b[1mINFO \u001b[0m | \u001b[36mdeimkit.model\u001b[0m:\u001b[36m_download_checkpoint\u001b[0m:\u001b[36m165\u001b[0m - \u001b[1mDownloading checkpoint for model deim_hgnetv2_x...\u001b[0m\n", + "deim_hgnetv2_x: 100%|██████████| 241M/241M [01:03<00:00, 3.94MiB/s] \n", + "\u001b[32m2025-04-04 11:51:24.283\u001b[0m | \u001b[32m\u001b[1mSUCCESS \u001b[0m | \u001b[36mdeimkit.model\u001b[0m:\u001b[36m_download_checkpoint\u001b[0m:\u001b[36m184\u001b[0m - \u001b[32m\u001b[1mDownloaded checkpoint to checkpoints/deim_hgnetv2_x.pth\u001b[0m\n", + "\u001b[32m2025-04-04 11:51:24.484\u001b[0m | \u001b[1mINFO \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_setup_model_config\u001b[0m:\u001b[36m193\u001b[0m - \u001b[1mLoading configuration from model name: deim_hgnetv2_x\u001b[0m\n", + "\u001b[32m2025-04-04 11:51:24.500\u001b[0m | \u001b[1mINFO \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_setup_model_config\u001b[0m:\u001b[36m201\u001b[0m - \u001b[1mUpdating model configuration for 80 classes\u001b[0m\n", + "\u001b[32m2025-04-04 11:51:24.967\u001b[0m | \u001b[1mINFO \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_load_model_weights\u001b[0m:\u001b[36m214\u001b[0m - \u001b[1mSuccessfully loaded checkpoint weights\u001b[0m\n", + "\u001b[32m2025-04-04 11:51:25.240\u001b[0m | \u001b[32m\u001b[1mSUCCESS \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m__init__\u001b[0m:\u001b[36m146\u001b[0m - \u001b[32m\u001b[1mPredictor initialization complete\u001b[0m\n" ] } ], @@ -83,9 +83,9 @@ "name": "stderr", "output_type": "stream", "text": [ - "\u001b[32m2025-03-11 23:47:59.444\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36mpredict\u001b[0m:\u001b[36m378\u001b[0m - \u001b[34m\u001b[1mLoading image from path: ../assets/sample_images/95aa6ee8b4618251.jpg\u001b[0m\n", - "\u001b[32m2025-03-11 23:47:59.753\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_single_image\u001b[0m:\u001b[36m436\u001b[0m - \u001b[34m\u001b[1mPrediction complete. Found 54 objects\u001b[0m\n", - "\u001b[32m2025-03-11 23:47:59.754\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_single_image\u001b[0m:\u001b[36m448\u001b[0m - \u001b[34m\u001b[1mGenerating visualization\u001b[0m\n" + "\u001b[32m2025-04-04 11:51:25.254\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36mpredict\u001b[0m:\u001b[36m353\u001b[0m - \u001b[34m\u001b[1mLoading image from path: ../assets/sample_images/95aa6ee8b4618251.jpg\u001b[0m\n", + "\u001b[32m2025-04-04 11:51:25.559\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_single_image\u001b[0m:\u001b[36m411\u001b[0m - \u001b[34m\u001b[1mPrediction complete. Found 54 objects\u001b[0m\n", + "\u001b[32m2025-04-04 11:51:25.559\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_single_image\u001b[0m:\u001b[36m423\u001b[0m - \u001b[34m\u001b[1mGenerating visualization\u001b[0m\n" ] }, { @@ -198,10 +198,60 @@ " [ 8.86776001e+02, 1.66908249e+02, 9.20016235e+02,\n", " 2.04338440e+02],\n", " [ 5.73231079e+02, 1.72442642e+02, 6.11189819e+02,\n", - " 2.36817322e+02]], dtype=float32), labels=array([ 0, 0, 0, 63, 62, 0, 63, 0, 63, 0, 64, 0, 66, 0, 63, 0, 0,\n", - " 0, 0, 62, 0, 66, 0, 0, 62, 0, 0, 0, 0, 26, 0, 0, 0, 62,\n", - " 56, 64, 62, 24, 56, 56, 0, 62, 62, 0, 0, 63, 0, 0, 27, 62, 0,\n", - " 0, 0, 0]), scores=array([0.89853793, 0.88263005, 0.86926806, 0.84961444, 0.8242308 ,\n", + " 2.36817322e+02]], dtype=float32), labels=array([[ 0],\n", + " [ 0],\n", + " [ 0],\n", + " [63],\n", + " [62],\n", + " [ 0],\n", + " [63],\n", + " [ 0],\n", + " [63],\n", + " [ 0],\n", + " [64],\n", + " [ 0],\n", + " [66],\n", + " [ 0],\n", + " [63],\n", + " [ 0],\n", + " [ 0],\n", + " [ 0],\n", + " [ 0],\n", + " [62],\n", + " [ 0],\n", + " [66],\n", + " [ 0],\n", + " [ 0],\n", + " [62],\n", + " [ 0],\n", + " [ 0],\n", + " [ 0],\n", + " [ 0],\n", + " [26],\n", + " [ 0],\n", + " [ 0],\n", + " [ 0],\n", + " [62],\n", + " [56],\n", + " [64],\n", + " [62],\n", + " [24],\n", + " [56],\n", + " [56],\n", + " [ 0],\n", + " [62],\n", + " [62],\n", + " [ 0],\n", + " [ 0],\n", + " [63],\n", + " [ 0],\n", + " [ 0],\n", + " [27],\n", + " [62],\n", + " [ 0],\n", + " [ 0],\n", + " [ 0],\n", + " [ 0]]), scores=array([0.89853793, 0.88263005, 0.86926806, 0.84961444, 0.8242308 ,\n", " 0.79215425, 0.7875311 , 0.7805078 , 0.77490765, 0.7084651 ,\n", " 0.666344 , 0.6507428 , 0.6380513 , 0.6249805 , 0.578291 ,\n", " 0.57175404, 0.5378879 , 0.5360249 , 0.52354723, 0.49983203,\n", @@ -211,7 +261,7 @@ " 0.34931734, 0.34188655, 0.33969006, 0.3176732 , 0.31424755,\n", " 0.30397958, 0.3008672 , 0.2980086 , 0.29161483, 0.28003258,\n", " 0.2797553 , 0.27324918, 0.27295813, 0.2728039 , 0.26906097,\n", - " 0.26181173, 0.2607437 , 0.25970253, 0.2590194 ], dtype=float32), class_names=['person', 'person', 'person', 'laptop', 'tv', 'person', 'laptop', 'person', 'laptop', 'person', 'mouse', 'person', 'keyboard', 'person', 'laptop', 'person', 'person', 'person', 'person', 'tv', 'person', 'keyboard', 'person', 'person', 'tv', 'person', 'person', 'person', 'person', 'handbag', 'person', 'person', 'person', 'tv', 'chair', 'mouse', 'tv', 'backpack', 'chair', 'chair', 'person', 'tv', 'tv', 'person', 'person', 'laptop', 'person', 'person', 'tie', 'tv', 'person', 'person', 'person', 'person'], visualization=)" + " 0.26181173, 0.2607437 , 0.25970253, 0.2590194 ], dtype=float32), class_names=['person', 'person', 'person', 'laptop', 'tv', 'person', 'laptop', 'person', 'laptop', 'person', 'mouse', 'person', 'keyboard', 'person', 'laptop', 'person', 'person', 'person', 'person', 'tv', 'person', 'keyboard', 'person', 'person', 'tv', 'person', 'person', 'person', 'person', 'handbag', 'person', 'person', 'person', 'tv', 'chair', 'mouse', 'tv', 'backpack', 'chair', 'chair', 'person', 'tv', 'tv', 'person', 'person', 'laptop', 'person', 'person', 'tie', 'tv', 'person', 'person', 'person', 'person'], visualization=)" ] }, "execution_count": 5, @@ -295,36 +345,36 @@ "name": "stderr", "output_type": "stream", "text": [ - "\u001b[32m2025-03-11 23:47:59.851\u001b[0m | \u001b[1mINFO \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36mpredict_batch\u001b[0m:\u001b[36m486\u001b[0m - \u001b[1mProcessing batch of 14 images with batch_size=16\u001b[0m\n", - "\u001b[32m2025-03-11 23:47:59.852\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m523\u001b[0m - \u001b[34m\u001b[1mLoading image 0 from path: ../assets/sample_images/338cc8a7f27690dc.jpg\u001b[0m\n", - "\u001b[32m2025-03-11 23:47:59.866\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m523\u001b[0m - \u001b[34m\u001b[1mLoading image 1 from path: ../assets/sample_images/151f78f5d01cc521.jpg\u001b[0m\n", - "\u001b[32m2025-03-11 23:47:59.880\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m523\u001b[0m - \u001b[34m\u001b[1mLoading image 2 from path: ../assets/sample_images/336fc2e7056d5674.jpg\u001b[0m\n", - "\u001b[32m2025-03-11 23:47:59.896\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m523\u001b[0m - \u001b[34m\u001b[1mLoading image 3 from path: ../assets/sample_images/95aa6ee8b4618251.jpg\u001b[0m\n", - "\u001b[32m2025-03-11 23:47:59.912\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m523\u001b[0m - \u001b[34m\u001b[1mLoading image 4 from path: ../assets/sample_images/277db5b27c322ee3.jpg\u001b[0m\n", - "\u001b[32m2025-03-11 23:47:59.925\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m523\u001b[0m - \u001b[34m\u001b[1mLoading image 5 from path: ../assets/sample_images/223adcceb2728075.jpg\u001b[0m\n", - "\u001b[32m2025-03-11 23:47:59.938\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m523\u001b[0m - \u001b[34m\u001b[1mLoading image 6 from path: ../assets/sample_images/362de0abae134896.jpg\u001b[0m\n", - "\u001b[32m2025-03-11 23:47:59.965\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m523\u001b[0m - \u001b[34m\u001b[1mLoading image 7 from path: ../assets/sample_images/221bf9a3ed4cc6eb.jpg\u001b[0m\n", - "\u001b[32m2025-03-11 23:47:59.977\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m523\u001b[0m - \u001b[34m\u001b[1mLoading image 8 from path: ../assets/sample_images/130aaba4e2a90020.jpg\u001b[0m\n", - "\u001b[32m2025-03-11 23:47:59.991\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m523\u001b[0m - \u001b[34m\u001b[1mLoading image 9 from path: ../assets/sample_images/93ad9ffdca68c96a.jpg\u001b[0m\n", - "\u001b[32m2025-03-11 23:48:00.006\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m523\u001b[0m - \u001b[34m\u001b[1mLoading image 10 from path: ../assets/sample_images/210f8542e838a1ba.jpg\u001b[0m\n", - "\u001b[32m2025-03-11 23:48:00.020\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m523\u001b[0m - \u001b[34m\u001b[1mLoading image 11 from path: ../assets/sample_images/246ff47a30d47a39.jpg\u001b[0m\n", - "\u001b[32m2025-03-11 23:48:00.033\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m523\u001b[0m - \u001b[34m\u001b[1mLoading image 12 from path: ../assets/sample_images/368b7164bf919711.jpg\u001b[0m\n", - "\u001b[32m2025-03-11 23:48:00.046\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m523\u001b[0m - \u001b[34m\u001b[1mLoading image 13 from path: ../assets/sample_images/245f548ec2bffe92.jpg\u001b[0m\n", - "\u001b[32m2025-03-11 23:48:00.294\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m590\u001b[0m - \u001b[34m\u001b[1mGenerating visualization for image 0\u001b[0m\n", - "\u001b[32m2025-03-11 23:48:00.296\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m590\u001b[0m - \u001b[34m\u001b[1mGenerating visualization for image 1\u001b[0m\n", - "\u001b[32m2025-03-11 23:48:00.299\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m590\u001b[0m - \u001b[34m\u001b[1mGenerating visualization for image 2\u001b[0m\n", - "\u001b[32m2025-03-11 23:48:00.305\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m590\u001b[0m - \u001b[34m\u001b[1mGenerating visualization for image 3\u001b[0m\n", - "\u001b[32m2025-03-11 23:48:00.310\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m590\u001b[0m - \u001b[34m\u001b[1mGenerating visualization for image 4\u001b[0m\n", - "\u001b[32m2025-03-11 23:48:00.312\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m590\u001b[0m - \u001b[34m\u001b[1mGenerating visualization for image 5\u001b[0m\n", - "\u001b[32m2025-03-11 23:48:00.316\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m590\u001b[0m - \u001b[34m\u001b[1mGenerating visualization for image 6\u001b[0m\n", - "\u001b[32m2025-03-11 23:48:00.319\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m590\u001b[0m - \u001b[34m\u001b[1mGenerating visualization for image 7\u001b[0m\n", - "\u001b[32m2025-03-11 23:48:00.323\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m590\u001b[0m - \u001b[34m\u001b[1mGenerating visualization for image 8\u001b[0m\n", - "\u001b[32m2025-03-11 23:48:00.326\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m590\u001b[0m - \u001b[34m\u001b[1mGenerating visualization for image 9\u001b[0m\n", - "\u001b[32m2025-03-11 23:48:00.329\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m590\u001b[0m - \u001b[34m\u001b[1mGenerating visualization for image 10\u001b[0m\n", - "\u001b[32m2025-03-11 23:48:00.333\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m590\u001b[0m - \u001b[34m\u001b[1mGenerating visualization for image 11\u001b[0m\n", - "\u001b[32m2025-03-11 23:48:00.338\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m590\u001b[0m - \u001b[34m\u001b[1mGenerating visualization for image 12\u001b[0m\n", - "\u001b[32m2025-03-11 23:48:00.342\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m590\u001b[0m - \u001b[34m\u001b[1mGenerating visualization for image 13\u001b[0m\n", - "\u001b[32m2025-03-11 23:48:00.345\u001b[0m | \u001b[32m\u001b[1mSUCCESS \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36mpredict_batch\u001b[0m:\u001b[36m499\u001b[0m - \u001b[32m\u001b[1mBatch processing complete. Processed 14 images\u001b[0m\n" + "\u001b[32m2025-04-04 11:51:25.667\u001b[0m | \u001b[1mINFO \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36mpredict_batch\u001b[0m:\u001b[36m461\u001b[0m - \u001b[1mProcessing batch of 14 images with batch_size=16\u001b[0m\n", + "\u001b[32m2025-04-04 11:51:25.671\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m498\u001b[0m - \u001b[34m\u001b[1mLoading image 0 from path: ../assets/sample_images/338cc8a7f27690dc.jpg\u001b[0m\n", + "\u001b[32m2025-04-04 11:51:25.702\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m498\u001b[0m - \u001b[34m\u001b[1mLoading image 1 from path: ../assets/sample_images/151f78f5d01cc521.jpg\u001b[0m\n", + "\u001b[32m2025-04-04 11:51:25.713\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m498\u001b[0m - \u001b[34m\u001b[1mLoading image 2 from path: ../assets/sample_images/336fc2e7056d5674.jpg\u001b[0m\n", + "\u001b[32m2025-04-04 11:51:25.731\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m498\u001b[0m - \u001b[34m\u001b[1mLoading image 3 from path: ../assets/sample_images/95aa6ee8b4618251.jpg\u001b[0m\n", + "\u001b[32m2025-04-04 11:51:25.743\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m498\u001b[0m - \u001b[34m\u001b[1mLoading image 4 from path: ../assets/sample_images/277db5b27c322ee3.jpg\u001b[0m\n", + "\u001b[32m2025-04-04 11:51:25.756\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m498\u001b[0m - \u001b[34m\u001b[1mLoading image 5 from path: ../assets/sample_images/223adcceb2728075.jpg\u001b[0m\n", + "\u001b[32m2025-04-04 11:51:25.767\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m498\u001b[0m - \u001b[34m\u001b[1mLoading image 6 from path: ../assets/sample_images/362de0abae134896.jpg\u001b[0m\n", + "\u001b[32m2025-04-04 11:51:25.778\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m498\u001b[0m - \u001b[34m\u001b[1mLoading image 7 from path: ../assets/sample_images/221bf9a3ed4cc6eb.jpg\u001b[0m\n", + "\u001b[32m2025-04-04 11:51:25.788\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m498\u001b[0m - \u001b[34m\u001b[1mLoading image 8 from path: ../assets/sample_images/130aaba4e2a90020.jpg\u001b[0m\n", + "\u001b[32m2025-04-04 11:51:25.802\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m498\u001b[0m - \u001b[34m\u001b[1mLoading image 9 from path: ../assets/sample_images/93ad9ffdca68c96a.jpg\u001b[0m\n", + "\u001b[32m2025-04-04 11:51:25.815\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m498\u001b[0m - \u001b[34m\u001b[1mLoading image 10 from path: ../assets/sample_images/210f8542e838a1ba.jpg\u001b[0m\n", + "\u001b[32m2025-04-04 11:51:25.829\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m498\u001b[0m - \u001b[34m\u001b[1mLoading image 11 from path: ../assets/sample_images/246ff47a30d47a39.jpg\u001b[0m\n", + "\u001b[32m2025-04-04 11:51:25.842\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m498\u001b[0m - \u001b[34m\u001b[1mLoading image 12 from path: ../assets/sample_images/368b7164bf919711.jpg\u001b[0m\n", + "\u001b[32m2025-04-04 11:51:25.856\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m498\u001b[0m - \u001b[34m\u001b[1mLoading image 13 from path: ../assets/sample_images/245f548ec2bffe92.jpg\u001b[0m\n", + "\u001b[32m2025-04-04 11:51:26.109\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m565\u001b[0m - \u001b[34m\u001b[1mGenerating visualization for image 0\u001b[0m\n", + "\u001b[32m2025-04-04 11:51:26.112\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m565\u001b[0m - \u001b[34m\u001b[1mGenerating visualization for image 1\u001b[0m\n", + "\u001b[32m2025-04-04 11:51:26.115\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m565\u001b[0m - \u001b[34m\u001b[1mGenerating visualization for image 2\u001b[0m\n", + "\u001b[32m2025-04-04 11:51:26.122\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m565\u001b[0m - \u001b[34m\u001b[1mGenerating visualization for image 3\u001b[0m\n", + "\u001b[32m2025-04-04 11:51:26.126\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m565\u001b[0m - \u001b[34m\u001b[1mGenerating visualization for image 4\u001b[0m\n", + "\u001b[32m2025-04-04 11:51:26.129\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m565\u001b[0m - \u001b[34m\u001b[1mGenerating visualization for image 5\u001b[0m\n", + "\u001b[32m2025-04-04 11:51:26.133\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m565\u001b[0m - \u001b[34m\u001b[1mGenerating visualization for image 6\u001b[0m\n", + "\u001b[32m2025-04-04 11:51:26.136\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m565\u001b[0m - \u001b[34m\u001b[1mGenerating visualization for image 7\u001b[0m\n", + "\u001b[32m2025-04-04 11:51:26.140\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m565\u001b[0m - \u001b[34m\u001b[1mGenerating visualization for image 8\u001b[0m\n", + "\u001b[32m2025-04-04 11:51:26.144\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m565\u001b[0m - \u001b[34m\u001b[1mGenerating visualization for image 9\u001b[0m\n", + "\u001b[32m2025-04-04 11:51:26.146\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m565\u001b[0m - \u001b[34m\u001b[1mGenerating visualization for image 10\u001b[0m\n", + "\u001b[32m2025-04-04 11:51:26.151\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m565\u001b[0m - \u001b[34m\u001b[1mGenerating visualization for image 11\u001b[0m\n", + "\u001b[32m2025-04-04 11:51:26.155\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m565\u001b[0m - \u001b[34m\u001b[1mGenerating visualization for image 12\u001b[0m\n", + "\u001b[32m2025-04-04 11:51:26.159\u001b[0m | \u001b[34m\u001b[1mDEBUG \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36m_process_image_batch\u001b[0m:\u001b[36m565\u001b[0m - \u001b[34m\u001b[1mGenerating visualization for image 13\u001b[0m\n", + "\u001b[32m2025-04-04 11:51:26.162\u001b[0m | \u001b[32m\u001b[1mSUCCESS \u001b[0m | \u001b[36mdeimkit.predictor\u001b[0m:\u001b[36mpredict_batch\u001b[0m:\u001b[36m474\u001b[0m - \u001b[32m\u001b[1mBatch processing complete. Processed 14 images\u001b[0m\n" ] } ], @@ -342,7 +392,8 @@ "text/plain": [ "[PredictionResult(boxes=array([[ 327.80664 , 38.337944, 563.6377 , 320.62366 ],\n", " [ 966.2616 , 67.23396 , 1023.87 , 199.91 ]],\n", - " dtype=float32), labels=array([0, 0]), scores=array([0.78109276, 0.2795733 ], dtype=float32), class_names=['person', 'person'], visualization=),\n", + " dtype=float32), labels=array([[0],\n", + " [0]]), scores=array([0.78109276, 0.2795733 ], dtype=float32), class_names=['person', 'person'], visualization=),\n", " PredictionResult(boxes=array([[5.06639160e+02, 1.94403095e+01, 8.87505615e+02, 7.28904480e+02],\n", " [1.83071899e+00, 1.77414227e+01, 1.02360876e+03, 7.32558960e+02],\n", " [2.79754639e+02, 1.45060539e+00, 5.00805237e+02, 4.20908813e+02],\n", @@ -351,8 +402,15 @@ " [8.78440063e+02, 2.26950407e+00, 1.02342737e+03, 3.65461304e+02],\n", " [5.70297241e-02, 1.45663879e+02, 4.99915390e+01, 3.26450226e+02],\n", " [2.87060547e+00, 2.80488159e+02, 1.02302527e+03, 7.32256531e+02]],\n", - " dtype=float32), labels=array([40, 60, 39, 39, 39, 56, 41, 60]), scores=array([0.9567754 , 0.71696526, 0.43545035, 0.39587805, 0.38604254,\n", - " 0.344238 , 0.32765186, 0.3247362 ], dtype=float32), class_names=['wine glass', 'dining table', 'bottle', 'bottle', 'bottle', 'chair', 'cup', 'dining table'], visualization=),\n", + " dtype=float32), labels=array([[40],\n", + " [60],\n", + " [39],\n", + " [39],\n", + " [39],\n", + " [56],\n", + " [41],\n", + " [60]]), scores=array([0.9567754 , 0.71696526, 0.43545035, 0.39587805, 0.38604254,\n", + " 0.344238 , 0.32765186, 0.3247362 ], dtype=float32), class_names=['wine glass', 'dining table', 'bottle', 'bottle', 'bottle', 'chair', 'cup', 'dining table'], visualization=),\n", " PredictionResult(boxes=array([[-3.66210938e-03, 9.93643799e+01, 1.02280640e+03,\n", " 1.01478198e+03],\n", " [ 5.33190552e+02, 1.02917358e+02, 8.48738647e+02,\n", @@ -372,9 +430,18 @@ " [ 2.69857178e+02, 2.84319214e+02, 5.23064270e+02,\n", " 5.31761353e+02],\n", " [ 3.42011658e+02, 2.15468735e+02, 5.42365906e+02,\n", - " 3.96996216e+02]], dtype=float32), labels=array([55, 55, 55, 60, 55, 55, 60, 55, 55, 55]), scores=array([0.7725273 , 0.7424967 , 0.4684447 , 0.44936326, 0.40752068,\n", + " 3.96996216e+02]], dtype=float32), labels=array([[55],\n", + " [55],\n", + " [55],\n", + " [60],\n", + " [55],\n", + " [55],\n", + " [60],\n", + " [55],\n", + " [55],\n", + " [55]]), scores=array([0.7725273 , 0.7424967 , 0.4684447 , 0.44936326, 0.40752068,\n", " 0.33794802, 0.3349641 , 0.3305861 , 0.30056012, 0.27949557],\n", - " dtype=float32), class_names=['cake', 'cake', 'cake', 'dining table', 'cake', 'cake', 'dining table', 'cake', 'cake', 'cake'], visualization=),\n", + " dtype=float32), class_names=['cake', 'cake', 'cake', 'dining table', 'cake', 'cake', 'dining table', 'cake', 'cake', 'cake'], visualization=),\n", " PredictionResult(boxes=array([[ 1.59410950e+02, 3.04520111e+02, 3.07281860e+02,\n", " 6.81950134e+02],\n", " [ 7.41914001e+02, 3.09075897e+02, 9.18117981e+02,\n", @@ -484,10 +551,61 @@ " [ 5.73232483e+02, 1.72442459e+02, 6.11173889e+02,\n", " 2.36815384e+02],\n", " [ 9.74448364e+02, 4.38700562e+02, 1.02400171e+03,\n", - " 5.33402039e+02]], dtype=float32), labels=array([ 0, 0, 0, 63, 62, 0, 63, 0, 63, 0, 64, 0, 66, 0, 63, 0, 0,\n", - " 0, 0, 62, 0, 66, 0, 0, 62, 0, 0, 0, 0, 26, 0, 0, 0, 62,\n", - " 56, 64, 62, 24, 56, 56, 0, 62, 62, 0, 0, 63, 0, 0, 27, 62, 0,\n", - " 0, 0, 0, 24]), scores=array([0.89852947, 0.8826244 , 0.8692593 , 0.8496177 , 0.8242701 ,\n", + " 5.33402039e+02]], dtype=float32), labels=array([[ 0],\n", + " [ 0],\n", + " [ 0],\n", + " [63],\n", + " [62],\n", + " [ 0],\n", + " [63],\n", + " [ 0],\n", + " [63],\n", + " [ 0],\n", + " [64],\n", + " [ 0],\n", + " [66],\n", + " [ 0],\n", + " [63],\n", + " [ 0],\n", + " [ 0],\n", + " [ 0],\n", + " [ 0],\n", + " [62],\n", + " [ 0],\n", + " [66],\n", + " [ 0],\n", + " [ 0],\n", + " [62],\n", + " [ 0],\n", + " [ 0],\n", + " [ 0],\n", + " [ 0],\n", + " [26],\n", + " [ 0],\n", + " [ 0],\n", + " [ 0],\n", + " [62],\n", + " [56],\n", + " [64],\n", + " [62],\n", + " [24],\n", + " [56],\n", + " [56],\n", + " [ 0],\n", + " [62],\n", + " [62],\n", + " [ 0],\n", + " [ 0],\n", + " [63],\n", + " [ 0],\n", + " [ 0],\n", + " [27],\n", + " [62],\n", + " [ 0],\n", + " [ 0],\n", + " [ 0],\n", + " [ 0],\n", + " [24]]), scores=array([0.89852947, 0.8826244 , 0.8692593 , 0.8496177 , 0.8242701 ,\n", " 0.79211164, 0.78750825, 0.78054696, 0.7750364 , 0.70845443,\n", " 0.66623205, 0.6508312 , 0.63816243, 0.62516147, 0.57843167,\n", " 0.5719267 , 0.53797 , 0.5361347 , 0.5251317 , 0.5001882 ,\n", @@ -498,9 +616,10 @@ " 0.30374694, 0.30090356, 0.29831818, 0.2917783 , 0.28005406,\n", " 0.27947924, 0.27291718, 0.2728904 , 0.27281892, 0.26928812,\n", " 0.26171884, 0.26042277, 0.25983995, 0.25874868, 0.25001007],\n", - " dtype=float32), class_names=['person', 'person', 'person', 'laptop', 'tv', 'person', 'laptop', 'person', 'laptop', 'person', 'mouse', 'person', 'keyboard', 'person', 'laptop', 'person', 'person', 'person', 'person', 'tv', 'person', 'keyboard', 'person', 'person', 'tv', 'person', 'person', 'person', 'person', 'handbag', 'person', 'person', 'person', 'tv', 'chair', 'mouse', 'tv', 'backpack', 'chair', 'chair', 'person', 'tv', 'tv', 'person', 'person', 'laptop', 'person', 'person', 'tie', 'tv', 'person', 'person', 'person', 'person', 'backpack'], visualization=),\n", + " dtype=float32), class_names=['person', 'person', 'person', 'laptop', 'tv', 'person', 'laptop', 'person', 'laptop', 'person', 'mouse', 'person', 'keyboard', 'person', 'laptop', 'person', 'person', 'person', 'person', 'tv', 'person', 'keyboard', 'person', 'person', 'tv', 'person', 'person', 'person', 'person', 'handbag', 'person', 'person', 'person', 'tv', 'chair', 'mouse', 'tv', 'backpack', 'chair', 'chair', 'person', 'tv', 'tv', 'person', 'person', 'laptop', 'person', 'person', 'tie', 'tv', 'person', 'person', 'person', 'person', 'backpack'], visualization=),\n", " PredictionResult(boxes=array([[619.104 , 271.03265, 861.1582 , 423.11118],\n", - " [158.44098, 424.03067, 312.18756, 518.8823 ]], dtype=float32), labels=array([1, 1]), scores=array([0.9270227, 0.908709 ], dtype=float32), class_names=['bicycle', 'bicycle'], visualization=),\n", + " [158.44098, 424.03067, 312.18756, 518.8823 ]], dtype=float32), labels=array([[1],\n", + " [1]]), scores=array([0.9270227, 0.908709 ], dtype=float32), class_names=['bicycle', 'bicycle'], visualization=),\n", " PredictionResult(boxes=array([[2.34405746e+02, 5.83390045e+01, 6.90530884e+02, 5.64451355e+02],\n", " [9.39086914e-01, 4.92897491e+02, 7.42946716e+02, 7.60584839e+02],\n", " [7.71715698e+02, 3.14431549e+02, 8.84230469e+02, 3.92016357e+02],\n", @@ -548,9 +667,53 @@ " [1.73308090e+02, 1.87920990e+02, 1.94129318e+02, 2.12537781e+02],\n", " [1.60617584e+02, 2.05824768e+02, 1.73824707e+02, 2.35381134e+02],\n", " [1.67730530e+02, 2.44348755e+02, 2.37179169e+02, 3.15651764e+02]],\n", - " dtype=float32), labels=array([ 0, 60, 1, 0, 0, 2, 2, 60, 2, 0, 1, 9, 1, 0, 44, 55, 13,\n", - " 13, 52, 60, 2, 0, 2, 5, 1, 2, 48, 48, 0, 3, 1, 0, 52, 55,\n", - " 1, 0, 2, 9, 2, 1, 7, 43, 9, 9, 9, 9, 7]), scores=array([0.9450894 , 0.8822315 , 0.79589367, 0.7522484 , 0.6860587 ,\n", + " dtype=float32), labels=array([[ 0],\n", + " [60],\n", + " [ 1],\n", + " [ 0],\n", + " [ 0],\n", + " [ 2],\n", + " [ 2],\n", + " [60],\n", + " [ 2],\n", + " [ 0],\n", + " [ 1],\n", + " [ 9],\n", + " [ 1],\n", + " [ 0],\n", + " [44],\n", + " [55],\n", + " [13],\n", + " [13],\n", + " [52],\n", + " [60],\n", + " [ 2],\n", + " [ 0],\n", + " [ 2],\n", + " [ 5],\n", + " [ 1],\n", + " [ 2],\n", + " [48],\n", + " [48],\n", + " [ 0],\n", + " [ 3],\n", + " [ 1],\n", + " [ 0],\n", + " [52],\n", + " [55],\n", + " [ 1],\n", + " [ 0],\n", + " [ 2],\n", + " [ 9],\n", + " [ 2],\n", + " [ 1],\n", + " [ 7],\n", + " [43],\n", + " [ 9],\n", + " [ 9],\n", + " [ 9],\n", + " [ 9],\n", + " [ 7]]), scores=array([0.9450894 , 0.8822315 , 0.79589367, 0.7522484 , 0.6860587 ,\n", " 0.6359941 , 0.6333548 , 0.5939115 , 0.58851963, 0.58526903,\n", " 0.5574593 , 0.546802 , 0.52649385, 0.44012004, 0.42359227,\n", " 0.42154673, 0.41075468, 0.40991455, 0.4036927 , 0.38872105,\n", @@ -559,11 +722,14 @@ " 0.30068624, 0.30021295, 0.2862656 , 0.28040218, 0.27984113,\n", " 0.27983758, 0.27701148, 0.27280134, 0.27113762, 0.26653907,\n", " 0.26583695, 0.26145327, 0.25771132, 0.25671494, 0.25505957,\n", - " 0.25155178, 0.2505064 ], dtype=float32), class_names=['person', 'dining table', 'bicycle', 'person', 'person', 'car', 'car', 'dining table', 'car', 'person', 'bicycle', 'traffic light', 'bicycle', 'person', 'spoon', 'cake', 'bench', 'bench', 'hot dog', 'dining table', 'car', 'person', 'car', 'bus', 'bicycle', 'car', 'sandwich', 'sandwich', 'person', 'motorcycle', 'bicycle', 'person', 'hot dog', 'cake', 'bicycle', 'person', 'car', 'traffic light', 'car', 'bicycle', 'truck', 'knife', 'traffic light', 'traffic light', 'traffic light', 'traffic light', 'truck'], visualization=),\n", + " 0.25155178, 0.2505064 ], dtype=float32), class_names=['person', 'dining table', 'bicycle', 'person', 'person', 'car', 'car', 'dining table', 'car', 'person', 'bicycle', 'traffic light', 'bicycle', 'person', 'spoon', 'cake', 'bench', 'bench', 'hot dog', 'dining table', 'car', 'person', 'car', 'bus', 'bicycle', 'car', 'sandwich', 'sandwich', 'person', 'motorcycle', 'bicycle', 'person', 'hot dog', 'cake', 'bicycle', 'person', 'car', 'traffic light', 'car', 'bicycle', 'truck', 'knife', 'traffic light', 'traffic light', 'traffic light', 'traffic light', 'truck'], visualization=),\n", " PredictionResult(boxes=array([[545.621 , 85.08408, 728.9973 , 643.1565 ],\n", " [ 71.0173 , 298.91974, 284.14465, 456.5686 ],\n", " [713.2698 , 213.42928, 728.3601 , 229.52188],\n", - " [695.1057 , 213.42659, 728.57446, 262.3471 ]], dtype=float32), labels=array([ 0, 62, 67, 67]), scores=array([0.91540164, 0.70148945, 0.49184456, 0.40175018], dtype=float32), class_names=['person', 'tv', 'cell phone', 'cell phone'], visualization=),\n", + " [695.1057 , 213.42659, 728.57446, 262.3471 ]], dtype=float32), labels=array([[ 0],\n", + " [62],\n", + " [67],\n", + " [67]]), scores=array([0.91540164, 0.70148945, 0.49184456, 0.40175018], dtype=float32), class_names=['person', 'tv', 'cell phone', 'cell phone'], visualization=),\n", " PredictionResult(boxes=array([[424.3211 , 179.6821 , 514.4095 , 257.94376 ],\n", " [260.55386 , 155.19977 , 393.8666 , 270.72275 ],\n", " [ 95.65771 , 117.0886 , 269.27197 , 273.1783 ],\n", @@ -578,31 +744,57 @@ " [579.53564 , 212.94328 , 689.0907 , 267.49313 ],\n", " [ 95.6734 , 126.51809 , 393.17505 , 273.62247 ],\n", " [554.2109 , 235.9383 , 593.12714 , 264.07092 ],\n", - " [ 95.092224, 112.55119 , 393.05707 , 273.5855 ]], dtype=float32), labels=array([8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8]), scores=array([0.68943435, 0.665106 , 0.5542661 , 0.5507727 , 0.46040758,\n", + " [ 95.092224, 112.55119 , 393.05707 , 273.5855 ]], dtype=float32), labels=array([[8],\n", + " [8],\n", + " [8],\n", + " [8],\n", + " [8],\n", + " [8],\n", + " [8],\n", + " [8],\n", + " [8],\n", + " [8],\n", + " [8],\n", + " [8],\n", + " [8],\n", + " [8],\n", + " [8]]), scores=array([0.68943435, 0.665106 , 0.5542661 , 0.5507727 , 0.46040758,\n", " 0.45880103, 0.43566883, 0.40994436, 0.4001922 , 0.37548688,\n", " 0.30045223, 0.27943224, 0.26711544, 0.26193473, 0.2512777 ],\n", - " dtype=float32), class_names=['boat', 'boat', 'boat', 'boat', 'boat', 'boat', 'boat', 'boat', 'boat', 'boat', 'boat', 'boat', 'boat', 'boat', 'boat'], visualization=),\n", + " dtype=float32), class_names=['boat', 'boat', 'boat', 'boat', 'boat', 'boat', 'boat', 'boat', 'boat', 'boat', 'boat', 'boat', 'boat', 'boat', 'boat'], visualization=),\n", " PredictionResult(boxes=array([[2.2390503e+02, 1.9052693e+02, 6.7956946e+02, 6.0262982e+02],\n", " [6.7685510e+02, 5.1469067e+02, 7.5505920e+02, 5.6018738e+02],\n", " [2.8964825e+02, 4.8724002e+02, 4.7840387e+02, 5.8926813e+02],\n", " [3.1784857e+02, 4.9751697e+02, 4.7368231e+02, 5.7966547e+02],\n", " [4.8936462e-01, 4.2978781e+02, 2.3865834e+02, 6.7926904e+02]],\n", - " dtype=float32), labels=array([ 0, 41, 63, 63, 62]), scores=array([0.8863109 , 0.5313867 , 0.5248599 , 0.40107745, 0.3089608 ],\n", - " dtype=float32), class_names=['person', 'cup', 'laptop', 'laptop', 'tv'], visualization=),\n", + " dtype=float32), labels=array([[ 0],\n", + " [41],\n", + " [63],\n", + " [63],\n", + " [62]]), scores=array([0.8863109 , 0.5313867 , 0.5248599 , 0.40107745, 0.3089608 ],\n", + " dtype=float32), class_names=['person', 'cup', 'laptop', 'laptop', 'tv'], visualization=),\n", " PredictionResult(boxes=array([[ 4.2780542e+02, 1.5069971e+01, 9.7997266e+02, 6.7155322e+02],\n", " [ 2.2182373e+01, 1.0445609e+02, 3.5739850e+02, 5.1991125e+02],\n", " [-4.8427582e-02, 2.0301846e+02, 6.2602463e+01, 3.6837134e+02],\n", " [ 4.2779562e+02, 1.5097492e+01, 9.7904858e+02, 6.7130902e+02],\n", " [ 2.2337738e+01, 1.0480997e+02, 3.5725595e+02, 5.1993842e+02]],\n", - " dtype=float32), labels=array([56, 56, 56, 57, 57]), scores=array([0.94877666, 0.9346415 , 0.77918357, 0.5413766 , 0.50754297],\n", - " dtype=float32), class_names=['chair', 'chair', 'chair', 'couch', 'couch'], visualization=),\n", + " dtype=float32), labels=array([[56],\n", + " [56],\n", + " [56],\n", + " [57],\n", + " [57]]), scores=array([0.94877666, 0.9346415 , 0.77918357, 0.5413766 , 0.50754297],\n", + " dtype=float32), class_names=['chair', 'chair', 'chair', 'couch', 'couch'], visualization=),\n", " PredictionResult(boxes=array([[150.30363, 186.02875, 594.8532 , 760.8926 ],\n", - " [185.82806, 177.42165, 323.4549 , 285.49905]], dtype=float32), labels=array([ 0, 35]), scores=array([0.92683053, 0.3182136 ], dtype=float32), class_names=['person', 'baseball glove'], visualization=),\n", + " [185.82806, 177.42165, 323.4549 , 285.49905]], dtype=float32), labels=array([[ 0],\n", + " [35]]), scores=array([0.92683053, 0.3182136 ], dtype=float32), class_names=['person', 'baseball glove'], visualization=),\n", " PredictionResult(boxes=array([[580.36194 , 1.2676103, 967.0814 , 813.922 ],\n", " [104.97034 , 269.29166 , 534.50073 , 815.042 ],\n", " [104.97034 , 269.29166 , 534.50073 , 815.042 ],\n", " [104.326294 , 269.39062 , 534.2277 , 815.8475 ]],\n", - " dtype=float32), labels=array([39, 39, 41, 41]), scores=array([0.9395074 , 0.67832315, 0.44287342, 0.3188903 ], dtype=float32), class_names=['bottle', 'bottle', 'cup', 'cup'], visualization=),\n", + " dtype=float32), labels=array([[39],\n", + " [39],\n", + " [41],\n", + " [41]]), scores=array([0.9395074 , 0.67832315, 0.44287342, 0.3188903 ], dtype=float32), class_names=['bottle', 'bottle', 'cup', 'cup'], visualization=),\n", " PredictionResult(boxes=array([[5.00248901e+02, 2.82743713e+02, 6.37413818e+02, 5.54798096e+02],\n", " [1.98227798e+02, 4.69237701e+02, 3.86902954e+02, 6.81980713e+02],\n", " [7.20214844e-03, 4.56817139e+02, 1.68124146e+02, 6.81365601e+02],\n", @@ -646,9 +838,49 @@ " [2.03034241e+02, 1.60103806e+02, 5.30494080e+02, 4.07366211e+02],\n", " [1.22524536e+02, 4.59525055e+02, 2.16819458e+02, 6.65633606e+02],\n", " [3.09696503e+02, 5.18654175e+02, 4.57013275e+02, 6.46841553e+02]],\n", - " dtype=float32), labels=array([ 0, 0, 0, 0, 0, 33, 0, 26, 56, 0, 0, 0, 0, 0, 0, 0, 0,\n", - " 0, 0, 0, 0, 0, 24, 0, 24, 0, 0, 0, 0, 0, 0, 0, 24, 0,\n", - " 26, 0, 0, 0, 33, 0, 33, 0, 57]), scores=array([0.88774705, 0.8317039 , 0.7352515 , 0.729985 , 0.6132372 ,\n", + " dtype=float32), labels=array([[ 0],\n", + " [ 0],\n", + " [ 0],\n", + " [ 0],\n", + " [ 0],\n", + " [33],\n", + " [ 0],\n", + " [26],\n", + " [56],\n", + " [ 0],\n", + " [ 0],\n", + " [ 0],\n", + " [ 0],\n", + " [ 0],\n", + " [ 0],\n", + " [ 0],\n", + " [ 0],\n", + " [ 0],\n", + " [ 0],\n", + " [ 0],\n", + " [ 0],\n", + " [ 0],\n", + " [24],\n", + " [ 0],\n", + " [24],\n", + " [ 0],\n", + " [ 0],\n", + " [ 0],\n", + " [ 0],\n", + " [ 0],\n", + " [ 0],\n", + " [ 0],\n", + " [24],\n", + " [ 0],\n", + " [26],\n", + " [ 0],\n", + " [ 0],\n", + " [ 0],\n", + " [33],\n", + " [ 0],\n", + " [33],\n", + " [ 0],\n", + " [57]]), scores=array([0.88774705, 0.8317039 , 0.7352515 , 0.729985 , 0.6132372 ,\n", " 0.6034908 , 0.5235618 , 0.51291233, 0.5074247 , 0.47619206,\n", " 0.4670262 , 0.46504226, 0.4455753 , 0.43837568, 0.42692724,\n", " 0.42383417, 0.41433123, 0.41317323, 0.40314105, 0.38409293,\n", @@ -656,10 +888,11 @@ " 0.3396064 , 0.33696735, 0.33064088, 0.32722417, 0.31916538,\n", " 0.31889918, 0.31148338, 0.30911618, 0.30778268, 0.30189627,\n", " 0.28984675, 0.2876871 , 0.27657807, 0.27444902, 0.2617636 ,\n", - " 0.25643486, 0.2526459 , 0.2518398 ], dtype=float32), class_names=['person', 'person', 'person', 'person', 'person', 'kite', 'person', 'handbag', 'chair', 'person', 'person', 'person', 'person', 'person', 'person', 'person', 'person', 'person', 'person', 'person', 'person', 'person', 'backpack', 'person', 'backpack', 'person', 'person', 'person', 'person', 'person', 'person', 'person', 'backpack', 'person', 'handbag', 'person', 'person', 'person', 'kite', 'person', 'kite', 'person', 'couch'], visualization=),\n", + " 0.25643486, 0.2526459 , 0.2518398 ], dtype=float32), class_names=['person', 'person', 'person', 'person', 'person', 'kite', 'person', 'handbag', 'chair', 'person', 'person', 'person', 'person', 'person', 'person', 'person', 'person', 'person', 'person', 'person', 'person', 'person', 'backpack', 'person', 'backpack', 'person', 'person', 'person', 'person', 'person', 'person', 'person', 'backpack', 'person', 'handbag', 'person', 'person', 'person', 'kite', 'person', 'kite', 'person', 'couch'], visualization=),\n", " PredictionResult(boxes=array([[4.0836649e+02, 5.8336096e+02, 6.8569623e+02, 9.4581030e+02],\n", " [9.8531711e-01, 2.4370728e+00, 7.9307062e+02, 1.0170569e+03]],\n", - " dtype=float32), labels=array([16, 57]), scores=array([0.9306613, 0.3094447], dtype=float32), class_names=['dog', 'couch'], visualization=)]" + " dtype=float32), labels=array([[16],\n", + " [57]]), scores=array([0.9306613, 0.3094447], dtype=float32), class_names=['dog', 'couch'], visualization=)]" ] }, "execution_count": 9, @@ -721,7 +954,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.12.9" + "version": "3.11.11" } }, "nbformat": 4, diff --git a/pixi.lock b/pixi.lock index 7138ec28..8b8e95f1 100644 --- a/pixi.lock +++ b/pixi.lock @@ -88,7 +88,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/c5/19/5af6804c4cc0fed83f47bff6e413a98a36618e7d40185cd36e69737f3b0e/aiofiles-23.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a1/ee/48ca1a7c89ffec8b6a0c5d02b89c305671d5ffd8d3c94acf8b8c408575bb/anyio-4.9.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f9/49/6abb616eb3cbab6a7cca303dc02fdf3836de2e0b834bf966a7f5271a34d8/beautifulsoup4-4.13.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/68/02c8117d39cb4b32c8d5cd537068e3b118f13596e5317218c162a53f6b79/calflops-0.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/83/489e9504711fa05d8dde1574996408026bdbdbd938f23be67deebb5eca92/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl @@ -103,7 +102,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/b8/25/155f9f080d5e4bc0082edfda032ea2bc2b8fab3f4d25d46c1e9dd22a1a89/flatbuffers-25.2.10-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/e9/47c02d5a7027e8ed841ab6a10ca00c93dadd5f16742f1af1fa3f9978adf4/fonttools-4.56.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/44/4b/e0cfc1a6f17e990f3e64b7d941ddc4acdc7b19d6edd51abf495f32b1a9e4/fsspec-2025.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/70/e07c381e6488a77094f04c85c9caf1c8008cdc30778f7019bc52e5285ef0/gdown-5.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5f/e3/f1e6569558d212f747820b2c976b4f57c034413a5747acb373f2a04bcd9a/gradio-5.23.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/15/c8/0df7f92c8f1bdf5c244c29de8cd7e33a5931768ddba245526a770bfa18a2/gradio_client-1.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/27/3d6dcadc8a3214d8522c1e7f6a19554e33659be44546d44a2f7572ac7d2a/groovy-0.1.2-py3-none-any.whl @@ -139,7 +137,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/6f/ed/ef37de6478a412ee627cbebd73e7b72a680f45bfacce9ff1199de6e17e88/pydantic_core-2.33.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/a6/53/d78dc063216e62fc55f6b2eebb447f6a4b0a59f55c8406376f76bf959b08/pydub-0.25.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/e7/df2285f3d08fee213f2d041540fa4fc9ca6c2d44cf36d3a035bf2a8d2bcc/pyparsing-3.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/45/58/38b5afbc1a800eeea951b9285d3912613f2603bdf897a4ab0f4bd7f405fc/python_multipart-0.0.20-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/75/e4/2c27590dfc9992f73aabbeb9241ae20220bd9452df27483b6e56d3975cc5/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl @@ -154,7 +151,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/54/21/f43f0a1fa8b06b32812e0975981f4677d28e0f3271601dc88ac5a5b83220/setuptools-78.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/c2/fe97d779f3ef3b15f05c94a2f1e3d21732574ed441687474db9d342a7315/soupsieve-2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/4b/528ccf7a982216885a1ff4908e886b8fb5f19862d1962f56a3fce2435a70/starlette-0.46.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b2/fe/81695a1aa331a842b582453b605175f419fe8540355886031328089d840a/sympy-1.13.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5d/12/4f70e8e2ba0dbe72ea978429d8530b0333f0ed2140cc571a48802878ef99/tensorboard-2.19.0-py3-none-any.whl @@ -245,7 +241,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/c5/19/5af6804c4cc0fed83f47bff6e413a98a36618e7d40185cd36e69737f3b0e/aiofiles-23.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a1/ee/48ca1a7c89ffec8b6a0c5d02b89c305671d5ffd8d3c94acf8b8c408575bb/anyio-4.9.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f9/49/6abb616eb3cbab6a7cca303dc02fdf3836de2e0b834bf966a7f5271a34d8/beautifulsoup4-4.13.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/68/02c8117d39cb4b32c8d5cd537068e3b118f13596e5317218c162a53f6b79/calflops-0.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/72/80/41ef5d5a7935d2d3a773e3eaebf0a9350542f2cab4eac59a7a4741fbbbbe/charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl @@ -260,7 +255,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/b8/25/155f9f080d5e4bc0082edfda032ea2bc2b8fab3f4d25d46c1e9dd22a1a89/flatbuffers-25.2.10-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/35/56/a2f3e777d48fcae7ecd29de4d96352d84e5ea9871e5f3fc88241521572cf/fonttools-4.56.0-cp311-cp311-macosx_10_9_universal2.whl - pypi: https://files.pythonhosted.org/packages/44/4b/e0cfc1a6f17e990f3e64b7d941ddc4acdc7b19d6edd51abf495f32b1a9e4/fsspec-2025.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/70/e07c381e6488a77094f04c85c9caf1c8008cdc30778f7019bc52e5285ef0/gdown-5.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5f/e3/f1e6569558d212f747820b2c976b4f57c034413a5747acb373f2a04bcd9a/gradio-5.23.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/15/c8/0df7f92c8f1bdf5c244c29de8cd7e33a5931768ddba245526a770bfa18a2/gradio_client-1.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/27/3d6dcadc8a3214d8522c1e7f6a19554e33659be44546d44a2f7572ac7d2a/groovy-0.1.2-py3-none-any.whl @@ -296,7 +290,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/42/b4/0bba8412fd242729feeb80e7152e24f0e1a1c19f4121ca3d4a307f4e6222/pydantic_core-2.33.0-cp311-cp311-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/a6/53/d78dc063216e62fc55f6b2eebb447f6a4b0a59f55c8406376f76bf959b08/pydub-0.25.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/e7/df2285f3d08fee213f2d041540fa4fc9ca6c2d44cf36d3a035bf2a8d2bcc/pyparsing-3.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/45/58/38b5afbc1a800eeea951b9285d3912613f2603bdf897a4ab0f4bd7f405fc/python_multipart-0.0.20-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8b/62/b9faa998fd185f65c1371643678e4d58254add437edb764a08c5a98fb986/PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl @@ -311,7 +304,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/54/21/f43f0a1fa8b06b32812e0975981f4677d28e0f3271601dc88ac5a5b83220/setuptools-78.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/c2/fe97d779f3ef3b15f05c94a2f1e3d21732574ed441687474db9d342a7315/soupsieve-2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/4b/528ccf7a982216885a1ff4908e886b8fb5f19862d1962f56a3fce2435a70/starlette-0.46.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b2/fe/81695a1aa331a842b582453b605175f419fe8540355886031328089d840a/sympy-1.13.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5d/12/4f70e8e2ba0dbe72ea978429d8530b0333f0ed2140cc571a48802878ef99/tensorboard-2.19.0-py3-none-any.whl @@ -397,7 +389,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/c5/19/5af6804c4cc0fed83f47bff6e413a98a36618e7d40185cd36e69737f3b0e/aiofiles-23.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a1/ee/48ca1a7c89ffec8b6a0c5d02b89c305671d5ffd8d3c94acf8b8c408575bb/anyio-4.9.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f9/49/6abb616eb3cbab6a7cca303dc02fdf3836de2e0b834bf966a7f5271a34d8/beautifulsoup4-4.13.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/68/02c8117d39cb4b32c8d5cd537068e3b118f13596e5317218c162a53f6b79/calflops-0.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/ab/45b180e175de4402dcf7547e4fb617283bae54ce35c27930a6f35b6bef15/charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl @@ -412,7 +403,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/b8/25/155f9f080d5e4bc0082edfda032ea2bc2b8fab3f4d25d46c1e9dd22a1a89/flatbuffers-25.2.10-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/90/4926e653041c4116ecd43e50e3c79f5daae6dcafc58ceb64bc4f71dd4924/fonttools-4.56.0-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/44/4b/e0cfc1a6f17e990f3e64b7d941ddc4acdc7b19d6edd51abf495f32b1a9e4/fsspec-2025.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/70/e07c381e6488a77094f04c85c9caf1c8008cdc30778f7019bc52e5285ef0/gdown-5.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5f/e3/f1e6569558d212f747820b2c976b4f57c034413a5747acb373f2a04bcd9a/gradio-5.23.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/15/c8/0df7f92c8f1bdf5c244c29de8cd7e33a5931768ddba245526a770bfa18a2/gradio_client-1.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/27/3d6dcadc8a3214d8522c1e7f6a19554e33659be44546d44a2f7572ac7d2a/groovy-0.1.2-py3-none-any.whl @@ -449,7 +439,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/a6/53/d78dc063216e62fc55f6b2eebb447f6a4b0a59f55c8406376f76bf959b08/pydub-0.25.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/e7/df2285f3d08fee213f2d041540fa4fc9ca6c2d44cf36d3a035bf2a8d2bcc/pyparsing-3.2.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/dc/491b7661614ab97483abf2056be1deee4dc2490ecbf7bff9ab5cdbac86e1/pyreadline3-3.5.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/45/58/38b5afbc1a800eeea951b9285d3912613f2603bdf897a4ab0f4bd7f405fc/python_multipart-0.0.20-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ed/23/8da0bbe2ab9dcdd11f4f4557ccaf95c10b9811b13ecced089d43ce59c3c8/PyYAML-6.0.2-cp311-cp311-win_amd64.whl @@ -464,7 +453,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/54/21/f43f0a1fa8b06b32812e0975981f4677d28e0f3271601dc88ac5a5b83220/setuptools-78.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/c2/fe97d779f3ef3b15f05c94a2f1e3d21732574ed441687474db9d342a7315/soupsieve-2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/4b/528ccf7a982216885a1ff4908e886b8fb5f19862d1962f56a3fce2435a70/starlette-0.46.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b2/fe/81695a1aa331a842b582453b605175f419fe8540355886031328089d840a/sympy-1.13.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5d/12/4f70e8e2ba0dbe72ea978429d8530b0333f0ed2140cc571a48802878ef99/tensorboard-2.19.0-py3-none-any.whl @@ -572,7 +560,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/c5/19/5af6804c4cc0fed83f47bff6e413a98a36618e7d40185cd36e69737f3b0e/aiofiles-23.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a1/ee/48ca1a7c89ffec8b6a0c5d02b89c305671d5ffd8d3c94acf8b8c408575bb/anyio-4.9.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f9/49/6abb616eb3cbab6a7cca303dc02fdf3836de2e0b834bf966a7f5271a34d8/beautifulsoup4-4.13.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/68/02c8117d39cb4b32c8d5cd537068e3b118f13596e5317218c162a53f6b79/calflops-0.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/83/489e9504711fa05d8dde1574996408026bdbdbd938f23be67deebb5eca92/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl @@ -587,7 +574,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/b8/25/155f9f080d5e4bc0082edfda032ea2bc2b8fab3f4d25d46c1e9dd22a1a89/flatbuffers-25.2.10-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/e9/47c02d5a7027e8ed841ab6a10ca00c93dadd5f16742f1af1fa3f9978adf4/fonttools-4.56.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/44/4b/e0cfc1a6f17e990f3e64b7d941ddc4acdc7b19d6edd51abf495f32b1a9e4/fsspec-2025.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/70/e07c381e6488a77094f04c85c9caf1c8008cdc30778f7019bc52e5285ef0/gdown-5.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5f/e3/f1e6569558d212f747820b2c976b4f57c034413a5747acb373f2a04bcd9a/gradio-5.23.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/15/c8/0df7f92c8f1bdf5c244c29de8cd7e33a5931768ddba245526a770bfa18a2/gradio_client-1.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/27/3d6dcadc8a3214d8522c1e7f6a19554e33659be44546d44a2f7572ac7d2a/groovy-0.1.2-py3-none-any.whl @@ -636,7 +622,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/6f/ed/ef37de6478a412ee627cbebd73e7b72a680f45bfacce9ff1199de6e17e88/pydantic_core-2.33.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/a6/53/d78dc063216e62fc55f6b2eebb447f6a4b0a59f55c8406376f76bf959b08/pydub-0.25.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/e7/df2285f3d08fee213f2d041540fa4fc9ca6c2d44cf36d3a035bf2a8d2bcc/pyparsing-3.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/45/58/38b5afbc1a800eeea951b9285d3912613f2603bdf897a4ab0f4bd7f405fc/python_multipart-0.0.20-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/75/e4/2c27590dfc9992f73aabbeb9241ae20220bd9452df27483b6e56d3975cc5/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl @@ -651,7 +636,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/54/21/f43f0a1fa8b06b32812e0975981f4677d28e0f3271601dc88ac5a5b83220/setuptools-78.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/c2/fe97d779f3ef3b15f05c94a2f1e3d21732574ed441687474db9d342a7315/soupsieve-2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/4b/528ccf7a982216885a1ff4908e886b8fb5f19862d1962f56a3fce2435a70/starlette-0.46.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b2/fe/81695a1aa331a842b582453b605175f419fe8540355886031328089d840a/sympy-1.13.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5d/12/4f70e8e2ba0dbe72ea978429d8530b0333f0ed2140cc571a48802878ef99/tensorboard-2.19.0-py3-none-any.whl @@ -742,7 +726,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/c5/19/5af6804c4cc0fed83f47bff6e413a98a36618e7d40185cd36e69737f3b0e/aiofiles-23.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a1/ee/48ca1a7c89ffec8b6a0c5d02b89c305671d5ffd8d3c94acf8b8c408575bb/anyio-4.9.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f9/49/6abb616eb3cbab6a7cca303dc02fdf3836de2e0b834bf966a7f5271a34d8/beautifulsoup4-4.13.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/68/02c8117d39cb4b32c8d5cd537068e3b118f13596e5317218c162a53f6b79/calflops-0.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/ab/45b180e175de4402dcf7547e4fb617283bae54ce35c27930a6f35b6bef15/charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl @@ -757,7 +740,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/b8/25/155f9f080d5e4bc0082edfda032ea2bc2b8fab3f4d25d46c1e9dd22a1a89/flatbuffers-25.2.10-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/90/4926e653041c4116ecd43e50e3c79f5daae6dcafc58ceb64bc4f71dd4924/fonttools-4.56.0-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/44/4b/e0cfc1a6f17e990f3e64b7d941ddc4acdc7b19d6edd51abf495f32b1a9e4/fsspec-2025.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/70/e07c381e6488a77094f04c85c9caf1c8008cdc30778f7019bc52e5285ef0/gdown-5.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5f/e3/f1e6569558d212f747820b2c976b4f57c034413a5747acb373f2a04bcd9a/gradio-5.23.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/15/c8/0df7f92c8f1bdf5c244c29de8cd7e33a5931768ddba245526a770bfa18a2/gradio_client-1.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/27/3d6dcadc8a3214d8522c1e7f6a19554e33659be44546d44a2f7572ac7d2a/groovy-0.1.2-py3-none-any.whl @@ -795,7 +777,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/a6/53/d78dc063216e62fc55f6b2eebb447f6a4b0a59f55c8406376f76bf959b08/pydub-0.25.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/e7/df2285f3d08fee213f2d041540fa4fc9ca6c2d44cf36d3a035bf2a8d2bcc/pyparsing-3.2.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/dc/491b7661614ab97483abf2056be1deee4dc2490ecbf7bff9ab5cdbac86e1/pyreadline3-3.5.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/45/58/38b5afbc1a800eeea951b9285d3912613f2603bdf897a4ab0f4bd7f405fc/python_multipart-0.0.20-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ed/23/8da0bbe2ab9dcdd11f4f4557ccaf95c10b9811b13ecced089d43ce59c3c8/PyYAML-6.0.2-cp311-cp311-win_amd64.whl @@ -810,7 +791,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/54/21/f43f0a1fa8b06b32812e0975981f4677d28e0f3271601dc88ac5a5b83220/setuptools-78.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/c2/fe97d779f3ef3b15f05c94a2f1e3d21732574ed441687474db9d342a7315/soupsieve-2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/4b/528ccf7a982216885a1ff4908e886b8fb5f19862d1962f56a3fce2435a70/starlette-0.46.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b2/fe/81695a1aa331a842b582453b605175f419fe8540355886031328089d840a/sympy-1.13.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5d/12/4f70e8e2ba0dbe72ea978429d8530b0333f0ed2140cc571a48802878ef99/tensorboard-2.19.0-py3-none-any.whl @@ -922,7 +902,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/c5/19/5af6804c4cc0fed83f47bff6e413a98a36618e7d40185cd36e69737f3b0e/aiofiles-23.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a1/ee/48ca1a7c89ffec8b6a0c5d02b89c305671d5ffd8d3c94acf8b8c408575bb/anyio-4.9.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f9/49/6abb616eb3cbab6a7cca303dc02fdf3836de2e0b834bf966a7f5271a34d8/beautifulsoup4-4.13.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/68/02c8117d39cb4b32c8d5cd537068e3b118f13596e5317218c162a53f6b79/calflops-0.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/88/83/489e9504711fa05d8dde1574996408026bdbdbd938f23be67deebb5eca92/charset_normalizer-3.4.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl @@ -937,7 +916,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/b8/25/155f9f080d5e4bc0082edfda032ea2bc2b8fab3f4d25d46c1e9dd22a1a89/flatbuffers-25.2.10-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/e9/47c02d5a7027e8ed841ab6a10ca00c93dadd5f16742f1af1fa3f9978adf4/fonttools-4.56.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/44/4b/e0cfc1a6f17e990f3e64b7d941ddc4acdc7b19d6edd51abf495f32b1a9e4/fsspec-2025.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/70/e07c381e6488a77094f04c85c9caf1c8008cdc30778f7019bc52e5285ef0/gdown-5.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5f/e3/f1e6569558d212f747820b2c976b4f57c034413a5747acb373f2a04bcd9a/gradio-5.23.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/15/c8/0df7f92c8f1bdf5c244c29de8cd7e33a5931768ddba245526a770bfa18a2/gradio_client-1.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/27/3d6dcadc8a3214d8522c1e7f6a19554e33659be44546d44a2f7572ac7d2a/groovy-0.1.2-py3-none-any.whl @@ -973,7 +951,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/6f/ed/ef37de6478a412ee627cbebd73e7b72a680f45bfacce9ff1199de6e17e88/pydantic_core-2.33.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - pypi: https://files.pythonhosted.org/packages/a6/53/d78dc063216e62fc55f6b2eebb447f6a4b0a59f55c8406376f76bf959b08/pydub-0.25.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/e7/df2285f3d08fee213f2d041540fa4fc9ca6c2d44cf36d3a035bf2a8d2bcc/pyparsing-3.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/45/58/38b5afbc1a800eeea951b9285d3912613f2603bdf897a4ab0f4bd7f405fc/python_multipart-0.0.20-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/75/e4/2c27590dfc9992f73aabbeb9241ae20220bd9452df27483b6e56d3975cc5/PyYAML-6.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl @@ -988,7 +965,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/54/21/f43f0a1fa8b06b32812e0975981f4677d28e0f3271601dc88ac5a5b83220/setuptools-78.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/c2/fe97d779f3ef3b15f05c94a2f1e3d21732574ed441687474db9d342a7315/soupsieve-2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/4b/528ccf7a982216885a1ff4908e886b8fb5f19862d1962f56a3fce2435a70/starlette-0.46.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b2/fe/81695a1aa331a842b582453b605175f419fe8540355886031328089d840a/sympy-1.13.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5d/12/4f70e8e2ba0dbe72ea978429d8530b0333f0ed2140cc571a48802878ef99/tensorboard-2.19.0-py3-none-any.whl @@ -1079,7 +1055,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/c5/19/5af6804c4cc0fed83f47bff6e413a98a36618e7d40185cd36e69737f3b0e/aiofiles-23.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a1/ee/48ca1a7c89ffec8b6a0c5d02b89c305671d5ffd8d3c94acf8b8c408575bb/anyio-4.9.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f9/49/6abb616eb3cbab6a7cca303dc02fdf3836de2e0b834bf966a7f5271a34d8/beautifulsoup4-4.13.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/68/02c8117d39cb4b32c8d5cd537068e3b118f13596e5317218c162a53f6b79/calflops-0.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/72/80/41ef5d5a7935d2d3a773e3eaebf0a9350542f2cab4eac59a7a4741fbbbbe/charset_normalizer-3.4.1-cp311-cp311-macosx_10_9_universal2.whl @@ -1094,7 +1069,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/b8/25/155f9f080d5e4bc0082edfda032ea2bc2b8fab3f4d25d46c1e9dd22a1a89/flatbuffers-25.2.10-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/35/56/a2f3e777d48fcae7ecd29de4d96352d84e5ea9871e5f3fc88241521572cf/fonttools-4.56.0-cp311-cp311-macosx_10_9_universal2.whl - pypi: https://files.pythonhosted.org/packages/44/4b/e0cfc1a6f17e990f3e64b7d941ddc4acdc7b19d6edd51abf495f32b1a9e4/fsspec-2025.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/70/e07c381e6488a77094f04c85c9caf1c8008cdc30778f7019bc52e5285ef0/gdown-5.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5f/e3/f1e6569558d212f747820b2c976b4f57c034413a5747acb373f2a04bcd9a/gradio-5.23.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/15/c8/0df7f92c8f1bdf5c244c29de8cd7e33a5931768ddba245526a770bfa18a2/gradio_client-1.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/27/3d6dcadc8a3214d8522c1e7f6a19554e33659be44546d44a2f7572ac7d2a/groovy-0.1.2-py3-none-any.whl @@ -1130,7 +1104,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/42/b4/0bba8412fd242729feeb80e7152e24f0e1a1c19f4121ca3d4a307f4e6222/pydantic_core-2.33.0-cp311-cp311-macosx_11_0_arm64.whl - pypi: https://files.pythonhosted.org/packages/a6/53/d78dc063216e62fc55f6b2eebb447f6a4b0a59f55c8406376f76bf959b08/pydub-0.25.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/e7/df2285f3d08fee213f2d041540fa4fc9ca6c2d44cf36d3a035bf2a8d2bcc/pyparsing-3.2.3-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/45/58/38b5afbc1a800eeea951b9285d3912613f2603bdf897a4ab0f4bd7f405fc/python_multipart-0.0.20-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/8b/62/b9faa998fd185f65c1371643678e4d58254add437edb764a08c5a98fb986/PyYAML-6.0.2-cp311-cp311-macosx_11_0_arm64.whl @@ -1145,7 +1118,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/54/21/f43f0a1fa8b06b32812e0975981f4677d28e0f3271601dc88ac5a5b83220/setuptools-78.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/c2/fe97d779f3ef3b15f05c94a2f1e3d21732574ed441687474db9d342a7315/soupsieve-2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/4b/528ccf7a982216885a1ff4908e886b8fb5f19862d1962f56a3fce2435a70/starlette-0.46.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b2/fe/81695a1aa331a842b582453b605175f419fe8540355886031328089d840a/sympy-1.13.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5d/12/4f70e8e2ba0dbe72ea978429d8530b0333f0ed2140cc571a48802878ef99/tensorboard-2.19.0-py3-none-any.whl @@ -1231,7 +1203,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/c5/19/5af6804c4cc0fed83f47bff6e413a98a36618e7d40185cd36e69737f3b0e/aiofiles-23.2.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/78/b6/6307fbef88d9b5ee7421e68d78a9f162e0da4900bc5f5793f6d3d0e34fb8/annotated_types-0.7.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a1/ee/48ca1a7c89ffec8b6a0c5d02b89c305671d5ffd8d3c94acf8b8c408575bb/anyio-4.9.0-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/f9/49/6abb616eb3cbab6a7cca303dc02fdf3836de2e0b834bf966a7f5271a34d8/beautifulsoup4-4.13.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/79/68/02c8117d39cb4b32c8d5cd537068e3b118f13596e5317218c162a53f6b79/calflops-0.3.2-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/38/fc/bce832fd4fd99766c04d1ee0eead6b0ec6486fb100ae5e74c1d91292b982/certifi-2025.1.31-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/ab/45b180e175de4402dcf7547e4fb617283bae54ce35c27930a6f35b6bef15/charset_normalizer-3.4.1-cp311-cp311-win_amd64.whl @@ -1246,7 +1217,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/b8/25/155f9f080d5e4bc0082edfda032ea2bc2b8fab3f4d25d46c1e9dd22a1a89/flatbuffers-25.2.10-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/3b/90/4926e653041c4116ecd43e50e3c79f5daae6dcafc58ceb64bc4f71dd4924/fonttools-4.56.0-cp311-cp311-win_amd64.whl - pypi: https://files.pythonhosted.org/packages/44/4b/e0cfc1a6f17e990f3e64b7d941ddc4acdc7b19d6edd51abf495f32b1a9e4/fsspec-2025.3.2-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/54/70/e07c381e6488a77094f04c85c9caf1c8008cdc30778f7019bc52e5285ef0/gdown-5.2.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5f/e3/f1e6569558d212f747820b2c976b4f57c034413a5747acb373f2a04bcd9a/gradio-5.23.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/15/c8/0df7f92c8f1bdf5c244c29de8cd7e33a5931768ddba245526a770bfa18a2/gradio_client-1.8.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/28/27/3d6dcadc8a3214d8522c1e7f6a19554e33659be44546d44a2f7572ac7d2a/groovy-0.1.2-py3-none-any.whl @@ -1283,7 +1253,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/a6/53/d78dc063216e62fc55f6b2eebb447f6a4b0a59f55c8406376f76bf959b08/pydub-0.25.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/05/e7/df2285f3d08fee213f2d041540fa4fc9ca6c2d44cf36d3a035bf2a8d2bcc/pyparsing-3.2.3-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5a/dc/491b7661614ab97483abf2056be1deee4dc2490ecbf7bff9ab5cdbac86e1/pyreadline3-3.5.4-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/45/58/38b5afbc1a800eeea951b9285d3912613f2603bdf897a4ab0f4bd7f405fc/python_multipart-0.0.20-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/81/c4/34e93fe5f5429d7570ec1fa436f1986fb1f00c3e0f43a589fe2bbcd22c3f/pytz-2025.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/ed/23/8da0bbe2ab9dcdd11f4f4557ccaf95c10b9811b13ecced089d43ce59c3c8/PyYAML-6.0.2-cp311-cp311-win_amd64.whl @@ -1298,7 +1267,6 @@ environments: - pypi: https://files.pythonhosted.org/packages/54/21/f43f0a1fa8b06b32812e0975981f4677d28e0f3271601dc88ac5a5b83220/setuptools-78.1.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/44/75a9c9421471a6c4805dbf2356f7c181a29c1879239abab1ea2cc8f38b40/sniffio-1.3.1-py3-none-any.whl - - pypi: https://files.pythonhosted.org/packages/d1/c2/fe97d779f3ef3b15f05c94a2f1e3d21732574ed441687474db9d342a7315/soupsieve-2.6-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/a0/4b/528ccf7a982216885a1ff4908e886b8fb5f19862d1962f56a3fce2435a70/starlette-0.46.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/b2/fe/81695a1aa331a842b582453b605175f419fe8540355886031328089d840a/sympy-1.13.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/5d/12/4f70e8e2ba0dbe72ea978429d8530b0333f0ed2140cc571a48802878ef99/tensorboard-2.19.0-py3-none-any.whl @@ -1322,8 +1290,6 @@ packages: - conda: https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2 sha256: fe51de6107f9edc7aa4f786a70f4a883943bc9d39b3bb7307c04c41410990726 md5: d7c89558ba9fa0495403155b64376d81 - arch: x86_64 - platform: linux license: None purls: [] size: 2562 @@ -1337,8 +1303,6 @@ packages: - libgomp >=7.5.0 constrains: - openmp_impl 9999 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: [] @@ -1487,27 +1451,12 @@ packages: - pkg:pypi/asttokens?source=hash-mapping size: 28206 timestamp: 1733250564754 -- pypi: https://files.pythonhosted.org/packages/f9/49/6abb616eb3cbab6a7cca303dc02fdf3836de2e0b834bf966a7f5271a34d8/beautifulsoup4-4.13.3-py3-none-any.whl - name: beautifulsoup4 - version: 4.13.3 - sha256: 99045d7d3f08f91f0d656bc9b7efbae189426cd913d830294a15eefa0ea4df16 - requires_dist: - - soupsieve>1.2 - - typing-extensions>=4.0.0 - - cchardet ; extra == 'cchardet' - - chardet ; extra == 'chardet' - - charset-normalizer ; extra == 'charset-normalizer' - - html5lib ; extra == 'html5lib' - - lxml ; extra == 'lxml' - requires_python: '>=3.7.0' - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h4bc722e_7.conda sha256: 5ced96500d945fb286c9c838e54fa759aa04a7129c59800f0846b4335cee770d md5: 62ee74e96c5ebb0af99386de58cf9553 depends: - __glibc >=2.17,<3.0.a0 - libgcc-ng >=12 - arch: x86_64 - platform: linux license: bzip2-1.0.6 license_family: BSD purls: [] @@ -1518,8 +1467,6 @@ packages: md5: fc6948412dbbbe9a4c9ddbbcfe0a79ab depends: - __osx >=11.0 - arch: arm64 - platform: osx license: bzip2-1.0.6 license_family: BSD purls: [] @@ -1532,8 +1479,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: bzip2-1.0.6 license_family: BSD purls: [] @@ -1545,8 +1490,6 @@ packages: depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: [] @@ -1557,8 +1500,6 @@ packages: md5: c1c999a38a4303b29d75c636eaa13cf9 depends: - __osx >=11.0 - arch: arm64 - platform: osx license: MIT license_family: MIT purls: [] @@ -1567,8 +1508,6 @@ packages: - conda: https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2025.1.31-hbcca054_0.conda sha256: bf832198976d559ab44d6cdb315642655547e26d826e34da67cbee6624cda189 md5: 19f3a56f68d2fd06c516076bff482c52 - arch: x86_64 - platform: linux license: ISC purls: [] size: 158144 @@ -1576,8 +1515,6 @@ packages: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/ca-certificates-2025.1.31-hf0a4a13_0.conda sha256: 7e12816618173fe70f5c638b72adf4bfd4ddabf27794369bb17871c5bb75b9f9 md5: 3569d6a9141adc64d2fe4797f3289e06 - arch: arm64 - platform: osx license: ISC purls: [] size: 158425 @@ -1585,8 +1522,6 @@ packages: - conda: https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2025.1.31-h56e8100_0.conda sha256: 1bedccdf25a3bd782d6b0e57ddd97cdcda5501716009f2de4479a779221df155 md5: 5304a31607974dfc2110dfbb662ed092 - arch: x86_64 - platform: win license: ISC purls: [] size: 158690 @@ -1644,8 +1579,6 @@ packages: - ncurses >=6.5,<7.0a0 - rhash >=1.4.5,<2.0a0 - zstd >=1.5.7,<1.6.0a0 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: [] @@ -1666,8 +1599,6 @@ packages: - ncurses >=6.5,<7.0a0 - rhash >=1.4.5,<2.0a0 - zstd >=1.5.7,<1.6.0a0 - arch: arm64 - platform: osx license: BSD-3-Clause license_family: BSD purls: [] @@ -1686,8 +1617,6 @@ packages: - ucrt >=10.0.20348.0 - vc14_runtime >=14.29.30139 - zstd >=1.5.7,<1.6.0a0 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD purls: [] @@ -1829,8 +1758,6 @@ packages: - libstdcxx >=13 - python >=3.11,<3.12.0a0 - python_abi 3.11.* *_cp311 - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: @@ -1846,8 +1773,6 @@ packages: - python >=3.11,<3.12.0a0 - python >=3.11,<3.12.0a0 *_cpython - python_abi 3.11.* *_cp311 - arch: arm64 - platform: osx license: MIT license_family: MIT purls: @@ -1863,8 +1788,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: MIT license_family: MIT purls: @@ -1885,7 +1808,7 @@ packages: - pypi: . name: deimkit version: 0.2.0 - sha256: 48d5b3f78708ea6a6c89eddf5af8ca73749157fa92cd7ae5e3b82ee90c96c24e + sha256: 9b5613376e3621fd5d633411134c19101de688845e21e0c71f8cefdc6aa6583e requires_dist: - faster-coco-eval>=1.6.5,<2 - pyyaml>=6.0.2,<7 @@ -1894,7 +1817,6 @@ packages: - calflops>=0.3.2,<0.4 - transformers>=4.49.0,<5 - opencv-python>=4.11.0.86,<5 - - gdown>=5.2.0,<6 - loguru>=0.7.3,<0.8 - matplotlib - onnx>=1.17.0,<2 @@ -2262,24 +2184,6 @@ packages: - zstandard ; extra == 'test-full' - tqdm ; extra == 'tqdm' requires_python: '>=3.9' -- pypi: https://files.pythonhosted.org/packages/54/70/e07c381e6488a77094f04c85c9caf1c8008cdc30778f7019bc52e5285ef0/gdown-5.2.0-py3-none-any.whl - name: gdown - version: 5.2.0 - sha256: 33083832d82b1101bdd0e9df3edd0fbc0e1c5f14c9d8c38d2a35bf1683b526d6 - requires_dist: - - beautifulsoup4 - - filelock - - requests[socks] - - tqdm - - build ; extra == 'test' - - mypy ; extra == 'test' - - pytest ; extra == 'test' - - pytest-xdist ; extra == 'test' - - ruff ; extra == 'test' - - twine ; extra == 'test' - - types-requests ; extra == 'test' - - types-setuptools ; extra == 'test' - requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/5f/e3/f1e6569558d212f747820b2c976b4f57c034413a5747acb373f2a04bcd9a/gradio-5.23.3-py3-none-any.whl name: gradio version: 5.23.3 @@ -2772,8 +2676,6 @@ packages: md5: 30186d27e2c9fa62b45fb1476b7200e3 depends: - libgcc-ng >=10.3.0 - arch: x86_64 - platform: linux license: LGPL-2.1-or-later purls: [] size: 117831 @@ -2803,8 +2705,6 @@ packages: - libgcc-ng >=12 - libstdcxx-ng >=12 - openssl >=3.3.1,<4.0a0 - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: [] @@ -2819,8 +2719,6 @@ packages: - libedit >=3.1.20191231,<3.2.0a0 - libedit >=3.1.20191231,<4.0a0 - openssl >=3.3.1,<4.0a0 - arch: arm64 - platform: osx license: MIT license_family: MIT purls: [] @@ -2834,8 +2732,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: MIT license_family: MIT purls: [] @@ -2848,8 +2744,6 @@ packages: - __glibc >=2.17,<3.0.a0 constrains: - binutils_impl_linux-64 2.43 - arch: x86_64 - platform: linux license: GPL-3.0-only license_family: GPL purls: [] @@ -2867,8 +2761,6 @@ packages: - libzlib >=1.3.1,<2.0a0 - openssl >=3.4.1,<4.0a0 - zstd >=1.5.7,<1.6.0a0 - arch: x86_64 - platform: linux license: curl license_family: MIT purls: [] @@ -2885,8 +2777,6 @@ packages: - libzlib >=1.3.1,<2.0a0 - openssl >=3.4.1,<4.0a0 - zstd >=1.5.7,<1.6.0a0 - arch: arm64 - platform: osx license: curl license_family: MIT purls: [] @@ -2902,8 +2792,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: curl license_family: MIT purls: [] @@ -2914,8 +2802,6 @@ packages: md5: 85ea0d49eb61f57e02ce98dc29ca161f depends: - __osx >=11.0 - arch: arm64 - platform: osx license: Apache-2.0 WITH LLVM-exception license_family: Apache purls: [] @@ -2929,8 +2815,6 @@ packages: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - ncurses >=6.5,<7.0a0 - arch: x86_64 - platform: linux license: BSD-2-Clause license_family: BSD purls: [] @@ -2943,8 +2827,6 @@ packages: - ncurses - __osx >=11.0 - ncurses >=6.5,<7.0a0 - arch: arm64 - platform: osx license: BSD-2-Clause license_family: BSD purls: [] @@ -2955,8 +2837,6 @@ packages: md5: 172bf1cd1ff8629f2b1179945ed45055 depends: - libgcc-ng >=12 - arch: x86_64 - platform: linux license: BSD-2-Clause license_family: BSD purls: [] @@ -2965,8 +2845,6 @@ packages: - conda: https://conda.anaconda.org/conda-forge/osx-arm64/libev-4.33-h93a5062_2.conda sha256: 95cecb3902fbe0399c3a7e67a5bed1db813e5ab0e22f4023a5e0f722f2cc214f md5: 36d33e440c31857372a72137f78bacf5 - arch: arm64 - platform: osx license: BSD-2-Clause license_family: BSD purls: [] @@ -2980,8 +2858,6 @@ packages: - libgcc >=13 constrains: - expat 2.7.0.* - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: [] @@ -2994,8 +2870,6 @@ packages: - __osx >=11.0 constrains: - expat 2.7.0.* - arch: arm64 - platform: osx license: MIT license_family: MIT purls: [] @@ -3010,8 +2884,6 @@ packages: - vc14_runtime >=14.29.30139 constrains: - expat 2.7.0.* - arch: x86_64 - platform: win license: MIT license_family: MIT purls: [] @@ -3023,8 +2895,6 @@ packages: depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: [] @@ -3035,8 +2905,6 @@ packages: md5: c215a60c2935b517dcda8cad4705734d depends: - __osx >=11.0 - arch: arm64 - platform: osx license: MIT license_family: MIT purls: [] @@ -3049,8 +2917,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: MIT license_family: MIT purls: [] @@ -3065,8 +2931,6 @@ packages: constrains: - libgomp 14.2.0 h767d61c_2 - libgcc-ng ==14.2.0=*_2 - arch: x86_64 - platform: linux license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] @@ -3077,8 +2941,6 @@ packages: md5: a2222a6ada71fb478682efe483ce0f92 depends: - libgcc 14.2.0 h767d61c_2 - arch: x86_64 - platform: linux license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] @@ -3089,8 +2951,6 @@ packages: md5: 06d02030237f4d5b3d9a7e7d348fe3c6 depends: - __glibc >=2.17,<3.0.a0 - arch: x86_64 - platform: linux license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] @@ -3102,8 +2962,6 @@ packages: depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - arch: x86_64 - platform: linux license: 0BSD purls: [] size: 111357 @@ -3113,8 +2971,6 @@ packages: md5: e3fd1f8320a100f2b210e690a57cd615 depends: - __osx >=11.0 - arch: arm64 - platform: osx license: 0BSD purls: [] size: 98945 @@ -3126,8 +2982,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: 0BSD purls: [] size: 104465 @@ -3144,8 +2998,6 @@ packages: - libstdcxx >=13 - libzlib >=1.3.1,<2.0a0 - openssl >=3.3.2,<4.0a0 - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: [] @@ -3162,8 +3014,6 @@ packages: - libev >=4.33,<5.0a0 - libzlib >=1.3.1,<2.0a0 - openssl >=3.3.2,<4.0a0 - arch: arm64 - platform: osx license: MIT license_family: MIT purls: [] @@ -3174,8 +3024,6 @@ packages: md5: 30fd6e37fe21f86f4bd26d6ee73eeec7 depends: - libgcc-ng >=12 - arch: x86_64 - platform: linux license: LGPL-2.1-only license_family: GPL purls: [] @@ -3186,8 +3034,6 @@ packages: md5: a587892d3c13b6621a6091be690dbca2 depends: - libgcc-ng >=12 - arch: x86_64 - platform: linux license: ISC purls: [] size: 205978 @@ -3197,8 +3043,6 @@ packages: md5: a7ce36e284c5faaf93c220dfc39e3abd depends: - __osx >=11.0 - arch: arm64 - platform: osx license: ISC purls: [] size: 164972 @@ -3210,8 +3054,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: ISC purls: [] size: 202344 @@ -3223,8 +3065,6 @@ packages: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - libzlib >=1.3.1,<2.0a0 - arch: x86_64 - platform: linux license: Unlicense purls: [] size: 918664 @@ -3235,8 +3075,6 @@ packages: depends: - __osx >=11.0 - libzlib >=1.3.1,<2.0a0 - arch: arm64 - platform: osx license: Unlicense purls: [] size: 900188 @@ -3248,8 +3086,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: Unlicense purls: [] size: 1081292 @@ -3262,8 +3098,6 @@ packages: - libgcc >=13 - libzlib >=1.3.1,<2.0a0 - openssl >=3.4.0,<4.0a0 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: [] @@ -3275,8 +3109,6 @@ packages: depends: - libzlib >=1.3.1,<2.0a0 - openssl >=3.4.0,<4.0a0 - arch: arm64 - platform: osx license: BSD-3-Clause license_family: BSD purls: [] @@ -3291,8 +3123,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD purls: [] @@ -3304,8 +3134,6 @@ packages: depends: - __glibc >=2.17,<3.0.a0 - libgcc 14.2.0 h767d61c_2 - arch: x86_64 - platform: linux license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] @@ -3316,8 +3144,6 @@ packages: md5: c75da67f045c2627f59e6fcb5f4e3a9b depends: - libstdcxx 14.2.0 h8f9b012_2 - arch: x86_64 - platform: linux license: GPL-3.0-only WITH GCC-exception-3.1 license_family: GPL purls: [] @@ -3328,8 +3154,6 @@ packages: md5: 40b61aab5c7ba9ff276c41cfffe6b80b depends: - libgcc-ng >=12 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: [] @@ -3341,8 +3165,6 @@ packages: depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: [] @@ -3353,8 +3175,6 @@ packages: md5: 20717343fb30798ab7c23c2e92b748c1 depends: - __osx >=11.0 - arch: arm64 - platform: osx license: MIT license_family: MIT purls: [] @@ -3367,8 +3187,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: MIT license_family: MIT purls: [] @@ -3379,8 +3197,6 @@ packages: md5: 5aa797f8787fe7a17d1b0821485b5adc depends: - libgcc-ng >=12 - arch: x86_64 - platform: linux license: LGPL-2.1-or-later purls: [] size: 100393 @@ -3393,8 +3209,6 @@ packages: - libgcc >=13 constrains: - zlib 1.3.1 *_2 - arch: x86_64 - platform: linux license: Zlib license_family: Other purls: [] @@ -3407,8 +3221,6 @@ packages: - __osx >=11.0 constrains: - zlib 1.3.1 *_2 - arch: arm64 - platform: osx license: Zlib license_family: Other purls: [] @@ -3423,8 +3235,6 @@ packages: - vc14_runtime >=14.29.30139 constrains: - zlib 1.3.1 *_2 - arch: x86_64 - platform: win license: Zlib license_family: Other purls: [] @@ -3637,8 +3447,6 @@ packages: depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - arch: x86_64 - platform: linux license: X11 AND BSD-3-Clause purls: [] size: 891641 @@ -3648,8 +3456,6 @@ packages: md5: 068d497125e4bf8a66bf707254fff5ae depends: - __osx >=11.0 - arch: arm64 - platform: osx license: X11 AND BSD-3-Clause purls: [] size: 797030 @@ -3971,8 +3777,6 @@ packages: - __glibc >=2.17,<3.0.a0 - ca-certificates - libgcc >=13 - arch: x86_64 - platform: linux license: Apache-2.0 license_family: Apache purls: [] @@ -3984,8 +3788,6 @@ packages: depends: - __osx >=11.0 - ca-certificates - arch: arm64 - platform: osx license: Apache-2.0 license_family: Apache purls: [] @@ -3999,8 +3801,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: Apache-2.0 license_family: Apache purls: [] @@ -4477,8 +4277,6 @@ packages: - libgcc >=13 - python >=3.11,<3.12.0a0 - python_abi 3.11.* *_cp311 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: @@ -4493,8 +4291,6 @@ packages: - python >=3.11,<3.12.0a0 - python >=3.11,<3.12.0a0 *_cpython - python_abi 3.11.* *_cp311 - arch: arm64 - platform: osx license: BSD-3-Clause license_family: BSD purls: @@ -4510,8 +4306,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD purls: @@ -4606,11 +4400,6 @@ packages: - pytest ; extra == 'dev' - twine ; extra == 'dev' requires_python: '>=3.8' -- pypi: https://files.pythonhosted.org/packages/8d/59/b4572118e098ac8e46e399a1dd0f2d85403ce8bbaad9ec79373ed6badaf9/PySocks-1.7.1-py3-none-any.whl - name: pysocks - version: 1.7.1 - sha256: 2725bd0a9925919b9b51739eea5f9e2bae91e83288108a9ad338b2e3a4435ee5 - requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.11.11-h9e4cc4f_2_cpython.conda build_number: 2 sha256: e0be7ad95a034d10e021f15317bf5c70fc1161564fa47844984c245505cde36c @@ -4635,8 +4424,6 @@ packages: - tzdata constrains: - python_abi 3.11.* *_cp311 - arch: x86_64 - platform: linux license: Python-2.0 purls: [] size: 30594389 @@ -4660,8 +4447,6 @@ packages: - tzdata constrains: - python_abi 3.11.* *_cp311 - arch: arm64 - platform: osx license: Python-2.0 purls: [] size: 14579450 @@ -4685,8 +4470,6 @@ packages: - vc14_runtime >=14.29.30139 constrains: - python_abi 3.11.* *_cp311 - arch: x86_64 - platform: win license: Python-2.0 purls: [] size: 18221686 @@ -4714,8 +4497,6 @@ packages: md5: 37ec65e056b9964529c0e1e2697b9955 constrains: - python 3.11.* *_cpython - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: [] @@ -4727,8 +4508,6 @@ packages: md5: b30f805c0fccfebec5012f9f4c2ccfd9 constrains: - python 3.11.* *_cpython - arch: arm64 - platform: osx license: BSD-3-Clause license_family: BSD purls: [] @@ -4740,8 +4519,6 @@ packages: md5: 0cdb3079c532b4d216bc9efacd510138 constrains: - python 3.11.* *_cpython - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD purls: [] @@ -4760,8 +4537,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: PSF-2.0 license_family: PSF purls: @@ -4794,8 +4569,6 @@ packages: - python >=3.11,<3.12.0a0 - python_abi 3.11.* *_cp311 - zeromq >=4.3.5,<4.4.0a0 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: @@ -4813,8 +4586,6 @@ packages: - python >=3.11,<3.12.0a0 *_cpython - python_abi 3.11.* *_cp311 - zeromq >=4.3.5,<4.4.0a0 - arch: arm64 - platform: osx license: BSD-3-Clause license_family: BSD purls: @@ -4832,8 +4603,6 @@ packages: - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - zeromq >=4.3.5,<4.3.6.0a0 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD purls: @@ -4846,8 +4615,6 @@ packages: depends: - libgcc >=13 - ncurses >=6.5,<7.0a0 - arch: x86_64 - platform: linux license: GPL-3.0-only license_family: GPL purls: [] @@ -4858,8 +4625,6 @@ packages: md5: 63ef3f6e6d6d5c589e64f11263dc5676 depends: - ncurses >=6.5,<7.0a0 - arch: arm64 - platform: osx license: GPL-3.0-only license_family: GPL purls: [] @@ -4898,8 +4663,6 @@ packages: depends: - __glibc >=2.17,<3.0.a0 - libgcc >=13 - arch: x86_64 - platform: linux license: MIT license_family: MIT purls: [] @@ -4910,8 +4673,6 @@ packages: md5: 352b210f81798ae1e2f25a98ef4b3b54 depends: - __osx >=11.0 - arch: arm64 - platform: osx license: MIT license_family: MIT purls: [] @@ -5292,11 +5053,6 @@ packages: version: 1.3.1 sha256: 2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2 requires_python: '>=3.7' -- pypi: https://files.pythonhosted.org/packages/d1/c2/fe97d779f3ef3b15f05c94a2f1e3d21732574ed441687474db9d342a7315/soupsieve-2.6-py3-none-any.whl - name: soupsieve - version: '2.6' - sha256: e72c4ff06e4fb6e4b5a9f0f55fe6e81514581fca1515028625d0f299c602ccc9 - requires_python: '>=3.8' - conda: https://conda.anaconda.org/conda-forge/noarch/stack_data-0.6.3-pyhd8ed1ab_1.conda sha256: 570da295d421661af487f1595045760526964f41471021056e993e73089e9c41 md5: b1b505328da7a6b246787df4b5a49fbc @@ -5393,8 +5149,6 @@ packages: depends: - libgcc-ng >=12 - libzlib >=1.2.13,<2.0.0a0 - arch: x86_64 - platform: linux license: TCL license_family: BSD purls: [] @@ -5405,8 +5159,6 @@ packages: md5: b50a57ba89c32b62428b71a875291c9b depends: - libzlib >=1.2.13,<2.0.0a0 - arch: arm64 - platform: osx license: TCL license_family: BSD purls: [] @@ -5419,8 +5171,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: TCL license_family: BSD purls: [] @@ -5676,8 +5426,6 @@ packages: - libgcc >=13 - python >=3.11,<3.12.0a0 - python_abi 3.11.* *_cp311 - arch: x86_64 - platform: linux license: Apache-2.0 license_family: Apache purls: @@ -5692,8 +5440,6 @@ packages: - python >=3.11,<3.12.0a0 - python >=3.11,<3.12.0a0 *_cpython - python_abi 3.11.* *_cp311 - arch: arm64 - platform: osx license: Apache-2.0 license_family: Apache purls: @@ -5709,8 +5455,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: Apache-2.0 license_family: Apache purls: @@ -6195,8 +5939,6 @@ packages: md5: 6797b005cd0f439c4c5c9ac565783700 constrains: - vs2015_runtime >=14.29.30037 - arch: x86_64 - platform: win license: LicenseRef-MicrosoftWindowsSDK10 purls: [] size: 559710 @@ -6233,8 +5975,6 @@ packages: md5: d3f0381e38093bde620a8d85f266ae55 depends: - vc14_runtime >=14.42.34433 - arch: x86_64 - platform: win track_features: - vc14 license: BSD-3-Clause @@ -6249,8 +5989,6 @@ packages: - ucrt >=10.0.20348.0 constrains: - vs2015_runtime 14.42.34438.* *_26 - arch: x86_64 - platform: win license: LicenseRef-MicrosoftVisualCpp2015-2022Runtime license_family: Proprietary purls: [] @@ -6318,8 +6056,6 @@ packages: - libgcc >=13 - libsodium >=1.0.20,<1.0.21.0a0 - libstdcxx >=13 - arch: x86_64 - platform: linux license: MPL-2.0 license_family: MOZILLA purls: [] @@ -6333,8 +6069,6 @@ packages: - krb5 >=1.21.3,<1.22.0a0 - libcxx >=18 - libsodium >=1.0.20,<1.0.21.0a0 - arch: arm64 - platform: osx license: MPL-2.0 license_family: MOZILLA purls: [] @@ -6349,8 +6083,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: MPL-2.0 license_family: MOZILLA purls: [] @@ -6375,8 +6107,6 @@ packages: - libgcc >=13 - libstdcxx >=13 - libzlib >=1.3.1,<2.0a0 - arch: x86_64 - platform: linux license: BSD-3-Clause license_family: BSD purls: [] @@ -6388,8 +6118,6 @@ packages: depends: - __osx >=11.0 - libzlib >=1.3.1,<2.0a0 - arch: arm64 - platform: osx license: BSD-3-Clause license_family: BSD purls: [] @@ -6403,8 +6131,6 @@ packages: - ucrt >=10.0.20348.0 - vc >=14.2,<15 - vc14_runtime >=14.29.30139 - arch: x86_64 - platform: win license: BSD-3-Clause license_family: BSD purls: [] diff --git a/pyproject.toml b/pyproject.toml index c981b721..a15f3811 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -11,7 +11,6 @@ dependencies = [ "calflops>=0.3.2,<0.4", "transformers>=4.49.0,<5", "opencv-python>=4.11.0.86,<5", - "gdown>=5.2.0,<6", "loguru>=0.7.3,<0.8", "matplotlib", "onnx>=1.17.0,<2", @@ -66,6 +65,7 @@ default = { features = ["cpu"] } [tool.pixi.tasks] quickstart = "python scripts/quickstart.py" live-inference = "python scripts/live_inference.py" +live-inference-pretrained = "python scripts/live_inference_pretrained.py" train-model = "python scripts/train.py" gradio-demo = "python scripts/gradio_demo.py" export = "python scripts/export.py" diff --git a/scripts/live_inference_pretrained.py b/scripts/live_inference_pretrained.py new file mode 100644 index 00000000..2406d213 --- /dev/null +++ b/scripts/live_inference_pretrained.py @@ -0,0 +1,617 @@ +import argparse +import colorsys +import time +from pathlib import Path +from typing import Optional, Tuple + +import cv2 +import numpy as np +import onnxruntime as ort +from loguru import logger + +from deimkit import list_models, load_model +from deimkit.config import Config +from deimkit.exporter import Exporter + +ort.preload_dlls() + + +def generate_colors(num_classes: int) -> list[tuple[int, int, int]]: + """Generate distinct colors for visualization.""" + hsv_tuples = [(x / num_classes, 0.8, 0.9) for x in range(num_classes)] + colors = [] + for hsv in hsv_tuples: + rgb = colorsys.hsv_to_rgb(*hsv) + colors.append(tuple(int(255 * x) for x in rgb)) + return colors + + +def draw_boxes( + image: np.ndarray, + labels: np.ndarray, + boxes: np.ndarray, + scores: np.ndarray, + threshold: float = 0.3, + class_names: Optional[list[str]] = None, +) -> np.ndarray: + """Draw bounding boxes on the image with detection results. + + Args: + image: Input image array in BGR format + labels: Array of class labels + boxes: Array of bounding box coordinates [x1, y1, x2, y2] + scores: Array of confidence scores + threshold: Minimum confidence threshold for displaying detections + class_names: Optional list of class names for labels + + Returns: + np.ndarray: Image with drawn bounding boxes in BGR format + """ + # Generate colors for classes + num_classes = len(class_names) if class_names else 91 + colors = generate_colors(num_classes) + + # Filter detections by threshold + valid_indices = scores > threshold + labels = labels[valid_indices] + boxes = boxes[valid_indices] + scores = scores[valid_indices] + + for j, (lbl, box, score) in enumerate(zip(labels, boxes, scores)): + # Get color for this class + class_idx = int(lbl) + color = colors[class_idx % len(colors)] + + # Use box coordinates directly + box_coords = [ + int(box[0]), # x1 + int(box[1]), # y1 + int(box[2]), # x2 + int(box[3]), # y2 + ] + + # Draw rectangle + cv2.rectangle( + image, + (box_coords[0], box_coords[1]), + (box_coords[2], box_coords[3]), + color, + 2, + ) + + # Prepare label text + if class_names and class_idx < len(class_names): + label_text = f"{class_names[class_idx]} {score:.2f}" + else: + label_text = f"Class {class_idx} {score:.2f}" + + # Get text size + (text_width, text_height), _ = cv2.getTextSize( + label_text, cv2.FONT_HERSHEY_SIMPLEX, 0.7, 2 + ) + + # Draw text background + cv2.rectangle( + image, + (box_coords[0], box_coords[1] - text_height - 4), + (box_coords[0] + text_width + 4, box_coords[1]), + color, + -1, # Filled rectangle + ) + + # Calculate text color based on background brightness + brightness = (color[0] * 299 + color[1] * 587 + color[2] * 114) / 1000 + text_color = (0, 0, 0) if brightness > 128 else (255, 255, 255) + + # Draw text + cv2.putText( + image, + label_text, + (box_coords[0] + 2, box_coords[1] - 2), + cv2.FONT_HERSHEY_SIMPLEX, + 0.7, + text_color, + 2, + ) + + return image + + +def draw_text_overlay( + image: np.ndarray, + fps: float, + provider: str, + video_width: int, + show_overlay: bool = True, +) -> np.ndarray: + """Draw text overlays (FPS, width, provider) on the detection frame.""" + if not show_overlay: + return image + + # Add video width display at top left with dark green background + width_text = f"Width: {int(video_width)}px" + text_size = cv2.getTextSize(width_text, cv2.FONT_HERSHEY_SIMPLEX, 0.8, 2)[0] + + # Draw dark green background rectangle + cv2.rectangle( + image, + (5, 5), # Slight padding from corner + (text_size[0] + 15, 35), # Add padding around text + (0, 100, 0), # Dark green in BGR + -1, # Filled rectangle + ) + + # Draw width text + cv2.putText( + image, + width_text, + (10, 30), + cv2.FONT_HERSHEY_SIMPLEX, + 0.8, + (255, 255, 255), # White text + 2, + ) + + # Add FPS display + fps_text = f"FPS: {fps:.1f}" + text_size = cv2.getTextSize(fps_text, cv2.FONT_HERSHEY_SIMPLEX, 0.8, 2)[0] + text_x = image.shape[1] - text_size[0] - 10 + text_y = 30 + + # Draw FPS background rectangle + cv2.rectangle( + image, + (text_x - 5, text_y - text_size[1] - 5), + (text_x + text_size[0] + 5, text_y + 5), + (139, 0, 0), + -1, + ) + + # Draw FPS text + cv2.putText( + image, + fps_text, + (text_x, text_y), + cv2.FONT_HERSHEY_SIMPLEX, + 0.8, + (255, 255, 255), + 2, + ) + + # Add provider display + provider_text = f"Provider: {provider}" + text_size = cv2.getTextSize(provider_text, cv2.FONT_HERSHEY_SIMPLEX, 0.8, 2)[0] + text_x = (image.shape[1] - text_size[0]) // 2 + text_y = image.shape[0] - 20 + + # Draw provider background rectangle + cv2.rectangle( + image, + (text_x - 5, text_y - text_size[1] - 5), + (text_x + text_size[0] + 5, text_y + 5), + (0, 0, 139), + -1, + ) + + # Draw provider text + cv2.putText( + image, + provider_text, + (text_x, text_y), + cv2.FONT_HERSHEY_SIMPLEX, + 0.8, + (255, 255, 255), + 2, + ) + + return image + + +def load_onnx_model(model_path: str, provider: str = "cpu") -> ort.InferenceSession: + """Initialize and load the ONNX model with specified provider.""" + if provider == "cpu": + providers = ["CPUExecutionProvider"] + elif provider == "cuda": + providers = [ + ( + "CUDAExecutionProvider", + { + "arena_extend_strategy": "kNextPowerOfTwo", + "gpu_mem_limit": 2 * 1024 * 1024 * 1024, + "cudnn_conv_algo_search": "EXHAUSTIVE", + "do_copy_in_default_stream": True, + }, + ), + "CPUExecutionProvider", + ] + elif provider == "tensorrt": + providers = [ + ( + "TensorrtExecutionProvider", + { + "trt_fp16_enable": False, + "trt_engine_cache_enable": True, + "trt_engine_cache_path": "./trt_cache", + "trt_timing_cache_enable": True, + }, + ), + "CPUExecutionProvider", + ] + else: + raise ValueError(f"Unsupported provider: {provider}") + + try: + logger.info(f"Loading ONNX model with providers: {providers}...") + session = ort.InferenceSession(model_path, providers=providers) + logger.info(f"Using provider: {session.get_providers()[0]}") + return session + except Exception as e: + logger.warning( + f"Error creating inference session with providers {providers}: {e}" + ) + logger.info("Attempting to fall back to CPU execution...") + session = ort.InferenceSession(model_path, providers=["CPUExecutionProvider"]) + return session + + +def process_frame( + frame: np.ndarray, + session: ort.InferenceSession, + class_names: list[str] | None, + threshold: float, + target_width: int, +) -> np.ndarray: + """Process a single frame through the object detection model.""" + # Calculate scaling and padding + height, width = frame.shape[:2] + scale = target_width / max(height, width) + new_height = int(height * scale) + new_width = int(width * scale) + + # Calculate padding + y_offset = (target_width - new_height) // 2 + x_offset = (target_width - new_width) // 2 + + # Create model input with padding + model_input = np.zeros((target_width, target_width, 3), dtype=np.uint8) + model_input[y_offset : y_offset + new_height, x_offset : x_offset + new_width] = ( + cv2.resize(frame, (new_width, new_height)) + ) + + # Prepare input data + im_data = np.ascontiguousarray( + model_input.transpose(2, 0, 1), + dtype=np.float32, + ) + im_data = np.expand_dims(im_data, axis=0) + orig_size = np.array([[target_width, target_width]], dtype=np.int64) + + # Run inference + input_name = session.get_inputs()[0].name + outputs = session.run( + output_names=None, + input_feed={input_name: im_data, "orig_target_sizes": orig_size}, + ) + + # Process outputs + labels, boxes, scores = outputs + + # Scale boxes back to original frame size + boxes = boxes[0] # Remove batch dimension + boxes[:, [0, 2]] = (boxes[:, [0, 2]] - x_offset) / scale # x coordinates + boxes[:, [1, 3]] = (boxes[:, [1, 3]] - y_offset) / scale # y coordinates + + # Draw detections + return draw_boxes( + frame, + labels[0], + boxes, + scores[0], + threshold=threshold, + class_names=class_names, + ) + + +def setup_model_and_export( + model_name: str, class_names: list[str], output_dir: str = "./checkpoints" +) -> Tuple[str, str]: + """ + Download pretrained model, convert to ONNX, and prepare for inference. + + Args: + model_name: Name of the model to use (e.g. 'deim_hgnetv2_x') + class_names: List of class names for the model + output_dir: Directory to save model checkpoints and ONNX file + + Returns: + Tuple containing: + - Path to the ONNX model file + - Path to the class names file + """ + # Create output directory + output_dir = Path(output_dir) + output_dir.mkdir(parents=True, exist_ok=True) + + # Load the model + logger.info(f"Loading model {model_name}...") + model = load_model(model_name, class_names=class_names) + + # Save config + config_path = output_dir / f"{model_name}.yml" + model.cfg.save(str(config_path)) + + # Export to ONNX + logger.info("Converting model to ONNX format...") + config = Config(str(config_path)) + exporter = Exporter(config) + + onnx_path = output_dir / f"{model_name}.onnx" + exporter.to_onnx( + checkpoint_path=str(output_dir / f"{model_name}.pth"), + output_path=str(onnx_path), + ) + + # Save class names + class_names_path = output_dir / "coco_classes.txt" + with open(class_names_path, "w") as f: + for name in class_names: + f.write(f"{name}\n") + + return str(onnx_path), str(class_names_path) + + +def run_inference( + model_path: str, + input_source: str | int, + class_names_path: str | None = None, + threshold: float = 0.3, + provider: str = "cpu", + inference_size: int = 640, +) -> None: + """Run object detection on images or video streams.""" + # Load model and class names + session = load_onnx_model(model_path, provider) + class_names = None + if class_names_path: + try: + with open(class_names_path, "r") as f: + class_names = [line.strip() for line in f.readlines()] + logger.info(f"Loaded {len(class_names)} class names") + except Exception as e: + logger.warning(f"Error loading class names: {e}") + + # Determine if input is image file or video source + if isinstance(input_source, str) and any( + input_source.lower().endswith(ext) for ext in [".jpg", ".jpeg", ".png", ".bmp"] + ): + # Handle single image + image = cv2.imread(input_source) + if image is None: + raise RuntimeError(f"Failed to load image: {input_source}") + + result = process_frame(image, session, class_names, threshold, inference_size) + + # Save and display result + output_path = "detection_result.jpg" + cv2.imwrite(output_path, result) + logger.info(f"Detection complete. Result saved to {output_path}") + + cv2.imshow("Detection Result", result) + cv2.waitKey(0) + cv2.destroyAllWindows() + + else: + # Handle video/webcam + cap = cv2.VideoCapture(input_source) + if not cap.isOpened(): + raise RuntimeError(f"Failed to open video source: {input_source}") + + # Configure video capture + if isinstance(input_source, int): # Webcam settings + cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc("M", "J", "P", "G")) + cap.set(cv2.CAP_PROP_FPS, 100) + cap.set(cv2.CAP_PROP_FRAME_WIDTH, inference_size) + cap.set(cv2.CAP_PROP_FRAME_HEIGHT, int(inference_size * 9 / 16)) + + prev_time = time.time() + fps_display = 0 + show_overlay = True + + try: + while True: + ret, frame = cap.read() + if not ret: + break + + # Calculate FPS + current_time = time.time() + fps_display = ( + 1 / (current_time - prev_time) + if current_time - prev_time > 0 + else 0 + ) + prev_time = current_time + + # Process frame + result = process_frame( + frame, session, class_names, threshold, inference_size + ) + + # Add overlay + result = draw_text_overlay( + result, + fps_display, + session.get_providers()[0], + inference_size, + show_overlay, + ) + + # Display result + cv2.imshow("Detection", result) + + # Handle key presses + key = cv2.waitKey(1) & 0xFF + if key == ord("q"): + break + elif key == ord("t"): + show_overlay = not show_overlay + + finally: + cap.release() + cv2.destroyAllWindows() + + +def main(): + # COCO class names + coco_classes = [ + "person", + "bicycle", + "car", + "motorcycle", + "airplane", + "bus", + "train", + "truck", + "boat", + "traffic light", + "fire hydrant", + "stop sign", + "parking meter", + "bench", + "bird", + "cat", + "dog", + "horse", + "sheep", + "cow", + "elephant", + "bear", + "zebra", + "giraffe", + "backpack", + "umbrella", + "handbag", + "tie", + "suitcase", + "frisbee", + "skis", + "snowboard", + "sports ball", + "kite", + "baseball bat", + "baseball glove", + "skateboard", + "surfboard", + "tennis racket", + "bottle", + "wine glass", + "cup", + "fork", + "knife", + "spoon", + "bowl", + "banana", + "apple", + "sandwich", + "orange", + "broccoli", + "carrot", + "hot dog", + "pizza", + "donut", + "cake", + "chair", + "couch", + "potted plant", + "bed", + "dining table", + "toilet", + "tv", + "laptop", + "mouse", + "remote", + "keyboard", + "cell phone", + "microwave", + "oven", + "toaster", + "sink", + "refrigerator", + "book", + "clock", + "vase", + "scissors", + "teddy bear", + "hair drier", + "toothbrush", + ] + + parser = argparse.ArgumentParser( + description="Download, convert and run DEIM object detection" + ) + parser.add_argument( + "--model", + type=str, + default="deim_hgnetv2_s", + choices=list_models(), + help="Model architecture to use", + ) + parser.add_argument("--image", type=str, help="Path to input image (optional)") + parser.add_argument("--webcam", action="store_true", help="Use webcam input") + parser.add_argument("--video", type=str, help="Path to input video file (optional)") + parser.add_argument( + "--inference-size", + type=int, + default=640, + help="Size for inference processing (default: 640)", + ) + parser.add_argument( + "--provider", + type=str, + choices=["cpu", "cuda", "tensorrt"], + default="cuda", # If cuda is not available, OnnxRuntime will fall back to CPU + help="ONNXRuntime provider to use for inference", + ) + parser.add_argument( + "--threshold", + type=float, + default=0.35, + help="Detection confidence threshold (default: 0.35)", + ) + parser.add_argument( + "--output-dir", + type=str, + default="./checkpoints", + help="Directory to save model files", + ) + + args = parser.parse_args() + + # Setup model and export to ONNX + onnx_path, class_names_path = setup_model_and_export( + args.model, coco_classes, args.output_dir + ) + + # Determine input source + if args.webcam: + input_source = 0 + elif args.video: + input_source = args.video + elif args.image: + input_source = args.image + else: + parser.error("Either --image, --video, or --webcam must be specified") + + # Run inference + run_inference( + model_path=onnx_path, + input_source=input_source, + class_names_path=class_names_path, + threshold=args.threshold, + provider=args.provider, + inference_size=args.inference_size, + ) + + +if __name__ == "__main__": + main() diff --git a/src/deimkit/model.py b/src/deimkit/model.py index 20f2455e..f929c313 100644 --- a/src/deimkit/model.py +++ b/src/deimkit/model.py @@ -1,4 +1,6 @@ from typing import TYPE_CHECKING, Any, Dict, Optional +import os +from pathlib import Path from loguru import logger @@ -111,3 +113,76 @@ def update_setting( config.update(**updates) return config + +MODEL_CHECKPOINT_URLS = { + "deim_hgnetv2_n": "https://github.com/dnth/DEIMKit/releases/download/v0.1.0/deim_dfine_hgnetv2_n_coco_160e.pth", # Nano model + "deim_hgnetv2_s": "https://github.com/dnth/DEIMKit/releases/download/v0.1.0/deim_dfine_hgnetv2_s_coco_120e.pth", # Small model + "deim_hgnetv2_m": "https://github.com/dnth/DEIMKit/releases/download/v0.1.0/deim_dfine_hgnetv2_m_coco_90e.pth", # Medium model + "deim_hgnetv2_l": "https://github.com/dnth/DEIMKit/releases/download/v0.1.0/deim_dfine_hgnetv2_l_coco_50e.pth", # Large model + "deim_hgnetv2_x": "https://github.com/dnth/DEIMKit/releases/download/v0.1.0/deim_dfine_hgnetv2_x_coco_50e.pth", # XLarge model +} + +DEFAULT_CACHE_DIR = os.path.expanduser("./checkpoints") + +def get_model_checkpoint(model_name: str, custom_checkpoint: Optional[str] = None) -> str: + """Get the path to a model checkpoint, downloading it if necessary. + + Args: + model_name: Name of the model to get checkpoint for + custom_checkpoint: Optional path to a custom checkpoint file + + Returns: + Path to the checkpoint file + + Raises: + ValueError: If model_name is invalid or checkpoint cannot be found/downloaded + """ + if model_name not in MODEL_CHECKPOINT_URLS: + raise ValueError(f"Invalid model_name: {model_name}. Must be one of {list(MODEL_CHECKPOINT_URLS.keys())}") + + if custom_checkpoint is not None: + if not os.path.exists(custom_checkpoint): + raise ValueError(f"Custom checkpoint not found: {custom_checkpoint}") + logger.info(f"Using custom checkpoint: {custom_checkpoint}") + return custom_checkpoint + + return _download_checkpoint(model_name, MODEL_CHECKPOINT_URLS[model_name]) + +def _download_checkpoint(model_name: str, url: str) -> str: + """Download checkpoint from URL if not already present""" + import requests + from tqdm import tqdm + + # Create cache directory if it doesn't exist + cache_dir = Path(DEFAULT_CACHE_DIR) + cache_dir.mkdir(parents=True, exist_ok=True) + + # Construct local path + local_path = cache_dir / f"{model_name}.pth" + + # Download if not already present + if not local_path.exists(): + logger.info(f"Downloading checkpoint for model {model_name}...") + response = requests.get(url, stream=True) + response.raise_for_status() + + # Get file size for progress bar + total_size = int(response.headers.get('content-length', 0)) + + # Download with progress bar + with open(local_path, 'wb') as f, tqdm( + desc=f"{model_name}", + total=total_size, + unit='iB', + unit_scale=True, + unit_divisor=1024, + ) as pbar: + for data in response.iter_content(chunk_size=1024): + size = f.write(data) + pbar.update(size) + + logger.success(f"Downloaded checkpoint to {local_path}") + else: + logger.info(f"Using cached checkpoint from {local_path}") + + return str(local_path) diff --git a/src/deimkit/predictor.py b/src/deimkit/predictor.py index 95b5549a..12d7e54d 100644 --- a/src/deimkit/predictor.py +++ b/src/deimkit/predictor.py @@ -15,15 +15,6 @@ from .config import Config from .visualization import draw_on_image -MODEL_CHECKPOINT_URLS = { - "deim_hgnetv2_n": "1ZPEhiU9nhW4M5jLnYOFwTSLQC1Ugf62e", # Nano model - "deim_hgnetv2_s": "1tB8gVJNrfb6dhFvoHJECKOF5VpkthhfC", # Small model - "deim_hgnetv2_m": "18Lj2a6UN6k_n_UzqnJyiaiLGpDzQQit8", # Medium model - "deim_hgnetv2_l": "1PIRf02XkrA2xAD3wEiKE2FaamZgSGTAr", # Large model - "deim_hgnetv2_x": "1dPtbgtGgq1Oa7k_LgH1GXPelg1IVeu0j", # XLarge model -} - -DEFAULT_CACHE_DIR = os.path.expanduser("./checkpoints") DEFAULT_IMAGE_SIZE = (640, 640) DEFAULT_MEAN = [0.485, 0.456, 0.406] DEFAULT_STD = [0.229, 0.224, 0.225] @@ -156,10 +147,8 @@ def __init__( def _validate_model_name(self, model_name: str) -> None: """Validate that the model name is supported""" - if model_name not in MODEL_CHECKPOINT_URLS: - raise ValueError( - f"Invalid model_name: {model_name}. Must be one of {list(MODEL_CHECKPOINT_URLS.keys())}" - ) + # This method is now empty as the model names are validated in the model.py + pass def _setup_device(self, device: str) -> str: """Set up and validate the device for inference""" @@ -172,36 +161,8 @@ def _get_checkpoint_path( self, model_name: str, custom_checkpoint: Optional[str] ) -> str: """Get the path to the checkpoint file""" - if custom_checkpoint is not None: - if not os.path.exists(custom_checkpoint): - raise ValueError(f"Custom checkpoint not found: {custom_checkpoint}") - logger.info(f"Using custom checkpoint: {custom_checkpoint}") - return custom_checkpoint - - # Download or use cached checkpoint - return self._download_checkpoint(model_name, MODEL_CHECKPOINT_URLS[model_name]) - - def _download_checkpoint(self, model_name: str, file_id: str) -> str: - """Download checkpoint from Google Drive if not already present""" - import gdown - - # Create cache directory if it doesn't exist - cache_dir = Path(DEFAULT_CACHE_DIR) - cache_dir.mkdir(parents=True, exist_ok=True) - - # Construct local path - local_path = cache_dir / f"{model_name}.pth" - - # Download if not already present - if not local_path.exists(): - logger.info(f"Downloading checkpoint for model {model_name}...") - url = f"https://drive.google.com/uc?id={file_id}" - gdown.download(url, str(local_path), quiet=False) - logger.success(f"Downloaded checkpoint to {local_path}") - else: - logger.info(f"Using cached checkpoint from {local_path}") - - return str(local_path) + from .model import get_model_checkpoint + return get_model_checkpoint(model_name, custom_checkpoint) def _load_checkpoint_state(self, checkpoint_path: str) -> Tuple[Dict, int]: """Load checkpoint and extract state dict and number of classes"""