Đề Xuất 5/2022 # Bài Toán Phát Hiện Biển Số Xe Máy Việt Nam # Top Like

Xem 29,898

Cập nhật nội dung chi tiết về Bài Toán Phát Hiện Biển Số Xe Máy Việt Nam mới nhất ngày 25/05/2022 trên website Binhvinamphuong.com. Hy vọng thông tin trong bài viết sẽ đáp ứng được nhu cầu ngoài mong đợi của bạn, chúng tôi sẽ làm việc thường xuyên để cập nhật nội dung mới nhằm giúp bạn nhận được thông tin nhanh chóng và chính xác nhất. Cho đến nay, bài viết này đã thu hút được 29,898 lượt xem.

--- Bài mới hơn ---

  • Ý Nghĩa Của Những Chiếc Biển Số Xe Có Màu Việt Nam: Đâu Mới Là Màu Quyền Lực Nhất?
  • Có Nên Bọc Biển Số Kiểu Vũng Tàu, Bọc Mica, Inox Cho Xế Cưng
  • Giới Thiệu Chung Về Huyện Vĩnh Lộc
  • Xe Thuận Ý, Tuyến Xe Thuận Ý
  • Những Mẫu Xe “Lột Xác” Thành Ô Tô Tiền Tỷ Nhờ Biển Số Đẹp
  • Bài toán phát hiện biển số xe máy Việt Nam

    Lời mở đầu

    Bài toán nhận diện biển số xe Việt Nam là một bài toán không còn mới, đã được phát triển dựa trên các phương pháp xử lý ảnh truyền thống và cả những kỹ thuật mới sử dụng Deep Learning. Trong bài toán này mình chỉ phát triển bài toán phát hiện biển số (một phần trong bài toán nhận diện biển số) dựa trên thuật toán YOLO-Tinyv4 với mục đích:

    • Hướng dẫn chuẩn bị dữ liệu cho bài toán Object Detection.
    • Hướng dẫn huấn luyện YOLO-TinyV4 dùng darknet trên Google Colab.

    Chuẩn bị dữ liệu

    Đánh giá bộ dữ liệu

    • Kích thước các biển số xe không có sự đa dạng, do khoảng cách từ camera đến biển số xe xấp xỉ gần bằng nhau giữa các ảnh.
    • Ảnh có độ sáng thấp và gần giống nhau do ảnh được chụp trong hầm chung cư.

    Các phương pháp tăng sự đa dạng của bộ dữ liệu

    Đa dạng kích thước của biển số

    Đa dạng kích thước bằng 2 cách:

    • Cách 1: Thu nhỏ kích thước biển bằng cách thêm biên kích thước ngẫu nhiên vào ảnh gốc, sau đó resize ảnh bằng kích thước ảnh ban đầu.
    • Cách 2: Crop ảnh chứa biển số với kích thước ngẫu nhiên, sau đó resize ảnh bằng kích thước ảnh ban đầu.

    # Cách1 def add_boder(image_path, output_path, low, high): """ low: kích thước biên thấp nhất (pixel) hight: kích thước biên lớn nhất (pixel) """ # random các kích thước biên trong khoảng (low, high) top = random.randint(low, high) bottom = random.randint(low, high) left = random.randint(low, high) right = random.randint(low, high) image = cv2.imread(image_path) original_width, original_height = image.shape #sử dụng hàm của opencv để thêm biên image = cv2.copyMakeBorder(image, top, bottom, left, right, cv2.BORDER_REPLICATE) #sau đó resize ảnh bằng kích thước ban đầu của ảnh image = cv2.resize(image, (original_width, original_height)) cv2.imwrite(output_path, image)

    def random_crop(image_path, out_path):

    image = cv2.imread(image_path)

    original_width, original_height = image.shape

    x_center,y_center = original_height//2, original_width//2

    x_left = random.randint(0, x_center//2)

    x_right = random.randint(original_width-x_center//2, original_width)

    y_top = random.randint(0, y_center//2)

    y_bottom = random.randint(original_height-y_center//2, original_width)

    # crop ra vùng ảnh với kích thước ngẫu nhiên

    cropped_image = image = 0 final_hsv = cv2.merge((h, s, v)) img = cv2.cvtColor(final_hsv, cv2.COLOR_HSV2BGR) cv2.imwrite(output_path, img)

    import imutils def rotate_image(image_path, range_angle, output_path): """ range_angle: Khoảng góc quay """ image = cv2.imread(image_path) #lựa chọn ngẫu nhiên góc quay angle = random.randint(-range_angle, range_angle) img_rot = imutils.rotate(image, angle) cv2.imwrite(output_path, img_rot)

    Trong bài toán sử dụng mô hình YOLO, mình lưu file annotation dưới dạng .txt.

    Lưu ý: Với bài toán có nhiều nhãn, nhiều người cùng gán nhãn thì cần thống nhất với nhau trước về thứ tự nhãn. Nguyên nhân do trong file annotation chỉ lưu chỉ số (0,1,3,4,…) của nhãn chứ không lưu tên nhãn.

    Sau khi gán nhãn xong các bạn để file annotation và ảnh tương ứng vào cùng một thư mục.

    Huấn luyện mô hình

    Giới thiệu về YOLO-Tinyv4 và darknet

    YOLO-Tinyv4

    YOLOv4 là thuật toán Object Detection, mới được công bố trong thời gian gần đây với sự cải thiện về kết quả đáng kể so với YOLOv3.

    YOLOv4 cho kết quả real-time khi chạy trên các nền tảng GPU cao cấp. Với mục đích trade-off giữa độ chính xác và tốc độ để có thể chạy trên các nền tảng CPU và GPU thấp hơn thì YOLO-Tinyv4 được ra đời.

    Darknet

    Darknet là một framework open source chuyên về Object Detection được viết bằng ngôn ngữ C và CUDA. Darknet dùng để huấn luyện các mô hình YOLO một cách nhanh chóng, dễ sử dụng.

    Cấu hình darknet

    Việc cấu hình trực tiếp trên Google Colab tương đối khó khăn với những bạn chưa quen làm việc với linux, bên cạnh đó vấn đề delay kết nối giữa Google Colab với drive trong một số trường hợp. Vì vậy mình sẽ hướng dẫn các bạn cấu hình trên máy cá nhân, xong nén thành file .zip, sau đó đẩy lên Google Drive.

    Việc cấu hình trải qua các bước:

    Bước 1: Clone darknet về máy.

    Bước 3: Tạo file yolo-tinyv4-obj.cfg.

    Tạo file chúng tôi với nội dung tương tự file chúng tôi trong thư mục darknet/cfg, sau đó chỉnh sử một số dòng:

    • Dòng 6: Thay đổi batch=64. Nghĩa là: batch = số ảnh (cả file annotation) được đưa vào huấn luyện trong một batch.
    • Dòng 7: Thay đổi subpisions=16. Trong một batch được chia thành nhiều block, mỗi block chứa batch/subpisions ảnh được đưa vào GPU xử lý tại một thời điểm. Weights của mô hình được update sau mỗi batch.
    • Dòng 20: Thay đổi max_batches=classes2000, không nhỏ hơn số ảnh trong tập huấn luyện, và không nhỏ hơn 6000 (theo đây}). VD: max_batches=6000.
    • Dòng 22: Thay đổi steps= 80%, 90% max_batches. VD: steps=4800,5400. Sau khi huấn luyện được 80%, 90% max_batches, learning_rate sẽ được nhân với một tỷ lệ (dòng 23 trong file), mặc định là 0.1.
    • Thay đổi classes=1 trong mỗi layer trước layer for file in lst_files: if ".txt" not in file: lst_images.append(file) #Tách 200 ảnh ra làm tập validation random_idx = np.random.randint(0, len(lst_images), 200) #Tạo file chúng tôi được đặt trong thư mục darknet/data with open("data/train.txt","w") as f: for idx in range(len(lst_images)): if idx not in random_idx: f.write("data/obj/"+lst_images+"n") #Biên dịch darknet (chỉ cần biên dịch một lần, lần sau dùng bỏ qua bước này) !make #Phân quyền thực thi module darknet !chmod +x ./darknet

      Bắt đầu quá trình huấn luyện sử dụng command line:

      !./darknet detector train data/obj.data chúng tôi yolov4-tiny.conv.29 -map

      Cú pháp tổng quát để huấn luyện:

      !./darknet detector train , image.shape[0] resized_image = cv2.resize(image, (2*original_width, 2*original_height) , interpolation = cv2.INTER_CUBIC) resized_image = cv2.cvtColor(resized_image, cv2.COLOR_BGR2RGB) plt.p(figsize=(20,10)) plt.axis("off") plt.imshow(resized_image) plt.show() show("pdictions.jpg")

      --- Bài cũ hơn ---

    • Hướng Dẫn Nộp Lệ Phí Trước Bạ Ô Tô, Xe Máy Điện Tử
    • Danh Sách Xe Khách Thái Bình Đi Điện Biên Cập Nhật
    • Biển Số Xe Tây Ninh Là Bao Nhiêu Và Cách Nhận Biết Theo Từng Huyện, Thành Phố
    • Taxi Sài Gòn – Hồ Chí Minh: Số Điện Thoại Các Hãng Taxi
    • 72 Câu Thơ Học Thuộc Nhanh Biển Số Xe Các Tỉnh
    • Bạn đang đọc nội dung bài viết Bài Toán Phát Hiện Biển Số Xe Máy Việt Nam trên website Binhvinamphuong.com. Hy vọng một phần nào đó những thông tin mà chúng tôi đã cung cấp là rất hữu ích với bạn. Nếu nội dung bài viết hay, ý nghĩa bạn hãy chia sẻ với bạn bè của mình và luôn theo dõi, ủng hộ chúng tôi để cập nhật những thông tin mới nhất. Chúc bạn một ngày tốt lành!

  • Web hay
  • Links hay
  • Push
  • Chủ đề top 10
  • Chủ đề top 20
  • Chủ đề top 30
  • Chủ đề top 40
  • Chủ đề top 50
  • Chủ đề top 60
  • Chủ đề top 70
  • Chủ đề top 80
  • Chủ đề top 90
  • Chủ đề top 100
  • Bài viết top 10
  • Bài viết top 20
  • Bài viết top 30
  • Bài viết top 40
  • Bài viết top 50
  • Bài viết top 60
  • Bài viết top 70
  • Bài viết top 80
  • Bài viết top 90
  • Bài viết top 100