KẾT QUẢ THỰC HIỆN

Một phần của tài liệu Nhóm_10 (Trang 32 - 37)

Quá trình thực hiện sẽ được chia ra làm các giai đoạn như sau: ➢ Giai đoạn 1: chuyển ảnh sang thang đo đọ xám

import cv2 import pytesseract

pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files

(x86)\TesseractOCR\tesseract.exe' image = cv2.imread('m1.jpg') gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) cv2.imshow('anhxam',gray_image) cv2.waitKey(0)

Hình 3.20: Đưa ảnh về thang độ xám a, biển chữ nhật b, biển vuông

➢ Giai đoạn 2: xử lý nhiễu

gray_image = cv2.bilateralFilter(gray_image, 5, 25, 25) cv2.imshow("loc nhieu", gray_image) cv2.waitKey(0)

Kết quả thu được sẽ là:

Hình 3.21: Loại bỏ nhiễu của ảnh a, biển chữ nhật b, biển vuông

➢ Giai đoạn 3: chạy hàm để dò biên của ảnh. canny_edge =

cv2.Canny(gray_image, 100, 200) cv2.imshow('phat hien canh',canny_edge) cv2.waitKey(0)

Hình 3.22: Tìm đường viền của ảnh a, biển chữ nhật b, biển vuông

➢ Giai đoạn 4: Từ các biên trên ta đi tìm các đường viền lớn nhất để giảm thiểu

thời gian sử lý cho các giai đoạn sau:

contours, new = cv2.findContours(canny_edge.copy(), cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)

contours=sorted(contours, key = cv2.contourArea, reverse = True)[:30] img2 = image.copy() cv2.drawContours(img2, contours, -1, (0,255,0), 3) cv2.imshow(" top 30 contours", img2) cv2.waitKey(0)

Kết quả thu được như sau:

Hình 3.23: Tìm các contours

a, biển chữ nhật b, biển vuông

➢ Giai đoạn 5: Tìm vị trí của biển số từ những đường viền vừa tìm được ở

trên.

contour_with_license_plate = None license_plate = None x = None y = None w = None h = None for contour in contours:

perimeter = cv2.arcLength(contour, True)

approx = cv2.approxPolyDP(contour, 0.02 * perimeter, True) if len(approx) == 4:

contour_with_license_plate = approx x, y, w, h = cv2.boundingRect(contour)

license_plate = gray_image[y:y + h, x:x + w] break

Kết quả sẽ thu được tọa độ của biển số biểu diễn bởi 4 tham sô x,y,w,h từ đó ta xẽ xác định được vị trí của biển số vào khoanh vùng nó bằng lệnh sau: cv2.drawContours(image, [approx], -1, (0,255,0), 3)

cv2.imshow("xac dinh bien so tren anh goc", image) cv2.waitKey(0)

Kết quả sẽ được như sau:

Hình 3.24: Xác định vị trí của biển số a, biển chữ nhật b, biển vuông

➢ Giai đoạn 6: Cắt biển số và nhận diện biển số.

license_plate = gray_image[y:y + h, x:x + w] text =

pytesseract.image_to_string(license_plate) print("Thong tin nhan dien :", text) cv2.imshow("bien so",license_plate) cv2.waitKey(0)

Hình 3.25: Cắt và tách biển số a, biển chữ nhật b, biển vuông Và một bảng hiển thị biển số dạng text như hình:

Hình 3.26: Kết quả cuối cùng in ra dạng text biển hình chữ nhật

TỔNG KẾT LẠI

Khi sử dụng các lệnh trên ta đã nhận diện được biể số của một xe bất kì từ ảnh chụp khi xe đi vào bãi đỗ xe.

Một phần của tài liệu Nhóm_10 (Trang 32 - 37)

Tải bản đầy đủ (DOCX)

(39 trang)
w