{
  "video": "/app/runs/1776649237_8e1c1b/2026-04-20_8-39-27.mp4",
  "fps": 14.977658565389182,
  "n_frames": 796,
  "frame_size": [
    1400,
    728
  ],
  "ocr_backend": "gemini",
  "vehicles": [
    {
      "track_id": 740,
      "type": "ô tô",
      "class_id": 2,
      "has_plate": true,
      "n_frames": 378,
      "first_frame": 418,
      "last_frame": 795,
      "plate": {
        "text": "52H-058.90",
        "confidence": "high",
        "reasoning": "Ảnh 1 và 2 rõ nhất. Biển số xe là 52H-058.90. Các ký tự đều rõ ràng và không bị che khuất.",
        "best_image_index": 1,
        "backend": "gemini/gemini-2.5-pro",
        "vehicle_type": "ô tô",
        "vehicle_class_id": 2,
        "has_plate": true,
        "is_violator": false,
        "candidate_frames": [
          418,
          438,
          439,
          493,
          568,
          643,
          718
        ],
        "crop_paths": [
          "/app/runs/1776649237_8e1c1b/crops/veh_740_c0_f418.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_740_c1_f438.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_740_c2_f439.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_740_c3_f493.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_740_c4_f568.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_740_c5_f643.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_740_c6_f718.jpg"
        ]
      }
    },
    {
      "track_id": 1320,
      "type": "ô tô",
      "class_id": 2,
      "has_plate": true,
      "n_frames": 58,
      "first_frame": 738,
      "last_frame": 795,
      "plate": {
        "text": "43A-083.68",
        "confidence": "high",
        "reasoning": "Ảnh 4 là rõ nhất. Biển số đọc được là 43A-083.68. Các ký tự đều rõ ràng.",
        "best_image_index": 4,
        "backend": "gemini/gemini-2.5-pro",
        "vehicle_type": "ô tô",
        "vehicle_class_id": 2,
        "has_plate": true,
        "is_violator": false,
        "candidate_frames": [
          738,
          744,
          745,
          749,
          760,
          771,
          782
        ],
        "crop_paths": [
          "/app/runs/1776649237_8e1c1b/crops/veh_1320_c0_f738.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_1320_c1_f744.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_1320_c2_f745.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_1320_c3_f749.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_1320_c4_f760.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_1320_c5_f771.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_1320_c6_f782.jpg"
        ]
      }
    },
    {
      "track_id": 225,
      "type": "ô tô",
      "class_id": 2,
      "has_plate": true,
      "n_frames": 164,
      "first_frame": 149,
      "last_frame": 318,
      "plate": {
        "text": "51G-619.19",
        "confidence": "high",
        "reasoning": "Ảnh số 2 rõ nhất. Dòng trên: '51G'. Dòng dưới: '619.19'. Tất cả các ký tự đều rõ ràng.",
        "best_image_index": 2,
        "backend": "gemini/gemini-2.5-pro",
        "vehicle_type": "ô tô",
        "vehicle_class_id": 2,
        "has_plate": true,
        "is_violator": false,
        "candidate_frames": [
          149,
          156,
          157,
          181,
          213,
          245,
          277
        ],
        "crop_paths": [
          "/app/runs/1776649237_8e1c1b/crops/veh_225_c0_f149.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_225_c1_f156.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_225_c2_f157.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_225_c3_f181.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_225_c4_f213.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_225_c5_f245.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_225_c6_f277.jpg"
        ]
      }
    },
    {
      "track_id": 1197,
      "type": "ô tô",
      "class_id": 2,
      "has_plate": true,
      "n_frames": 154,
      "first_frame": 632,
      "last_frame": 795,
      "plate": {
        "text": "43A-569.83",
        "confidence": "high",
        "reasoning": "Ảnh số 3 rõ nhất. Dòng 1: '43A', đọc rõ từng ký tự. Dòng 2: '569.83', đọc rõ từng ký tự. Dấu chấm giữa 9 và 8 là dấu phân cách hàng nghìn.",
        "best_image_index": 3,
        "backend": "gemini/gemini-2.5-pro",
        "vehicle_type": "ô tô",
        "vehicle_class_id": 2,
        "has_plate": true,
        "is_violator": false,
        "candidate_frames": [
          632,
          652,
          653,
          671,
          701,
          731,
          761
        ],
        "crop_paths": [
          "/app/runs/1776649237_8e1c1b/crops/veh_1197_c0_f632.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_1197_c1_f652.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_1197_c2_f653.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_1197_c3_f671.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_1197_c4_f701.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_1197_c5_f731.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_1197_c6_f761.jpg"
        ]
      }
    },
    {
      "track_id": 18,
      "type": "xe tải",
      "class_id": 7,
      "has_plate": true,
      "n_frames": 67,
      "first_frame": 28,
      "last_frame": 94,
      "plate": {
        "text": "51C-?29.6?",
        "confidence": "medium",
        "reasoning": "Ảnh 4 rõ nhất. Dòng trên: '51C' rõ. Dòng dưới: '29.6' rõ, số đầu tiên có thể là '?', số cuối cùng không rõ.",
        "best_image_index": 4,
        "backend": "gemini/gemini-2.5-pro",
        "vehicle_type": "xe tải",
        "vehicle_class_id": 7,
        "has_plate": true,
        "is_violator": false,
        "candidate_frames": [
          28,
          41,
          54,
          67,
          80,
          91,
          92
        ],
        "crop_paths": [
          "/app/runs/1776649237_8e1c1b/crops/veh_18_c0_f28.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_18_c1_f41.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_18_c2_f54.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_18_c3_f67.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_18_c4_f80.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_18_c5_f91.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_18_c6_f92.jpg"
        ]
      }
    },
    {
      "track_id": 641,
      "type": "ô tô",
      "class_id": 2,
      "has_plate": true,
      "n_frames": 358,
      "first_frame": 375,
      "last_frame": 760,
      "plate": {
        "text": null,
        "confidence": "low",
        "reasoning": "All images are too blurry to read any characters on the license plate. The best image (index 0) shows a car with a license plate, but no characters are discernible.",
        "best_image_index": 0,
        "backend": "gemini/gemini-2.5-pro",
        "vehicle_type": "ô tô",
        "vehicle_class_id": 2,
        "has_plate": true,
        "is_violator": false,
        "candidate_frames": [
          375,
          463,
          537,
          616,
          687,
          750,
          751
        ],
        "crop_paths": [
          "/app/runs/1776649237_8e1c1b/crops/veh_641_c0_f375.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_641_c1_f463.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_641_c2_f537.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_641_c3_f616.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_641_c4_f687.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_641_c5_f750.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_641_c6_f751.jpg"
        ]
      }
    },
    {
      "track_id": 913,
      "type": "xe máy",
      "class_id": 3,
      "has_plate": true,
      "n_frames": 79,
      "first_frame": 470,
      "last_frame": 550,
      "plate": {
        "text": "43-AB 501.98",
        "confidence": "high",
        "reasoning": "Ảnh 2, 3, 4, 5, 6, 7 đều rõ biển số. Chọn ảnh 2 vì độ nét tốt. Dòng 1: '43' rõ ràng, '-' rõ ràng, 'AB' rõ ràng. Dòng 2: '501.98' rõ ràng.",
        "best_image_index": 2,
        "backend": "gemini/gemini-2.5-pro",
        "vehicle_type": "xe máy",
        "vehicle_class_id": 3,
        "has_plate": true,
        "is_violator": false,
        "candidate_frames": [
          470,
          475,
          476,
          487,
          502,
          517,
          532
        ],
        "crop_paths": [
          "/app/runs/1776649237_8e1c1b/crops/moto_913_c0_f470.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_913_c1_f475.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_913_c2_f476.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_913_c3_f487.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_913_c4_f502.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_913_c5_f517.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_913_c6_f532.jpg"
        ]
      }
    },
    {
      "track_id": 1162,
      "type": "xe máy",
      "class_id": 3,
      "has_plate": true,
      "n_frames": 47,
      "first_frame": 615,
      "last_frame": 663,
      "plate": {
        "text": null,
        "confidence": "low",
        "reasoning": "Biển số xe bị mờ và che khuất một phần bởi bánh xe, không thể đọc rõ bất kỳ ký tự nào.",
        "best_image_index": 2,
        "backend": "gemini/gemini-2.5-pro",
        "vehicle_type": "xe máy",
        "vehicle_class_id": 3,
        "has_plate": true,
        "is_violator": false,
        "candidate_frames": [
          615,
          617,
          618,
          625,
          635,
          644,
          653
        ],
        "crop_paths": [
          "/app/runs/1776649237_8e1c1b/crops/moto_1162_c0_f615.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1162_c1_f617.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1162_c2_f618.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1162_c3_f625.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1162_c4_f635.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1162_c5_f644.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1162_c6_f653.jpg"
        ]
      }
    },
    {
      "track_id": 660,
      "type": "xe máy",
      "class_id": 3,
      "has_plate": true,
      "n_frames": 108,
      "first_frame": 386,
      "last_frame": 493,
      "plate": {
        "text": null,
        "confidence": "low",
        "reasoning": "Biển số xe quá mờ và nhỏ, không thể đọc được bất kỳ ký tự nào một cách rõ ràng. Ảnh 2 và 3 là rõ nhất nhưng vẫn không đủ chi tiết.",
        "best_image_index": 2,
        "backend": "gemini/gemini-2.5-pro",
        "vehicle_type": "xe máy",
        "vehicle_class_id": 3,
        "has_plate": true,
        "is_violator": false,
        "candidate_frames": [
          386,
          388,
          389,
          407,
          428,
          449,
          470
        ],
        "crop_paths": [
          "/app/runs/1776649237_8e1c1b/crops/moto_660_c0_f386.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_660_c1_f388.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_660_c2_f389.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_660_c3_f407.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_660_c4_f428.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_660_c5_f449.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_660_c6_f470.jpg"
        ]
      }
    },
    {
      "track_id": 701,
      "type": "xe máy",
      "class_id": 3,
      "has_plate": true,
      "n_frames": 78,
      "first_frame": 403,
      "last_frame": 496,
      "plate": {
        "text": null,
        "confidence": "low",
        "reasoning": "Biển số xe ở ảnh 2 và 3 là rõ nhất nhưng vẫn quá mờ để đọc bất kỳ ký tự nào một cách rõ ràng. Không thể đọc được bất kỳ ký tự nào.",
        "best_image_index": 2,
        "backend": "gemini/gemini-2.5-pro",
        "vehicle_type": "xe máy",
        "vehicle_class_id": 3,
        "has_plate": true,
        "is_violator": false,
        "candidate_frames": [
          403,
          404,
          405,
          418,
          449,
          464,
          479
        ],
        "crop_paths": [
          "/app/runs/1776649237_8e1c1b/crops/moto_701_c0_f403.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_701_c1_f404.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_701_c2_f405.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_701_c3_f418.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_701_c4_f449.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_701_c5_f464.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_701_c6_f479.jpg"
        ]
      }
    },
    {
      "track_id": 1059,
      "type": "xe máy",
      "class_id": 3,
      "has_plate": true,
      "n_frames": 138,
      "first_frame": 538,
      "last_frame": 687,
      "plate": {
        "text": "43D1-717.39",
        "confidence": "high",
        "reasoning": "Ảnh 3 và 4 rõ nhất. Dòng 1: 43D1. Dòng 2: 717.39. Tất cả các ký tự đều rõ ràng.",
        "best_image_index": 3,
        "backend": "gemini/gemini-2.5-pro",
        "vehicle_type": "xe máy",
        "vehicle_class_id": 3,
        "has_plate": true,
        "is_violator": false,
        "candidate_frames": [
          538,
          565,
          576,
          577,
          595,
          622,
          652
        ],
        "crop_paths": [
          "/app/runs/1776649237_8e1c1b/crops/moto_1059_c0_f538.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1059_c1_f565.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1059_c2_f576.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1059_c3_f577.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1059_c4_f595.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1059_c5_f622.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1059_c6_f652.jpg"
        ]
      }
    },
    {
      "track_id": 555,
      "type": "xe máy",
      "class_id": 3,
      "has_plate": true,
      "n_frames": 161,
      "first_frame": 344,
      "last_frame": 532,
      "plate": {
        "text": "63B?-?89.3?",
        "confidence": "medium",
        "reasoning": "Ảnh 4 rõ nhất. Dòng trên: '63B' rõ, ký tự thứ 4 mờ không rõ. Dòng dưới: '89.3' rõ, ký tự cuối mờ không rõ.",
        "best_image_index": 4,
        "backend": "gemini/gemini-2.5-pro",
        "vehicle_type": "xe máy",
        "vehicle_class_id": 3,
        "has_plate": true,
        "is_violator": false,
        "candidate_frames": [
          344,
          398,
          430,
          451,
          452,
          468,
          500
        ],
        "crop_paths": [
          "/app/runs/1776649237_8e1c1b/crops/moto_555_c0_f344.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_555_c1_f398.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_555_c2_f430.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_555_c3_f451.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_555_c4_f452.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_555_c5_f468.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_555_c6_f500.jpg"
        ]
      }
    },
    {
      "track_id": 1115,
      "type": "xe máy",
      "class_id": 3,
      "has_plate": true,
      "n_frames": 208,
      "first_frame": 575,
      "last_frame": 795,
      "plate": {
        "text": "80AB-6111",
        "confidence": "high",
        "reasoning": "Ảnh 3 và 4 rõ nhất. Ở ảnh 3, dòng trên đọc được '80AB', dòng dưới đọc được '6111'. Các ký tự đều rõ ràng, không bị mờ hay che khuất.",
        "best_image_index": 3,
        "backend": "gemini/gemini-2.5-pro",
        "vehicle_type": "xe máy",
        "vehicle_class_id": 3,
        "has_plate": true,
        "is_violator": false,
        "candidate_frames": [
          575,
          623,
          639,
          640,
          667,
          708,
          751
        ],
        "crop_paths": [
          "/app/runs/1776649237_8e1c1b/crops/moto_1115_c0_f575.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1115_c1_f623.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1115_c2_f639.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1115_c3_f640.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1115_c4_f667.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1115_c5_f708.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1115_c6_f751.jpg"
        ]
      }
    },
    {
      "track_id": 254,
      "type": "xe đạp",
      "class_id": 1,
      "has_plate": false,
      "n_frames": 164,
      "first_frame": 200,
      "last_frame": 398,
      "plate": {
        "text": null,
        "confidence": null,
        "reasoning": "Loại phương tiện không có biển số (xe đạp)",
        "best_image_index": null,
        "backend": null,
        "vehicle_type": "xe đạp",
        "vehicle_class_id": 1,
        "has_plate": false,
        "is_violator": false,
        "candidate_frames": [
          200,
          204,
          205,
          234,
          271,
          323,
          355
        ],
        "crop_paths": [
          "/app/runs/1776649237_8e1c1b/crops/veh_254_c0_f200.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_254_c1_f204.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_254_c2_f205.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_254_c3_f234.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_254_c4_f271.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_254_c5_f323.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_254_c6_f355.jpg"
        ]
      }
    },
    {
      "track_id": 1413,
      "type": "xe máy",
      "class_id": 3,
      "has_plate": true,
      "n_frames": 17,
      "first_frame": 777,
      "last_frame": 795,
      "plate": {
        "text": null,
        "confidence": "low",
        "reasoning": "Biển số bị mờ và khó đọc. Dòng trên có thể là '79-??' nhưng không chắc chắn. Dòng dưới hoàn toàn không đọc được.",
        "best_image_index": 0,
        "backend": "gemini/gemini-2.5-pro",
        "vehicle_type": "xe máy",
        "vehicle_class_id": 3,
        "has_plate": true,
        "is_violator": false,
        "candidate_frames": [
          777,
          778,
          781,
          785,
          788,
          791,
          794
        ],
        "crop_paths": [
          "/app/runs/1776649237_8e1c1b/crops/moto_1413_c0_f777.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1413_c1_f778.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1413_c2_f781.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1413_c3_f785.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1413_c4_f788.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1413_c5_f791.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1413_c6_f794.jpg"
        ]
      }
    },
    {
      "track_id": 282,
      "type": "xe máy",
      "class_id": 3,
      "has_plate": true,
      "n_frames": 95,
      "first_frame": 216,
      "last_frame": 341,
      "plate": {
        "text": null,
        "confidence": "low",
        "reasoning": "Tất cả các ảnh đều quá mờ hoặc quá xa để đọc được biển số. Ảnh 6 là rõ nhất nhưng biển số vẫn không thể đọc được.",
        "best_image_index": 6,
        "backend": "gemini/gemini-2.5-pro",
        "vehicle_type": "xe máy",
        "vehicle_class_id": 3,
        "has_plate": true,
        "is_violator": false,
        "candidate_frames": [
          216,
          237,
          264,
          283,
          302,
          309,
          310
        ],
        "crop_paths": [
          "/app/runs/1776649237_8e1c1b/crops/moto_282_c0_f216.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_282_c1_f237.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_282_c2_f264.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_282_c3_f283.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_282_c4_f302.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_282_c5_f309.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_282_c6_f310.jpg"
        ]
      }
    },
    {
      "track_id": 569,
      "type": "xe máy",
      "class_id": 3,
      "has_plate": true,
      "n_frames": 22,
      "first_frame": 353,
      "last_frame": 375,
      "plate": {
        "text": null,
        "confidence": "low",
        "reasoning": "Biển số xe ở tất cả các ảnh đều quá mờ và bị che khuất một phần bởi bánh xe, không thể đọc được bất kỳ ký tự nào một cách rõ ràng.",
        "best_image_index": 5,
        "backend": "gemini/gemini-2.5-pro",
        "vehicle_type": "xe máy",
        "vehicle_class_id": 3,
        "has_plate": true,
        "is_violator": false,
        "candidate_frames": [
          353,
          357,
          362,
          366,
          370,
          374,
          375
        ],
        "crop_paths": [
          "/app/runs/1776649237_8e1c1b/crops/moto_569_c0_f353.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_569_c1_f357.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_569_c2_f362.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_569_c3_f366.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_569_c4_f370.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_569_c5_f374.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_569_c6_f375.jpg"
        ]
      }
    },
    {
      "track_id": 319,
      "type": "xe máy",
      "class_id": 3,
      "has_plate": true,
      "n_frames": 16,
      "first_frame": 236,
      "last_frame": 251,
      "plate": {
        "text": null,
        "confidence": "low",
        "reasoning": "Biển số xe không thể đọc được trong bất kỳ ảnh nào do quá mờ và bị che khuất bởi người lái.",
        "best_image_index": 0,
        "backend": "gemini/gemini-2.5-pro",
        "vehicle_type": "xe máy",
        "vehicle_class_id": 3,
        "has_plate": true,
        "is_violator": false,
        "candidate_frames": [
          236,
          239,
          242,
          245,
          248,
          249,
          251
        ],
        "crop_paths": [
          "/app/runs/1776649237_8e1c1b/crops/moto_319_c0_f236.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_319_c1_f239.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_319_c2_f242.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_319_c3_f245.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_319_c4_f248.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_319_c5_f249.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_319_c6_f251.jpg"
        ]
      }
    },
    {
      "track_id": 35,
      "type": "xe máy",
      "class_id": 3,
      "has_plate": true,
      "n_frames": 48,
      "first_frame": 32,
      "last_frame": 79,
      "plate": {
        "text": null,
        "confidence": "low",
        "reasoning": "Biển số xe quá mờ và nhỏ trong tất cả các ảnh, không thể đọc được bất kỳ ký tự nào một cách rõ ràng. Ảnh 6 là rõ nhất nhưng vẫn không đủ để đọc biển số.",
        "best_image_index": 6,
        "backend": "gemini/gemini-2.5-pro",
        "vehicle_type": "xe máy",
        "vehicle_class_id": 3,
        "has_plate": true,
        "is_violator": false,
        "candidate_frames": [
          32,
          41,
          50,
          59,
          68,
          76,
          78
        ],
        "crop_paths": [
          "/app/runs/1776649237_8e1c1b/crops/moto_35_c0_f32.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_35_c1_f41.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_35_c2_f50.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_35_c3_f59.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_35_c4_f68.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_35_c5_f76.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_35_c6_f78.jpg"
        ]
      }
    },
    {
      "track_id": 94,
      "type": "xe máy",
      "class_id": 3,
      "has_plate": true,
      "n_frames": 44,
      "first_frame": 69,
      "last_frame": 114,
      "plate": {
        "text": null,
        "confidence": "low",
        "reasoning": "Tất cả các ảnh đều rất mờ và biển số quá nhỏ để có thể đọc được bất kỳ ký tự nào một cách rõ ràng. Ảnh số 6 có độ phân giải tốt nhất nhưng biển số vẫn không thể đọc được.",
        "best_image_index": 6,
        "backend": "gemini/gemini-2.5-pro",
        "vehicle_type": "xe máy",
        "vehicle_class_id": 3,
        "has_plate": true,
        "is_violator": false,
        "candidate_frames": [
          69,
          78,
          86,
          94,
          102,
          112,
          113
        ],
        "crop_paths": [
          "/app/runs/1776649237_8e1c1b/crops/moto_94_c0_f69.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_94_c1_f78.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_94_c2_f86.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_94_c3_f94.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_94_c4_f102.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_94_c5_f112.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_94_c6_f113.jpg"
        ]
      }
    },
    {
      "track_id": 1236,
      "type": "xe máy",
      "class_id": 3,
      "has_plate": true,
      "n_frames": 20,
      "first_frame": 669,
      "last_frame": 690,
      "plate": {
        "text": null,
        "confidence": "low",
        "reasoning": "Biển số xe quá mờ và nhỏ trong tất cả các ảnh, không thể đọc được bất kỳ ký tự nào một cách rõ ràng.",
        "best_image_index": 0,
        "backend": "gemini/gemini-2.5-pro",
        "vehicle_type": "xe máy",
        "vehicle_class_id": 3,
        "has_plate": true,
        "is_violator": false,
        "candidate_frames": [
          669,
          675,
          679,
          683,
          687,
          690
        ],
        "crop_paths": [
          "/app/runs/1776649237_8e1c1b/crops/moto_1236_c0_f669.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1236_c1_f675.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1236_c2_f679.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1236_c3_f683.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1236_c4_f687.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1236_c5_f690.jpg"
        ]
      }
    },
    {
      "track_id": 1322,
      "type": "xe máy",
      "class_id": 3,
      "has_plate": true,
      "n_frames": 36,
      "first_frame": 739,
      "last_frame": 774,
      "plate": {
        "text": null,
        "confidence": "low",
        "reasoning": "Biển số xe quá mờ và nhỏ, không thể đọc được bất kỳ ký tự nào một cách rõ ràng. Ảnh số 6 có độ phân giải tốt nhất nhưng vẫn không đủ để đọc biển số.",
        "best_image_index": 6,
        "backend": "gemini/gemini-2.5-pro",
        "vehicle_type": "xe máy",
        "vehicle_class_id": 3,
        "has_plate": true,
        "is_violator": false,
        "candidate_frames": [
          739,
          746,
          753,
          760,
          767,
          771,
          772
        ],
        "crop_paths": [
          "/app/runs/1776649237_8e1c1b/crops/moto_1322_c0_f739.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1322_c1_f746.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1322_c2_f753.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1322_c3_f760.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1322_c4_f767.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1322_c5_f771.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1322_c6_f772.jpg"
        ]
      }
    },
    {
      "track_id": 7,
      "type": "ô tô",
      "class_id": 2,
      "has_plate": true,
      "n_frames": 768,
      "first_frame": 28,
      "last_frame": 795,
      "plate": {
        "text": null,
        "confidence": "low",
        "reasoning": "Biển số xe ở tất cả các ảnh đều quá mờ và nhỏ, không thể đọc được bất kỳ ký tự nào một cách rõ ràng. Ảnh 2 có độ sáng tốt nhất nhưng biển số vẫn không thể đọc được.",
        "best_image_index": 2,
        "backend": "gemini/gemini-2.5-pro",
        "vehicle_type": "ô tô",
        "vehicle_class_id": 2,
        "has_plate": true,
        "is_violator": false,
        "candidate_frames": [
          28,
          181,
          334,
          487,
          640,
          726,
          727
        ],
        "crop_paths": [
          "/app/runs/1776649237_8e1c1b/crops/veh_7_c0_f28.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_7_c1_f181.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_7_c2_f334.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_7_c3_f487.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_7_c4_f640.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_7_c5_f726.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_7_c6_f727.jpg"
        ]
      }
    },
    {
      "track_id": 1446,
      "type": "xe máy",
      "class_id": 3,
      "has_plate": true,
      "n_frames": 11,
      "first_frame": 785,
      "last_frame": 795,
      "plate": {
        "text": null,
        "confidence": "low",
        "reasoning": "Biển số xe quá mờ và nhỏ trong tất cả các ảnh, không thể đọc được bất kỳ ký tự nào một cách rõ ràng. Ảnh số 6 có độ nét tốt nhất nhưng biển số vẫn không thể đọc được.",
        "best_image_index": 6,
        "backend": "gemini/gemini-2.5-pro",
        "vehicle_type": "xe máy",
        "vehicle_class_id": 3,
        "has_plate": true,
        "is_violator": false,
        "candidate_frames": [
          785,
          787,
          789,
          791,
          793,
          794,
          795
        ],
        "crop_paths": [
          "/app/runs/1776649237_8e1c1b/crops/moto_1446_c0_f785.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1446_c1_f787.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1446_c2_f789.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1446_c3_f791.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1446_c4_f793.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1446_c5_f794.jpg",
          "/app/runs/1776649237_8e1c1b/crops/moto_1446_c6_f795.jpg"
        ]
      }
    },
    {
      "track_id": 83,
      "type": "ô tô",
      "class_id": 2,
      "has_plate": true,
      "n_frames": 170,
      "first_frame": 65,
      "last_frame": 237,
      "plate": {
        "text": null,
        "confidence": "low",
        "reasoning": "Biển số xe của chiếc xe màu xanh ngọc trong tất cả các ảnh đều quá mờ và nhỏ để có thể đọc được bất kỳ ký tự nào một cách rõ ràng. Ảnh số 4 là rõ nhất nhưng vẫn không đủ để đọc.",
        "best_image_index": 4,
        "backend": "gemini/gemini-2.5-pro",
        "vehicle_type": "ô tô",
        "vehicle_class_id": 2,
        "has_plate": true,
        "is_violator": false,
        "candidate_frames": [
          65,
          75,
          76,
          102,
          136,
          170,
          204
        ],
        "crop_paths": [
          "/app/runs/1776649237_8e1c1b/crops/veh_83_c0_f65.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_83_c1_f75.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_83_c2_f76.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_83_c3_f102.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_83_c4_f136.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_83_c5_f170.jpg",
          "/app/runs/1776649237_8e1c1b/crops/veh_83_c6_f204.jpg"
        ]
      }
    }
  ],
  "violations": [
    {
      "vehicle_track_id": 1,
      "vehicle_class_id": 2,
      "moto_track_id": 1,
      "actor_track_id": 1,
      "actor_type": "vehicle",
      "actor_class_id": 2,
      "associated_vehicle_track_id": null,
      "trash_track_id": 864,
      "trash_class_id": 24,
      "moto_last_frame_near": 435,
      "trash_first_frame": 454,
      "trash_last_frame": 547,
      "first_frame": 435,
      "last_frame": 547,
      "min_distance_px": 326.11309826059954,
      "start_time_s": 29.043257869772177,
      "end_time_s": 36.52106219486294,
      "plate": {},
      "actor_summary": "ô tô#1",
      "evidence_clip": "/app/runs/1776649237_8e1c1b/evidence/evidence_1_f397-472.mp4",
      "actor_face": {
        "detected": false,
        "note": "Không thấy khuôn mặt (ô tô — tài xế khuất trong xe)",
        "face_path": null
      }
    }
  ],
  "_paths": {
    "json": "/app/runs/1776649237_8e1c1b/violations.json",
    "annotated_video": "/app/runs/1776649237_8e1c1b/annotated.mp4",
    "crops_dir": "/app/runs/1776649237_8e1c1b/crops",
    "evidence_clips": [
      "/app/runs/1776649237_8e1c1b/evidence/evidence_1_f397-472.mp4"
    ]
  }
}