Các thư viện

Một phần của tài liệu 836 phân tích thiết kế hệ thống trông gửi xe và ứng dụng python xây dựng module tự động nhận dạng biển số xe (Trang 26)

5. Kết cấu đề tài

1.2.4. Các thư viện

Python có rất nhiều thư viện, tuy nhiên dưới đây giới thiệu những thư viện thường được dùng để giải quyết các bài toán nhận dạng:

- Numpy là một thư viện toán học phổ biến và mạnh mẽ của Python. NumPy cung cấp các hàm toán học toàn diện, trình tạo số ngẫu nhiên, quy trình đại số tuyến tính, biến đổi Fourier, v.v.

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

- Imutils là chức năng tiện lợi để thực hiện các chức năng xử lý hình ảnh cơ bản như dịch, xoay, thay đổi kích thước, tạo khung, hiển thị hình ảnh Matplotlib, sắp xếp đường viền, phát hiện cạnh tiện lợi hơn so với OpenCV. - Python-tesseract là một công cụ nhận dạng ký tự quang học (OCR) dành cho

Python. Nó sẽ nhận ra và đọc văn bản được nhúng trong hình ảnh

1.2. Tổng quan nhận dạng biển số xe

Trong quá trình nghiên cứu, tìm hiểu tài liệu thực tiễn liên quan đến nhận dạng biển số xe, hiện nay có rất nhiều đề tài đi sâu vào lĩnh vực này, cụ thể như:

KHÓA LUẬN TỐT NGHIỆP Phân tích thiết kế hệ thống trông gửi xe và ứng dụng Python xây dựng module tự động nhận dạng biển số xe

Automatic License Plate Recognition System using Histogram Graph Algorithm (2014) [6] Divyang Goswami &Mrs. Rama Gaur sử dụng Histogram Graph Algorithm trong công cụ phần mềm Matlab.- phần mềm cung cấp môi trường tính toán số và lập trình. Giải quyết được bài toán nhận dạng biển số xe tại Ản Độ và phân đoạn xác định các kí tự riêng biệt mang lại kết quả nhận diện lên tới 90%.Tuy nhiên bài toán chỉ phát triển cho các biển số ở Ản Độ và khi hình ảnh được chụp từ một khoảng cách xác định. Các yếu tố ánh sáng, màu sắc của xe, độ nghiêng, độ sắc nét của hình ảnh là những vấn đề chưa giải quyết được ở đây.

License Plate Detection and Recognition in Unconstrained Scenarios [7] S'ergio Montazzolli Silva & Cl'audio Rosito Jung(2018), đề tài nghiên cứu nhận dạng các biển số xe ở Brazil. Bài nghiên cứu nhận dạng biển số xe sử dụng WPOD- NET và nhận dạng kí tự Optical Character Recognition (OCR). Bài toán đã giải quyết các vấn đề về các hình ảnh biển số chụp chéo và nhận diện các kí tự bị lệch mạng lại một kết quả nhận diện khả quan lên tới 89,33%, nhược điểm phương pháp chưa nhận diện được các kí tự giống nhau như số ‘1’ với ‘I’.

Automatic License Plate Recognition System for Bangla License Plates using Convolutional Neural Network (2019) [8] nghiên cứu nhận diện biển số ở Bangladesh sử dung YOLO để nhận dạng biển số, huấn luyện dữ liệu và nhận dạng kí tự. Phương pháp nhận diện nhanh chóng với tỉ lệ chính xác gần như tuyệt đối 99,5 %, tuy nhiên mô hình phụ thuộc sâu vào dữ liệu, chưa nhận dạng được đa dạng nhiều loại xe cần đào tạo đa dạng với nhiều dữ liệu thử nghiệm khác.

Xây dựng ứng dụng Nhận dạng biển số xe ô tô sử dụng mã nguồn mở Opencv [9] của Ths. Nguyễn Duy Linh và các sinh viên Trường Đại học Quảng Bình trong Tạp chí Thông tin Khoa học & Công nghệ Quảng Bình - Số 1/2018, đã nghiên cứu ứng dụng nhận dạng biển số xe sử dụng OpenCV kết hợp phương pháp SVM( Surport Vector Machine) để nhận diện kí tự. Việc dùng thư viên OpenCV khiến tốc độ xử lí tương đối nhanh so với các ngôn ngữ lập trình và công cụ khác và mang lại chi phí triển khai thấp. Các hình ảnh xác định vùng biển số xe lên tới 90% và nhận dạng chính xác lên tới 89%. Tuy nhiên, phương pháp nhận diện có độ chính xác nhận dạng phụ thuộc vào ánh sáng môi trường và nhận dạng kí tự chưa có tập mẫu hoàn chỉnh.

NGUYỄN THỊ HIẾU - K20HTTTA

Hoạt động Tên hoạt động Mô tả

HDl Nạp ảnh vào hệ thống Đưa đường dẫn ảnh vào hệ thống. HĐ2 Điều chỉnh kích thước ảnh Đưa ảnh về một kích thước xác định HĐ3 Chuyển ảnh về ảnh xám Hệ thống tiến hành đọc ảnh, đưa ảnh

về giá trị đen trắng biểu thị 1, 0 HĐ4 Loại bỏ vùng không mong

muốn

Lọc và giảm nhiễu những đối tượng ảnh hưởng đến kết quả.

HĐ5 Tìm cạnh biển số Vẽ các cạnh, đường nét của hình ảnh. HĐ6 Tìm vùng bao quanh biển số Tìm ra khung chứa biển số xe.

HĐ7 Trích xuất biển số Hiển thị hình ảnh biển số.

HĐ8 Nhận dạng kí tự Sử dụng thư viện Python nhận diệncác kí tự biển số.

HĐ9 Hiển thị kí tự

Các kí tự in dưới dạng text. Kết thúc quy trình.

KHÓA LUẬN TỐT NGHIỆP Phân tích thiết kế hệ thống trông gửi xe và ứng dụng Python xây dựng module tự động nhận dạng biển số xe

Trên cơ sở các bài toán nhận dạng biển số xe của các tác giả đi trước, Khóa luận sẽ tập trung xây dựng module nhận dạng biển số xe sử dụng OpenCV và nhận diện kí tự bằng thư viên Python-tesseract.

1.3. Kết thúc chương 1

Chương 1, khóa luận đã trình bày cơ sở lí luận về hệ thống thông tin ,ngôn ngữ Python và tổng quan về các kết quả nghiên cứu về nhận dạng biển số xe.Những nội dung này sẽ là nền tảng để xây dựng sản phẩm của đề tài ở các chương tiếp theo, cụ thể trong chương tiếp theo, ngoài việc khóa luận sẽ trình bày sâu hơn về các kỹ thuật trong Python để nhận dạng ảnh con xây dựng module nhận dạng biển số xe sử dụng Python.

KHÓA LUẬN TỐT NGHIỆP Phân tích thiết kế hệ thống trông gửi xe và ứng dụng Python xây dựng module tự động nhận dạng biển số xe

CHƯƠNG 2: XÂY DỰNG MODULE Tự ĐỘNG NHẬN DẠNG BIEN SỚ XE BẰNG PYTHON

2.1. Nhận dạng biển số xe

Nhận dạng biển số xe là công nghệ ứng dụng nhận dạng ký tự nhằm chuyển đổi hình ảnh biển số chụp được từ camera sang các ký tự dạng text trong hệ thống phần mềm để lưu trữ, phân tích so sánh.... Nhận dạng biển số xe thực hiện qua các hoạt động sau:

Bảng 2.1: Mô tả quy trình nhận dạng biển số xe

NGUYỄN THỊ HIẾU - K20HTTTA

KHÓA LUẬN TỐT NGHIỆP Phân tích thiết kế hệ thống trông gửi xe và ứng dụng Python xây dựng module tự động nhận dạng biển số xe

Hình 2.1: Quy trình nhận dạng biển số xe

2.2. Kĩ thuật nhận dạng trong Python:

Để thực hiện được mục tiêu nhận dạng biển số xe, dưới đây sẽ trình bày chi tiết các kỹ thuật sử dụng trong Python.

2.2.1. Tải và hiển thị ảnh

Ảnh có thể thu nhận qua máy ảnh màu hoặc trắng đen, máy quét ảnh, máy camera, .v.v... Ảnh sẽ được lưu trữ trong thư mục. Để đọc ảnh và hiển thị ảnh trong Python ta dùng hàm imread và hàm imshow.

Hàm imread sẽ đọc ảnh từ các đường dẫn thư mục hoặc các đường dẫn tương đối và gán nó vào biến. Nó cũng thể hiện chế độ đọc ảnh ta có thể lựa chọn theo ảnh xám hay ảnh màu.

Hàm imshow là hàm giúp hiển thị ảnh đã được đọc lên màn hình. Kết quả minh họa:

KHÓA LUẬN TỐT NGHIỆP Phân tích thiết kế hệ thống trông gửi xe và ứng dụng Python xây dựng module tự động nhận dạng biển số xe

Hình 2.2: Kết quả minh họa tải ảnh

2.2.2. Convert màu file ảnh

Một bức ảnh chứa rất nhiều màu sắc, trong mỗi bài toán khác nhau ta cần vận dụng những hệ màu khác nhau để tăng khả năng thành công của kết quả. Trong Python sử dùng hàm cv2.cvtColor() để chuyển đổi hệ màu. Dưới đây là một số hệ màu được sử dụng phổ biến:

- Hệ màu RGB phổ biến dùng trong máy ảnh, máy tính, điện thoại và nhiều thiết bị kĩ thuật số khác nhau. Nguyên lý cơ bản là kết hợp 3 màu sắc cơ bản R (red - đỏ), B (blue - xanh dương), G (green - xanh lá) để biểu diễn tất cả các màu sắc.

Hình 2.3: Hệ màu RGB

- Hệ màu CMYK sử dụng phổ biến trong ngành công nghiệp in ấn. Nguyên lý cơ bản sử dụng 3 màu là C (Cyan: xanh), M (Magenta: hồng), và Y (Yellow: vàng) để biểu diễn các màu sắc khác nhau và sau khi kết hợp của 3 màu sẽ tạo nên K (màu đen.)

NGUYỄN THỊ HIẾU - K20HTTTA

KHÓA LUẬN TỐT NGHIỆP Phân tích thiết kế hệ thống trông gửi xe và ứng dụng Python xây dựng module tự động nhận dạng biển số xe

Hình 2.4: Hệ màu CMYK

- Hệ màu HSV (còn gọi là HSB) là một cách tự nhiên hơn để mô tả màu sắc, dựa trên 3 số liệu: H (Hue) Vùng màu, S (Saturation) Độ bão hòa màu, B (hay V): (Bright hay Value) Độ sáng. Hệ màu này thường được biểu diễn dưới dạng hình trụ hoặc hình nón. Theo đó vòng theo vòng tròn từ 0 - 360 độ là trường biểu diễn màu sắc (Hue). Màu đỏ tới màu xanh lục nằm trong khoảng 0-120 độ, từ 120 - 240 độ là màu xanh lục tới xanh lơ. Từ 240-360 độ là từ màu đen tới lại màu đỏ.

KHÓA LUẬN TỐT NGHIỆP Phân tích thiết kế hệ thống trông gửi xe và ứng dụng Python xây dựng module tự động nhận dạng biển số xe

Kết quả minh họa:

Hình 2.6: Kết quả minh họa convert màu ảnh

2.2.3. Resize ảnh

Thay đổi kích thước hình ảnh có nghĩa là thay đổi kích thước của nó, có thể là chiều rộng, chiều cao hoặc thay đổi cả hai. Ngoài ra, tỷ lệ khung hình của hình ảnh gốc có thể được giữ nguyên trong hình ảnh đã thay đổi kích thước. Hàm resize của Python sẽ thực hiện điều đó.

Kết quả minh họa: Ảnh gốc kích thước 472x303, Resize về kích thước 300x300:

NGUYỄN THỊ HIẾU - K20HTTTA

KHÓA LUẬN TỐT NGHIỆP Phân tích thiết kế hệ thống trông gửi xe và ứng dụng Python xây dựng module tự động nhận dạng biển số xe

Hình 2.7: Kết quả minh họa resize ảnh

2.2.4. Tìm cạnh

Trong hình ảnh, thường tồn tại nhiều các thành phần như: vùng trơn, góc/cạnh và nhiễu. Cạnh trong ảnh mang đặc trưng quan trọng, thường là thuộc đối tượng trong ảnh. Do đó, để phát hiện cạnh trong ảnh, giải thuật Canny là một trong những giải thuật phổ biến, nổi tiếng nhất trong xử lí ảnh. Hàm Canny sẽ lọc các điểm màu trong khoảng giá trị ngưỡng để hiển thị.

KHÓA LUẬN TỐT NGHIỆP Phân tích thiết kế hệ thống trông gửi xe và ứng dụng Python xây dựng module tự động nhận dạng biển số xe

Kết quả minh họa:

Hình 2.8: Kết quả minh họa tìm cạnh

2.2.5. Lọc hình ảnh

Một bức ảnh có rất nhiều những chi tiết, đôi khi bài toán không sử dụng các chi tiết đó. Để hạn chế điều đó, ta sử dụng giải pháp làm mờ và lọc nhiễu. Làm mờ là làm mịn hình ảnh, khử nhiễu là loại bỏ những đối tượng không nằm trong phạm vi xác định. Python hỗ trợ rất nhiều bộ lọc hình ảnh như: Gaussian Filter, medianBlur hay bilateralFilter.

Bộ lọc bilateralFilter là một bộ lọc hiệu quả cao trong việc loại bỏ nhiễu mà vẫn giữ lại được các đường viền (cạnh) trong ảnh.

NGUYỄN THỊ HIẾU - K20HTTTA

KHÓA LUẬN TỐT NGHIỆP Phân tích thiết kế hệ thống trông gửi xe và ứng dụng Python xây dựng module tự động nhận dạng biển số xe

Kết quả minh họa:

Hình 2.9: Kết quả minh họa lọc ảnh

2.2.6. Tìm Contours

Contours là tập các điểm liên tục tạo thành một đường cong và không có khoảng hở trong đường cong đó. Trong OpenCV, việc tìm một contours là việc tìm một đối tượng có màu trắng trên nền đen. Contours rất hữu ích trong phân tích hình dạng, phát hiện vật thể và nhận diện vật thể.

KHÓA LUẬN TỐT NGHIỆP Phân tích thiết kế hệ thống trông gửi xe và ứng dụng Python xây dựng module tự động nhận dạng biển số xe

Kết quả minh họa:

Hình 2.10: Kết quả minh họa tìm contours

2.2.7. Python-tesseract

Python- tesseract là thư viện giúp nhận diện kí tự trong ảnh và hiển thị kí tự dưới dạng text.

Hình 2.11: Kết quả sử dụng Python-tesseract

2.2.8. Dừng màn hình

Hàm waitkey (int delay) sẽ đợi cho đến khi có một phím được bấm trong khoảng thời gian là delay. Chú ý nếu không có hàm này thì chương trình khi chạy sẽ không dừng lại trên màn hình và kết thúc luôn, mục đích của hàm là dừng màn hình trong một thời gian bằng tham số delay (tính theo đơn vị millisecond). Nếu muốn dừng màn hình mãi mãi thì ta đặt tham số delay = 0.

NGUYỄN THỊ HIẾU - K20HTTTA

KHÓA LUẬN TỐT NGHIỆP Phân tích thiết kế hệ thống trông gửi xe và ứng dụng Python xây dựng module tự động nhận dạng biển số xe

2.3. Xây dựng và thử nghiệm module nhận dạng biển số xe

2.3.1. Cài đặt môi trường

- Cài đặt Python: Truy cập trang web https://www.python.org/

Hình 2.12: Trang web Python

- Cài đặt Visual Studio Code: Truy cập https://code.visualstudio.com

import PIL

import cv2

import imutɪls

import numpy as np

import Pytesseract

-From PIL import Image

KHÓA LUẬN TỐT NGHIỆP Phân tích thiết kế hệ thống trông gửi xe và ứng dụng Python xây dựng module tự động nhận dạng biển số xe

Hình 2.14: Màn hình hoạt động Visual Studio Code

- Cài đặt thư viện hỗ trợ: Opencv, imutils, numpy, Pytesseract

Để cài đặt các thư viện, sử dụng lệnh pip install [thư viên] trên Command Prompt và dùng lệnh pip list để kiểm tra các thư viện đã được cài đặt trên máy.

Hình 2.15: Màn hình đã cài đặt thư viện

2.3.2. Dữ liệu thử nghiệm

Dữ liệu là các hình ảnh chứa biển số xe được thu thập từ nhiều nguồn khác nhau. Dữ liệu gồm 50 hình ảnh biển số xe máy với kích thước trong khoảng giá trị từ min_size=300, max_size =5000

NGUYỄN THỊ HIẾU - K20HTTTA

23 KHÓA LUẬN TỐT NGHIỆP Phân tích thiết kế hệ thống trông gửi xe và ứng dụng

Python xây dựng module tự động nhận dạng biển số xe

Hình 2.16: Dữ liệu thử nghiệm

2.3.3. Xây dựng module

img = cv2.imread('cx2.jpg', cv2.IHREADJCOLOR)# Tai anh irng2 = Cv2.resize(imgj(302j 320)) #Resiz anh

Ịt Xac dinh C anti

gray = Cv2.CVtColor(img2j cv2.C0L0R-BGR2GRAY) #Dua ve anh xam gray = C v2 .bilateral F liter (gray, 11 , 17 J 17) # GiaiII nhiêu

edged = cv2.Canny(gray, 30, 200) # bieu dien canh fr Tim Contour

cπts = Cv2.-FindContotirs(edged.copy()j Cv2.RETR-TREEJ tv2.CHAIM-APPR0X-SIHPLE) cπts = imutɪls.grab—contours(ents)

cπts = sorted(cntsj key=cv2.ContourAreajreverse=True)

ScreenCnt = None for C in ents:

peri = cv2.arcLeπgth(c, True)

apprαx = cv2.approκPolyDP(c, ∙0.01S ≠ perijTrue) if len(approx) == 4:

ScreenCnt = approx

break

⅛ Trich xuat anh

if ScreenCnt is Mone: detected = 0 : detected = 1 if detected == 1: cv2.drawContours(img2, [ScreenCnt], -lj(0J 255j Ỡ), 3) mask = np.zeros(gray.shapej np.uiπtB)

neW—image = cv2.draWContotirs(mask, [StreenCnt]J 0, 255, -1, )

neW—image = cv2.bitwise—and(img2j img2j mask=mask)

(xj y) = πp.where(mask == 255)

(topxj topy) = (πp.miπ(x), np.min(y))

(bottomxj bottomy) = (np.max(x), πp.max(y))

Cropped = gray[topxZbottomx + 1, topyZbottoiy + 1]∣

cv2.imshow(1Anh dau vao’ J ɪmg) cv2.im≤how(1Anh bien so,jimg2)

cv2.im≤how(lTrich XUat bien so', Cropped) # Chuyen sang text

text = Pytesseract.image—tθ-string(Cropped, lang="eng'1, config="--psm 11 --oem 3 -

C tessedit—charJWtiitelist=ABCDEFS1IJKLFtJOPQRSTlΛ⅛DCYZ0'123456789.- ") print("Bien SOZ ", text)

cv2.WaitKey(0)

cv2.d e≤trOyAllHindows()

Pytesseract.pytesseract.tesseractcmd= r"C:XProgram FilesXTesseract-OCRXtesseract.e×e,'

Hình 2.17: Khái báo thư viện

- Bước 2: Giới hạn kích thước ảnh

#Gioỉ han

maxsize = 5000 Iiiinsize = 300

Hình 2.18: Giới hạn hình ảnh

- Bước 3: Quy trình nhận diện biển số xe

KHÓA LUẬN TỐT NGHIỆP Phân tích thiết kế hệ thống trông gửi xe và ứng dụng Python xây dựng module tự động nhận dạng biển số xe

Nhận diện được Tỉ lệ

Nhận diện được biển số xe 45 90%

Nhận diện được biển số xe và kí tự 10 20%

Nhận diện sai hoàn toàn 5 10%

Hình 2.19: Xây dựng module

2.3.4. Kết quả thử nghiệm

Module được thử nghiệm dựa trên tập dữ liệu đã giới thiệu ở phần trên.

- Đầu vào: Ảnh chứa biển số cần nhận dạng

- Đầu ra: Ảnh biển số được nhận dạng và in ra kí tự.

NGUYỄN THỊ HIẾU - K20HTTTA

25 KHÓA LUẬN TỐT NGHIỆP Phân tích thiết kế hệ thống trông gửi xe và ứng dụng

Python xây dựng module tự động nhận dạng biển số xe

Hình 2.20: Kết quả thử nghiệm

Module nhận diện biển số xảy ra 3 kết quả với bộ dữ liệu 50 hình ảnh biển số: - Nhận diện được biển số xe

- Không nhận diện được hoặc nhận diện sai. - Nhận diện được biển số xe và kí tự.

KHÓA LUẬN TỐT NGHIỆP Phân tích thiết kế hệ thống trông gửi xe và ứng dụng Python xây dựng module tự động nhận dạng biển số xe

Nhận xét:

- Module đã nhận được biển số xe với tỉ lệ chính xác cao.

- Module chưa nhận diện được hoàn toàn chính xác các kí tự trên biển số. Nguyên nhân dẫn đến kết quả đó là:

- Hình ảnh có nhiễu đối tượng làm nhiễu như góc khuất, ánh sáng, các vùng tương tự, ...

- Vì thời gian khóa luận hạn chế, chưa tìm hiểu nhiều thư viện thuật toán tăng khả năng trích xuất kí tự từ biển số xe.

Hình 2.21: Một số trường hợp nhận diện sai

2.4. Kết thúc chương 2

Trong chương 2, khóa luận đã tìm hiểu về một số kĩ thuật về nhận dạng ảnh, môi trường cài đặt để tiến hành xây dựng module nhận dạng ảnh cũng như thử nghiệm trên bộ dữ liệu đã thu thập được. Hơn nữa, khóa luận cũng tiến hành kiểm

Một phần của tài liệu 836 phân tích thiết kế hệ thống trông gửi xe và ứng dụng python xây dựng module tự động nhận dạng biển số xe (Trang 26)