Hỗ trợ đồ án, khóa luận Web, App, AI - Uy tín, chất lượng!
Hỗ trợ đồ án, khóa luận Web, App, AI - Uy tín, chất lượng!
Trang Chủ Hướng Dẫn Đồ Án Tự động phát hiện biển số xe từ ảnh bằng YOLO
Hướng Dẫn Đồ ÁnLập Trình AI

Tự động phát hiện biển số xe từ ảnh bằng YOLO

Chia sẻ
Chia sẻ

Phát hiện biển số xe là một ứng dụng phổ biến của thị giác máy tính trong giao thông thông minh, giám sát an ninh và quản lý bãi đỗ xe. Với sự phát triển của các thuật toán học sâu, việc phát hiện biển số xe từ hình ảnh đã trở nên nhanh chóng và chính xác hơn. YOLO (You Only Look Once) là một trong những mô hình mạnh mẽ nhất để thực hiện nhiệm vụ này nhờ khả năng phát hiện đối tượng thời gian thực.

Nếu bạn là người mới bắt đầu, hãy tham khảo bài Ứng dụng KNN phân loại khách hàng theo độ tuổi để hiểu về các thuật toán phân loại cơ bản. Ngoài ra, bài Hướng dẫn tiền xử lý dữ liệu sạch để huấn luyện mô hình tốt hơn sẽ giúp bạn nắm rõ các bước xử lý dữ liệu trước khi huấn luyện, còn bài Phát hiện gian lận bằng học máy sẽ mở rộng kiến thức về các ứng dụng Machine Learning thực tế.

Tổng quan về YOLO và bài toán phát hiện biển số

YOLO (You Only Look Once) là một trong những kiến trúc mạng convolutional tiên tiến nhất để phát hiện đối tượng. Khác với các phương pháp truyền thống, YOLO cung cấp bounding box và nhãn phân loại chỉ sau một lần quét toàn bộ ảnh, giúp tăng tốc độ xử lý đáng kể.

Trong bài này, chúng ta sẽ sử dụng YOLOv5 để phát hiện biển số xe. Vì bộ COCO mặc định không bao gồm nhãn “license plate”, chúng ta sẽ cần:

  • Một bộ dữ liệu đã được gắn nhãn biển số

  • Huấn luyện lại (fine-tune) YOLOv5 trên bộ dữ liệu đó

  • Triển khai mô hình để phát hiện biển số trên ảnh mới

Chuẩn bị bộ dữ liệu biển số

Chọn bộ dữ liệu

Chúng ta sẽ sử dụng UFPR ALPR Dataset – một bộ dữ liệu biển số xe thực tế gồm hơn 4.500 hình ảnh xe ở nhiều góc chụp khác nhau, với annotation sẵn có.

📥 Link tải UFPR ALPR: https://web.inf.ufpr.br/vri/databases/ufpr-alpr

Hoặc bạn có thể thử bộ OpenALPR Benchmark:
📥 Link tải OpenALPR: https://github.com/openalpr/benchmarks

Tải và giải nén dữ liệu

Sau khi tải file zip về từ website, bạn hãy giải nén ra máy tính của mình. Bộ dữ liệu cần có 2 thư mục quan trọng:

  • images/: chứa hình ảnh

  • annotations/: chứa file XML nhãn (theo định dạng Pascal VOC)

Tải dữ liệu lên Google Colab

Khi làm việc trên Google Colab, bạn cần upload thư mục dữ liệu đã giải nén lên môi trường Colab. Thao tác như sau:

  1. Vào sidebar trái trong Colab → nhấn tab Files.
  2. Click Upload → chọn thư mục dữ liệu (hoặc nén lại thành zip rồi upload).
  3. Nếu upload file zip, hãy giải nén bằng lệnh:
!unzip UFPR-ALPR.zip -d /content/dataset

Kiểm tra thư mục sau khi giải nén:

!ls /content/dataset

Chuyển đổi annotation sang định dạng YOLO

YOLOv5 yêu cầu annotation ở định dạng:

class x_center y_center width height

Mọi tọa độ cần được chuẩn hóa về [0,1] theo kích thước ảnh. Nếu bộ dữ liệu hiện tại ở dạng Pascal VOC (XML), ta cần chuyển đổi.

Viết một script để chuyển đổi:

import os
import xml.etree.ElementTree as ET

def voc_to_yolo(voc_dir, yolo_dir, class_name='license_plate'):
    os.makedirs(yolo_dir, exist_ok=True)
    for xml_file in os.listdir(voc_dir):
        if not xml_file.endswith('.xml'):
            continue
        tree = ET.parse(os.path.join(voc_dir, xml_file))
        root = tree.getroot()
        img_width = int(root.find('size/width').text)
        img_height = int(root.find('size/height').text)
        label_file = os.path.join(yolo_dir, xml_file.replace('.xml', '.txt'))
        with open(label_file, 'w') as f:
            for obj in root.findall('object'):
                if obj.find('name').text != class_name:
                    continue
                bbox = obj.find('bndbox')
                xmin = int(bbox.find('xmin').text)
                ymin = int(bbox.find('ymin').text)
                xmax = int(bbox.find('xmax').text)
                ymax = int(bbox.find('ymax').text)
                x_center = ((xmin + xmax) / 2) / img_width
                y_center = ((ymin + ymax) / 2) / img_height
                width = (xmax - xmin) / img_width
                height = (ymax - ymin) / img_height
                f.write(f"0 {x_center} {y_center} {width} {height}\n")

# Chuyển đổi
voc_to_yolo('/content/dataset/annotations', '/content/dataset/labels')

Cài đặt và chuẩn bị YOLOv5

Clone YOLOv5 repo và cài đặt các dependency cần thiết:

!git clone https://github.com/ultralytics/yolov5
%cd yolov5
!pip install -r requirements.txt

Tạo file cấu hình data.yaml

YOLOv5 cần một file YAML để biết nơi lưu trữ dữ liệu và số class.

train: /content/dataset/images/train
val: /content/dataset/images/val

nc: 1
names: ['license_plate']

Lưu file này vào /content/yolov5/data/ufpr.yaml.

Huấn luyện mô hình YOLOv5

Bắt đầu fine-tune mô hình YOLOv5s trên dữ liệu biển số.

!python train.py --img 640 --batch 16 --epochs 100 --data data/ufpr.yaml --weights yolov5s.pt --cache

Dùng mô hình để phát hiện biển số

Sau khi huấn luyện xong, mô hình sẽ được lưu trong runs/train/exp/weights/best.pt. Dùng nó để phát hiện biển số trên ảnh mới:

!python detect.py --weights runs/train/exp/weights/best.pt --source /content/test_images --img 640

Kết quả sẽ hiển thị trực tiếp và lưu trong runs/detect/exp.

Kết luận

Bạn vừa học cách tải, xử lý dữ liệu, huấn luyện và triển khai YOLOv5 để phát hiện biển số xe. Với kiến thức này, bạn có thể phát triển thêm các tính năng như nhận diện ký tự biển số bằng OCR hoặc xử lý video thời gian thực.

Tham Gia Nhóm – Hỗ Trợ Lập Trình

Hỗ Trợ Đồ Án – ThueDoAn.vn

Liên quan
Hướng Dẫn Đồ Án

Checklist 10 bước kiểm tra cuối cùng trước khi nhấn nút nộp đồ án

Thời điểm chuẩn bị nhấn nút nộp đồ án luôn mang lại...

Hướng Dẫn Đồ Án

Tuyệt chiêu đối phó với những giảng viên hướng dẫn ‘khó tính’ nhất

Giai đoạn làm đồ án tốt nghiệp luôn đi kèm với vô...

Hướng Dẫn Đồ Án

Tại sao việc quản lý Source Code bằng Git lại quan trọng hơn bạn nghĩ?

Trong thế giới lập trình hiện đại, mã nguồn chính là linh...

Hướng Dẫn Đồ Án

Những chức năng ‘thừa’ khiến bạn tốn thời gian mà không được cộng điểm

Làm đồ án tốt nghiệp là một cuộc đua thực thụ với...

Hướng Dẫn Đồ Án

Cách xử lý khi đề tài bị trùng lặp ý tưởng với các khóa trước quá nhiều

Lựa chọn đề tài đồ án luôn là bước khởi đầu đầy...

Hướng Dẫn Đồ Án

Làm sao để giải trình với giảng viên khi code bị nghi ngờ là đi chép?

Trong quá trình thực hiện đồ án, việc tham khảo mã nguồn...

Hướng Dẫn Đồ Án

Cảnh báo: Những nguồn share code ‘rác’ trên mạng cần tuyệt đối tránh

Trong quá trình làm đồ án, việc tìm kiếm sự hỗ trợ...

Hướng Dẫn Đồ Án

Sai lầm khi chọn công nghệ quá khó so với năng lực thực tế của bản thân

Chọn đề tài và công nghệ cho đồ án luôn là bước...

Liên Hệ
Liên hệ để được tư vấn & hỗ trợ đồ án CNTT nhé bạn!