Tải bản đầy đủ (.docx) (30 trang)

BÁO CÁO XỬ LÍ ẢNH_NHẬN DIỆN BIỂN SỐ

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (4.03 MB, 30 trang )

TRƯỜNG ĐẠI HỌC HỒNG ĐỨC

BÀI TẬP LỚN
MÔN: XỬ LÝ ẢNH
CHỦ ĐỀ : THIẾT KẾ HỆ THỐNG NHẬN DIỆN
BIỂN SỐ XE VỚI OPENCV

Thanh Hóa, ngày….tháng…. năm 2021


Bài Tập Lớn
Môn: Xử lý ảnh
Đề tài: “Thiết kế hệ thống nhận diện biển số xe với
OPENCV.”

Giáo viên hướng dẫn:

Nguyễn Đình Cơng

Người thực hiện:

Tơ Đức Liêm

Lớp: K22 – CNTT


MỤC LỤC
LỜI NÓI ĐẦU.......................................................................................................4
CHƯƠNG I: CƠ SỞ LÝ THUYẾT......................................................................5
1.


Giới thiệu về OpenCV......................................................................................................................5
1.1 Tổng quan về OpenCV.................................................................................................................5
1.2. Các tính năng của thư viện OpenCV............................................................................................5
1.3.Các ứng dụng của OpenCV..........................................................................................................6

2.

Những kỹ thuật xử lý ảnh liên quan...............................................................................................6
2.1.Bộ lọc Bilateral ( Bộ lọc song phương).......................................................................................6
2.2.Giải thuật phát hiện cạnh Canny – Canny Edge Detection.........................................................7
2.3 Contour........................................................................................................................................10

3.

Phương pháp và thuật toán nhận dạng ký tự..............................................................................13
3.1 Cơ sở dữ liệu..............................................................................................................................13
3.2 Phương pháp nhận dạng.............................................................................................................13
3.3. Thu nhận ảnh.............................................................................................................................13
3.4. Tiến hành tiền xử lí ảnh.............................................................................................................13

CHƯƠNG II: XÂY DỰNG THUẬT TOÁN......................................................15
1.Đọc,Resize ảnh và chuyển sang ảnh xám..........................................................................................15
2.Làm mờ các chi tiết khơng quan trọng..............................................................................................18
3.Thực hiện phát hiện cạnh..................................................................................................................18
4.Tìm đường bao và lọc ảnh biển số xe................................................................................................19
5.Phân đoạn và nhận diện kí tự biển số...............................................................................................21

CHƯƠNG III: TỔNG KẾT.................................................................................27
1.


Kết quả đạt được..........................................................................................................................27

2.

Những khó khăn và hạn chế của đề tài........................................................................................27

TÀI LIỆU THAM KHẢO...................................................................................29


LỜI NÓI ĐẦU
Trong xu thế hiện nay, đất nước ta đang chuyển mình theo sự phát triển chung
của thế giới và khu vực Châu Á bằng nền sản xuất đa dạng và đầy tiềm năng
và kéo theo đó An ninh luôn là mối quan tâm lớn của nhân loại. Ngày nay,
chúng ta có camera giám sát video trong trường học, bệnh viện và mọi nơi
công cộng khác để làm cho chúng ta cảm thấy an toàn. Theo một cuộc khảo
sát của HIS, ước tính có khoảng 245 triệu camera an ninh được lắp đặt và
hoạt động trở lại vào năm 2014, giống như cứ 30 người trên hành tinh này thì
có một camera an ninh. Với sự tiến bộ trong cơng nghệ, đặc biệt là trong Xử
lý hình ảnh và Học máy, có thể làm cho những máy ảnh này thông minh hơn
bằng cách đào tạo chúng để xử lý thông tin từ nguồn cấp dữ liệu Video.
Nguồn cấp dữ liệu video từ các máy ảnh này có thể được sử dụng để thực
hiện nhận dạng khuôn mặt , phân tích mẫu, phân tích cảm xúc và nhiều hơn
thế nữa để thực sự đưa nó đến gần với thứ gì đó giống như “Mắt thần” được
trình chiếu trong phim viễn tưởng. Trên thực tế, các công ty giám sát như
Hikvision và nhiều công ty khác đã bắt đầu triển khai các tính năng này trong
các sản phẩm của họ. Và hôm nay trong bài viết này chúng ta sẽ học cách
nhận biết và đọc Biển số xe ô tô bằng Tesseract OCR và OpenCV cùng với
những thuật xử lý ảnh liên quan.
Mặc dù em đã cố gắng rất nhiều để hoàn thành đề tài này, nhưng do đây là
một đề tài khá mới, chưa được giảng dạy nhiều trong các trường kỹ thuật và

do giới hạn về thời gian cũng như kiến thức nên nội dung cịn nhiều thiếu sót,
và bài nghiên cứu này của chúng em sẽ tạm dừng lại ở mức tìm hiểu cách
thức hoạt động của hệ thống chấm điểm trắc nghiệm tự động, xem như là một
phương thức ơn tập và vận dụng những gì đã được học trong thời gian qua .
Rất mong sự đóng góp ý kiến của q thầy cơ và các bạn sinh viên để luận
văn được hoàn thiện hơn.

Chúng em xin chân thành cảm ơn!


CHƯƠNG I: CƠ SỞ LÝ THUYẾT

1. Giới thiệu về OpenCV
Opencv là mã nguồn mở của Intel, nó là một thư viện có khả năng nhúng vào
trong các chương trình có khả năng nhận diện hình ảnh của máy tính. Nó bao
gồm khả năng tân tiến như phát hiện đối tượng, theo dõi đối tượng, nhận diện
đối tượng… ngồi ra nó cịn cung cấp rất nhiều thuật tốn xử lý ảnh thông qua
hàm API.

1.1 Tổng quan về OpenCV
OpenCV là viết tắt của Open Source Computer Vision được xem là một trong
những thư viện mã nguồn mở hàng đầu cho việc xử lý ảnh theo thời gian thực.
Intel phát hành bản đầu tiên của OpenCV vào năm 1999. Ban đầu, nó như là thư
viện xử lý ảnh của Intel. Nhưng cascvaans đề phụ thuộc đã được gỡ bỏ và bây
giờ chúng ta có thể sử dụng OpenCV như là một thư viện độc lập.
OpenCV hơc trợ đa nền tảng. Ban đầu nó được phát triển trong C++. Hơn thế
nữa, Python và Java cũng được hỗ trợ. Và OpenCV chạy trên nhiều hệ điều hành
khác nhau như Windows, Linux, OS, FreeBSD, NetBSD, OpenBSD,…

1.2. Các tính năng của thư viện OpenCV

OpenCV hiện có hơn 47 nghìn người dùng và ước tính hơn 14 triệu số lượt tải
xuống, thư viện OpenCV được sử dụng rộng rãi trong nhiều lĩnh vực như:
 Đọc và ghi hình ảnh
 Ghi hình và lưu video
 Xử lý hình ảnh(lọc, chuyển đổi)
 Thực hiện nhận dạng đặc điểm
 Phát hiện các đối tượng được xác định như khuôn mặt, mắt, xe… trong
hình ảnh hoặc video.
 Phân tích video,… ước lượng chuyển động của nó, tách nền và theo dõi
các đối tượng trong video.


1.3.Các ứng dụng của OpenCV
OpenCV hỗ trợ phát triển nhiều lĩnh vực như: Y học, Công nghiệp tự động, An
ninh, Vận chuyển, Phát triển người máy…

2. Những kỹ thuật xử lý ảnh liên quan
2.1. Bộ lọc Bilateral ( Bộ lọc song phương)
Bộ lọc song phương có hiệu quả cao trong việc loại bỏ nhiễu trong khi vẫn giữ
cho các cạnh sắc nét bằng cách kết hợp khơng tuyến tính của cá giá trị ảnh gần
nhau. Phương thức này không lặp, cục bộ và đơn giản. Nó kết hợp các mức xám
hay màu sắc dựa trên sự thân cận hình học của chúng và sự gần giống về độ
sáng của chúng. Ngược với các bộ lọc hoạt động trên 3 dải màu riêng rẽ, bộ lọc
hai chiều có thể thi hành việc đo đạc có chủ đích với khơng gian màu CIELab,và làm mượt màu và bảo toàn cạnh theo cái cách phù hợp với nhận thức của
con người. Hơn nữa, khác với phép lọc chuẩn, bộ lọc hai chiều không tạo ra các
bóng mờ của màu dọc theo các cạnh của ảnh màu, và giảm đi bóng mờ của màu
xuất hiện trên ảnh gốc.
Nếu 3 kênh của ảnh màu được lọc riêng rẽ với nhau thì các màu sắc bị sai lệch
gần với các biên của ảnh. Bởi thực tế, các kênh màu khác nhau có các mức
tương phản khác nhau nên nó được lọc khác nhau. Việc làm mượt riêng lẻ sẽ

làm xáo trộn sự cân bằng của màu sắc, xuất hiện những màu sắc kết được kết
hợp không mong muốn. Bộ lọc hai chiều, có thể thực thi với 3 kênh màu cùng 1
lúc nên có thể nói thẳng là màu vừa tương tự vừa không tương tự. Chỉ những
màu phù hợp nhận thức thì bằng trung bình của các màu khác , và các màu
không phù hợp thì bị loại bỏ. Bộ lọc song phương xét đến cả dải màu của ảnh
trong khi các bộ lọc truyền thống chỉ xét từng miền ảnh. Hai pixel có thể được
coi như là gần với một pixel khác, điều đó phụ thuộc vào vị trí khơng gian gần
nhau, hay chúng có thể tương tự với một pixel khác, điều đó được hiểu là xấp xỉ
về giá trị. Bộ lọc song phương vừa có thể qn bình nhiễu trên vùng ảnh vừa có


thể giữ lại đường viền của miền không bị quân bình. Nhược điểm của bộ lọc là
hoạt động chậm hơn so với các bộ lọc khác
Trong OpenCV, chúng ta sử dụng hàm để hiển thị lọc song phương :
cv2.bilateralFilter().Hình 1 là kết quả thực hiện lọc ảnh với phép lọc Bilateral

Hình 1

2.2. Giải thuật phát hiện cạnh Canny – Canny Edge
Detection
Trong hình ảnh, thường tồn tại các thành phần như: vùng trơn, góc/ cạnh và
nhiễu. Cạnh trong hình ảnh mang đặc trưng quan trọng, thường là thuộc đối
tượng trong ảnh (object). 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.
Giải thuật phát hiện cạnh Canny gồm 4 bước chính sau:

 Giảm nhiễu:
Bước này sẽ làm mờ ảnh, giảm nhiễu thông qua bộ lọc Bilateral.

 Tìm cường độ Gradient và hướng Gradient của bức ảnh:



Ta dùng bộ lọc SobelX và SobelY để tính được ảnh đạo hàm Gx và Gy. Từ
những hình ảnh này, chúng ta có thể tìm được độ dài cạnh Gradient và phương
cho mỗi pixel theo công thức:

|G| =

Phương gradient luôn ln vng góc với các cạnh. Nó được làm trịn thành một
trong bốn góc biểu diễn trục dọc, ngang và 2 phương của đường chéo.

 Triệt tiêu phi tối đa( Non-maxiamum Suppression _ viết
tắt NMS):
Triệt tiêu phi tối đa hiểu đơn giản là một thuật toán loại bỏ nếu như không phải
là giá trị lớn nhất. Trong object detection, để phát hiện các bounding box thì ta
sẽ phải tìm ra tập hợp các bounding box mà tỉ lệ overlapleen anchor box lớn hơn
0.5 một bounding box có kích thước lớn nhất và xóa các bounding box cịn lại.
Đối với tìm edge cũng vậy, sau khi nhận được độ lớn của gradient và phương,
một lượt quét được thực hiện trên các bức ảnh để loại bỏ bất kì pixels nào khơng
tạo thành cạnh. Để thực hiện được điều đó, tại mỗi pixel, pixel được kiểm tra
xem liệu có là một cực đại cục bộ trong số các lân cận của nó theo phương của
gradient.
Ví dụ: nếu hướng gradient đang là 0 độ, ta sẽ sopixel trung tâm với pixel liền
trái và liền phải của nó. Trường hợp khác nếu gradient là 45 độ, ta sẽ so sánh với
2 pixel hàng xóm là góc trên bên phải và góc dưới bên trái của pixel trung tâm.
Tương tự cho các trường hợp hướng gradient còn lại. Kết thúc bước này ta được
một mặt nạ nhị phân. Như Hình 2

Hình 2



 Lọc ngưỡng:
Ở bước này ta sẽ quyết định xem tồn bộ các cạnh có những cạnh nào thực sự là
cạnh và những cạnh nào không thông qua việc thiết lập ngưỡng gồm 2 giá trị,
minVal và maxVal. Một cạnh bất kì có cường độ gradient lớn hơn ngưỡng
maxVal thì nó chắc chắn la các cạnh, và những cạnh có cường độ gradient nhỏ
hơn ngưỡng minVal sẽ bị loại bỏ. Nếu một cạnh có những điểm ảnh nằm trong
ngưỡng này thì có thể được xem xét thuộc cùng 1 cạnh hoặc không thuộc dựa
trên sự kết nối của các điểm với nhau. Nếu liền kề thì ta giữ, cịn khơng liền kề
bất cứ pixel cạnh nào thì ta loại. sau bước này ta cũng có thể áp dụng thêm bước
hậu xử lý loại bỏ nhiễu (tức là những pixel cạnh rời rạc hay cạnh ngắn) dựa trên
giả định rằng các cạnh là những đường dài. Sau đây là ảnh minh họa về ngưỡng
lọc:


Như ta thấy, trên hình vẽ là 2 cạnh A màu đỏ và B màu xanh. Cạnh A do có các
điểm có cường độ gradient nằm trên maxVal nên được xem là những cạnh đạt
tiêu chuẩn, mặc dù trên cạnh A có những điểm nằm trong ngưỡng từ minVal đến
maxVal. Cịn cạnh B được xem là khơng đạt tiêu chuẩn vì tồn bộ các điểm nằm
trên B đều nằm trong ngưỡng từ minVal đến maxVal. Như vậy, cạnh A sẽ được
giữ lại và cạnh B sẽ được xóa bỏ.
Tất cả các bước trên được OpenCV gói gọn trong hàm:
cv2.Canny(img, minVal, maxVal)
Và đây là kết quả thử nghiệm(Hình30 với minVal=100, maxVal=200:

Hình 3

2.3Contour
Contour được hiểu đơn giản như là một đường cong liên kết toàn bộ các điểm
liên tục (dọc theo đường biên) mà có cùng màu sắc hoặc cùng giá trị cường độ.

Contour 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ể. Có một số lưu ý khi sử dụng Contour:


 Để độ chính xác cao hơn thì nên nhị phân hóa bức ảnh. Do đó trước khi phát
hiện contour thì ta nên áp dụng các kỹ thuật nhị phân hóa ảnh ở xử lý ảnh cơ bản
như là đặt ngưỡng, hoặc candy edge detection.
 Hàm findContours() và drawContours() sẽ thay đổi hình ảnh gốc. Do đó nếu bạn
muốn giữ lại ảnh gốc sau khi tìm được contour, hãy lưu nó vào một biến khác.
 Trong OpenCV, việc tìm một contour là việc tìm một đối tượng có màu trắng
trên nền đen. Cho nên, chúng ta sẽ phải set đối tượng thành màu trắng và để nền
là màu đen.
Về việc sử dụng contour trong OpenCV, thì OpenCV có hỗ trợ chúng ta hàm để
tìm contour của một bức ảnh như sau:

Cv2.findContours(binaryImage, typeofContour, methodofContour)

Trong đó:
 binaryImage: Ảnh nhị phân gốc. Có một chú ý là sau khi sử dụng hàm
findContours thì giá trị của nó cũng sẽ thay đổi theo, nên khi sử dụng chúng ta
có thể áp dụng binaryImage.copy() để không làm thay đổi giá trị của
binaryImage.
 typeofContour: như là phương pháp trích xuất contour, với:
o RETR_EXTERNAL: đưa ra các đường bao "bên ngồi", vì vậy nếu bạn có (giả
sử) một đường bao bao quanh một đường viền khác (như các vịng trịn đồng

o
o

tâm), thì chỉ có đường viền ngồi cùng được đưa ra.

RETR_LIST: lấy tất cả các đường bao mà khơng có phân cấp.
RETR_CCOMP: lấy ra tất cả các đường bao và sắp xếp chúng thành phân cấp 2
cấp. Tức là các đường bao bên ngoài của đối được đặt trong phân cấp 1. Và
đường bao của các lỗ bên trong đối tượng (nếu có) được đặt trong phân cấp 2.
RETR_TREE: truy xuất tất cả các đường bao có thể có từ ảnh nhị phân.

o
 methodofContour: phương thức contour, với:
o
o

CHAIN_APPROX_NONE: lưu trữ tất cả các điểm trên đường viền.
CHAIN_APPROX_SIMPLE: nén các phân đoạn ngang, dọc, chéo của chúng và
chỉ để lại điểm cuối để nhận dạng đường viền. Ví dụ: một đường bao hình chữ
nhật được mã hóa bằng 4 điểm (là các góc)


Ngồi ra, OpenCV cịn hỗ trợ chúng ta hàm vẽ contour lên bức ảnh, giúp chúng
ta hình rõ ràng hơn contour đã được xác định:

Cv2.drawContours(img, contours, index, color, thickness)
Trong đó:
 Img: ảnh cần tìm contour.
 Contours: danh sách các contour, nếu muốn vẽ một contour thì ta phải cho nó
vào trong một list.
 Index: vị trí của contour, thơng thường là -1.
 Color: giá trị màu contour chúng ta muốn vẽ, ở dạng BGR.
 Thickness: độ dày của đường contour cần vẽ, giá trị của thickness càng lớn thì
đường contour càng dày.


Ví dụ: Thực hiện tìm contour trong bức ảnh:


3. Phương pháp và thuật toán nhận dạng ký tự.
Ở đây, ta sử dụng mạng feed-forward và thuật toán lan truyền ngược sai số Back
Propagation để xử lý bài toán.

3.1 Cơ sở dữ liệu
Cơ sở dữ liệu cho bài toán nhận dạng ký tự quang gồm 90 ký tự theo chữ cái
Latin với hai loại font: Times New Roman và Arial, trong bảng mã Unicode
tương ứng . Với thư viện hổ trợ python là tessract.

3.2 Phương pháp nhận dạng
Phương pháp nhận dạng ký tự quang bằng mạng neural bao gồm các bước
được mô tả như sau:
− Thu nhận ảnh
− Tiền xử lý ảnh cắt biển số
− Tiến hành phân tích ảnh để tìm ký tự
− Tiền xử lý ký tự
− Mạng Neural nhận dạng ký tự
− Hậu xử lý dữ liệu

3.3. Thu nhận ảnh
Input hình ảnh chứa biển số , tài liệu có thể được thu nhận bằng máy quét
scanner, webcam, hoặc các thiết bị thu nhận ảnh thông dụng khác.

3.4. Tiến hành tiền xử lí ảnh
− Chuyển ảnh chứa biển số xe sang ảnh Gray
− Từ ảnh Gray tiến hành tách biên ảnh



−Tìm các contour trong ảnh đã threshold và giữ lại các contour có khả năng là
số.
−Tiến hành cắt coutour chứa biển số và tiến hành phân tích ký tự

3.5. Tiến hành phân tích ảnh để tìm ký tự
Việc phân tích ảnh để tìm ký tự bao gồm các bước sau:
− Đầu tiên, tiến hành tách dòng ký tự ra khỏi ảnh ký tự
− Thứ hai, tách từ riêng biệt ra khỏi dòng ký tự
− Cuối cùng, tách riêng từng ký tự ra khỏi từ

3.6. Tiền xử lý ký tự
Quá trình tiền xử lý ký tự giải quyết vấn đề ánh xạ giá trị pixel ảnh ký tự vào ma
trận 10x15 và tuyến tính hóa ma trận thành 150 giá trị đưa vào 150 Neural ở lớp
vào của mạng.

3.7. Mạng Neural nhận dạng ký tự
Hiện nay, các loại mạng Neural thông dụng gồm có: mạng truyền thẳng (feelforward), mạng hồi qui (feedback), mạng tự tổ chức (selforganizing). Mạng
truyền thẳng feed-forward bao gồm nhiều lớp các đơn vị xử lý phi tuyến
(nonlinear processing unit). Trong phương pháp này, chúng ta thiết kế chương
trình nhận dạng sử dụng mạng MLP có 3 lớp: lớp vào có 150 nút tương ứng với
250 phần tử vectơ ma trận pixel, lớp ẩn có 600 Neural và lớp ra có 16 Neural
với 16 bit. Miêu tả ở hình 4.

Hình 4 Q TRÌNH NHẬN DẠNG KÝ TỰ


CHƯƠNG II: XÂY DỰNG THUẬT TOÁN

Từ những kiến thức đã được phổ cập ở trên, chúng ta bắt đầu đi vào

bài tốn. Vậy thì để xây dựng được hệ thống chấm điểm trắc nghiệm
tự động, ta cần trải qua 6 bước sau:
Bước 1: Thay đổi kích thước hình ảnh thành kích thước u cầu và
sau đó chuyển sang thang độ xám
Bước 2: Sử dụng bộ lọc song phương (Làm mờ) sẽ loại bỏ các chi tiết
không mong muốn khỏi ảnh
Bước 3: Thực hiện phát hiện cạnh bằng phương pháp canny edge từ
OpenCV
Bước 4: Tìm viền và lọc ảnh biển số xe
Bước 5:Phân đoạn và nhận diện kí tự biển số.
Vậy sau khi đã xác định được các bước cần thực hiện, ta sẽ cùng đi
vào giải quyết thuật toán!

1. Đọc,Resize ảnh và chuyển sang ảnh xám


Vậy trước tiên, để chương trình thực hiện được ta cần sự hỗ trợ của một số thư
viện Python. Cụ thể như sau:

Từ dòng 1-8 là các thư viện cần có. Chúng ta nên đã cài đặt OpenCV và Numpy
trên hệ thống của mình, và chúng ta nên cập nhật thư viện bản mới nhất để có
được sự hỗ trợ đầy đủ hơn. Trong đó:
 Tkinter cung cấp giao diện hướng đối tượng cho bộ công cụ tk GUI.
 Imutils hỗ trợ các tác vụ cơ bản
 PIL hỗ trợ định dạng tệp mở rộng, biểu diễn nội bộ hiệu quả và khả năng
xử lý hình ảnh mạnh mẽ.

Từ dịng 10-11, chúng ta tiến hành truy xuất lệnh và dữ liệu tập mẫu đồng thời
chọn những kí tự có thể có trong biển số xe.



Tiếp đến dòng 12-17 là chúng ta tạo 1 hàm tinh chỉnh, loại bỏ những kí tự
khơng hợp ý
Tiếp theo, chúng ta sẽ tạo 1 hàm có nhiệm vụ khi mở khung giao diện lên thì khi
nhấn nút chạy chương trình‘ phathienbs ’+ tiến hành chọn ảnh xử lí thì chương
trình sẽ in đường dẫn ảnh ra màn hình và tiến hành lấy tên file ảnh với đuôi
ảnh .JPG

Tiếp theo là thay đổi kích thước ảnh giúp chúng ta tránh mọi vấn đề với hình
ảnh có độ phân giải lớn hơn, đảm bảo biển số vẫn còn trong khung sau khi thay
đổi kích thước. Tỷ lệ màu xám là phổ biến trong tất cả các bước xử lý ảnh.

Hình ảnh sẽ được biến đổi như thế này khi bước này hoàn thành


2. Làm mờ các chi tiết khơng quan trọng
Mỗi hình ảnh sẽ có thơng tin hữu ích và vơ ích, trong trường hợp này đối với
chúng ta chỉ có biển số xe là thơng tin hữu ích cịn lại là khá nhiều vơ ích cho
chương trình của chúng tơi. Thơng tin vơ ích này được gọi là nhiễu. Thơng
thường, sử dụng bộ lọc song phương (Làm mờ) sẽ loại bỏ các chi tiết khơng
mong muốn khỏi ảnh

Hình ảnh đầu ra được hiển thị bên dưới, và ta có thể thấy các chi tiết nền (cây và
tòa nhà) bị làm mờ trong hình ảnh này. Bằng cách này, chúng ta có thể tránh
chương trình tập trung vào các vùng này sau đó.


3.Thực hiện phát hiện cạnh
Dựa vào input của việc xử lý ảnh trên thì việc phát hiện cạnh tương đối dễ dàng
khi chúng ta chỉ cần sử dụng phương pháp candy edge từ opencv


Và đây là kết quả có được từ câu lệnh trên:


4.Tìm đường bao và lọc ảnh biển số xe
Có lẽ đây là phần khó nhất của chương trình

Khi bộ đếm đã được phát hiện, chúng ta sắp xếp chúng từ lớn đến nhỏ và chỉ
xem xét 10 kết quả đầu tiên bỏ qua những kết quả khác. Trong hình ảnh của
chúng ta, đường viền có thể là bất cứ thứ gì có bề mặt kín, biển số xe cũng sẽ ở
đó vì nó cũng là một bề mặt đóng.
Để lọc hình ảnh biển số xe trong số các kết quả thu được, chúng ta sẽ lặp lại tất
cả các kết quả và kiểm tra xem hình ảnh nào có đường viền hình chữ nhật với
bốn cạnh và hình khép kín. Vì biển số xe chắc chắn sẽ là một hình chữ nhật có
bốn cạnh.


Ở hàm lặp này thì chúng ta đơn giản hóa số điểm trong đường viền, làm cho nó
trở thành hình dạng hình học "cơ bản hơn".
Dịng 56 sẽ kiểm tra xem đường viền gần đúng đã xác định trước đó có bốn
điểm hay khơng cùng với kích thước của viền phải nằm trong khoảng ảnh giá trị
đầu vào. Nếu có chúng ta lưu nó vào một biến có tên là screenCnt và sau đó vẽ
một hộp hình chữ nhật xung quanh nó để đảm bảo rằng chúng ta đã phát hiện
biển số xe một cách chính xác.


Bây giờ chúng ta đã biết biển số ở đâu, những thơng tin cịn lại khá nhiều vơ ích
đối với chúng ta. Như vậy chúng ta có thể tiến hành che toàn bộ bức tranh trừ
chỗ để biển số khi dùng lệnh


Ở đây chúng ta tạo một ảnh ban đầu kích thước bằng ảnh gray với giá trị pixel
tại mỗi điểm ảnh =0 cho ảnh màu đen Tiếp theo vẽ contour lên ảnh đó

5.Phân đoạn và nhận diện kí tự biển số
Bước tiếp theo trong Nhận dạng biển số là phân đoạn biển số xe ra khỏi hình
ảnh bằng cách cắt nó và lưu nó thành một hình ảnh mới. Sau đó, chúng ta có thể
sử dụng hình ảnh này để phát hiện ký tự trong đó

Tiến hành tìm các tọa độ của biển số để tiến hành cắt biển số. Hình ảnh kết quả
được hiển thị bên dưới. Thơng thường được thêm vào để cắt hình ảnh, chúng ta
cũng có thể tơ xám nó và làm cạnh nó nếu được yêu cầu. Điều này được thực
hiện để cải thiện khả năng nhận dạng ký tự trong bước tiếp theo. Tuy nhiên, em
thấy rằng nó hoạt động tốt ngay cả với hình ảnh gốc.Ở đây chúng ta tiến hành
chuyển ảnh sau khi cắt sang số nhị phân để tiến hành nhận diện kí tự có trên
biển số.


Cuối cùng là nhận dạng ký tự. Em sẽ đọc thơng tin biển số từ hình ảnh được
phân đoạn . Chúng ta sẽ sử dụng thư viện pytesseract để đọc các ký tự từ hình
ảnh

Kí tự thu được qua hàm pytesseract.image_to_string(binary, lang="eng",
config="--psm 7") và sẽ tự động cập nhật trọng số .Tiếp theo vẽ kí tự nhận dạng
được lên ảnh chính . và hiển thị kết quả lên màn hình

Ảnh được chọn xử lí và biển số phát hiện được


Ảnh được chọn xử lí tách biên


Kết quả thu được sau nhận diện :

Ảnh được chọn xử lí và biển số phát hiện được


Ảnh được chọn xử lí tách biên
Kết quả thu được sau nhận diện :

Ảnh được chọn xử lí và biển số phát hiện được


×