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

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

Đ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

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

Giảng viên hướng dẫn : Ths.Trần Thị Trà Vinh Sinh viên thực hiện : Lê Văn Sơn 18IT4

Đà 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 qua

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ượng phươ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 sinh nhiề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ết vấ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ằm trợ 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ạm gá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ần cứ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ần mề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 đề quan trọ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 trung và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

Trang 7

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

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 ra bởi Guido van Rossum Nó dễ dàng để tìm hiểu và đang nổi lên như một trong những ngô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ưng hiệ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ành mộ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ầu hế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ập trung 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ải thiệ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ền mạ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ụng củ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ết nố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ởi hà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 code hay ứ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ực quan 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ội dung) đượ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ồn lự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ích nguyê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ạnh nhữ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ề OpenCV1.2.1 OpenCV là gì?

OpenCV (Open Computer Vision) là một thư viện mã nguồn mở hàng đầu cho 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ời gian thực Opencv có các interface cho C/C++, Python Java vì vậy hỗ trợ được cho Window, Linux, MacOs lẫn Android, iOS OpenCV có cộng đồng hơn 47 nghìn người dù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ết tĩ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ến tí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 đổi khô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ính chuyể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 camera calibration), dự đoán kiểu dáng của đối tượng (object pose estimation), thuật toán thư 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ỳ project cho 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ến hà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ệu rờ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ần giá 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 Trong quá 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ỗi pixel 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àn hì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.

2.1.2 Ảnh.

Tín hiệu ảnh thuộc loại tín hiệu đa chiều: tọa độ (x, y, z), độ sáng (λ), thời gian(t).), thời gian(t) Ảnh tĩnh trong không gian 2 chiều được định nghĩa là một hàm 2 biếnS (x, y), với S là giá trị biên độ (được biểu diễn bằng màu sắc) tại vị trí không gian (x, y) Phân loại ảnh:

Trang 14

− Ảnh tương tự S (x, y): (x, y) liên tục, S liên tục − Ảnh số S (m, n): (m, n) rời rạc, S rời rạc.

Một ảnh (gồm một tập các điểm ảnh) có thể xem như bao gồm tập các ảnh con (các vùng ảnh) Thuật ngữ gọi là ROIs – vùng quan tâm.

Ảnh số trong không gian rời rạc thu được từ ảnh tương tự trong không gian liên tục thông qua quá trình số hóa Quá trình số hóa có thể hiểu đơn giản

như sau:

 Ả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, N thườ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 cho cá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ủa mỗ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.

2.1.4 Ảnh đen trắng.

Thực tế ảnh đen trắng gồm có ảnh nhị phân và ảnh đa cấp xám Chúng ta phân biệt sự biến đổi thành L mức Nếu L bằng 2, nghĩa là chỉ có hai mức 0 và 1 còn gọi là ảnh nhị phân Nếu L lớn hơn hai mức ta có ảnh đa cấp xám Việc xác định số mức phụ thuộc vào tiêu chí lượng tử hóa L thường được chọn bằng 32, 64, 128 và 256 Trong đó ảnh đa cấp xám 256 mức là ảnh có chất lượng cao và thường được sử dụng.

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 256 mứ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ền hay đơ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ằm trong 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