1. Trang chủ
  2. » Luận Văn - Báo Cáo

đồ án cơ sở 5 đề tài nhận diện biển số xe bằng python và opencv

26 30 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Nhận diện biển số xe bằng Python và OpenCV
Tác giả Lê Văn Sơn
Người hướng dẫn Ths. Trần Thị Trà Vinh
Trường học Đạ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
Chuyên ngành Công nghệ thông tin
Thể loại Đồ án cơ sở
Năm xuất bản 2021
Thành phố Đà Nẵng
Định dạng
Số trang 26
Dung lượng 1,71 MB

Nội dung

Để 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 2

NHIỆ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 3

NHẬ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 6

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

DANH 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 8

CHƯƠ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 9

và 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 10

1.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 11

Hì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 13

CHƯƠ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)

Ngày đăng: 20/04/2024, 00:10

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w