Đây là phần mềm nhận dạng biển khơi số xe sản phẩm công nghệ Việt Nam, tự động hóa nhận dạng bằng webcam hoặc nhấn dạng tự ảnh. Chủ yếu ra mắt cho chúng ta 1 thuật toán mới ở kề bên rất những thuật toán không giống trong lĩnh vực này.

Bạn đang xem: Nhận diện biển số xe

Trong repo https://github.com/thigiacmaytinh/IPSSedu có đựng nhiều project về dìm diện biển cả số. Gồm có cả xe thứ lẫn xe hơi, với những ngôn ngữ lập trình khác nhau, lời giải khác nhau,… nhà yếu trình làng hướng tiếp cận giúp các bạn hình dung flow thuật toán.

Các project đa phần build bởi Visual Studio, chúng tôi có ghi phiên bản Visual Studio recommended. Tuy nhiên sẽ nỗ lực dành thời gian upgrade lên phiên phiên bản mới nhất.

Các source code trong số đó cơ bản hết sức rất có thể để tra cứu hiểu, các bạn cần phải code lại để phù hợp với nhu cầu. Các bạn phải sửa lại giao diện, giảng dạy lại để tăng cường độ chính xác.

Cần độ đúng chuẩn cao bạn cũng có thể mua phiên bản thương mại tại: https://viscomsolution.com/ipss-phan-mem-doc-bien-so-xe-may/

Giải thuật

*

Bao gồm 4 cách như trên nhằm phát hiện biển lớn sốBước 1: Định vị hải dương số hay có cách gọi khác là phát hiện đại dương số: tìm size chữ nhật bao gồm (x, y, width, height) bao lấy biển cả số vào ảnh. Ví như tìm thấy thì crop đại dương số ra để xử lý cách tiếp theo, công dụng của công đoạn này là hình ảnh biển số đã crop. Bước này áp dụng thuật toán LBP cascade

*
Dùng Haar cascade học đặc thù của 1 biển cả số, kế tiếp crop biển lớn số. Tuy nhiên bước này lại chưa đúng chuẩn lắm

Bước 2: Định vị ký kết tự hay còn được gọi là tìm địa điểm của cam kết tự trên biển khơi số đang crop. Công dụng của đoạn này là các ký tự màu sắc đen, tiếp nối resize tất cả về cùng 1 kích thước. đoạn này dùng thuật toán Floodfill

*
Cũng dùng Haar cascade để tìm ra các ký trường đoản cú trong biển số đã được crop

Bước 3: Nhận dạng ký kết tự bằng thuật toán Machine Learning, trong trường đúng theo này là SVM nhằm phân lớp các ký tự

*
Cuối thuộc là dùng SVM để thừa nhận dạng ký kết tự

Bước 4: Sắp xếp các kết quả nhận dạng cùng hiển thị cam kết tự theo định dạng biển số xe máy

Fix lỗi ko build được

Khi chạm chán lỗi như hình dưới các bạn phải cài lại Visual Studio

*

Hình dưới sử dụng Visual Studio 2019, các bạn check vào C++/CLI support… rồi thiết lập là được

*

Download

Source chạy bởi Visual studio năm ngoái Communityhttps://github.com/thigiacmaytinh/IPSSedu

Lời mở đầu

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

Hướng dẫn chuẩn bị dữ liệu cho câu hỏi Object Detection.Hướng dẫn huấn luyện YOLO-Tiny
V4 sử dụng darknet trên google Colab.

Chuẩn bị dữ liệu

Đánh giá cỗ dữ liệu

Trong bài viết mình sử dụng bộ tài liệu biển số xe máy vn chứa 1750 ảnh, chúng ta đọc hoàn toàn có thể tải tại đây.


*
Ảnh thu được (bên phải) sau khi chạy hàm trên
# Cách2def random_crop(image_path, out_path): image = cv2.imread(image_path) original_width, original_height = image.shape<1>, image.shape<0> 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 hình ảnh với form size ngẫu nhiên cropped_image = image # resize ảnh bằng kích thước hình ảnh ban đầu cropped_image = cv2.resize(cropped_image, (original_width, original_height)) cv2.imwrite(out_path, cropped_image)
*
Độ sáng biến hóa (bên phải)
Xoay ảnhimport imutilsdef rotate_image(image_path, range_angle, output_path): """ range_angle: khoảng tầm góc xoay """ image = cv2.imread(image_path) #lựa chọn tình cờ góc con quay angle = random.randint(-range_angle, range_angle) img_rot = imutils.rotate(image, angle) cv2.imwrite(output_path, img_rot)
*
Xác định vùng đại dương chứa đại dương số

Label
Img
cung ứng gán nhãn trên cả 2 định dạng PASCAL VOC cùng YOLO cùng với phần mở rộng file annotation tương xứng là .xml với .txt.

Trong câu hỏi sử dụng mô hình YOLO, bản thân lưu tệp tin annotation dưới dạng .txt.


*
Sự cải thiện của YOLOv4, nguồn.

YOLOv4 cho công dụng real-time lúc chạy trên các nền tảng GPU cao cấp. Với mục tiêu trade-off thân độ đúng mực và vận tốc để có thể chạy trên các nền tảng CPU với GPU thấp hơn thì YOLO-Tinyv4 được ra đời.


*
Nội dung tệp tin obj.names

Bước 5: chế tạo file obj.data, kế tiếp lưu trong folder darknet/data.


*
chart.png

Nhận xét: quá trình huấn luyện quy tụ rất nhanh. Vì vậy rất có thể dừng mau chóng sau 2000 batches.

Xem thêm: Review 11 Phần Mềm Dịch Tiếng Trung Sang Tiếng Việt, Phần Mềm Dịch Tiếng Trung Sang Tiếng Việt

Dự đoán

Sau khi huấn luyện xong, toàn thể weights sẽ tiến hành lưu trong folder backup.

#Danh sách các weights được lưu!ls backup/

*

Để dự báo một bức ảnh sử dụng cú pháp:

!./darknet detector chạy thử #cụ thể như sau!./darknet detector test data/obj.data yolo-tinyv4-obj.cfg ackup/yolo-tinyv4-obj_best.weights test1.jpg
Kết quả dự đoán được lưu lại thành file predictions.jpg

#Hàm sau được dùng để làm hiển thị công dụng dự đoán lên colabdef show(path): import cv2 import matplotlib.pyplot as plt image = cv2.imread(path) original_width, original_height = image.shape<1>, image.shape<0> resized_image = cv2.resize(image, (2*original_width, 2*original_height) , interpolation = cv2.INTER_CUBIC) resized_image = cv2.cvt
Color(resized_image, cv2.COLOR_BGR2RGB) plt.figure(figsize=(20,10)) plt.axis("off") plt.imshow(resized_image) plt.show() show("predictions.jpg")