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 oto :
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 Giới thiệu OpenCV 1.1 Tổng quan OpenCV .5 1.2 Các tính thư viện OpenCV 1.3.Các ứng dụng OpenCV 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 cạnh Canny – Canny Edge Detection .7 2.3 Contour 10 Phương pháp thuật toán nhận dạng ký tự 13 3.1 Cơ sở 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 chuyển sang ảnh xám 15 2.Làm mờ chi tiết không quan trọng 18 3.Thực phát cạnh 18 4.Tìm đường bao lọc ảnh biển số xe 19 5.Phân đoạn nhận diện kí tự biển số .21 CHƯƠNG III: TỔNG KẾT .27 Kết đạt 27 Những khó khăn hạn chế đề tài 27 TÀI LIỆU THAM KHẢO 29 LỜI NÓI ĐẦU Trong xu nay, đất nước ta chuyển theo phát triển chung giới khu vực Châu Á sản xuất đa dạng đầy tiềm kéo theo An ninh ln mối quan tâm lớn nhân loại Ngày nay, có camera giám sát video trường học, bệnh viện nơi công cộng khác để làm cho cảm thấy an toàn Theo khảo sát HIS, ước tính có khoảng 245 triệu camera an ninh lắp đặt hoạt động trở lại vào năm 2014, giống 30 người hành tinh có camera an ninh Với tiến công nghệ, đặc biệt Xử lý hình ảnh Học máy, làm cho máy ảnh thông minh cách đào tạo chúng để xử lý thông tin từ nguồn cấp liệu Video Nguồn cấp liệu video từ máy ảnh sử dụng để thực nhận dạng khuôn mặt , phân tích mẫu, phân tích cảm xúc nhiều để thực đưa đến gần với thứ giống “Mắt thần” trình chiếu phim viễn tưởng Trên thực tế, công ty giám sát Hikvision nhiều công ty khác bắt đầu triển khai tính sản phẩm họ Và hôm viết học cách nhận biết đọc Biển số xe ô tô Tesseract OCR OpenCV với thuật xử lý ảnh liên quan Mặc dù em cố gắng nhiều để hoàn thành đề tài này, đề tài mới, chưa giảng dạy nhiều trường kỹ thuật giới hạn thời gian kiến thức nên nội dung nhiều thiếu sót, nghiên cứu chúng em tạm dừng lại mức tìm hiểu cách thức hoạt động hệ thống chấm điểm trắc nghiệm tự động, xem phương thức ôn tập vận dụng học thời gian qua Rất mong đóng góp ý kiến quý thầy cô bạn sinh viên để luận văn hoàn thiện Chúng em xin chân thành cảm ơn! CHƯƠNG I: CƠ SỞ LÝ THUYẾT Giới thiệu OpenCV Opencv mã nguồn mở Intel, thư viện có khả nhúng vào chương trình có khả nhận diện hình ảnh máy tính Nó bao gồm khả tân tiến phát đối tượng, theo dõi đối tượng, nhận diện đối tượng… ngồi cịn cung cấp nhiều thuật tốn xử lý ảnh thơng qua hàm API 1.1 Tổng quan OpenCV OpenCV viết tắt Open Source Computer Vision xem 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 OpenCV vào năm 1999 Ban đầu, thư viện xử lý ảnh Intel Nhưng cascvaans đề phụ thuộc gỡ bỏ sử dụng OpenCV thư viện độc lập OpenCV hôc trợ đa tảng Ban đầu phát triển C++ Hơn nữa, Python Java hỗ trợ Và OpenCV chạy nhiều hệ điều hành khác Windows, Linux, OS, FreeBSD, NetBSD, OpenBSD,… 1.2 Các tính thư viện OpenCV OpenCV có 47 nghìn người dùng ước tính 14 triệu số lượt tải xuống, thư viện OpenCV sử dụng rộng rãi nhiều lĩnh vực như: Đọc ghi hình ảnh Ghi hình lưu video Xử lý hình ảnh(lọc, chuyển đổi) Thực nhận dạng đặc điểm Phát đối tượng xác định khn mặt, mắt, xe… hình ảnh video Phân tích video,… ước lượng chuyển động nó, tách theo dõi đối tượng video 1.3.Các ứng dụng 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… 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 cao việc loại bỏ nhiễu giữ cho cạnh sắc nét cách kết hợp khơng tuyến tính cá giá trị ảnh gần Phương thức không lặp, cục đơn giản Nó kết hợp mức xám hay màu sắc dựa thân cận hình học chúng gần giống độ sáng chúng Ngược với lọc hoạt động dải màu riêng rẽ, lọc hai chiều 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 bảo toàn cạnh theo cách phù hợp với nhận thức người Hơn nữa, khác với phép lọc chuẩn, lọc hai chiều khơng tạo bóng mờ màu dọc theo cạnh ảnh màu, giảm bóng mờ màu xuất ảnh gốc Nếu kênh ảnh màu lọc riêng rẽ với màu sắc bị sai lệch gần với biên ảnh Bởi thực tế, kênh màu khác có mức tương phản khác nên lọc khác Việc làm mượt riêng lẻ làm xáo trộn cân màu sắc, xuất màu sắc kết kết hợp không mong muốn Bộ lọc hai chiều, thực thi với kênh màu lúc nên nói thẳng màu vừa tương tự vừa khơng tương tự Chỉ màu phù hợp nhận thức trung bình màu khác , màu khơng phù hợp bị loại bỏ Bộ lọc song phương xét đến dải màu ảnh lọc truyền thống xét miền ảnh Hai pixel coi gần với pixel khác, điều phụ thuộc vào vị trí khơng gian gần nhau, hay chúng tương tự với pixel khác, điều hiểu xấp xỉ giá trị Bộ lọc song phương vừa qn bình nhiễu vùng ảnh vừa giữ lại đường viền miền khơng bị qn bình Nhược điểm lọc hoạt động chậm so với lọc khác Trong OpenCV, sử dụng hàm để hiển thị lọc song phương : cv2.bilateralFilter().Hình kết thực lọc ảnh với phép lọc Bilateral Hình 2.2 Giải thuật phát cạnh Canny – Canny Edge Detection Trong hình ảnh, thường tồn thành phần như: vùng trơn, góc/ cạnh nhiễu Cạnh hình ảnh mang đặc trưng quan trọng, thường thuộc đối tượng ảnh (object) Do đó, để phát cạnh ảnh, giải thuật Canny giải thuật phổ biến/ tiếng Xử lý ảnh Giải thuật phát cạnh Canny gồm bước sau: Giảm nhiễu: Bước làm mờ ảnh, giảm nhiễu thông qua lọc Bilateral Tìm cường độ Gradient hướng Gradient ảnh: Ta dùng lọc SobelX SobelY để tính ảnh đạo hàm Gx Gy Từ hình ảnh này, tìm độ dài cạnh Gradient phương cho pixel theo cơng thức: |G| = Phương gradient ln ln vng góc với cạnh Nó làm trịn thành bốn góc biểu diễn trục dọc, ngang phương đườ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 thuật toán loại bỏ giá trị lớn Trong object detection, để phát bounding box ta phải tìm tập hợp bounding box mà tỉ lệ overlapleen anchor box lớn 0.5 bounding box có kích thước lớn xóa bounding box cịn lại Đối với tìm edge vậy, sau nhận độ lớn gradient phương, lượt quét thực ảnh để loại bỏ pixels khơng tạo thành cạnh Để thực điều đó, pixel, pixel kiểm tra xem liệu có cực đại cục số lân cận theo phương gradient Ví dụ: hướng gradient độ, ta sopixel trung tâm với pixel liền trái liền phải Trường hợp khác gradient 45 độ, ta so sánh với pixel hàng xóm góc bên phải góc bên trái pixel trung tâm Tương tự cho trường hợp hướng gradient lại Kết thúc bước ta mặt nạ nhị phân Như Hình Hình Lọc ngưỡng: Ở bước ta định xem tồn cạnh có cạnh thực cạnh cạnh không thông qua việc thiết lập ngưỡng gồm giá trị, minVal maxVal Một cạnh có cường độ gradient lớn ngưỡng maxVal chắn la cạnh, cạnh có cường độ gradient nhỏ ngưỡng minVal bị loại bỏ Nếu cạnh có điểm ảnh nằm ngưỡng xem xét thuộc cạnh không thuộc dựa kết nối điểm với Nếu liền kề ta giữ, cịn khơng liền kề pixel cạnh ta loại sau bước ta áp dụng thêm bước hậu xử lý loại bỏ nhiễu (tức pixel cạnh rời rạc hay cạnh ngắn) dựa giả định cạnh đường dài Sau ảnh minh họa ngưỡng lọc: Như ta thấy, hình vẽ cạnh A màu đỏ B màu xanh Cạnh A có điểm có cường độ gradient nằm maxVal nên xem cạnh đạt tiêu chuẩn, cạnh A có điểm nằm ngưỡng từ minVal đến maxVal Còn cạnh B xem khơng đạt tiêu chuẩn toàn điểm nằm B nằm ngưỡng từ minVal đến maxVal Như vậy, cạnh A giữ lại cạnh B xóa bỏ Tất bước OpenCV gói gọn hàm: cv2.Canny(img, minVal, maxVal) Và kết thử nghiệm(Hình30 với minVal=100, maxVal=200: Hình 2.3Contour Contour hiểu đơn giản đường cong liên kết toàn điểm liên tục (dọc theo đường biên) mà có màu sắc giá trị cường độ Contour hữu ích phân tích hình dạng, phát vật thể nhận diện vật thể Có số lưu ý sử dụng Contour: Vậy trước tiên, để chương trình thực ta cần hỗ trợ số thư viện Python Cụ thể sau: Từ dịng 1-8 thư viện cần có Chúng ta nên cài đặt OpenCV Numpy hệ thống mình, nên cập nhật thư viện để có hỗ trợ đầy đủ Trong đó: Tkinter cung cấp giao diện hướng đối tượng cho công cụ tk GUI Imutils hỗ trợ tác vụ PIL hỗ trợ định dạng tệp mở rộng, biểu diễn nội hiệu khả xử lý hình ảnh mạnh mẽ Từ dịng 10-11, tiến hành truy xuất lệnh liệu tập mẫu đồng thời chọn kí tự có biển số xe Tiếp đến dòng 12-17 tạo hàm tinh chỉnh, loại bỏ kí tự không hợp ý Tiếp theo, tạo hàm có nhiệm vụ mở khung giao diện lên nhấn nút chạy chương trình‘ phathienbs ’+ tiến hành chọn ảnh xử lí chương trình in đường dẫn ảnh hình tiến hành lấy tên file ảnh với đuôi ảnh JPG Tiếp theo thay đổi kích thước ảnh giúp tránh vấn đề với hình ảnh có độ phân giải lớn hơn, đảm bảo biển số khung sau thay đổi kích thước Tỷ lệ màu xám phổ biến tất bước xử lý ảnh Hình ảnh biến đổi bước hoàn thành Làm mờ chi tiết khơng quan trọng Mỗi hình ảnh có thơng tin hữu ích vơ ích, trường hợp có biển số xe thơng tin hữu ích cịn lại nhiều vơ ích cho chương trình chúng tơi Thơng tin vơ ích gọi nhiễu Thông thường, sử dụng lọc song phương (Làm mờ) loại bỏ chi tiết khơng mong muốn khỏi ảnh Hình ảnh đầu hiển thị bên dưới, ta thấy chi tiết (cây tòa nhà) bị làm mờ hình ảnh Bằng cách này, tránh chương trình tập trung vào vùng sau 3.Thực phát cạnh Dựa vào input việc xử lý ảnh việc phát cạnh tương đối dễ dàng cần sử dụng phương pháp candy edge từ opencv Và kết có từ câu lệnh trên: 4.Tìm đường bao lọc ảnh biển số xe Có lẽ phần khó chương trình Khi đếm phát hiện, xếp chúng từ lớn đến nhỏ xem xét 10 kết bỏ qua kết khác Trong hình ảnh chúng ta, đường viền thứ có bề mặt kín, biển số xe bề mặt đóng Để lọc hình ảnh biển số xe số kết thu được, lặp lại tất kết kiểm tra xem hình ảnh có đường viền hình chữ nhật với bốn cạnh hình khép kín Vì biển số xe chắn hình chữ nhật có bốn cạnh Ở hàm lặp đơn giản hóa số điểm đường viền, làm cho trở thành hình dạng hình học "cơ hơn" Dòng 56 kiểm tra xem đường viền gần xác định trước có bốn điểm hay khơng với kích thước viền phải nằm khoảng ảnh giá trị đầu vào Nếu có lưu vào biến có tên screenCnt sau vẽ hộp hình chữ nhật xung quanh để đảm bảo phát biển số xe cách xác Bây biết biển số đâu, thơng tin cịn lại nhiều vơ ích Như tiến hành che toàn tranh trừ chỗ để biển số dùng lệnh Ở tạo ảnh ban đầu kích thước ảnh gray với giá trị pixel điểm ảnh =0 cho ảnh màu đen Tiếp theo vẽ contour lên ảnh 5.Phân đoạn nhận diện kí tự biển số Bước Nhận dạng biển số phân đoạn biển số xe khỏi hình ảnh cách cắt lưu thành hình ảnh Sau đó, sử dụng hình ảnh để phát ký tự Tiến hành tìm tọa độ biển số để tiến hành cắt biển số Hình ảnh kết hiển thị bên Thông thường thêm vào để cắt hình ảnh, tơ xám làm cạnh yêu cầu Điều thực để cải thiện khả nhận dạng ký tự bước Tuy nhiên, em thấy hoạt động tốt với hình ảnh gốc.Ở tiến hành chuyển ảnh sau cắt sang số nhị phân để tiến hành nhận diện kí tự có biển số Cuối nhận dạng ký tự Em đọc thơng tin biển số từ hình ảnh phân đoạn Chúng ta sử dụng thư viện pytesseract để đọc ký tự từ hình ảnh Kí tự thu qua hàm pytesseract.image_to_string(binary, lang="eng", config=" psm 7") tự động cập nhật trọng số Tiếp theo vẽ kí tự nhận dạng lên ảnh hiển thị kết lên hình Ảnh chọn xử lí biển số phát Ảnh chọn xử lí tách biên Kết thu sau nhận diện : Ảnh chọn xử lí biển số phát Ảnh chọn xử lí tách biên Kết thu sau nhận diện : Ảnh chọn xử lí biển số phát Kết thu sau nhận diện : Ảnh chọn xử lí biển số phát Ảnh chọn xử lí tách biên CHƯƠNG III: TỔNG KẾT Kết đạt Sau học xong mơn Xử lý ảnh tay làm báo cáo chúng em cảm thấy tuyệt vời, qua mơn học em thấy cần cải thiện nhiều mn vàn kiến thức Ban đầu học môn thật chúng em nản code giáo trình auto tiếng anh, học thấy thú vị sau tìm hiểu có chút chút kiến thức khởi đầu Những khó khăn hạn chế đề tài Chương trình thực nghiệm huấn luyện nhận dạng hai loại font: Arial Times Roman với nhiều kích thước khác đạt kết 80%, số tồn cần phát triển để đạt kết cao Ngồi ra, cịn số trường hợp ảnh hai kí tự nằm chéo số trường hợp sau: Chữ V hay chữ A số gần giống xử lí Nó dẫn đến q trình tách kí tự bị dính nhận dạng sai Đối với trường hợp này, chúng em cần phát triển phương pháp tách để tách kí tự Trong q trình thực nghiệm nhận dạng kí tự, thấy kí tự sai trình huấn luyện mạng chưa học nên kí tự ảnh nhận dạng bị nhận dạng sai, có số q trình tách kí tự Do hiểu biết độ nhanh nhạy kém, việc xử lý đề tài chúng em chưa toàn diện cho Thực chúng em non tiếp cận thuật tốn mới, với ngơn ngữ lập trình nên việc tìm hiểu fix lỗi tốn thời gian Kèm theo với hạn chế đề tài chúng em chưa tìm hiểu triệt để Chúng em xin cảm ơn nhiệt tình giúp đỡ thầy Nguyễn Đình Cơng giúp chúng em hoàn thành tiểu luận ! Bộ môn KHMT Giảng viên hướng dẫn Sinh viên thực Nguyễn Đình Cơng Tơ Đức Liêm TÀI LIỆU THAM KHẢO Jain, A 2000 Personal Identification Based on Handwriting.IIT Kapur, April Holst, A 1997 “The Use of Bayesian Neural Network Model for Classification Tasks Department of Numerical Analysis and Computing Science Sweden Jain, A K 1998 Texture Analysis East Lansing, MI 48824-1027 USA Cha Sung-Hynk 2001 Use of Distance Measures in Handwriting Analysis Buffalo UB: New York Trần Hùng Cường 2013 Nhận dạng ký tự quang học Trường Đại học Công Nghiệp Hà Nội ... nhận diện : Ảnh chọn xử lí biển số phát Kết thu sau nhận diện : Ảnh chọn xử lí biển số phát Ảnh chọn xử lí tách biên CHƯƠNG III: TỔNG KẾT Kết đạt Sau học xong môn Xử lý ảnh tay làm báo cáo chúng... trọng số Tiếp theo vẽ kí tự nhận dạng lên ảnh hiển thị kết lên hình Ảnh chọn xử lí biển số phát Ảnh chọn xử lí tách biên Kết thu sau nhận diện : Ảnh chọn xử lí biển số phát Ảnh chọn xử lí tách... diện kí tự biển số Bước Nhận dạng biển số phân đoạn biển số xe khỏi hình ảnh cách cắt lưu thành hình ảnh Sau đó, sử dụng hình ảnh để phát ký tự Tiến hành tìm tọa độ biển số để tiến hành cắt biển