4.3.1 Mô hình mạng
Mô hình mạng Neural nhân tạo được sử dụng để huấn luyện ở đây là mạng tiến đa mức lan truyền ngược sai số ( Back – Propagation Neural Network) với 3 lớp: một lớp vào, một lớp ẩn và một lớp ra.
Ký tự được tách ra từ bảng số, chuẩn hóa kích thước thành 20 x 10, sau đó ta sẽ chuyển nó thành mảng 1 chiều 200 x 1, tương ứng với 200 pixel với các giá trị 0 hoặc 1. Vậy mạng Neural được thiết kế với 200 nút ở lớp vào ( tương ứng 200 pixel) 100 nút ở lớp ẩn, 10 nút ở lớp ra đối với mạng nhận dạng số và 21 nút đối với mạng nhận dạng chữ. Hàm kích hoạt: 1 1 2 x e y (Bipolar) Chọn = 0.05
Qui tắc hiệu chỉnh trọng số: áp dụng phương pháp giảm Gradiant với qui tắc học thích nghi.
Chọn k=5, =0.5, =0.7
4.3.2 Tạo mạng
Hình 4.11: Sơ đồ mạng neuron nhận dạng ký tự chữ
4.3.2.2 Mạng số
Hình 4.12: Sơ đồ mạng neuron nhận dạng ký tự số
4.3.3 Khởi tạo trọng số
Để khởi tạo các trọng số một hàm ngẫu nhiên đã được sử dụng để chỉ định một số lượng ban đầu ngẫu nhiên weight bias = 30.
Trọng số mạng chữ :weight ( 1,0,0) ... weight (1,99,199) …weight(2,20,99) Trọng số mạng số: weight (1,0,0) …weight ( 1,99,199) … weight ( 2,0, 99)
Với việc nhận dạng mạng chữ ta dùng các thông số Weight_character values.
Hidden Layer Size = 100 Number of Patterns = 21 Number of Epochs = 9999
Learning Rate = 100
Weight Bias = 30
Sigmoid Slope = 0.05
Với việc nhận dạng mạng số ta dùng các thông số Weight_number values.
Hidden Layer Size = 100 Number of Patterns = 10 Number of Epochs = 9999 Learning Rate = 100 Weight Bias = 30 Sigmoid Slope = 0.05 4.3.4 Huấn luyện mạng
Quá trình huấn luyện mạng là quá trình xác định trọng số của mạng để xấp xỉ một hàm đích cho trước.
Đầu tiên mạng sẽ được huấn luyện với các ảnh mẫu chuẩn với sai số khoảng 10-7. Sau đó, mạng tiếp tục được huấn luyện với các ảnh mẫu có nhiễu với sai số lớn hơn ( khoảng 10-5) để trọng số mới không ảnh hưởng nhiều đến việc nhận dạng các ảnh mẫu chuẩn. Sau khi đã huấn luyện mạng với các ảnh nhiễu này, ta cần phải huấn luyện lại mạng với ảnh chuẩn ban đầu để đảm bảo
chất lượng của mạng. Nếu thu thập được nhiều mẫu ký tự để huấn luyện cho mạng thì khả năng nhận dạng sẽ tăng. Tuy nhiên nếu đưa các mẫu có chất lượng quá thấp thì mạng sẽ không nhận dạng được. Khi đó cần thông báo cho hậu xử lý hay đánh dấu để người sử dụng khắc phục.
4.4 Xây dựng hệ thống nhận dạng biển số 4.4.1 Xây dựng hệ thống
Xây dựng Class clsImagePlate: Properties:
IMAGE: chứa hình ảnh chụp được từ camera.
PLATE: chứa hình ảnh biển số trích ra từ IMAGE thông qua method Get_Plate().
Methods:
Get_Plate(): trích biển số trong hình IMAGE và lưu vào property PLATE.
Xây dựng Class clsLicensePlate:
Properties:
PLATE: chứa hình biển số lấy được từ property PLATE của clsImagePlate.
IMAGEARR: chứa mảng các ký tự của biển số PLATE thông qua method Split().
Methods:
Split(): tách các ký tự đơn trong biển số từ PLATE và lưu vào IMAGEARR.
Xây dựng Class clsNetwork:
Properties:
IMAGEARR: chứa mảng các ký tự lấy từ property IMAGEARR của class clsLicensePlate.
LICENSETEXT: chứa các ký tự ASCII tương ứng với các ảnh ký tự có trong property IMAGEARR thông qua method recognition
Methods:
LoadNetworkNum(): mở file huấn luyện mạng ký tự số đã được huấn luyện trong mạng Neural.
LoadNetworkChar(): mở file huấn luyện mạng ký tự chữ đã được huấn luyện trong mạng Neural.
recognition(): dùng để nhận dạng các ký tự mảng IMAGEARR thành các giá trị ký tự chữ ASCII và lưu vào property LICENSETEXT.
4.4.2 Giao diện chương trình
Hình 4.13 Giao diện chính của chương trình Hình ảnh
thu từ
Dữ liệu được lưu xuống cơ
sở dữ liệu Vùng chứa ảnh chụp từ camera Ngày chụp Giờ chụp Vùng chứa các ký tự được tách ra từ biển số
Hình 4.14 : Chụp ảnh biển số xe
Hình 4.15 : Nhận dạng và lưu xuống cơ sở dữ liệu
Khi chụp ảnh thì chương trình sẽ xử lý ảnh và nhận dạng biển số xe mô tô và lưu vào cơ sở dữ liệu các thông tin như: chữ số trên biển số xe, ngày chụp, giờ chụp biển số.
4.5 Thử nghiệm và đánh giá kết quả 4.5.1 Dữ liệu thử nghiệm: 4.5.1 Dữ liệu thử nghiệm:
Dữ liệu dùng để thử nghiệm được thu thập từ dữ liệu chụp ảnh xe mô tô hai bánh trong các điều kiện khác nhau. Sau đây là mô tả tập ảnh và máy tính dùng để thử nghiệm:
Tập ảnh dùng để Test : Chụp vào ban ngày và buổi tối
Độ phân giải Ảnh 1152 x 864 pixel
Vị trí chụp ảnh Thẳng đứng , Chính diện
Điều kiện ánh sáng Phụ thuộc vào thời gian chụp ban ngày hay buổi tối
Số lượng ảnh 100
Hệ điều hành thử nghiệm Windows 7 Ultimate
Ngôn ngữ lập trình CSharp (C#)
Bảng 4.1 : Mô tả nguồn dữ liệu dùng để test
4.5.2 Kết quả thử nghiệm
Bảng thống kê kết quả thử nghiệm
Số lượng mẫu thử nghiệm 100
Kích thước ảnh chụp 1152x864
Số lượng trích biển số đúng 82
Số lượng trích biển số sai 18
Số lượng tách ký tự đúng 75
Số lượng tách ký tự sai 7
Số lượng nhận dạng đúng 70
Số lượng nhận dạng sai 5
Tốc độ xử lý < 2s
Bảng 4.2 : Bảng thống kê kết quả thử nghiệm trên tập dữ liệu test 4.5.3 Đánh giá kết quả
Trích biển số: thứ nhất tôi thực hiện ảnh chụp ở các điều kiện sáng tối khác nhau, và tôi nhận thấy là khi chụp ảnh với điều kiện buổi tối thì kết quả trích biển số sẽ có kết quả cao hơn do đặc điểm biển số xe mô tô ở nước ta có
độ phản chiếu ánh sáng vào ban đêm. Thứ hai là khoảng cách chụp ảnh cũng ảnh hưởng đến kết quả bài toán này rất nhiều. Trong tập ảnh chụp, có một số ảnh chụp quá xa hay quá gần sẽ không trích được đúng vị trí biển số. Thứ ba là do tính chất thuật toán là quét hết tất cả các điểm trên hình nhận được nên tốc độ xử lý không cao. Và trong thuật toán tôi đã giảm đi một số dòng ở đầu và ở cuối hay trái và phải ảnh việc này góp phần làm tăng tốc độ xử lý ảnh . Tách ký tự: kết quả tách ký tự trong bảng 4.2 không đạt tỷ lệ cao do chương trình chưa xử lý hết nhiễu trong ảnh. Một số biển số nhiễu do đinh ốc, dơ, bùn đất, …làm ảnh hưởng đến việc tách ký tự và làm giảm hiệu quả nhận dạng. Một số trường hợp do nhiễu quá nhiều nên khi lọc nhiễu đã làm mất đi hay tăng thêm một số ký tự trên biển số và gây khó khăn cho việc nhận dạng. Và đây cũng là một vấn đề nan giải cho thuật toán này.
Nhận dạng ký tự: giai đoạn nhận dạng ký tự sẽ phụ thuộc rất nhiều vào giai đoạn trích biển số và tách ký tự. Nếu trích biển số và tách ký tự tốt thì kết quả nhận dạng sẽ tốt. Tuy nhiên nếu ảnh ký tự bị nhiễu quá nhiều cũng sẽ dẫn đến việc nhận dạng ký tự bị lỗi. Ngoài ra do số ký tự chữ thu thập được trên biển số khá ít (mỗi biển số chỉ có 1 hoặc 2 ký tự chữ) nên việc huấn luyện cho các ký tự chữ chưa hoàn chỉnh và việc nhận dạng chưa có kết quả tốt. Đối với các ký tự số thì thu thập được khá nhiều, tuy nhiên trong quá trình nhận dạng ký tự thì sẽ dễ bị nhầm lẫn giữa các ký tự 0 và 8, 2 và 7, hay 5 và 6. Để giải quyết trường hợp này trong thuật toán nhận dạng đã đưa vào các hàm dùng để phân biệt các số 0-8, 2-7, 5-6. Với việc hỗ trợ phân biệt kết quả nhận dạng các ký tự trên thì kết quả nhận dạng các ký tự số khả quan hơn, tuy nhiên chúng ta khó mà phân biệt được những ký tự quá nhiễu.
Tóm lại các kết quả nhận dạng cuối cùng vẫn chưa thực sự tốt, do xử lý nhiễu chưa được tốt trên biển số. Nếu có được cơ sở dữ liệu các thông tin biển số thì chắc chắn sẽ đạt hiệu quả tốt hơn trong việc nhận dạng.
4.6 Một số kết quả minh họa thử nghiệm thuật toán: 4.6.1 Trường hợp ảnh chụp ban ngày (Trường hợp 1) 4.6.1 Trường hợp ảnh chụp ban ngày (Trường hợp 1)
(a) ảnh nguồn (b) ảnh biển số trích được
(c) kết quả tách ký tự (d) kết quả nhận dạng cuối cùng Hình:4.16 Các bước trích biển số trong trường hợp 1
4.6.2 Trường hợp ảnh chụp buổi tối (Trường hợp 2)
(a) ảnh nguồn (b) ảnh biển số trích được
(c) kết quả tách ký tự (d) kết quả nhận dạng cuối cùng Hình 4.17: Các bước trích biển số trong trường hợp 2
4.7 Kết luận chương 4
Trên cơ sở công nghệ xử lý ảnh và mô hình mạng neural, xây dựng phần mềm nhận dạng biển số xe với ngôn ngữ Cshap (C#) trên Visual Studio 2012
60 – V7 1498
KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 5.1 Các mặt đã đạt được
Mục tiêu của luận văn là xây dựng chương trình nhận dạng trực tuyến xe mô tô hai bánh, xây dựng chương trình nhận dạng ký tự đơn trên biển số dùng ngôn ngữ lập trình CSharp. Như vậy trong mục tiêu luận văn đã giải quyết được các vấn đề sau:
- Xử lý ảnh
- Ứng dụng được thuật toán phân tích phổ tần số để trích biển số xe mô tô và phân tích biểu đồ mức xám trong việc tách ký tự.
- Sử dụng mạng Neural để nhận dạng ký tự trên biển số.
- Xây dựng các kết quả nghiên cứu trên nền Visual Studio Dot Net (CSharp).
- Ứng dụng được thư viện AForge trong xử lý ảnh và thu nhận tín hiệu video.
5.2 Các mặt còn hạn chế:
Với các mặt đã đạt được nêu trên, tuy nhiên trong luận văn còn nhiều mặt hạn chế như:
- Chưa xử lý được các trường hợp ảnh quá tối hoặc quá sáng hoặc ảnh có chất lượng xấu.
- Chương trình chưa mang tính tổng quát cao như nhận dạng các biển số chưa đa dạng, ví dụ như các biển số xe có nền xanh chữ trắng (nhà nước) hay nền đỏ chữ trắng ( quân đội).
- Khả năng nhận dạng tương đối, chưa xử lý được các trường hợp chụp ảnh quá xa hay quá gần so với khoảng cách qui định chụp ảnh.
5.3 Đề xuất hướng phát triển:
Với những mặt hạn chế như trên, tôi xin đề ra các hướng phát triển đề tài:
- Xây dựng ứng dụng tổng quát hơn cũng như xử lý với một số trường hợp biển số đặc biệt như: nền xanh chữ trắng, hay nền đỏ chữ trắng,…
- Khắc phục khả năng trích bảng số với khoảng cách linh động hơn, xử lý ảnh và nhận dạng tốt hơn đối với bảng số xấu.
- Xây dựng ứng dụng để quản lý trong các cơ quan chính phủ, các trạm thu phí hay các điểm giữ xe mô tô hai bánh.
5.4 Sử dụng một số chức năng trong thư viện AForge:
Mở ảnh và định dạng ảnh
// load an image
System.Drawing.Bitmap image = (Bitmap) Bitmap.FromFile(filename) ;
// format image
AForge.Imaging.Image.FormatImage ( ref image ) ; Cách sử dụng bộ lọc trong thư viện aforge.net
// load an image
System.Drawing.Bitmap image = (Bitmap) Bitmap.FromFile(filename) ;
// create filter
AForge.Imaging.Filters.Median filter = new AForge.Imaging.Filters.Median ( ) ;
// apply filter
System.Drawing.Bitmap newImage = filter.Apply ( Image);
Nếu cần tác động nhiều chức năng lọc trên một ảnh, ta có thể triển khai bao một tạp hợp các chức năng lọc FilterSequence, sau đó them vào filter các chức năng lọc cần áp dụng cho hình. Và sau đó ta chỉ cần áp dụng các chức năng lọc đó một lần:
// Create filters sequence
AForge.Imaging.Filters.FiltersSequence
//add filters to the sequence
Filter.Add ( new AForge.Imaging.Filters.Sepia ( ) );
Filter.Add ( new AForge.Imaging.Filters.RotateBilinear (45)); Filter.Add ( new AForge.Imaging.Filters.ResizeBilinear (320, 240)); Filter.Add ( new AForge.Imaging.Filters.Pixellate (8) );
Filter.Add ( new AForge.Imaging.Filters.Jitter (2) ); Filter.Add ( new AForge.Imaging.Blur ( ) );
// apply the Sequence to an image
System.Drawing.Bitmap newImage = filter.Apply ( image); Khởi tạo lại kích thước chuẩn cho ảnh:
IFilter filt = new ResizeBilinear ( 512, 256 ); img = filt.Apply (img);
- Chuyển ảnh sang mức xám:
IFilter way_filt = new GrayscaleY ( ) ; img = way _filt.Apply (img);
- Phân ngưỡng ảnh:
Way_filt = new Threshold ( 200) ; img = way_filt.Apply (img);
- Đảo màu ảnh:
Way_filt = new Invert (); Img = way_filt.Apply (img);
- Bộ lọc Median :
Way_filt = new Median (); Img = way_filt.Apply (img);
- Bộ lọc BlobsFiltering
BlobsFiltering filter = new BlobsFiltering (); Filter.MinHeight = 30;
Filter.MinWight = 15; Filter.Maxheight = 100;
Filter.ApplyInPlace (process_image);
- Bộ lọc BlobsCounter:
BlobCounter blobs = new BlobCounter (imgArr[i]); Blob [ ] words = blobs.GetObjects ( imgArr [i]) ; Foreach ( Blob word in words )
LỜI CẢM ƠN
Trước tiên em xin chân thành cảm ơn đến quý thầy, cô Khoa Điện , Phòng đào tạo sau đại học, Trường Đại Học Giao Thông Vận Tải đã tận tình giảng dạy, truyền đạt kiến thức cho em trong thời gian em học tập và nghiên cứu tại trường
Em xin gửi lời cảm ơn chân thành đến thầy TS. Nguyễn Thanh Hải, Thầy đã nhiệt tình hướng dẫn em hoàn thành luận văn
Xin bày tỏ lòng biết ơn đến gia đình, chổ dựa vững chắc cho em trong quá trình học tập và làm việc.
Và cuối cùng Em xin gởi lời biết ơn đến bạn bè, đồng nghiệp Trường Đại Học Giao Thông Vận Tải TP.HCM đã giúp đỡ Em rất nhiều đề Em hoàn thành luận văn này.
Tp. Hồ Chí Minh tháng 5năm 2013
CAO HỮU VINH
VI. TÀI LIỆU THAM KHẢO Tiếng Việt
[1] Giáo trình hệ thống giao thông thông minh. Lê Hùng Lân ( Chủ Biên), Nguyễn Thanh Hải, Nguyễn Quang Tuấn, Đặng Quang Thạch, Nguyễn Trung Dũng. NXB Giao Thông Vận Tải 2012.
[2] Lương Mạnh Bá & Nguyễn Thanh Thuỷ (1999), “Nhập môn xử lý ảnh số”, Nhà xuất bản khoa học và kỹ thuật, Hà nội.
[3] TS. Nguyễn Đình Thúc (2000), “Mạng Nơron Phương pháp và ứng dụng”, Nhà xuất bản Giáo dục.
[4] Lê Minh Trung (1999), “Mạng Nơron nhân tạo”, Nhà xuất bản Thống kê. [5] Ngô Diên Tập, Xử lý ảnh bằng máy tính, Nhà xuất bản Khoa Học Kỹ
Thuật, 1997.
Tiếng Anh
[6] Andrew Kirillov (2007), “Motion Detection sample application”, AForge.NET framework.
[7] Andrew Kirillov (2006), “Time Series Prediction using Multi-Layer Neural Network”, AForge.NET framework.
[8] Andrew Kirillov (2005), ”Neural Network OCR”, AForge.NET framework
[9] Beatriz Díaz Acosta (2004), “Experiments in image segmentation for Automatic US License plate recognition”, Master of science in Computer science, USA.
[10] N.K.Bose, P.J.Liang (1996), “Neural Network Foundamentals with Graphs, Algorithms and Application”, McGraw-Hill.
[11] Automatic License Plate Recognition, Shyang – Lih Chang, Li – Shien Chen, Yun – Chung Chung , and Sei – Wan Chen, Senior Member, IEEE.
[12] Automatic License – Plate Location and Recognition Based on Feature Salience, Zhen – Xue Chen, Cheng – Yun Liu, Fa – Liang Chang, and Guo – You Wang .
[13] License plate recognition technology (LPR) impact evaluation and community assessment.
[14] Recognition of Vehicle License Plates from a Video SequenceI – Chen Tsai, Jui – Chen Wu, Jun – Wei Hsieh, and Yung – Sheng Chen.
[15] A neural network based character recognition system using double backpropagation.
[16] An Automatic System of Vehicle Number –Plate Recognition Based On Neural Networks, Wei Wu Depy. Of Road and Traffic Engineering, Changsha Communications University,410076, P.R China, Huang Xinhan, Wang Min & Song Yexin