Để giải quyếtvấn đề này nhu cầu đặt ra là áp dụng các hệ thống tự động Do mục đích chính của nghiên cứu này là tìm hiểu và xây dựng một hệ thống “Nhận dạng biển số xe” từ hình ảnh, phim
Trang 1ĐẠI HỌC ĐÀ NẴNG TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN VÀ
TRUYỀN THÔNG VIỆT - HÀN
Đà Nẵng, tháng 06 năm 2021
Trang 2NHIỆM VỤ THIẾT KẾ ĐỒ ÁN
1 Thông tin :
Giáo viên hướng dẫn: Ths.Trần Thị Trà Vinh
Họ tên Sinh viên: LÊ VĂN SƠN ( Mã SV :18IT242 )
2 Nhiệm vụ thực hiện:
- Phân tích, lựa chọn thiết kế Nhạn diện biển số xe
- Demo chương trình nhận diện biển số xe bằng Python và OpenCV
3 Nội dung yêu cầu:
- Demo chương trình nhận diện biển số xe bằng Python và OpenCV thông quahình ảnh
Cán bộ chấm thi
(ký và ghi rõ họ tên)
Cán bộ hướng dẫn (ký và ghi rõ họ tên)
Sinh viên thực hiện (ký và ghi rõ họ tên)
Trang 3NHẬN XÉT CỦA GIÁO VIÊN
Trang 5
LỜI NÓI ĐẦU
Cùng với sự phát triển của khoa học kỹ thuật và nhu cầu đi lại ngày càng tăng,
số lượng phương tiện giao thông trên đường ngày càng xuất hiện nhiều Với số lượngphương tiện giao thông lớn, và còn không ngừng tăng lên như vậy đã làm nảy sinhnhiều vấn đề trong việc kiểm soát cũng như quản lý các phương tiện Để giải quyếtvấn đề này nhu cầu đặt ra là áp dụng các hệ thống tự động
Do mục đích chính của nghiên cứu này là tìm hiểu và xây dựng một hệ thống
“Nhận dạng biển số xe” từ hình ảnh, phim và các thiết bị ghi hình kỹ thuật số Nhằmtrợ giúp cho công tác phát hiện xe vi phạm giao thông, chống trộm, quản lý, … được
dễ dàng và nhanh chóng hơn Sau đây là những ứng dụng của hệ thống nhận dạng biển
số xe nói chung: Thu phí giao thông, Kiểm soát xe tại các đường biên giới, các trạmgác cổng, công tác chống trộm, bãi giữ xe tự động, …
Như mọi hệ thống tự động khác, hệ thống như vậy cũng sẽ yêu cầu có cả phầncứng và phần mềm Phần cứng là 1 camera có tác dụng thu nhận hình ảnh, còn phầnmềm sẽ xử lý hình ảnh đó Với sự phát triển của kỹ thuật điện tử, các camera sẽ dễdàng có khả năng thu nhận được hình ảnh do đó vấn đề đặt ra luôn là vấn đề quantrọng nhất trong hệ thống, quyết định tính hiệu quả của hệ thống xử lý ảnh như vậy sẽ
là phần mềm xử lý ảnh Với vai trò như đã phân tích ở trên nghiên cứu này tập trungvào giải quyết các vấn đề đặt ra khi xử lý ảnh để đưa ra chính xác biển số xe
Em xin chân thành cảm ơn các thầy Ths.Trần Thị Trà Vinh đã tận tình chỉ bảo
để nhóm em có thể hoàn thành đề tài này.
Trang 6MỤC LỤC
CHƯƠNG 1 GIỚI THIỆU VỀ PYTHON VÀ OPENCV 1
1.1 Giới thiệu về Python 1
1.1.1 Python là gì? 1
1.1.2 Tính năng chính của Python 1
1.1.3 Python được dùng ở đâu ? 2
1.2 Giới thiệu về OpenCV 3
1.2.1 OpenCV là gì? 3
1.2.2 Ứng dụng của OpenCV 3
1.2.3 Tính năng và các module phổ biến của OpenCV 3
1.2.4 Chọn ngôn ngữ nào để lập trình OpenCV 5
CHƯƠNG 2 CÁC KHÁI NIỆM CƠ BẢN TRONG XỬ LÝ ẢNH 6
2.1 Một số khái niệm 6
2.1.1 Phần tử ảnh 6
2.1.2 Ảnh 7
2.1.3 Mức xám 7
2.1.4 Ảnh đen trắng 7
2.1.5 Ảnh màu 8
2.1.6 Các định dạng cơ bản 10
2.2 Một số kỹ thuật tiền xử lý ảnh 12
2.2.1 Chuyển ảnh xám 12
2.2.2 Lọc nhiễu 13
2.2.3 Bộ lọc tuyến tính 14
CHƯƠNG 3 PHÂN TÍCH VÀ XÂY DỰNG HỆ THỐNG 15
3.1 Kỹ thuật xử lý 15
3.1.1 Xử lý ảnh là gì 15
3.1.2 Phương pháp xử lý ảnh: 15
3.2 Tách lấy kí tự: 16
3.2.1 Khái niệm: 16
3.2.2 Các kỹ thuật tách lấy kí tự: 16
3.2.3 Phương pháp hình thái học: 16
3.3 Nhận dạng biển số xe 17
3.3.1 Khái niệm: 17
3.3.2 Các phương pháp nhận dạng: 17
3.3.3 Phương pháp nhận dạng sử dụng mạng noron; 17
3.4 Giao diện chương trình: 18
CHƯƠNG 4 KẾT LUẬN 19
Trang 7DANH MỤC HÌNH ẢNH
Hình 1.1 ảnh ứng dụng Xe tự hành trong công nghệp 1
Hình 1.2 Mô hình xe 2
Hình 1.3 Robot tự hành di chuyển hỗn hợp vòng xích và bánh 3
Hình 1.4 Robot tự hành di chuyển bánh xe 3
Hình 1.5 Robot tự hành di chuyển bằng vòng xích 3
Hình 2.1 Ứng dụng Robot trong công nghiệp 5
Hình 2.2 Ứng dụng Robot trong nông nhiệp 5
Hình 2.3 Ứng dụng của Robot tự hành 6
Hình 3.1 Lưu đồ thuật toán 8
Hình 3.2 Cảm biến dò line 9
Hình 3.3 Mạch Arduino UNO R3 11
Hình 3.4 Pin 1860 Ultrafire 12
Hình 3.5 Khối động cơ Motor DC 13
Hình 3.6 Bánh xe V1 14
Hình 3.7 Cảm biến dò Line 15
Hình 3.8 Mô hình xe tự hành 15
Hình 4.1 Xe tự hành Arduino dò Line 20
Trang 8CHƯƠNG 1 GIỚI THIỆU VỀ PYTHON VÀ OPENCV
1.1 Giới thiệu về Python.
1.1.1 Python là gì?
Python là ngôn ngữ lập trình hướng đối tượng, cấp cao, mạnh mẽ, được tạo rabởi Guido van Rossum Nó dễ dàng để tìm hiểu và đang nổi lên như một trong nhữngngôn ngữ lập trình nhập môn tốt nhất cho người lần đầu tiếp xúc với ngôn ngữ lập trình.Python hoàn toàn tạo kiểu động và sử dụng cơ chế cấp phát bộ nhớ tự động
Python có cấu trúc dữ liệu cấp cao mạnh mẽ và cách tiếp cận đơn giản nhưnghiệu quả đối với lập trình hướng đối tượng Cú pháp lệnh của Python là điểm cộng vôcùng lớn vì sự rõ ràng, dễ hiểu và cách gõ linh động làm cho nó nhanh chóng trở thànhmột ngôn ngữ lý tưởng để viết script và phát triển ứng dụng trong nhiều lĩnh vực, ở hầuhết các nền tảng
1.1.2 Tính năng chính của Python.
Ngôn ngữ lập trình dễ dàng dễ học: Python có cú pháp rất đơn giản, rõ ràng Nó
dễ đọc và viết hơn rất nhiều khi so sánh với những ngôn ngữ lập trình khác nhưC++, Java, C# Python làm cho việc lập trình trở nên thú vị, cho phép bạn tậptrung vào những giải pháp chứ không phải cú pháp
Miễn phí, mã nguồn mở: Bạn có thể tự do sử dụng và phân phối Python, thậm
chí là dùng nó cho mục đích thương mại Vì là mã nguồn mở, bạn không những cóthể sử dụng các phần mềm, chương trình được viết trong Python mà còn có thểthay đổi mã nguồn của nó Python có một cộng đồng rộng lớn, không ngừng cảithiện nó mỗi lần cập nhật
Khả năng di chuyển: Các chương trình Python có thể di chuyển từ nền tảng này
sang nền tảng khác và chạy nó mà không có bất kỳ thay đổi nào Nó chạy liềnmạch trên hầu hết tất cả các nền tảng như Windows, macOS, Linux
Khả năng mở rộng và có thể nhúng: Giả sử một ứng dụng đòi hỏi sự phức tạp
rất lớn, bạn có thể dễ dàng kết hợp các phần code bằng C, C++ và những ngôn ngữkhác (có thể gọi được từ C) vào code Python Điều này sẽ cung cấp cho ứng dụngcủa bạn những tính năng tốt hơn cũng như khả năng scripting mà những ngôn ngữlập trình khác khó có thể làm được
Ngôn ngữ thông dịch cấp cao: Không giống như C/C++, với Python, bạn không
phải lo lắng những nhiệm vụ khó khăn như quản lý bộ nhớ, dọn dẹp những dữ liệu
vô nghĩa, Khi chạy code Python, nó sẽ tự động chuyển đổi code sang ngôn ngữmáy tính có thể hiểu Bạn không cần lo lắng về bất kỳ hoạt động ở cấp thấp nào
Thư viện tiêu chuẩn đủ lớn để giải quyết các tác vụ phổ biến: Python có một
số lượng lớn thư viện tiêu chuẩn giúp cho công việc lập trình của bạn trở nên dễthở hơn rất nhiều, đơn giản vì không phải tự viết tất cả code Ví dụ: Bạn cần kếtnối cơ sở dữ liệu MySQL trên Web server? Bạn có thể nhập thư viện MySQLdb
Trang 9và sử dụng nó Những thư viện này được kiểm tra kỹ lưỡng và được sử dụng bởihàng trăm người Vì vậy, bạn có thể chắc chắn rằng nó sẽ không làm hỏng codehay ứng dụng của mình.
Hướng đối tượng: Mọi thứ trong Python đều là hướng đối tượng Lập trình
hướng đối tượng (OOP) giúp giải quyết những vấn đề phức tạp một cách trựcquan Với OOP, bạn có thể phân chia những vấn đề phức tạp thành những tập nhỏhơn bằng cách tạo ra các đối tượng
1.1.3 Python được dùng ở đâu ?
Lập trình ứng đụng web: Bạn có thể tạo web app có khả năng mở rộng
(scalable) được bằng cách sử dụng framework và CMS (Hệ thống quản trị nộidung) được tích hợp trong Python Vài nền tảng phổ biến để tạo web app là:Django, Flask, Pyramid, Plone, Django CMS Các trang như Mozilla, Reddit,Instagram và PBS đều được viết bằng Python
Khoa học và tính toán: Có nhiều thư viện trong Python cho khoa học và tính toán
số liệu, như SciPy và NumPy, được sử dụng cho những mục đích chung chung trong tính toán Và, có những thư viện cụ thể như: EarthPy cho khoa học trái đất, AstroPy cho Thiên văn học, Ngoài ra, Python còn được sử dụng nhiều trong machine learning, khai thác dữ liệu và deep learning
Tạo nguyên mẫu phần mềm: Python chậm hơn khi so sánh với các ngôn ngữ
được biên dịch như C++ và Java Nó có thể không phải là lựa chọn tốt nếu nguồnlực bị giới hạn và yêu cầu về hiệu quả là bắt buộc Tuy nhiên, Python là ngôn ngữtuyệt vời để tạo những nguyên mẫu (bản chạy thử - prototype) Ví dụ, bạn có thể
sử dụng Pygame (thư viện viết game) để tạo nguyên mẫu game trước Nếu thíchnguyên mẫu đó có thể dùng C++ để viết game thực sự
Ngôn ngữ tốt để dạy lập trình: Python được nhiều công ty, trường học sử dụng
để dạy lập trình cho trẻ em và những người mới lần đầu học lập trình Bên cạnhnhững tính năng và khả năng tuyệt vời thì cú pháp đơn giản và dễ sử dụng của nó
là lý do chính cho việc này
Trang 101.2 Giới thiệu về OpenCV
1.2.1 OpenCV là gì?
OpenCV (Open Computer Vision) là một thư viện mã nguồn mở hàng đầucho xử lý về thị giác máy tính, machine learning, xử lý ảnh OpenCV đươc viết bằng C/C++, vì vậy có tốc độ tính toán rất nhanh, có thể sử dụng với các ứng dụng liên quan đến thờigian thực Opencv có các interface cho C/C++, Python Java vì vậy hỗ trợ được choWindow, Linux, MacOs lẫn Android, iOS OpenCV có cộng đồng hơn 47 nghìn ngườidùng và số lượng download vượt quá 6 triệu lần
1.2.2 Ứng dụng của OpenCV.
Hình ảnh street view
Kiểm tra giám sát tự động
Robot và xe hơi tự lái
Phân tích hình ảnh y học
Tìm kiếm và phục hồi hình ảnh/Video
Phim cấu trúc – 3D từ chuyển động
Nghệ thuật sắp đặt tương tác
1.2.3 Tính năng và các module phổ biến của OpenCV.
Xử lý và hiển thị hình ảnh/video/IO
Phát hiện các vật thể
Geomatry – based monocular hoặc stereo computer vision
Machine learning & clustering
CUDA acceleration
Trang 11Hình 1: OpenCV OpenCV có cấu trúc module, nghĩa là gói bao gồm một số thư viện liên kếttĩnh (static libraries) hoặc thư viện liên kết động (shared libraries) Xin phép liệt kê một
số định nghĩa chi tiết các module phổ biến có sẵn như sau:
Core functionality (core) – module nhỏ gọn để xác định cấu trúc dữ liệu cơ bản, bao gồm mảng đa chiều dày đặc và nhiều chức năng cơ bản được sử dụng bởi tất
cả các module khác
Image Processing (imgproc) – module xử lý hình ảnh gồm cả lọc hình ảnh tuyếntính và phi tuyến (linear and non-linear image filtering), phép biến đổi hình học(chỉnh size, afin và warp phối cảnh, ánh xạ lại dựa trên bảng chung), chuyển đổikhông gian màu, biểu đồ, và nhiều cái khác
Video Analysis (video) – module phân tích video bao gồm các tính năng ước tínhchuyển động, tách nền, và các thuật toán theo dõi vật thể
Camera Calibration and 3D Reconstruction (calib3d) – thuật toán hình học đa
chiều cơ bản, hiệu chuẩn máy ảnh single và stereo (single and stereo cameracalibration), dự đoán kiểu dáng của đối tượng (object pose estimation), thuật toánthư tín âm thanh nổi (stereo correspondence algorithms) và các yếu tố tái tạo 3D
2D Features Framework (features2d) – phát hiện các đặc tính nổi bật của bộ nhận diện, bộ truy xuất thông số, thông số đối chọi
Object Detection (objdetect) – phát hiện các đối tượng và mô phỏng của các hàmđược định nghĩa sẵn – predefined classes (vd: khuôn mặt, mắt, cốc, con người, xe hơi,…)
Trang 12 High-level GUI (highgui) – giao diện dễ dùng để thực hiện việc giao tiếp UI đơn giản.
Video I/O (videoio) – giao diện dễ dùng để thu và mã hóa video
GPU – Các thuật toán tăng tốc GPU từ các modun OpenCV khác.
… và một số module hỗ trợ khác, ví dụ như FLANN và Google test wrapper, Python binding, v.v
1.2.4 Chọn ngôn ngữ nào để lập trình OpenCV.
OpenCV hiện tại hỗ trợ nhiều ngôn ngữ, mỗi ngôn ngữ có thế mạnh riêng,vậy thì tùy theo nhu cầu mà chọn ngôn ngữ cho phù hợp
C++: Đây là ngôn ngữ phổ biến nhất hiện tại vì nhanh, nhiều option, nếu bạn có
IDE là Visual Studio quá tốt Các thiết lập của nó rất hữu ích cho sản phẩm sau này, mặc dù ban đầu mới đụng tay khá phức tạp
Python: Ngôn ngữ được dùng nhiều để demo / test OpenCV do tính ngắn gọn, ít
phải thiết lập Bên cạnh đó, nếu dùng Python thì cũng có thể code được trên nhiều
hệ điều hành
Android: Hiện tích hợp sẵn camera, tiện lợi nên có thể sớm trở thành xu hướng
của OpenCV
Java: Nhanh và đa nền tảng, tương tự C++.
C#: Code tiện lợi, dễ dàng, có thư viện đa nền tảng là EmguCV hỗ trợ Có một
điểm trừ là EmguCV yêu cầu người dùng phải copy toàn bộ file *.dll của lib đi kèm với ứng dụng nên làm ứng dụng sẽ khá nặng
Tùy theo nhu cầu và tính chất của công việc / dự án mà bạn hãy chọn ngôn ngữ phù hợp Ví dụ có thể xử lý hình ảnh bằng C++, thiết kế UX / UI thì chuyển sang C# cho dễ thiết kế Riêng demo chương trình có thể chạy ngay bằng Python hoặc android Ngôn ngữ nào cũng có điểm cộng điểm trừ, hãy cân nhắc tuỳ projectcho phù hợp
Trang 13CHƯƠNG 2 CÁC KHÁI NIỆM CƠ BẢN TRONG XỬ
LÝ ẢNH
2.1 Một số khái niệm.
2.1.1 Phần tử ảnh.
Pixel (Picture Element – phần tử ảnh): ảnh trong thực tế là một ảnh liên tục
về không gian và về giá trị độ sáng Để có thể xử lý ảnh bằng máy tính cần thiết phải tiếnhành số hóa ảnh Trong quá trình số hóa, người ta biến đối tín hiệu liên tục sang tín hiệurời rạc thông qua quá trình lấy mẫu rời rạc hóa về không gian) và lượng hóa thành phầngiá trị mà về nguyên tắc bằng mắt thường không phân biệt được hai điểm kề nhau Trongquá trình này, người sử dụng khái niệm pixel – phần tử ảnh ở đây cũng cần phải phân biệt
rõ khái niệm pixel hay đề cập đến trong các hệ thống đồ họa máy tính Để tránh nhầm lẫn
ta tạm gọi khái niệm này là pixel thiết bị có thể xem xét như sau: khi ta quan sát màn hình(trong chế độ đồ họa), màn hình không liên tục mà gồm nhiều điểm nhỏ, gọi là pixel Mỗipixel gồm một cặp tọa độ x, y và màu
Cặp tọa độ x, y tạo nên độ phân giải (resolution) như màn hình máy tính cónhiều loại với độ phân giải khác nhau: màn hình CGA có độ phân giải là 320 x 200, mànhình VGA là 640x350 …
Như vậy, một ảnh là một tập hợp các điểm ảnh Khi được số hóa, nó thườngđược biểu diễn bởi bảng hai chiều I (n, p): n dòng và p cột Ta nói ảnh gồm n x p pixels.Người ta thường ký hiệu I (x, y) để chỉ một pixel Thường giá trị của n chọn bằng p vàbằng 256 Một pixel có thể lưu trữ trên 1, 4, 8 hay 24 bit
Trang 14− Ảnh tương tự S (x, y): (x, y) liên tục, S liên tục.
Ảnh tương tự được chia thành M hàng, N cột
Giao của hàng và cột được gọi là: pixel
Giá trị biên độ của pixel tại tọa độ nguyên (m, n) là s (m, n): là trung bìnhđộ
sáng trong pixel đó S (m, n) ≤ L (L số mức xám dùng biểu diễn ảnh) M, Nthường được chọn là M=N=2K (K=8, 9, 10) L =2B, B là số bit mã hóa cho độsáng (biên độ) mỗi pixel
− Ảnh số được biểu diễn bởi ma trận 2 chiều Các phần tử của nó là biểu diễn chocác pixel số hóa
− Ta ký hiệu 1 ảnh số là S (M, N) Ta nói ảnh có độ phân giải MxN Ký hiệu S(m, n) để chỉ ra một phần tử ảnh
2.1.3 Mức xám.
Mức xám là kết quả của sự mã hóa tương ứng với một cường độ sáng củamỗi điểm ảnh với một giá trị số, kết quả của quá trình lượng tử hóa Cách mã hóa kinhđiển là dùng 16, 32 hay 64 mức Mã hóa 256 mức được dùng phổ biến
Do 28 = 256 nên mỗi pixel được mã hóa bởi 8 bit
Với ảnh nhị phân, mỗi pixel được mã hóa trên một bit Còn với ảnh xám 256mức được mã hóa trên 1 byte = 8 bit Ảnh nhị phân khá đơn giản, các phần tử ảnh có thểcoi như phần tử logic Ảnh nhị phân được dùng theo tính logic, để phân biệt ảnh với nềnhay đơn giản để phân biệt biên với điểm khác
2.1.5 Ảnh màu.
Màu sắc của một tia sáng là cảm giác mà tia sáng đó gây nên ở mắt người Màu sắc của vật thể là màu của ánh sáng phát từ chúng Ánh sáng này nằmtrong dải phổ nhìn thấy (visible)