MỞ ĐẦUVấn đề nhận dạng nói chung và nhận dạng biển số xe nói riêng là bài toán thu hút được sự quan tâm nghiên cứu của nhiều nhà khoa học trên thế giới, đặc biệt là trong những
Trang 1BÁO CÁO BÀI TẬP LỚN ANDROID ĐỀ TÀI: XÂY DỰNG CHƯƠNG TRÌNH NHẬN DẠNG BIỂN SỐ
XE MÁY VÀ XE Ô TÔ
Giảng viên hướng dẫn:Ts.Nguyễn Hồng Quang
Sinh viên thực hiện: Trần Văn Tâm
MSSV:20102124
Lớp: Điện tử 6-K55
TP.Hà Nội,tháng 12 năm 2014
Trang 2MỞ ĐẦU
Vấn đề nhận dạng nói chung và nhận dạng biển số xe nói riêng là bài toán thu hút được sự quan tâm nghiên cứu của nhiều nhà khoa học trên thế giới, đặc biệt là trong những năm gần đây khi các thiết bị di động như điện thoại di động, máy tính bảng ra đời và phổ biến, công với nhu cầu thiết thực hỗ trợ giải quyết vấn đề trong đời sống như tự động hóa trong các bãi giữ xe,trạm cân, rửa xe hay kiểm soát lưu lượng, kiểm soát an ninh
Nội dung báo cáo trình bày về nhận dạng biển số xe sử dụng mô hình mạng neural với ứng dụngtrên hệ điều hành Android Hướng tiếp cận dựa trên diện mạo, dùng bộ phân loại mạnh
AdaBoots – là sự kết hợp của các bộ phân loại yếu dựa trên các đặc trưng Haar-like – để phát hiện vùng chứa biển số, phương pháp hình thái học để tiến hành thực hiện phân tách kí tự và nhận dạng kí tự bằng phương pháp được sử dụng phổ biến nhất là mạng neural (neural network) Hệ thống đã được thử nghiệm trên thực tế, trong môi trường đủ sáng, thiếu sáng với mẫu nhận dạng đứng yên bước đầu cho kết quả tốt
Từ khóa: neural network, android, automatic number plate recognition, ANPR, Kohonen
network
Trang 3MỤC LỤC
I Hệ thống nhận dạng biển số ……….5
1.Phát hiện vùng chứa biển số xe………5
1.1 Đặc trưng Haar-like………6
1.2 AdaBoost………8
1.3 Hệ thống xác định vùng chứa biển số xe………10
1.4 Huấn luyện bộ phân loại……….11
2.Tách kí tự………14
2.1 Chuẩn hóa kích thước ảnh……… 14
2.2 Chuyển đổi ảnh màu về ảnh xám……….15
2.3 Tăng tính tương phản bằng thuật toán cân bằng hóa lược đồ xám………… 16
2.4 Xác định ngưỡng, nhị phân hóa ảnh………17
2.5 Tìm biên, xác định các đường viền (contour) của ảnh nhị phân……….18
2.6 Tách kí tự dựa trên đặc tính hình thái học……… 19
3 Nhận dạng kí tự……… 20
3.1 Mạng neural sinh học……… 20
3.2 Mạng neural nhân tạo……… 21
3.3 Mạng neural Kohonen……….22
3.4 Ánh xạ ma trận điểm ảnh vào ma trận giá trị……… 25
4 Tổng kết……….26
II.Hiện thực hệ thống nhận dạng biển số xe trên android smartphone……….27
1.Tính năng của ứng dụng……….27
Trang 42.Cấu trúc ứng dụng………28
2.1 Các lớp trong ứng dụng……….28
2.2 Chương trình huấn luyện mạng Kohonen……….29
2.3 Hiệu chỉnh kết quả dựa trên cú pháp……… 30
3.Tổng kết chương……… 30 Tài liệu tham khảo
Trang 5I.Hệ thống nhận dạng biển số
Yêu cầu của hệ thống:
Thu thập hình ảnh từ camera
Thực hiện ghi mẫu biển số xe
Nhận dạng biển số xe
Trong đó chức năng quan trọng nhất là nhận dạng biển số.Chức năng nhận dạng biển số thường được hiện thực bằng cách giải quyết riêng rẽ ba bài toán nhỏ hơn đó là phát hiện vùng chứa biển
số, tách kí tự và nhận dạng kí tự
1 Phát hiện vùng chứa biển số xe
Đây là bước đầu tiên và khó khăn nhất quyết định tới kết quả của toàn bộ hệ thống Mục đích củabước này là trích ra được vùng nhỏ nhất chứa biển số từ ảnh thu được từ camera của điện thoại
Có nhiều phương pháp tiếp cận để thực hiện được nhiệm vụ này nhưng tất cả đều có thể qui về 3 phương pháp chính sau đây:
Phương pháp dùng chuyển đổi Hough: dựa vào đặc trưng cạnh biên, áp dụng các phương pháp xác định đường thẳng như phép biến đổi Hough để phát hiện các cặp đường thẳng gần song song ghép thành một ảnh biển số
Phương pháp hình thái học: dựa vào đặc trưng hình thái của biển số xe như màu sắc, độ sang, sự đối xứng để xác định và trích ra ảnh biển số
Phương pháp khớp mẫu: xem biển số là một đối tượng có khung nền riêng và sử dụng cáccửa sổ dò để trích từng đối tượng đưa qua mạng noron (neural network), trí tuệ nhân tạo (artificial intelligence) để phân loại có phải là vùng biển số hay không
Trong bài làm của mình em sử dụng hướng tiếp cận dựa trên diện mạo, dùng bộ phân loạimạnh AdaBoost - là sự kết hợp của các bộ phân loại yếu dựa trên các đặc trưng Haar-like - để phát hiện vùng chứa biển số Phương pháp này được đánh giá là khá đơn giản, nhưng mang lại kết quả phát hiện tương đối cao.Phương pháp được cài đặt dựa trên bộ thư viện mã nguồn mở openCV
Trang 61.1 Đặc trưng Haar-like
Do Viola và Jones công bố năm 2001 [16], gồm 4 đặc trưng cơ bản để xác định đối tượng Mỗi đặc trưng Haa-like là sự kết hợp của hai hay ba hình chữ nhật “trắng” hay “đen” Để sử dụng cácđặc trưng này vào việc xác định những đối tượng tương đối phức tạp, 4 đặc trưng Haar-like cơ bản được mở rộng thêm thành tập đặc trưng cơ bản sau:
Hình 1.1 Các dạng cơ bản của đặc trưng Haar-likeDùng các đặc trưng trên, ta có thể tính được giá trị của đặc trưng Haar-like là sự chênh lệch giữa tổng của các pixel của các vùng đen và các vùng trắng như trong công thức sau:
Sử dụng giá trị này, so sánh với các giá trị của các giá trị pixel thô, các đặc trưng like có thể tăng/giảm sự thay đổi in-class/out-of-class (bên trong hay bên ngoài lớp khuôn mặt người), do đó sẽ làm cho bộ phân loại dễ hơn
Haar-Như vậy có thể thấy rằng, để tính các giá trị của đặc trưng Haar-like, ta phải tính tổng của các vùng pixel trên ảnh Nhưng để tính toán các giá trị của các đặc trưng Haar-like cho tất cả các vị trí trên ảnh đòi hỏi chi phí tính toán khá lớn, không đáp ứng được cho các ứng dụng đòi hỏi tính run-time Do đó Viola và Jones đưa ra một khái niệm gọi là Integral Image, là một mảng 2 chiều
Trang 7với kích thước bằng với kích của ảnh cần tính các đặc trưng Haar-like, với mỗi phần tử của mảngnày được tính bằng cách tính tổng của điểm ảnh phía trên (dòng-1) và bên trái (cột-1) của nó Bắtđầu từ vị trí trên, bên trái đến vị trí dưới, phải của ảnh, việc tính toán này đơn thuần chỉ đựa trên phép cộng số nguyên đơn giản, do đó tốc độ thực hiện rất nhanh.
đó trên ảnh thực hiện rất đơn giản theo cách sau:
Giả sử ta cần tính tổng các giá trị mức xám của vùng D như trong hình 3.3, ta có thể tính như sau:
D = A + B + C + D – (A + B) – (A + C ) + A (1.3)Với A + B + C + D chính là giá trị tại điểm P4 trên Integral Image, tương tự như vậy A +
B là giá trị tại điểm P2, A + C là giá trị tại điểm P3, và A là giá trị tại điểm P1 Vậy ta có thể viết lại biểu thức tính D ở trên như sau:
Trang 8Hình1.3Ví dụ cách tính nhanh các giá trị mức xám của vùng D trên ảnh
Tiếp theo, để chọn các đặc trưng Haar-like dùng cho việc thiết lập ngưỡng, Viola và Jones sử dụng một phương pháp máy học được gọi là AdaBoost AdaBoost sẽ kết hợp các bộ phân loại yếu để tạo thành một bộ phân loại mạnh Với bộ phân loại yếu chỉ cho ra câu trả lời chính xác chỉ hơn việc đoán một cách ngẫn nhiên một chút, còn bộ phân loại mạnh có thể đưa ra câu trả lời chính xác trên 60%
1.2 AdaBoost
AdaBoost là một bộ phân loại mạnh phi tuyến phức dựa trên hướng tiếp cận boosting được Freund và Schapire đưa ra vào năm 1995 Adaboost cũng hoạt động trên nguyên tắc kết hợp tuyến tính các weak classifiers để hình thành một strong classifier
Là một cải tiến của tiếp cận boosting, AdaBoost sử dụng thêm khái niệm trọng số (weight) để đánh dấu các mẫu khó nhận dạng Trong quá trình huấn luyện, cứ mỗi weak classifiers được xây dựng, thuật toán sẽ tiến hành cập nhật lại trọng số để chuẩn bị cho việc xây dựng weak classifier
kế tiếp: tăng trọng số của các mẫu bị nhận dạng sai và giảm trọng số của các mẫu được nhận dạng đúng bởi weak classifier vừa xây dựng Bằng cách này weak classifer sau có thể tập trung vào các mẫu mà các weak classifiers trước nó làm chưa tốt Sau cùng, các weak classifers sẽ được kết hợp tùy theo mức độ tốt của chúng để tạo nên strong classifier
Viola và Jones dùng AdaBoost kết hợp các bộ phân loại yếu sử dụng các đặc trưng Haar-like theo mô hình phân tầng (cascade) như sau:
Trang 9Hình 1.4 Mô hình phân tầng kết hợp các bộ phân loại yếu để xác định biển số
Trong đó, h k là các bộ phân loại yếu, được biểu diễn như sau:
h k = {1n ´ê u p k f k ( x )< p k θ k
0 ngư ´ơ c lai (3.5)
x: cửa sổ con cần xét
θ k: ngưỡng (θ = theta)
f k:giá trị của đặc trưng Haar-like
p k: hệ số quyết định chiều của phương trình
AdaBoost sẽ kết hợp các bộ phân loại yếu thành bộ phân loại mạnh như sau:
H(x) = sign ( a 1 h 1 (x) + a 2 h 2 (x) +…+ a n h n (x)) (a= alpha) (3.6)
với: a ≥ 0 là hệ số chuẩn hoá cho các bộ phân loại yếu
Hình 1.5 Kết hợp các bộ phân loại yếu thành bộ phân loại mạnh
Trang 101.3 Hệ thống xác định vùng chứa biển số xe
Hình 1.6 Hệ thống xác định vùng chứa biển số xe
Như trong hình 1.6, từ ảnh gốc ban đầu, tính Integral Image, là mảng 2 chiều với phần tử (x; y)
sẽ được tính bằng tổng của các phần tử (x′; y′) với x′< x và y′< y, mục đích là để tính nhanh tổng của các giá trị mức xám của một vùng hình chữ nhật bất kỳ trên ảnh gốc Các vùng ảnh con này
sẽ được đưa qua các hàm Haar cơ bản để ước lượng đặc trưng, kết quả ước lượng sẽ được đưa qua bộ điều chỉnh AdaBoost để loại bỏ nhanh các đặc trưng không có khả năng là đặc trưng của biển số xe Chỉ có một tập nhỏ các đặc trưng mà bộ điều chỉnh AdaBoost cho là có khả năng là đặc trưng của biển số xe mới được chuyển sang cho bộ quyết định kết quả (là tập các bộ phân loại yếu có cấu trúc như trong hình 1.4) Bộ quyết định sẽ tổng hợp kết quả là biển số xe nếu kết quả của các bộ phân loại yếu trả về là biển số xe
Trang 11Mỗi bộ phân loại yếu sẽ quyết định kết quả cho một đặc trưng Haar-like, được xác định ngưỡng
đủ nhỏ sao cho có thể vượt được tất cả các bộ dữ liệu mẫu trong tập dữ liệu huấn luyện (số lượngảnh biển số xe trong tập huấn luyện là rất lớn) Trong quá trình xác định vùng chứa biển số xe, mỗi vùng ảnh con sẽ được kiểm tra với các đặc trưng trong chuỗi các đặc trưng Haar-like, nếu cómột đặc trưng Haar-like nào cho ra kết quả là biển số xe thì các đặc trưng khác không cần xét nữa Thứ tự xét các đặc trưng trong chuỗi các đặc trưng Haar-like sẽ được dựa vào trọng số (weight) của đặc trưng đó do AdaBoost quyết định dựa vào số lần và thứ tự xuất hiện của các đặctrưng Haar-like
1.4 Huấn luyện bộ phân loại
Để có thể nhận dạng biển số xe theo phương pháp tiếp cận dựa trên diện mạo đã trình bày tại phần trên, trước hết cần thực hiện huấn luyện bộ phân loại dùng cho quá trình nhận dạng Nhiệm
vụ huấn luyện bộ phân loại thực sự là một thử thách bởi như đã đề cập tại phần trước quá trình này yêu cầu một tập dữ liệu mẫu rất lớn, nên tiêu tốn rất nhiều thời gian và công sức Có thể chiaquá trình huấn luyện bộ phân loại làm 2 bước chính:
ý không chứa đối tượng cần nhận dạng Tất cả những bức ảnh này được liệt kê trong một file miêu tả dưới dạng plain-text, ứng với mỗi dòng trong file miêu tả này sẽ là một bức ảnh
Em sử dụng 3000 file ảnh trích từ bộ phim Step Up Revolution làm tập mẫu Negative
Mẫu positive là tập những bức ảnh chứa đối tượng cần nhận dạng, một bức ảnh có thể chứa một hoặc nhiều đối tượng File miêu tả của tập mẫu positive cũng là một file plain-text, mỗi dòng sẽ chứa tương ứng với một file ảnh, tiếp sau đó là số lượng đối tượng cần nhận dạng có trong bức ảnh, tiếp sau đó là tọa độ x, y tương ứng của mỗi đối tượng đó Khóa luận sử dụng 2000 bức ảnh
Trang 12chứa biển số làm tập mẫu positive Những bức ảnh này được được thu thập (quay và chụp) trong vòng 4 ngày tại nhiều địa điểm của thành phố Hồ Chí Minh, với những điều kiện, thời gian khác nhau.Bước tiếp theo sau khi đã có được file miêu tả của tập mẫu negative và positive là phải tạo bộ mẫu input cho quá trình huấn luyện Để thực hiện điều này, ta sử dụng tiện ích
opencv_createsamples được cung cấp sẵn trong thư viện nguồn mở OpenCV
Các tùy chọn của tiện ích opencv_createsamples:
Trang 13opencv_createsamples.exe -info positive/ positive.txt -vec data/vector.vec -num 2000 -w 55-h 40-info positive/ positive.txt: đường dẫn file miêu tả của tập mẫu positive
-vec data/vector.vec: đường dẫn file output sẽ được tạo ra sau quá trình tạo mẫu
-num 2000: số lượng mẫu là 2000 như đã đề cập
-w 55 -h 40: kích thước của mỗi mẫu sẽ được tạo ra, theo đúng với tỷ lệ của biển số xe(140x190)Sau khi tạo ra file mẫu dưới dạng vector, mọi thứ đã sẵn sàng để chuyển qua bước kế tiếp đó là huấn luyện
Huấn luyện
Đây là bước cuối cùng của quá trình huấn luyện nhưng cũng là bước yêu cầu nhiều thời gian nhất Mất 6 ngày chạy liên tục để hoàn thành bước này trên một máy tính tương đối mạnh Trongsuốt quá trình thực thi, hiệu suất của CPU được tận dụng tối đa, luôn trong tình trạng 100% đang sử dụng Tiện ích opencv_traincascade được sử dụng trong bước này để hoàn tất quá trình huấn luyện Cú pháp sử dụng:
opencv_traincascade.exe -data data/cascade -vec data/vector.vec -bg negative/infofile.txt
numPos 2000 -numNeg 2999 -numStages 20 -mode ALL -w 55 -h 40
-data data/cascade: đường dẫn để lưu kết quả của quá trình huấn luyện
-vec data/vector.vec: đường dẫn file vector được tạo ra trong bước chuẩn bị mẫu từ tập mẫu positive
-bg negative/infofile.txt: đường dẫn file miêu tả của tập mẫu negative
-numPos 2000: số lượng file ảnh của tập mẫu positive
-numNeg 2999: số lượng file ảnh của tập mẫu negative
-numStages 20: số stage mong muốn
-mode ALL: chế độ ALL sẽ sử dụng tất cả các dạng (kể cả mở rộng) của đặc trưng Haar-like
Trang 14-w 55 -h 40: kích thước của tập mẫu
Sau khi hoàn tất quá trình huấn luyện này, ta sẽ thu được bộ phân loại dưới dạng một file xml dành cho quá trình nhận dạng
2.Tách kí tự
Sau khi đã phát hiện được vùng chứa biển số, bài toán tiếp theo cần phải giải quyết là phân tách được từng kí tự trên vùng biển số đã thu được, điều này mang lại thuận lợi rất lớn cho bước cuối cùng của hệ thống, nhận dạng kí tự
Có rất nhiều phương pháp có thể áp dụng để thực hiện nhiệm vụ này Có thể kể ra ở đây như táchtĩnh, lượng tử hóa vector (vector quantization), lược đồ chiếu ngang và dọc (vertical and
horizontal projection), mạng noron (neural network), trí tuệ nhân tạo (AI), hình thái học
(morphology) Khóa luận này đã lựa chọn phương pháp hình thái học để tiến hành thực hiện phân tách kí tự
Mỗi một kí tự trên biển số sẽ là một đối tượng có đặc điểm hình thái học cụ thể như là chiều cao,chiều rộng, tỉ lệ 2 chiều biến đổi tương đối ít (nếu ảnh chứa vùng biển số đã được đưa về cùng một kích cỡ) mà dựa vào đó ta có thể tách ra được cụ thể từng kí tự riêng rẽ Từ đó ra có thuật toán tách kí tự từ ảnh chứa vùng biển số đã thu được như sau:
1 Chuẩn hóa kích thước ảnh
2 Chuyển đổi ảnh màu về ảnh xám
3 Tăng cao tính tương phản bằng thuật toán cân bằng lược đồ xám
4 Xác định ngưỡng, nhị phân hóa ảnh
5 Tìm biên, xác định các đường viền (contour) của ảnh nhị phân
6 Tách kí tự dựa trên đặc tính về hình thái học
2.1Chuẩn hóa kích thước ảnh
Đây là khâu đầu tiên và cũng là đơn giản nhất của thuật toán, chuẩn hóa kích thước ảnh khiến độ chênh lệch giữa kí tự trên các biển số khác nhau giảm xuống làm cho việc tách kí tự dựa trên đặctính hình thái học trở nên chính xác hơn Và việc chuẩn hóa kích thước ảnh ở đâu thực tế chỉ đơngiản là thực hiện thay đổi (resize), đưa ảnh về cùng một phân giải đã chọn trước,
Trang 15chọn kích thước này là 680x492 (đây cũng chính là tỷ lệ của một biển số).
Có 5 phương thức chính để thực hiện việc thay đổi kích thước ảnh:
INTER_NEAREST nearest-neighbor interpolation
INTER_LINEAR bilinear interpolation
INTER_AREA area interpolation
INTER_CUBIC bicubic interpolation
INTER_LANCZOS4 Lanczos interpolation
Hình 1.7Qua thực nghiệm, thấy rằng phương thức INTER_NEAREST là phương thức đơn giản và tốc độ thực thi nhanh nhất, nhưng không đảm bảo chất lượng ảnh Bốn phương thức còn lại mang lại kết quả tương đối tốt và khá giống nhau nên khóa luận quyết định chọn phương thức
INTER_LINEAR do nó đảm bảo được chất lượng ảnh sau khi resize và tốc độ nhanh hơn các phương thức còn lại (không kể INTER_NEAREST)
2.2 Chuyển đổi ảnh màu về ảnh xám
Do khâu xác định ngưỡng và nhị phân hóa ảnh chỉ thực hiện được đối với một bức ảnh đơn kênh (single channel) nên ở bước này của thuật toán, khóa luận lại thực hiện một bước biến đổi đơn