Nhận diện biển số: người ta dùng camera + AI để làm điều này ra sao?
Rất hay và hữu ích!/8 người
Duy Luân
10 thángBình luận: 91
cover_home_nhan_dien_bien_so_xe_hoi.jpg

Vụ nhận diện biển số là một điều khá thú vị được bàn luận khi nói tới biển số mới đang được cấp ở Việt Nam. Hiện tại hệ thống nhận diện biển số đang được nhiều chính phủ sử dụng để giám sát giao thông, phạt nguội, và nhiều thứ khác nữa. Những hệ thống này có độ chính xác cao, chạy ổn định và đáng tin cậy nhờ sự phổ biến của camera an ninh và những tiến bộ trong ngành AI.

Bài này mình có dùng một số ảnh trong series bài viết Nhận diện biển số bằng Python và OpenCV của bạn quangnhatnguyenle trên Medium. Anh em nào muốn thực hành, tự mình làm ra một model nhận diện biển số thì có thể làm theo.

Để nhận diện biển số, người ta phải làm gì?


Thứ nhất là camera

Quảng cáo


Camera ở đây là bất kì thiết bị nào có khả năng ghi hình. Thứ được dùng phổ biến trong các hệ thống công cộng chính là camera an ninh, thứ mà bạn thấy người ta hay gắn ở ngoài đường, trên cột điện hoặc trên các trụ biển báo. Ở Việt Nam giờ cũng đầy khu vực gắn camera an ninh, bạn có thể dễ dàng bắt gặp khi đi trên các tuyến đường lớn, đường chính.

Nhưng không nhất thiết đó phải là camera an ninh loại xịn. Ừ thì để chạy được ngoài trời, độ bền cao, có thể chống chọi với va đập, bụi, nước thì sẽ cần loại đắt tiền nhưng thực tế bạn cũng có thể nhận diện biển số chỉ từ ảnh chụp bởi điện thoại, hình ảnh từ webcam, hình từ máy ảnh… cũng được. Miễn là bạn có hình ảnh là ok. Hình ảnh rõ ràng, nét thì càng tốt, hình ảnh mờ quá thì thuật toán nhận diện sẽ hoạt động không hiệu quả bằng.

khai-thac-hieu-qua-camera-giam-sat.jpg

Về bản chất, video là một loạt các tấm ảnh được cho chạy với tốc độ rất cao, ví dụ là 25 tấm mỗi giây, hay 30 tấm mỗi giây (gọi là frame per second - FPS). Camera thường sẽ hoạt động ở các mức 24FPS, 25FPS hoặc 30FPS. Việc nhận diện, phân tích hình ảnh thực tế sẽ được làm trên mỗi tấm ảnh, có điều thời gian xử lý rất nhanh, chỉ vài mili giây hoặc vài chục, vài trăm mili giây mỗi khung ảnh mà thôi. Hệ thống có thuật toán tốt, hạ tầng mạnh mẽ và được tối ưu với các bộ xử lý đồ họa ngon có thể xử lý vài nghìn, thậm chí chục nghìn khung hình mỗi giây mà không gặp vấn đề gì.

Video khi được ghi nhận từ các camera an ninh trên đường sẽ được truyền bằng Internet đến các trung tâm xử lý dữ liệu. Các trung tâm này chính là nơi mà thuật toán sẽ xử lý các bước tiếp theo và đưa ra kết quả, chứ con người không cần phải ngồi xem thủ công từng luồng video một. Cả thành phố có đến hàng nghìn, thậm chí là chục nghìn cái camera, người đâu mà xem cho hết. Chưa kể con người thì thường không chính xác như máy ở những việc lặp đi lặp lại và có phần nhàm chán như thế này.

Sau đó bạn cần một vài thuật toán đủ tốt

Thuật toán sẽ làm nhiệm vụ nhận diện biển số và nhận diện số trên biển (sẽ nói kĩ hơn ở bên dưới). Ngoài ra bạn cũng sẽ cần thêm thuật toán để phát hiện xe vi phạm hoặc xe cần theo dõi, ví dụ như phát hiện xe đi quá tốc độ, xe đỗ sai vị trí, xe đi sai làn đường…

2 bước để nhận diện biển số xe


Khi nhìn vào tấm hình bên dưới bạn có thấy được ngay lập tức những kí tự trên biển số không?

Quảng cáo



5172273_bang_so_xe_font_moi3.jpg

Được đúng không? Thực ra là do não của bạn đã quen với việc đó rồi, và nó có thể xử lý khái niệm về “biển số” rất nhanh bởi bạn đã được dạy từ nhỏ rằng: Một tấm dài dài hoặc vuông vuông, gắn trên xe, thì đó có khả năng cao là biển số. Bạn được dạy điều đó vài lần, lặp đi lặp lại với vài chiếc xe, và khi nhìn qua những xe khác, bạn biết đó chính là biển số dù xe có màu khác, xe có thể là loại khác luôn. Rồi bạn còn được dạy chữ, nên nhìn vào bạn biết được các kí tự trên biển số là gì.

Não có tốc độ xử lý cực nhanh nên bạn không để ý rằng thực ra quá trình này có tới 2 giai đoạn lận: bước nhận biển số, và bước nhận kí tự trên biển. Máy nó cũng chạy theo cách y chang. Bạn phải dạy cho nó rằng đó là cái biển số, nó sẽ tách hình ảnh của biển số ra khỏi tấm ảnh lớn. Hình ảnh của biển số sau khi tách sẽ hình thành nên một vùng gọi là Region of Interest (RoI), và máy sẽ chỉ chạy thuật toán nhận diện kí tự trên đúng khu vực ROI này mà thôi để tăng tốc độ và độ chính xác. Hình bên dưới là ảnh biển số đã tách khỏi tấm ảnh lớn.

maxresdefault.jpg

Tuy nhiên máy không thông minh như người, bạn phải dạy cho nó biển số mà phải theo nhiều hướng, nhiều góc nghiêng khác nhau. Nếu bạn chỉ chụp thẳng biển số rồi dạy cho nó thì nó sẽ bị “học thuộc lòng”, gọi là overfit khi huấn luyện model. Lúc đó nó không nhận ra biển số khi góc camera hơi nghiêng, khi camera đặt trên cao, khi camera bị giọt nước che, và nhiều tình huống khác có thể diễn ra ngoài đời thực.

Thế nên khi huấn luyện các mô hình machine learning để nhận diện hình ảnh (mà cụ thể là biển số), người ta phải đưa vào một tập dữ liệu hình ảnh bao gồm rất nhiều biển số được chụp thẳng, biển số méo mó, có khi phải thêm cả biến số bị chụp xiên, biển số bị cong, biển số bị mờ… Phải như vậy thì máy mới không học vẹt và có đủ mức độ “general” để nhận diện trong nhiều tình huống thực tế.

Quảng cáo



Với các hệ thống nhận diện biển số xuyên quốc gia, có nước xài màu này, có nước xài màu kia, chữ cũng khác nhau nên người ta cũng phải dạy các máy bằng ảnh mẫu biển số của những quốc gia này. Tập dữ liệu để đưa vào huấn luyện có thể lên đến hàng chục nghìn tấm ảnh. Thậm chí lên đến vài trăm nghìn ảnh thì cũng là bình thường thôi. Mình xem trên Medium thấy bài viết của bạn quangnhatlenguyen có hình minh họa cho vụ này, nên mình thêm vào bài để các bạn hiểu. Trong tập dữ liệu bên dưới có ảnh mẫu biển số của Trung Quốc, Ấn Độ, Nhật, Việt Nam, Nga, Thái Lan, Thổ Nhĩ Kỳ, Mỹ…

1*ycEPCpMX58mh5sJKplVGjA.png

Trong quá trình xử lý, tách ảnh và nhận diện kí tự, người ta cũng phải áp dụng một vài bước nhỏ hơn để đổi ảnh màu thành ảnh trắng đen và thêm một chút mờ (blur) để việc xử lý tách kí tự được dễ dàng hơn. Vì sao phải làm vụ này thì mình không rõ lý do căn cơ, mình cũng chỉ đi học lóm được nhiêu đó à, đang tìm hiểu thêm.

2XNVC.jpg

Tương tự, máy không đủ thông minh để biết được kí tự khi nhìn từ nhiều góc khác nhau, thậm chí nhiều font chữ khác nhau. Nó chỉ biết những gì được dạy mà thôi, nên nếu bạn chỉ dạy cho nó kí tự của biển số xe Việt Nam cũ thì nó không nhận diện được kí tự trên biển số mới vì khác hình dáng, hoặc nhận được nhưng độ chính xác không cao. Thế nên khi huấn luyện, người ta phải đưa vào nhiều loại biển, nhiều nét kí tự, nhiều font chữ… để máy nó không bị “học tủ”.

Bên dưới là hình ví dụ của một tập dữ liệu đưa vào cho máy học các kí tự khác nhau.
lpfra.std.exp0.jpg

Việc nhận diện kí tự từ hình ảnh (Optical Character Recognition - OCR) này thật ra không mới. Từ ngày xưa người ta đã xài nó rồi, mình còn nhớ Office 2003, 2007 gì đó đã có plugin để làm chuyện này. Rồi người ta cũng đã bắt đầu nghiên cứu về OCR từ đời nào, thậm chí các app di động cũng làm OCR được. Thuật toán AI hay deep learning hay machine learning chỉ đơn giản là một phương pháp để làm OCR, hiện nay nó cho độ chính xác cao và không tiêu tốn nhiều năng lực xử lý của máy tính nên đang được xài rộng rãi.

Tóm lại, hệ thống giám sát có thể lấy hình ảnh từ camera an ninh gắn trên đường → nhận diện xe vi phạm cần lấy số đăng kí → tách hình ảnh biển số của xe → nhận diện kí tự để biến số đăng kí → tra cứu số đăng kí này ở đâu, của ai, xe gì… → gửi biên bản phạt nguội 😁

Hi vọng mình đã giải thích ở bước cơ bản để các bạn hiểu. Chúc vui vẻ.
90 bình luận
Trời tối thì camera hoạt động sao ad.
@mr.olala1995 nếu khó hơn thì fô tô xớp nha Bro 😁😁
@Kemruto qtrong phạt nguội k thể thấy biển số để phạt, ban ngày thì gắn vô làm gì để nó tóm 😁 chỉ nên gắn ban đêm thôi
Hâm Đơ
ĐẠI BÀNG
10 tháng
@mr.olala1995 Trời tối phía sau không có đèn chiếu xuống thì định mệnh cho mấy đứa đi bán muối luôn cho rồi. Khỏi phạt chi cái loại sợ bị phạt hoặc sợ tốn tí tiền để gây mất an toàn giao thông.
Nói chung lại là máy cũng phải học như người, muốn AI tốt thì phải bắt nó học nhiều.
tại sao biển số mình là chấm ở số thứ 3 nhi~ XXX.XX
No.1.new
ĐẠI BÀNG
10 tháng
@Hybrid Gs Tạo cảm giác thứ tự từ 00 đến 99. Kiểu như làm cho cảm giác ăn cho đỡ ngán! 😆
18K
TÍCH CỰC
10 tháng
@Hybrid Gs À.Đây nhé bạn hiền
https://m.vietnamnet.vn/vn/oto-xe-may/y-nghia-cua-dau-cham-o-giua-bien-so-xe-5-so-476929.html
@18K để hiểu nhanh gọn hơn thì sau này full số, full mã chữ thì chỉ cần chuyển dấu chấm sang trái hoặc sang phải con số là đc. ví dụ 51A-567.89 => 51A-56.789, k cần phải chuyển sang biển 6 số. hết
Tr Thay
TÍCH CỰC
10 tháng
VN mới có kiểu phạt mới sao admin 😁
Screenshot 2020-10-02 105508.png
Việc huấn luyện máy nhận diện biển số xe cũng giống như việc huấn luyện con người gõ đúng mã captcha vậy 😁
Confusing-Captcha-Hard-to-Read-Funny-Captcha-Words.jpg
Captcha-Image-Words-Can't-Read.jpg
NatvPa
TÍCH CỰC
10 tháng
@Black Mamba Cái captcha đầu trông xoắn não vãi chưởng
@Black Mamba Bác này nói đúng nè. Tổ sư cha thằng nào nghĩ ra cái Captcha. Lắm lúc gặp hình oái oăm luôn
@Black Mamba Captcha thấy nhức não rồi nhưng AI nó vẫn học được hết.
Nên bây giờ đa số chuyển sang No-captcha rồi, là cái nhận diện bằng chọn hình ảnh đó 😂
@Black Mamba Giờ thì v3 không cần phải gõ chữ, click chuột hay chọn hình nữa rồi. Hoàn toàn thoải mái cho người dùng. Họ cũng không có biết captcha đang được nhúng nữa là.
nhận diện biển số sai dẫn đến phạt ko đúng xe, lại khổ chủ xe phải đi giải trình.
@fuaka93 thường là khi phạt người ta chụp kèm hình thực tế lúc vi phạm, bước này khả năng là có một bộ phận là con người kiểm tra lại phát nữa nên chắc ko tới nổi nhầm
@S.on.N.guyen Thực ra nhầm thì có. Nhưng toàn nhầm do mấy xe đeo biển giả, tội khổ chủ đứng tên biển thật phải đi giải trình 😁
@fuaka93 Có ảnh chụp mà 😁 lúc gửi thì con người verify lại, hoặc lỡ có gửi thì chủ xe email báo lại. Sau đó dùng chính data bị sai để dạy lại cho máy
Mấy bãi giữ xe mà xài thẻ từ thì hình như hệ thống cũng tự nhận diện biển số. Chỗ làm cũ của mình sau khi đăng kí biển số xe với tòa nhà thì cứ mỗi lần ra vô quẹt thẻ là làn tự mở, không cần có người ngồi ở đó bấm mở thủ công
18K
TÍCH CỰC
10 tháng
@huythanhnv Bữa nào bạn thử đi xe khác xong cầm thẻ đó coi sao. Như chung cư kho mình lậu được haha. Nó chỉ nhận đúng thẻ thôi chứ ko có đọc biển.
@18K Đi xe khác là đèn ngay cột báo đỏ liền á bác, xong phải trả tiền xe nguyên ngày hôm đó. Công ty mình có người bị rồi.
@huythanhnv Chắc là dùng nhận diện biển số, bước quẹt thẻ là kích hoạt cái camera nó chụp ảnh lại thôi
Thấy từ “Bảng số” nghe hợp lý với chính xác hơn “biển số”. Trước đây đi làm giấy tờ cho xe hay giao tiếp cũng chỉ nói là “Bảng số” hay là “ Bảng số xe” không hiểu vì sao mà vài năm gần đây từ “Bảng” lại bị thay bằng “ biển” !!!???
@siu nhân xanh Cầu Tràng Tiền, “Sân bay” Tân Sơn Nhất, TP.HCM, Trạm thu giá, ... tất cả đã được thay đổi để hợp miệng một số người.
@siu nhân xanh Biển số xe nta đọc từ xưa đến nay, còn như bạn nói chỉ có bạn và 1 số cá nhân với đọc là bảng chứ đúng ra chẳng có ai đọc là ''bảng số xe'' bao giờ cả, cũng có thể là do ngôn ngữ địa phương. vậy tại sao bạn k thắc mắc sao nta gọi biển báo mà k gọi là bảng báo?
tuana1191
ĐẠI BÀNG
10 tháng
50LD đôi khi nhầm thành SOLD (Sold out)
@tuana1191 60LD là GOLD đấy nhé 😁
@tuana1191 Font mới thì sẽ khí nhầm hơn đấy 😁
Thật ra mình "đoán" việc thay đổi font chữ còn nằm ở chỗ những số trên biển nếu có bị che đi một phần số do bụi bẩn, bùn bắn vào thì hệ thống vẫn có thể tự động nhận được biển một cách chính xác hơn font cũ. Cái này thì chưa chứng minh được nhưng mình nghĩ nhà nước họ đưa ra như vậy hẳn cũng có lý do chính đáng.
@gauto988 Đúng rồi bác, tỉ như biển cũ số 6,,9.0.3 dễ thành 8, ..do cố tình hoặc vô ý
@gauto988 trường hợp đặt biệt thì chắc chắn sẽ có và AI cũng chỉ giải quyết 1 phần của công việc, thay gì 1 người ngồi gõ từng số dùng AI để giải quyết những trường hợp dể nhận biết.
Còn cố tình che, tẩy xóa hay điều điện khách quang như thời tiết tầm nhìn thì con người đôi khi còn nhìn ko ra
Hay quá
Dường như 1 bước khá quan trọng là làm sao để biết được như thế nào là vi phạm?
Vi phạm sẽ có nhiều tình huống như: dừng lố vạch, dừng trên vạch người đi bộ, dừng đỗ không đúng nơi quy định, vượt đèn đỏ... làm sao hệ thống biết và phân biệt lỗi đúng với biển số xe nào... đó mới là mấu chốt của vấn đề, còn nhận diện biển số thì quá đơn giản rồi.
@Hồ Quang Dương trên camera có khả năng cảm biến khu vực, nhận diện từng xe một ( nếu kẹt xe thì thua), đồng thời nó có thể lặp trình để hoạt động đồng bộ với đèn tín hiệu.
VD : khi đèn đỏ, khu vực từ vạch người đi bộ qua giữa giao lộ sẽ là khu cấm, xe nào nào từ hướng đèn chạy qua thì nó chụp lại.
Hoặc là khu vực cấm đậu xe, xe nào dừng quá 1p hay 5p gì đó thì nó chụp lại
Hình này là cảm biến biển số để tự mua vé qua trạm thu phí, nó hoạt động cũng giống vậy
727_Anh.jpg
@S.on.N.guyen Kẹt xe nó vẫn nhận được chứ 😁 tuỳ setup thế nào thôi
@Duy Luân Mình nghĩ nếu đông xe thì ko sao chứ xẹt xe theo kiểu leo lề hay kẹt cứng ở ngã tư mà ko có người kiểm xoát để nó chạy tự động thì 1 là bản số bị che nhiều 2 ko nhận diện hoặc nhận diện ko đúng. Dương nhiên là có setup theo từng tình huống thì vẫn ok hơn.
@S.on.N.guyen À kẹt cứng kiểu đó thì người còn không nhìn được haha, mà mấy lúc đó chắc nó sẽ off, người nhảy vô điều khiển
Huy Iron
ĐẠI BÀNG
10 tháng
đang bí idea luận văn ai cho em xin idea với ạ 😔((
@Huy Iron Sử dụng camera AI để phát hiện và truy vết người nhiễm covid 19 hâhhaha
betalu
ĐẠI BÀNG
10 tháng
@Huy Iron Ít nhất cũng phải nói chuyên ngành gì mới gợi ý đc chứ 🤔
Huy Iron
ĐẠI BÀNG
10 tháng
@betalu Điều khiển và tự động hóa ạ
Huy Iron
ĐẠI BÀNG
10 tháng
@Duy Luân 😆😆😆
@Huy Iron Làm cái giống Amazon hoặc alibaba fulfillment là zong. Dễ mà
Sau nay nên dùng chip để loại bỏ vấn nạn biển giả hoặc che biển tránh phạt nguội.
Chụp phát thấy ngay
Cảm ơn mod. Xin bổ sung thêm bài viết một chút.

* việc làm blur ảnh (low-pass filter) là để lọc đi những outlier, hoặc noise trong bức ảnh, giúp cải thiện độ chính xác. ( Trong nhiều thuật toán, có thể sau khi làm mờ để loại bỏ outlier, sẽ làm nét trở lại).

* việc chuyển về grey-scale là để giảm từ 3 kênh màu thành 1 kênh màu duy nhất ( thực sự vẫn là 3 kênh màu, nhưng các kênh đều có giá trị bằng nhau ==> chỉ lấy 1 kênh xử lý là đủ). Trong bài toán nhận diện chữ viết thì việc chuyển đổi này không hề làm giảm độ chính xác, mà còn giúp xử lý nhanh hơn.

* với các thuật toán hiện nay, bạn chỉ cần cho nó học 1 font chữ, nó có thể nhận diện các font chữ khác nếu 2 font chữ này không quá khác biệt (tuỳ thuộc vào cách mình "chọn" features như thế nào cho hiệu quả) chứ không nhất thiết dạy sao thì chỉ nhận diện được như vậy. Nguyên lý cơ bản là, dựa vào kiến thức đã học, nó sẽ cố gắng calibrate các kiểu, xem thử có giống với hình ảnh đang test hay không (hoặc ngược lại)
huy639
ĐẠI BÀNG
10 tháng
@Nguoi tinh nguyen Em thấy điểm quan trọng là số lượng mẫu học càng lớn thì càng giảm tỉ lệ lỗi, với một phần là khả năng tự gán nhãn với tự bổ sung mẫu học. Ngày càng giảm lỗi chứ em không giám nói là càng chính xác 😂
Xin giới thiệu với ae 1 bài tập lớn Nhận dạng biển số xe của mình ngày xửa ngày xưa: https://github.com/hoangkianh/ANPR2. Ae có gì khó hiểu mình sẽ giải thích vì đây là bộ môn ưa thích của mình hồi còn học ĐH 😁
@hoangkianh31592 6 năm rồi haha
@Duy Luân lâu lắm r bác, h vẫn thỉnh thoảng có các e khóa sau hỏi 😆
@hoangkianh31592 Nhìn vẫn ngon bác ơi 😁


Tải app Tinh tế

Tải app Tinhte - Theo dõi thông tin mà bạn yêu thích

Tải app TinhteTải app Tinhte
Tải app Tinh tế cho Android trên Google PlayTải app Tinh tế cho iPhone, iPad trên App Store





Đang theo dõi




  • Chịu trách nhiệm nội dung: Trần Mạnh Hiệp
  • © 2021 Công ty Cổ phần MXH Tinh Tế
  • Địa chỉ: 209 Đường Nam Kỳ Khởi Nghĩa, Phường 7, Quận 3, TP.HCM
  • Số điện thoại: 02862713156
  • MST: 0313255119
  • Giấy phép thiết lập MXH số 11/GP-BTTTT, Ký ngày: 08/01/2019