Tải bản đầy đủ

BAO CAO BAI TAP ANDROID

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


MỤ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
3


2. 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

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



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ác
cử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ại

mạ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.

5


1.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-like
Dù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:
F(x) = (1.1)

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:
D= ‒ ‒ +

(1.4)

Hình1.3Ví dụ cách tính nhanh các giá trị mức xám của vùng D trên ảnh
7


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:

8


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
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.
10


Mỗ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 đặc
trư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ể chia
quá trình huấn luyện bộ phân loại làm 2 bước chính:



Chuẩn bị mẫu
Huấn luyện

Chuẩn bị mẫu
Quá trình huấn luyện yêu cầu hai tập dữ liệu mẫu (sample) đó là: positive và negative. Mẫu
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
-img
-vec
-bg
-num
-bgcolor
-inv -randinv -bgthresh
-maxidev
-maxxangle
-maxyangle
-maxzangle
-show
-w
-h
Sử dụng opencv_createsamples với cú pháp sau:
opencv_createsamples.exe -info positive/ positive.txt -vec data/vector.vec -num 2000 -w 55-h 40
12


-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. Trong
suố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
-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.
Xác định ngưỡng, nhị phân hóa ảnh.
Tìm biên, xác định các đường viền (contour) của ảnh nhị phân
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 đặc
tí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ỉ đơn
giản là thực hiện thay đổi (resize), đưa ảnh về cùng một phân giải đã chọn trước,
chọ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:
14








INTER_NEAREST nearest-neighbor interpolation
INTER_LINEAR bilinear interpolation
INTER_AREA area interpolation
INTER_CUBIC bicubic interpolation
INTER_LANCZOS4 Lanczos interpolation

Hình 1.7
Qua 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
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

16


Nhị phân hóa là quá trình biến đổi một ảnh xám thành một ảnh nhị phân. Ảnh nhị phân chỉ chứa
hai giá trị 0 hoặc 1 (hoặc 0 và 255 tùy theo quy định của cấu trúc ảnh). Theo đó, giá trị 0 sẽ là giá
trị ứng với những điểm đen trên ảnh và giá trị 1 (hoặc 255) sẽ là giá trị ứng với những điểm
trắng.
Nhị phân hóa ảnh thường được thực hiện bằng phương thức phân ngưỡng (Thresholding). Công
thức phân ngưỡng là đặt tất cả các giá trị của ảnh xám về 0 nếu chúng bé hơn một ngưỡng T cho
trước và về 255 nếu chúng lớn hơn ngưỡng T đó. Vấn đề ở đây là với ngưỡng T như thế nào thì
cho ta được tấm ảnh nhị phân như ý muốn, nghĩa là ảnh làm nổi các vùng đối tượng và nền. Việc
xác định giá trị T là rất khó vì chúng phụ thuộc vào từng điều kiện chiếu sáng khác nhau của môi
trường. Với môi trường này T nhận một giá trị, môi trường khác lại một giá trị khác. Kiểm
nghiệm thực tế đã xác định được rằng không thể sử dụng một ngưỡng chung để nhị phân hóa các
bức hình chứa vùng biển số thu được.
Để giải quyết vấn đề này, khóa luận lựa chọn dùng phương pháp lấy ngưỡng động hay còn gọi là
ngưỡng thích nghi (adaptive thresholding). Phương pháp này giúp nhị phân hóa một ảnh xám với
những ngưỡng khác nhau trên từng vùng ảnh khác nhau của một tấm ảnh.

Hình 1.10
Phương pháp này sẽ lấy ngưỡng nhị phân trên một vùng cục bộ là một cửa sổ có kích
thước MxN. Ngưỡng cần xác định đối với tâm của cửa sổ đó sẽ là trung bình cộng các giá trị của
các lân cận của nó. Giả sử cần lấy ngưỡng động cho điểm A22 và kích thước cửa sổ là 3x3. Khi
đó giá trị T sẽ là:
T = 1/8(A11 + A12 + A13 + A21 + A23 + A31 + A32 + A33)

17


Nếu A22 > T , đặt A22 về 255, nếu A22 < T , đặt A22 về 0. Qua đây có thể thấy rằng để nhị phân
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

Ta có thể dễ dàng tìm được vùng chứa các kí tự riêng rẽ trên biển số.

Hình 1.13
Từ các vùng kí tự đã xác được ở trên, việc tách kí tự ra khỏi biển số trở nên vô cùng đơn giản và
kết quả thu được như hình dưới:

19


Hình 1.14
3. Nhận dạng kí tư
Sau khi đã tách được các kí tự riêng rẽ tại phần trước, bài toán tiếp theo cần phải xử lý đó là nhận
dạng kí tự. Bài toán này cũng có thể được giải quyết bằng nhiều phương pháp khác nhau nhưng
phương pháp được sử dụng phổ biến nhất là sử dụng mạng neural (neural network). Tại phần
này, khóa luận trình bày sơ lược về mạng neural sinh học, nhân tạo và một loại mạng nhân tạo cụ
thể là Kohonen – là mạng sẽ được khóa luận sử dụng để giải quyết bài toán nhận dạng kí tự.
3.1 Mạng neural sinh học
Mạng neural sinh học được cấu thành bởi các neural – là các tế bào não hay các tế bào thần kinh.
Mỗi neural như vậy có ba thành phần chính: dendrite, soma và axon. Ba thành phần này là ba
yếu tố được mô phỏng lại trong mạng neural nhân tạo.Các dendrite là các đầu tiếp nhận các xung
điện đầu vào từ những neural khác. Các xung điện này sau đó được chuyển đến soma – phần
thân của tế bào – để xử lý. Axon là đầu ra của các neural, nó truyền xung điện đã được xử lý tại
soma đến các neural khác thông qua các điểm nối (synaptic gap). Một mạng neural sinh học bao
gồm nhiều neural như vậy nối với nhau thông qua các điểm nối, đầu ra (axon) của neural này sẽ
được nối với đầu vào (dendrite) của neural khác. Một neural có nhiều đầu vào và nhiều đầu ra.

20


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.
- Hàm kích hoạt của các neural.

21


Mạng neural nhân tạo được ứng dụng để giải quyết nhiều lớp bài toán: lưu trữ và phục hồi trạng
thái của mẫu, phân lớp mẫu, tìm ánh xạ giữa đầu vào và đầu ra, gom nhóm các mẫu giống nhau
hoặc dùng để giải quyết các bài toán về tối ưu có ràng buộc.

Hình 1.16 Biểu diễn một neural nhân tạo.
3.3 Mạng neural Kohonen
Trong các kiểu khác nhau của mạng neural, mạng neural Kohonen giống với mạng neural sinh
học hơn cả về cấu tạo lẫn cơ chế học. Mạng neural Kohonen là mạng có khả năng sử dụng những
kinh nghiệm của quá khứ để thích ứng với những biến đổi của môi trường (không dự báo trước).
Loại mạng này thuộc nhóm hệ học, thích nghi không cần có tín hiệu chỉ đạo từ bên ngoài.
Cấu trúc của mạng neural Kohonen
Mạng neural Kohonen chỉ bao gồm một lớp dữ liệu đầu vào và một lớp dữ liệu đầu ra của các
neuron và nó không chứa lớp ẩn. Lớp dữ liệu đầu vào đối với mạng neural Kohonen là các
neuron đầu vào. Các neuron đầu vào này tạo thành mẫu dữ liệu đầu vào của mạng. Đối với mạng
neural Kohonen, ta nên chọn dữ liệu đầu vào chuẩn hóa trong khoảng giữa -1 và 1. Khi thực thi
mẫu dữ liệu đầu vào, mạng sẽ tạo ra các neuron đầu ra. Lớp đầu ra của mạng neural Kohonen rất
khác với lớp đầu ra của mạng neural truyền thẳng. Đối với mạng truyền thẳng, nếu chúng ta có
một mạng neural với 5 neuron đầu ra, chúng sẽ có thể cho kết quả bao gồm 5 giá trị. Còn trong
mạng neural Kohonen chỉ có một neuron đầu ra cho ra một giá trị. Giá trị duy nhất này có thể là
đúng hoặc sai. Dữ liệu đầu ra từ mạng neural Kohonen thường là các chỉ số của neuron (Ví dụ
neuron số 5,. . . ). Cấu trúc đặc trưng của mạng neural Kohonen được chỉ ra trong hình sau.
22


Hình 1.17. Một dạng mạng neural Kohonen.
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
tỉ lệ đã xác định được.

Hình 1.19 Chia lưới kí tự.

25


Tài liệu bạn tìm kiếm đã sẵn sàng tải về

Tải bản đầy đủ ngay

×

×