b. Phương pháp thực hành
3.4. Kết quả và hướng phát triển mở rộng
3.4.1. Kết quả của hướng giải quyết phân ngưỡng và tìm đối tượng
Với mục đích tìm hiểu bài toán nhận dạng biển số xe và do thời gian có hạn, kiến thức chưa được chuyên sâu về xử lý ảnh nên nhóm em chưa thể hoàn thành được một cách tối ưu hoá nhất code trong phần xử lý ảnh OpenCV of Python. Nhóm em chỉ có thể dừng lại ở việc xây dựng hướng giải quyết và xây dựng chương trình phát hiện biển số xe và đọc biển số.
Trong giai đoạn tìm và chọn ảnh, nhóm em gặp rất nhiều khó khăn khi tìm những ảnh biển số có chất lượng rõ nét để nhận dạng. Mặc dù nhóm em đã sử dụng bộ lọc để làm giảm nhiễu nhưng có rất nhiều ảnh không thể nhận dạng được vị trí của biển số xe, đôi khi còn nhầm biển số sang các vị trí khác.
Từ thực nghiệm, nhóm em đã nhận thấy được chương trình kiểm nghiệm của nhóm em sẽ tiến hành quét ảnh xám với khoảng xám từ [100,220] đây là khoảng xám sẽ được sử dụng để xử lý nhị phân ảnh nên em sẽ sử dụng khoảng ngưỡng là [100,200].
Trong giai đoạn thứ 3 thì nhóm em có sử dụng hàm findcontourns do thư viện của OpenCV cấp sẵn chỉ sử dụng được ảnh đầu vào là Canny hoặc ảnh nhị
phân vì vậy ta bị giới hạn việc sử dụng các phương pháp phát hiện biên hoặc vùng là phương pháp biên Canny và phương pháp nhị phân.
Kết quả thí nghiệm
Mẫu 1 : Ảnh biển số xe ô tô, xe máy dân dụng nền trắng chữ đen
Với mẫu này nhóm em chỉ nhận dạng được vị trí của của biển số xe và cắt được các ảnh của biển số. Chưa thể đi vào đọc được kí tự trong biển thành text, xảy ra rất nhiều lỗi về font chữ khi nhận dạng kí tự.
Mẫu 2: mẫu vẽ tương tượng biển số trên Pain 3D
Với mẫu này thì phần khung và kí tự sẽ được rõ nét, có thể đọc được các kí tự xuất hiện trong ảnh. Đọc được văn bản xuất hiện trong ảnh chuẩn xác đến 90%.
Mô phỏng động cơ có thể điều chỉnh tốc độ theo ý muốn và điều khiển động cơ có thể chạy theo chiều thuận/nghịch theo yêu cầu của người điều khiển.
3.4.2. Hướng phát triển mở rộng bài toán nhận dạng biển số xe3.4.2.1 Nhận xét 3.4.2.1 Nhận xét
Từ những kết quả thu được (phần 4.1) em thấy giải quyết bài toán nhận dạng biến số xe theo hướng “ phân ngưỡng tìm đối tượng” có những ưu điểm sau:
Ưu điểm: Thuật toán cải đặt nhanh. tìm vùng biến số và cách ly ký tự với tỉ
lệ thành công cao ( ở những biên số thông thường). tìm được ở những ảnh tự nhiên, vùng biến số bị nghiêng.
Nhược điểm: Nhận dạng kém với những biên số có sự tương phản với ánh
nên thấp như biển nền đỏ, nền bị mờ, những biển số có đường viễn mảnh, biển số có lắp những thiết bị trang trí. biển bị bóng lóa do ánh sáng, và những biên có phần chữ số không rõ ràng.
Vì vậy. đề bài toán phát huy hiệu quả tốt nhất thì thiết bị quan sát cần đặt ờ vị trí phù hợp. Đẻ thu được những ảnh không có bóng sáng và hiện thị toàn bộ biển số xe. Phương pháp nảy xử lý được ảnh bất kỷ vì vậy có thể được đùng vào việc quan sát quản lý giao thông.
Bài toán mô phỏng động cơ cần hoàn thiện hơn khi thêm cảm biến chạm để báo cho động cơ có thể tự dừng lại khi đến 1 giới hạn nhất định.
3.4.2.2. Hướng phát triển của bài toán.
Nâng cao hiệu quả chương trình, tách ly các kí tự trong biển số trong các trường hợp biên số bị nhiều nhiễu. mắt mắt thông tin đo nhiều từ điều kiện môi
trường. tìm vùng biển số trong ảnh có độ tương phản giữa biển số và nền thấp. Đặc biệt là biển xe có nên màu đỏ chữ trắng.
Phát triển chương trình thành module phần cửng. Có khả năng tương thích với các thiết bị quan sát như camera.
Kết hợp chương trình với những chương trình nhận dạng khác đẻ hồ trợ tốt hơn cho việc quản lý phương tiện giao thông. Ví dụ: kết hợp với chương trình nhận dạng chữ viết đề đưa biển số về dạng ký tự trên máy tính giúp công việc quản lý bến bãi...
Nghiên cứu theo hưởng một ứng dụng cụ thê như : giám sát phương tiện giao thông. xử lý vi phạm giao thông, quản lý xe tại các bãi giữ xe, các kho vật tư....
Bài toán có thể áp dụng cho bãi đỗ xe dễ dàng kiểm soát tốt hơn bằng thẻ RFID.
3.4.3. Ứng dụng thực tiễn của hệ thống nhận dạng biển số xe
Hệ thống nhận dạng biển số xe được xây dựng nhằm mục đích giám sát, kiểm soát các phương tiện. Dưới đây chúng ta để cập đến một số ứng dụng phổ biến đối với hệ thống nhận dạng biển số xe:
- Hệ thống nhận dạng biển số xe có thể phát triển lên đến tự động quét thẻ khi ra vào bến bãi, cửa sẽ tự động mở không cần đến người điều khiển khi nhận dnagj đúng biển số đã quét.
- Lưu trữ lại tất cả những biển số, người dùng đã ra vào bến bãi, thống kê số lượt ra vào/ ngày với công nghệ lưu trữ, xuất thông tin chính xác, có thể từ biển số xác định được chủ xe để dễ quản lý hơn và có thể hướng phát triển đến nhận diện cả khuôn mặt và đối sánh với chủ sở hữu phương tiện được gửi trong bến bãi.
KẾT LUẬN
Sự phát triển của công nghệ thông tin đĩ có những tác động tích cực đến nhiều mặt của đời sống xã hội trong đó phải kể tới lĩnh vực giám sát tự động. Trong giám sát tự động. việc giám sát đối với các phương tiện giao thông là một vẫn đẻ nỗi trội. Nhiều chính phủ, thành phố trên thế giớ đã xây dựng hệ thống giám sát tự động đối với các phương tiện giao thông của mình. Và hệ thống giám sát đều lấy biển số xe là mục tiêu giám sát.
Ở nước ta, các hệ thống giám sát tự động nói cung và hệ thông nhận dạng biển số xe nói riêng cũng đang được chú trọng tuy nhiên nó vẫn còn là lĩnh vực cần nhiều công sức đầu tư đẻ cải thiện phường pháp cũng như tỷ lệ tìm hiển thành công.
Đa phần các công tác quản lý, xử lý đối với các phương tiện giao thông đều cần nhân lực con người. Báo cáo nhằm mục đích tìm hiểu bài toán hệ nhận dnagj biển số xe với mục đích đê quản lý, giám sát các phương tiện giao thông.
Với mục đích xây dựng lên bài toán nhận dạng biển số xe này, em hy vọng sau này có thể làm tài liệu tham khảo để hướng đến phát triển nhưng công nghệ tự động ngày càng tiên tiến, hiện đại hơn.
PHỤ LỤC
Các thư viện cần cài
opencv-python imutils
pytesseract numpy as np openpyxl
Code bài toán Nhận dạng biển số xe với OpenCV
import cv2 import imutils import pytesseract import numpy as np import openpyxl import matplotlib.pyplot as plt from PIL import Image
max_size = 5000 min_size = 900
image = cv2.imread( "006.JPG") image = cv2.resize(image, (640, 480))
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) gray = cv2.bilateralFilter(gray, 11, 17, 17)
edged = cv2.Canny(gray, 100, 120) cv2.imshow(" anh canny", edged)
#cv2.imshow(" anh lam min", gray)
(cnts,_) = cv2.findContours(edged.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
cnts = sorted(cnts, key=cv2.contourArea, reverse=True)[:5] NumberPlateCnt = []
tmp = image.copy() count = 0
for c in cnts:
peri = cv2.arcLength(c, True)
approx = cv2.approxPolyDP(c, 0.02 * peri, True) cv2.drawContours(tmp,[c],-1,(0,0,128), 2) plate = approx break if len(approx) == 4: NumberPlateCnt.append(approx) if NumberPlateCnt is None:
print("khong nhan duoc bien so") else:
for plate in NumberPlateCnt:
cv2.drawContours(image,[plate],-1,(0,255,0),3) #cv2.imshow("anh da duoc nhan bien so",image) mask = np.zeros(gray.shape, np.uint8)
new_image = cv2.drawContours(mask, [plate], 0, 255, -1, ) new_image = cv2.bitwise_and(image , image, mask=mask)
(x, y) = np.where(mask == 255) (topx, topy) = (np.min(x), np.min(y))
(bottomx, bottomy) = (np.max(x), np.max(y))
Cropped = gray[topx-1:bottomx + 1, topy -1:bottomy +1] #cv2.imshow('Anh cat bien so', Cropped)
cv2.imwrite('anh bien so.jpg',Cropped)
pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract- OCR\tesseract.exe"
image = cv2.imread( 'anh bien so.jpg' )
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) blur = cv2.GaussianBlur(gray, (3,3), 0)
thresh = cv2.threshold(blur, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)[1]
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))
opening = cv2.morphologyEx(thresh, cv2.MORPH_OPEN, kernel, iterations=1) invert = 255 - opening
data = pytesseract.image_to_string(invert, lang='eng', config='--psm 12') print("THONG TIN NHAN DIEN :")
print(data) #cv2.imshow('thresh', thresh) #cv2.imshow('opening', opening) #cv2.imshow('invert', invert) cv2.waitKey(0) cv2.destroyAllWindows()
Code bài toán điều khiển động cơ DC
int in2=6; int nutnhanlen=10; int nutnhanxuong=11; void setup() { pinMode(in1, OUTPUT); pinMode(in2, OUTPUT); pinMode(nutnhanlen, INPUT_PULLUP); pinMode(nutnhanxuong, INPUT_PULLUP); } void loop() { int trangthainutlen=digitalRead(nutnhanlen); int trangthainutxuong=digitalRead(nutnhanxuong); if(trangthainutlen==0 && trangthainutxuong!=0){ tien();
}
else if (trangthainutlen!=0 && trangthainutxuong==0){ lui(); } else {dung();} } void tien(){ digitalWrite(in1,HIGH); digitalWrite(in2,LOW); } void lui(){
digitalWrite(in1,LOW); digitalWrite(in2,HIGH);} void dung(){ digitalWrite(in1,LOW); digitalWrite(in2,LOW); }
TÀI LIỆU THAM KHẢO Tiếng Việt
[1] Giáo trình môn học PGS.TS Đỗ Năng Toàn,TS Phạm Việt Bình xuất bản tháng 11 năm 2007
[2] Các trang wed dạy trí tuệ nhân tạo, xử lý ảnh MI AI, các trang wed về lập trình Arduino IDE…
Tiếng Anh
[3] learing OpenCV_computer vission with the OpenCV Library_Gảy Nreadki & Kaenler
[4] https://docs.opencv.org/
[5] https://vi.wikipedia.org/wiki/