{
  "video": "/app/runs/1776655289_db9cc2/20260419110714798_24479BEPCGC73ED.mp4",
  "fps": 14.995563442768411,
  "n_frames": 845,
  "frame_size": [
    2304,
    1296
  ],
  "ocr_backend": "gemini",
  "vehicles": [
    {
      "track_id": 286,
      "type": "ô tô",
      "class_id": 2,
      "has_plate": true,
      "n_frames": 482,
      "first_frame": 363,
      "last_frame": 844,
      "plate": {
        "text": "43A-509.65",
        "confidence": "high",
        "reasoning": "Ảnh 4 là rõ nhất. Đọc được từng ký tự một cách rõ ràng: '4', '3', 'A', '-', '5', '0', '9', '.', '6', '5'.",
        "best_image_index": 4,
        "backend": "gemini/gemini-2.5-pro",
        "vehicle_type": "ô tô",
        "vehicle_class_id": 2,
        "has_plate": true,
        "is_violator": true,
        "candidate_frames": [
          363,
          399,
          400,
          459,
          555,
          651,
          747
        ],
        "crop_paths": [
          "/app/runs/1776655289_db9cc2/crops/veh_286_c0_f363.jpg",
          "/app/runs/1776655289_db9cc2/crops/veh_286_c1_f399.jpg",
          "/app/runs/1776655289_db9cc2/crops/veh_286_c2_f400.jpg",
          "/app/runs/1776655289_db9cc2/crops/veh_286_c3_f459.jpg",
          "/app/runs/1776655289_db9cc2/crops/veh_286_c4_f555.jpg",
          "/app/runs/1776655289_db9cc2/crops/veh_286_c5_f651.jpg",
          "/app/runs/1776655289_db9cc2/crops/veh_286_c6_f747.jpg"
        ]
      }
    },
    {
      "track_id": 166,
      "type": "ô tô",
      "class_id": 2,
      "has_plate": true,
      "n_frames": 102,
      "first_frame": 196,
      "last_frame": 299,
      "plate": {
        "text": "30K-131.72",
        "confidence": "high",
        "reasoning": "Ảnh thứ 4 (index 3) là rõ nhất. Dòng trên: '30K'. Dòng dưới: '131.72'. Tất cả các ký tự đều rõ ràng.",
        "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": [
          196,
          198,
          199,
          216,
          236,
          256,
          276
        ],
        "crop_paths": [
          "/app/runs/1776655289_db9cc2/crops/veh_166_c0_f196.jpg",
          "/app/runs/1776655289_db9cc2/crops/veh_166_c1_f198.jpg",
          "/app/runs/1776655289_db9cc2/crops/veh_166_c2_f199.jpg",
          "/app/runs/1776655289_db9cc2/crops/veh_166_c3_f216.jpg",
          "/app/runs/1776655289_db9cc2/crops/veh_166_c4_f236.jpg",
          "/app/runs/1776655289_db9cc2/crops/veh_166_c5_f256.jpg",
          "/app/runs/1776655289_db9cc2/crops/veh_166_c6_f276.jpg"
        ]
      }
    },
    {
      "track_id": 308,
      "type": "ô tô",
      "class_id": 2,
      "has_plate": true,
      "n_frames": 181,
      "first_frame": 425,
      "last_frame": 606,
      "plate": {
        "text": "51F-005.82",
        "confidence": "high",
        "reasoning": "Ảnh 6 rõ nhất. Biển số xe là 51F-005.82. Các ký tự đều rõ ràng.",
        "best_image_index": 6,
        "backend": "gemini/gemini-2.5-pro",
        "vehicle_type": "ô tô",
        "vehicle_class_id": 2,
        "has_plate": true,
        "is_violator": false,
        "candidate_frames": [
          425,
          462,
          498,
          534,
          570,
          600,
          601
        ],
        "crop_paths": [
          "/app/runs/1776655289_db9cc2/crops/veh_308_c0_f425.jpg",
          "/app/runs/1776655289_db9cc2/crops/veh_308_c1_f462.jpg",
          "/app/runs/1776655289_db9cc2/crops/veh_308_c2_f498.jpg",
          "/app/runs/1776655289_db9cc2/crops/veh_308_c3_f534.jpg",
          "/app/runs/1776655289_db9cc2/crops/veh_308_c4_f570.jpg",
          "/app/runs/1776655289_db9cc2/crops/veh_308_c5_f600.jpg",
          "/app/runs/1776655289_db9cc2/crops/veh_308_c6_f601.jpg"
        ]
      }
    },
    {
      "track_id": 424,
      "type": "xe máy",
      "class_id": 3,
      "has_plate": true,
      "n_frames": 88,
      "first_frame": 637,
      "last_frame": 726,
      "plate": {
        "text": "62-C2 4985",
        "confidence": "high",
        "reasoning": "Ảnh số 4 và 5 là rõ nhất. Trong ảnh số 4, dòng trên đọc được '62-C2', dòng dưới đọc được '4985'. Tất cả các ký tự đều rõ ràng.",
        "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": [
          637,
          639,
          641,
          654,
          671,
          688,
          705
        ],
        "crop_paths": [
          "/app/runs/1776655289_db9cc2/crops/moto_424_c0_f637.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_424_c1_f639.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_424_c2_f641.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_424_c3_f654.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_424_c4_f671.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_424_c5_f688.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_424_c6_f705.jpg"
        ]
      }
    },
    {
      "track_id": 188,
      "type": "xe máy",
      "class_id": 3,
      "has_plate": true,
      "n_frames": 28,
      "first_frame": 226,
      "last_frame": 260,
      "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 4 có độ phân giải tốt nhất nhưng biển số vẫn không thể đọc được.",
        "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": [
          226,
          231,
          236,
          241,
          253,
          258,
          259
        ],
        "crop_paths": [
          "/app/runs/1776655289_db9cc2/crops/moto_188_c0_f226.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_188_c1_f231.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_188_c2_f236.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_188_c3_f241.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_188_c4_f253.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_188_c5_f258.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_188_c6_f259.jpg"
        ]
      }
    },
    {
      "track_id": 328,
      "type": "xe máy",
      "class_id": 3,
      "has_plate": true,
      "n_frames": 118,
      "first_frame": 472,
      "last_frame": 596,
      "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ố 2 là rõ nhất nhưng vẫn không đủ để đọc biển số.",
        "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": [
          472,
          495,
          518,
          528,
          529,
          541,
          570
        ],
        "crop_paths": [
          "/app/runs/1776655289_db9cc2/crops/moto_328_c0_f472.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_328_c1_f495.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_328_c2_f518.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_328_c3_f528.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_328_c4_f529.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_328_c5_f541.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_328_c6_f570.jpg"
        ]
      }
    },
    {
      "track_id": 59,
      "type": "xe máy",
      "class_id": 3,
      "has_plate": true,
      "n_frames": 37,
      "first_frame": 80,
      "last_frame": 117,
      "plate": {
        "text": null,
        "confidence": "low",
        "reasoning": "Biển số xe không thể đọc được trong bất kỳ ảnh nào. Các ảnh đều mờ và biển số quá nhỏ, không thể phân biệt được bất kỳ ký tự nào.",
        "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": [
          80,
          88,
          95,
          102,
          109,
          110,
          113
        ],
        "crop_paths": [
          "/app/runs/1776655289_db9cc2/crops/moto_59_c0_f80.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_59_c1_f88.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_59_c2_f95.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_59_c3_f102.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_59_c4_f109.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_59_c5_f110.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_59_c6_f113.jpg"
        ]
      }
    },
    {
      "track_id": 207,
      "type": "xe máy",
      "class_id": 3,
      "has_plate": true,
      "n_frames": 92,
      "first_frame": 241,
      "last_frame": 345,
      "plate": {
        "text": null,
        "confidence": "low",
        "reasoning": "Tất cả các ảnh đều rất mờ và biển số xe quá nhỏ để có thể đọc được bất kỳ ký tự nào một cách rõ ràng. Ảnh số 6 là ảnh duy nhất có thể nhìn thấy vị trí của biển số nhưng 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": [
          241,
          259,
          281,
          283,
          297,
          299,
          317
        ],
        "crop_paths": [
          "/app/runs/1776655289_db9cc2/crops/moto_207_c0_f241.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_207_c1_f259.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_207_c2_f281.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_207_c3_f283.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_207_c4_f297.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_207_c5_f299.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_207_c6_f317.jpg"
        ]
      }
    },
    {
      "track_id": 346,
      "type": "xe máy",
      "class_id": 3,
      "has_plate": true,
      "n_frames": 78,
      "first_frame": 482,
      "last_frame": 566,
      "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 có góc nhìn rõ nhất về phía sau xe 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": [
          482,
          497,
          512,
          530,
          531,
          532,
          547
        ],
        "crop_paths": [
          "/app/runs/1776655289_db9cc2/crops/moto_346_c0_f482.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_346_c1_f497.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_346_c2_f512.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_346_c3_f530.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_346_c4_f531.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_346_c5_f532.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_346_c6_f547.jpg"
        ]
      }
    },
    {
      "track_id": 2,
      "type": "xe máy",
      "class_id": 3,
      "has_plate": true,
      "n_frames": 27,
      "first_frame": 0,
      "last_frame": 28,
      "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. Có vẻ như có một biển số xe máy hai dòng nhưng không thể phân biệt được các ký tự.",
        "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": [
          0,
          2,
          3,
          5,
          10,
          15,
          20
        ],
        "crop_paths": [
          "/app/runs/1776655289_db9cc2/crops/moto_2_c0_f0.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_2_c1_f2.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_2_c2_f3.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_2_c3_f5.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_2_c4_f10.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_2_c5_f15.jpg",
          "/app/runs/1776655289_db9cc2/crops/moto_2_c6_f20.jpg"
        ]
      }
    }
  ],
  "violations": [
    {
      "vehicle_track_id": 286,
      "vehicle_class_id": 2,
      "moto_track_id": 286,
      "actor_track_id": 286,
      "actor_type": "passenger",
      "actor_class_id": 2,
      "associated_vehicle_track_id": null,
      "trash_track_id": -1,
      "trash_class_id": -1,
      "moto_last_frame_near": 596,
      "trash_first_frame": 596,
      "trash_last_frame": 607,
      "first_frame": 596,
      "last_frame": 607,
      "min_distance_px": 0,
      "vlm_reasoning": "Cửa sổ sau bên phải của xe ô tô màu trắng mở ra và một vật thể màu cam bị ném ra ngoài, rơi xuống lề đường.",
      "vlm_trash_desc": "vật thể màu cam, có thể là chai hoặc hộp",
      "vlm_trash_location": "lề cỏ bên phải đường",
      "vlm_confidence": "high",
      "start_time_s": 39.74508875739645,
      "end_time_s": 40.47863905325444,
      "plate": {
        "text": "43A-509.65",
        "confidence": "high",
        "reasoning": "Ảnh 4 là rõ nhất. Đọc được từng ký tự một cách rõ ràng: '4', '3', 'A', '-', '5', '0', '9', '.', '6', '5'.",
        "best_image_index": 4,
        "backend": "gemini/gemini-2.5-pro",
        "vehicle_type": "ô tô",
        "vehicle_class_id": 2,
        "has_plate": true,
        "is_violator": true,
        "candidate_frames": [
          363,
          399,
          400,
          459,
          555,
          651,
          747
        ],
        "crop_paths": [
          "/app/runs/1776655289_db9cc2/crops/veh_286_c0_f363.jpg",
          "/app/runs/1776655289_db9cc2/crops/veh_286_c1_f399.jpg",
          "/app/runs/1776655289_db9cc2/crops/veh_286_c2_f400.jpg",
          "/app/runs/1776655289_db9cc2/crops/veh_286_c3_f459.jpg",
          "/app/runs/1776655289_db9cc2/crops/veh_286_c4_f555.jpg",
          "/app/runs/1776655289_db9cc2/crops/veh_286_c5_f651.jpg",
          "/app/runs/1776655289_db9cc2/crops/veh_286_c6_f747.jpg"
        ]
      },
      "actor_summary": "ô tô#286",
      "evidence_clip": "/app/runs/1776655289_db9cc2/evidence/evidence_1_f558-633.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/1776655289_db9cc2/violations.json",
    "annotated_video": "/app/runs/1776655289_db9cc2/annotated.mp4",
    "crops_dir": "/app/runs/1776655289_db9cc2/crops",
    "evidence_clips": [
      "/app/runs/1776655289_db9cc2/evidence/evidence_1_f558-633.mp4"
    ]
  }
}