BÁ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
1
MỞ ĐẦ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ụng
trê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.
2
3. Tổng kết chương……………………………………………………………………..30
Tài liệu tham khảo
4
I.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ủa
bướ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
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 Haarlike 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.
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
vớ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ảng
nà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
6
đầ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.
P(x,y) =
(1.2)
Hình 1.2 Cách tính Integral Image của ảnh
Sau khi đã tính được Integral Image, việc tính tổng các giá trị mức xám của một vùng bất kỳ nào
đó 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:
Hì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 đó, hk là các bộ phân loại yếu, được biểu diễn như sau:
hk =
(3.5)
x: cửa sổ con cần xét
: ngưỡng (θ = theta)
fk: giá trị của đặc trưng Haar-like
pk: 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 ( a1h1(x) + a2h2(x) +…+ anhn(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
9
1.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
negative là tập những bức ảnh không chứa đối tượng cần nhận dạng, ngược lại mẫu positive là
tập những bức ảnh chứa đối tượng cần nhận dạng. Mẫu negative được lấy từ những bức ảnh tùy
ý 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
chứ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
11
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:
./opencv_createsamples
-info <description_file_name>
-img <image_file_name>
-vec <vec_file_name>
-bg <background_file_name>
-num <number_of_samples = 1000>
-bgcolor <background_color = 0>
-inv -randinv -bgthresh <background_color_threshold = 80>
-maxidev <max_intensity_deviation = 40>
-maxxangle <max_x_rotation_angle = 1.100000>
-maxyangle <max_y_rotation_angle = 1.100000>
-maxzangle <max_z_rotation_angle = 0.500000>
-w 55 -h 40: kích thước của tập mẫu
13
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ách
tĩ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.
2.
3.
4.
5.
6.
Chuẩn hóa kích thước ảnh.
Chuyển đổi ảnh màu về ảnh xám
Tăng cao tính tương phản bằng thuật toán cân bằng lược đồ xám.
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
giản nữa đó là chuyển đổi ảnh vùng chứa biển số (sau khi đã chuẩn hóa kích thước) từ ảnh màu
(3 channels) sang ảnh xám (grayscale - còn gọi là ảnh trắng đen, 1 channel).
Một bức ảnh màu thường được dựng bằng cách xếp chồng cách kênh màu lên nhau. Ví dụ một
bức ảnh RGB được hợp thành bởi 3 kênh màu riêng rẽ, kênh đỏ (red), kênh xanh lá cây (green),
15
và kênh xanh dương (blue); còn một bức ảnh CMYK sẽ gồm 4 kênh đó là màu lục lam (cyan),
đỏ tươi (magenta), màu vàng (yellow) và màu đen (black) . . .
Đối với hệ màu RGB hoặc RBG, việc chuyển đổi sang đen trắng được thực hiện một cách đơn
giản bằng cách độ sáng (luminance) trên từng pixel của ảnh qua công thức sau:
Y′= 0.2126R + 0.7152G + 0.0722B
Hình 1.8
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
Cân bằng lược đồ xám (histogram equalization) là một phương pháp chung dùng để điều chỉnh
mức độ tương phản của ảnh. Đôi khi những chủ thể chính cần quan tâm xử lý (các kí tự) và
phông nền (nền biển số) có độ tương phản không cao bởi nhiều yếu tố như chữ bị mờ, bóng nắng
gây khó khăn cho quá trình xử lý tiếp theo, nên khóa luận áp dụng phương pháp này để cải thiện
độ tương phản cho bức ảnh.
Hình 1.9
2.4 Xác định ngưỡng, nhị phân hóa ảnh
hóa được một bức ảnh theo cách trên sẽ tốn rất nhiều thời gian, đặc biệt là đối với những cửa sổ
có kích thước lớn. Để tránh hiện tượng này, phải dùng tới cách tính Integral Image đã được nhắc
tới trong phần trình bày về đặc trưng Haar-like.
Hình 1.11
2.5 Tìm biên, xác định các đường viền (contour) của ảnh nhị phân
Biên ảnh là những điểm mà tại đó hàm độ sáng của ảnh liên tục có bước nhảy hoặc biến thiên
nhanh. Cơ sở toán học của việc phát hiện và tách biên là phép toán đạo hàm, phương pháp này
còn được gọi là phương pháp phát hiện biên trực tiếp. Tập hợp các điểm biên tạo thành đường
biên (edge) hay đường bao (boundary) của ảnh. Ví dụ trong một ảnh nhị phân một điểm có thể
được gọi là biên nếu đó là điểm đen và có ít nhất một điểm trắng lân cận. Biên ảnh thường được
dùng để phân vùng ảnh, và trong khóa luận sẽ dựa vào biên ảnh để xác định các kí tự trên vùng
chứa biển số do trong biển số sau khi đã nhị phân hóa các kí tự là màu trắng nằm trên nền đen rất
rõ ràng.
Có rất nhiều phương pháp để thực hiện việc tìm biên này như sử dụng bộ tách biên Canny,
Laplacian . . . việc tìm biên nhờ hoàn toàn vào tính năng đã được hiện thực hóa trong thư viện
OpenCV.
18
Hình 1.12
2.6 Tách kí tư dưa trên đặc tính hình thái học
Dựa vào các đường viền liền mạch đã tìm được từ bước trước và đặc tính về hình thái học của
các kí tự trên biển số sau khi đã được chuẩn hóa kích thước, cụ thể:
1.5 ≤ Chiều cao / chiều rộng ≤ 3.0
Diện tích (Chiều cao*chiều rộng) ≥5000
Hình 1.15. Mạng neural sinh học
3.2 Mạng neural nhân tạo
Mạng neural nhân tạo là một bộ xử lý phân tán song song được cấu tạo bởi các đơn vị xử lý đơn
giản, có chức năng lưu trữ những tri thức kinh nghiệm và cho phép sử dụng những tri thức này.
Mạng neural mô phỏng bộ não người theo hai khía cạnh sau:
Tri thức được thu thập bởi mạng neural trong môi trường hoạt động thông qua một quá
trình học (hay còn gọi là huấn luyện).
Trọng số của liên kết giữa các đơn vị xử lý được dùng để lưu trữ những tri thức thu thập
được.
Quá trình học được thực hiện bởi một thuật toán học. Thuật toán này sẽ làm thay đổi trọng số
liên kết giữa các đơn vị xử lý để đạt được mục tiêu thiết kế. Mạng neural nhân tạo được xây
dựng dựa trên các mô hình toán học mô phỏng hoạt động của những yếu tố chính trong mạng
neural sinh học (dendrite, soma, axon). Hoạt động của mạng neural nhân tạo có những tính chất
sau:
- Quá trình xử lý thông tin xảy ra tại mỗi đơn vị của mạng, gọi là neural.
- Các neural được liên kết với nhau.
- Mỗi liên kết của các neural đều có một trọng số. Trọng số này đặc trưng cho bài toán
được biểu diễn bởi mạng. Khi nhận được thông tin đầu vào, các đầu vào sẽ được nhân với các
trọng số tương ứng, sau đó được cộng lại để cho một giá trị gọi là net.
- Mỗi neural đề có một hàm kích hoạt (activation function), hàm này có chức năng tính
toán đầu ra cho neural dựa vào giá trị net đã nêu ở trên.
Đặc trưng của một mạng neural nhân tạo bao gồm:
- Mô hình kết nối giữa các neural trong mạng với nhau hay còn gọi là kiến trúc của mạng.
- Cách thức xác định trọng số của các liên kết trong mạng.
Quá trình học của mạng Kohonen
Toàn bộ quá trình huấn luyện cho một mạng neural Kohonen cần phải lặp lại qua vài công đoạn.
Nếu sai số đã tính toán của mạng neural Kohonen ở mức thấp hơn mức có thể chấp nhận được
thì sẽ hoàn tất quá trình huấn luyện. Quá trình huấn luyện cho mạng neural Kohonen là huấn
luyện cạnh tranh nên mỗi tập huấn luyện sẽ có một neuron thắng. Neuron thắng này sẽ có trọng
số được điều chỉnh sao cho ngay lập tức nó sẽ tác động trở lại mạnh mẽ hơn trong dữ liệu đầu
vào ở lần tiếp theo. Sự khác nhau giữa các neuron thắng sẽ dẫn tới sự khác nhau giữa các mẫu
đầu vào tiếp theo.
23
Hình 1.18 Sơ đồ khối biểu diễn huấn luyện mạng neural Kohonen.
24
3.4 Ánh xạ ma trận điểm ảnh vào ma trận giá trị
Muốn sử dụng mạng Kohonen để nhận dạng kí tự, bước đầu tiên là ta phải ánh xạ ảnh của kí tự
vào một ma trận nhị phân hai chiều tương ứng. Một việc rất quan trọng ở đây là việc quyết định
kích cỡ của ma trận. Nếu các điểm ảnh của kí tự được ánh xạ vào ma trận quá nhỏ, sẽ không biểu
diễn được đặc trưng của các kí tự, còn nếu ma trận quá lớn, có thể dẫn đến việc xử lý ma trận
gặp khó khăn. Qua thực nghiệm, để cho cân bằng hợp lý, khóa luận chọn kích cỡ của ma trận là
20x50 với 1000 phần tử. Đây cũng chính là số neuron lớp input của mạng Kohonen sẽ được sử
dụng.
Thuật toán downsampling:
- Bước 1: Khởi tại ma trận kích thước 20x50.
- Bước 2 : Xác định tỉ lệ tương ứng chiều rộng, chiều dài giữa ma trận điểm ảnh của ảnh kí tự và
ma trận 20x50.
- Bước 3 : Ánh xạ tương ứng từng vùng ma trận điểm ảnh của kí tự vào ma trận 20x50 thông qua