1. Trang chủ
  2. » Công Nghệ Thông Tin

Nhận dạng biển số xe sử dụng thư viện opencv

51 560 5

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 51
Dung lượng 3,15 MB

Nội dung

Đây là toàn văn đạt giải khuyển khích cuộc thi STKT cấp tỉnh QB và giải nhì Cuộc thi tìm kiếm tài năng khoa học trẻ QBU và đây là đồ án tốt nghiệp của nhiều sinh viên ngành IT sử dụng các công cục và các giải thuật nếu bạn nào cần demo hay code thì có thể liên hệ mình qua email nhé

MỤC LỤC Contents DANH MỤC HÌNH ẢNH Số hình Tên hình Trang Hình 1.2.1.2 Tổ chức thư viện OpenCV Hình 1.2.2.1 Giao diện thiết lập liên kết 10 Hình 1.2.2.2 Giao diện thiết lập liên kết 10 Hình 1.2.2.3 Giao diện thiết lập liên kết 11 Hình 1.2.2.4 Giao diện thiết lập liên kết 11 Hình 1.2.2.5 Giao diện thiết lập liên kết 12 Hình 1.2.2.6 12 Hình 1.2.2.7 Giao diện thiết lập liên kết Giao diện test thử sau cài đặt Opencv3.1 Visual Studio C++ 2015 Hình 2.2.1.1 Sơ đồ tổng quát khối tách biển số 15 13 Hình 2.2.1.2 Sơ đồ chi tiết khối tách biển số 17 Hình 2.2.2.1 Ảnh tối ảnh sáng 18 Hình 2.2.2.2 Ảnh sau nhị phân 18 Hình 2.2.2.3 Ảnh sau lọc Hình 2.2.2.4 Ảnh sau lọc Hình 2.2.2.5 Sơ đồ giải thuật tìm tách vùng màu trắng Hình 2.2.2.6 Ảnh chứa trắng Hình 2.2.2.7 Ảnh chứa vùng Contourns Hình 2.2.4.1 Ảnh xác định hình chữ nhật quanh vùng trắng Hình 2.2.5.1 Ảnh hệ thống xác định nhầm vùng chứa biển số xe Hình 2.2.5.2 Nhận dạng ký tự để lọc vùng ảnh chứa ký tự Hình 2.2.5.3 Xác định vùng chứa biển số xe Hình 2.2.6.1 Biển số sau cắt hoàn chỉnh Giải thuật cắt biển số xác, sau cắt biển số Hình 2.2.6.2 Hình 2.3.1.1 Sơ đồ khối phân đoạn ký tự MỞ ĐẦU Lý chọn đề tài: Ngày với đời Cách mạng công nghiệp lần thứ đánh dấu phát triển mạnh mẽ lĩnh vực khoa học cơng nghệ Trí tuệ nhân tạo xem lĩnh vực quan trọng đóng vai trò then chốt cho phát triển nhân loại Trên giới, nước phát triển bắt đầu nghiên cứu thử nghiệm hệ thống thông minh ứng dụng trí tuệ nhân tạo lĩnh vực Bệnh viện thơng minh, Ơ tơ khơng người lái, Bãi giữ xe thông minh mang lại kết khả quan Tại Việt Nam nhiều nhà khoa học hoạt động nghiên cứu hệ thống thông minh để áp dụng cho tình hình thực tế nước ta Qua q trình tìm hiểu nghiên cứu nhóm nhận thấy: nhu cầu lại người ngày tăng, lưu lượng giao thông ngày lớn Với số lượng phương tiện giao thông không ngừng gia tăng qua năm, việc quản lý phương tiện giao thơng gặp nhiều khó khăn đòi hỏi phải có hệ thống thông minh giúp cho việc quản lý phương tiện giao thông cách dễ dàng hiệu Một hệ thống hệ thống tự động nhận dạng biển số xe Ơtơ Trên thực tế hệ thống xây dựng từ năm trước mắc phải nhiều lỗi Một số hệ thống trước thường xảy lỗi cắt sai vùng chứa biển số dẫn đến trình nhận dạng cho kết khơng xác Chính lựa chọn đề tài “ Nhận dạng biển số xe Ơtơ dựa cơng cụ Opencv ” nhằm giải tốn nhận dạng biển số xe ơtơ khắc phục lỗi cắt sai vùng chứa biển số số hệ thống trước Giải tốn hình ảnh phức tạp đa dạng Giới hạn đề tài: Việc có nhiều biển số xe với định dạng độ sáng khác gây khó khăn cho việc nhận dạng Do trình nhận dạng dựa vào phương pháp xử lý ảnh trích xuất biển số từ ảnh chụp nên độ sáng khác làm tăng độ phức tạp trình nhận dạng Do thời gian thực đề tài không cho phép nên giới hạn biển số điều kiện sau: ➢ Biển số có chữ đen, trắng, biển số hàng ôtô không ký tự ➢ Biển số phải ngun vẹn, khơng bị tróc sơn hay rỉ sét, khơng bị che khuất ➢ Góc nghiêng biển số không so với phương ngang ➢ Hình chụp biển số khơng bị mờ ➢ Khơng bị nhiễu ánh sáng làm ảnh chụp bị chói Mục tiêu: Trong đề tài này, đặt mục tiêu sau: ➢ Hạn chế vấn đề bất cập việc nhận dạng khơng xác ➢ Xây dựng mơ hình hệ thống nhận dạng biển số xe tự động Để đạt mục tiêu trên, tiến hành cơng việc sau: ➢ Tìm hiểu q trình xử lý nhận dạng ảnh ➢ Tìm hiểu hệ thống nhân dạng biển số xe áp dụng Việt Nam Phương pháp nghiên cứu: Phương pháp lý thuyết: - Tìm hiểu thư viện OpenCV - Tìm hiểu cách tích hợp OpenCV vào Visual C++ - Tìm hiểu trình nhận dạng xử lý ảnh dựa công cụ Opencv - Nghiên cứu phương pháp SVM huấn luyện nhận dạng ký tự chữ số - Nghiên cứu giải thuật, kỹ thuật xử lý nhận dạng ký tự chữ số Phương pháp thực nghiệm: - Tiến hành phân tích xây dựng hệ thống Nhận dạng biển - số xe Ơtơ dựa công cụ Opencv So sánh đánh giá kết đạt Ý nghĩa khoa học thực tiễn đề tài Về khoa học: Kết nghiên cứu đề tài góp phần mở rộng cho kỹ thuật xử lý nhận dạng biển số xe, phương pháp nhận dạng sử dụng độ tương quan chéo, thuật toán chặt khúc phân rã Về thực tiễn: Hệ thống nhận dạng biển số xe ứng dụng mơ hình bãi quản lý xe thông minh để cấp phát vé tự động hay sử dụng nhận dạng điều tra xe ô tô vi phạm lẩn trốn, ứng dụng rộng rãi trạm thu phí Hệ thống bố trí trạm bến thu phí đường hay camera giao thông nhằm nhận dạng hay phát xe tình nghi hay vi phạm luật an tồn giao thông Bố cục đề tài: Đề tài nghiên cứu gồm chương chính: - Chương 1: Nghiên cứu tổng quan Trong chương chúng tơi trình bày tổng quan tốn nhận dạng biển số xe ơtơ cơng cụ hỗ trợ Opencv - Chương 2: Phân tích hệ thống ứng dụng Chương chúng tơi phân tích làm rõ tiến trình nhận dạng biển số từ q trình xác định vùng chứa biển sơ, tách biển số, phân đoạn ký tự cuối so sánh tập liệu huấn luyện để đưa kết nhận dạng biển số - Chương 3: Phát triển ứng dụng Lựa chọn cơng cụ hỗ trợ, vai trò chức file liệu huấn luyện, button sử dụng giao diện ứng dụng CHƯƠNG 1: NGHIÊN CỨU TỔNG QUAN 1.1 Bài toán Nhận dạng biển số xe Ơtơ - Nhận dạng biển số xe lĩnh vực áp dụng cho hệ thống bãi giữ xe thông minh tương lai Giải tốn nhận dạng biển số xe Ơtơ tiền đề cho trình tự động nhận dạng biển số xe, thay cho hệ thống quản lý bãi giữ xe bán tự động - Để giải toán Nhận dạng biển số xe, yêu cầu đặt phải giải toán Bài toán thứ xác định vùng chứa biển số xe tách biển số Bài toán thứ hai phân đoạn ký tự Bài toán thứ nhận dạng ký tự Hướng giải cho ba toán chúng tơi phân tích rõ chương 1.2 Thư viện hỗ trợ OpenCV:- OpenCV thư viện mã nguồn mở phục vụ cho việc nghiên cứu hay 1.2.1 Giới thiệu OpenCV: phát triển thị giác máy tính Tối ưu hóa xử lí ứng dụng thời 1.2.1.1 Khái niệm: gian thực Giúp cho việc xây dựng ứng dụng xử lí ảnh, thị giác máy tính, cách nhanh OpenCV có 500 hàm khác nhau, chia làm nhiều phần phục vụ cơng việc như: xử lí hình ảnh y tế, an ninh, camera quan sát, nhận diện, robots, 1.2.1.2 Tổ chức thư viện OpenCV: Hình 1.2.1.2 Tổ chức thư viện OpenCV CXCORE chứa định nghĩa kiểu liệu sở Ví dụ, cấu trúc liệu cho ảnh, điểm hình chữ nhật định nghĩa cxtypes.h CXCORE chứa đại số tuyến tính phương pháp thống kê, chức trì điều khiển chuỗi Một số ít, chức đồ họa để vẽ ảnh đặt - CV chứa thuật toán xử lý ảnh định kích cỡ camera Các chức hình họa máy tính đặt CVAUX mô tả tài liệu OpenCV chứa mã cũ thứ nghiệm Tuy nhiên, giao diện đơn cho nhận diện ảnh module Code sau chúng chuyên dụng cho nhận diện mặt chúng ứng dụng rộng rãi cho mục đích - HIGHGUI CVCAM đặt thư mục “otherlibs” + HIGHGUI : chứa giao diện vào bản, chứa khả cửa sổ mở rộng vào video + CVCAM : chứa giao diện cho video truy cập qua DirectX Windows 32 bits - ML: Chứa thuật toán Machine Learning (học máy) 1.2.2 Cài đặt OpenCV 3.1 Visual C++ 2015: Bước 1: Download, cài đặt openCV 3.1 Visual C++ 2015 Bước 2: Mở giao diện Visual C++ 2015 , tiến hành tạo Newproject chuẩn bị file test.cpp Bước 3: Cài đặt thiết lập đường dẫn để lấy hàm thư viện OpenCV, thứ tự bước hình sau: Hình 1.2.2.1 Giao diện thiết lập liên kết Hộp thoại properties xuất hiện, tiến hành thêm số đường dẫn tới file bin, lib, include Hình 1.2.2.2 Giao diện thiết lập liên kết 10 gắn vào nhãn, trình huấn luyện SVM xây dựng mơ hình cho phép dự đoán tập diệu khác thuộc nhãn nào, tức phân loại tập liệu thuộc vào lớp Hình 2.4.4.1.1 Minh họa cách hoạt động SVM 2.4.4.2 Cách thức hoạt động mơ hình SVM Quay lại tốn nhận dạng kí tự biển số xe ta xét, để nhận dạng kí tự dựa mơ hình SVM? Trước hết cần phải nhận thấy SVM máy phân loại liệu, muốn sử dụng ta cần phải có liệu, liệu kí tự mà ta cần nhận dạng đặc trưng ảnh kí tự Giả sử ta cần phân loại 33 lớp liệu (tương ứng với 33 kí tự biển số xe), với lớp liệu, ta tính tốn 10 vector đặc trưng (10 mẫu), vector đặc trưng tưng ứng với đặc trưng ảnh Khi ta đưa vào huấn luyện SVM tồn liệu này, sau với ảnh bất kì, ta tính tốn vector đặc trưng ảnh đó, mơ hình SVM xem xét xem liệu (tức vector đặc trưng này) thuộc vào lớp số lớp mà huấn luyện 2.4.4.3 Tính tốn đặc trưng ảnh Đặc trưng ảnh đặc điểm riêng biệt giúp phân biệt ảnh với ảnh khác Việc xem xét đặc trưng ảnh việc khơng có quy ước trước, phụ thuộc vào cách nghiên cứu, cài đặt trường hợp cụ thể nghiên cứu để đưa phương pháp tốt 37 Trong phần ta tính tốn vector đặc trưng dựa ý tưởng phương pháp Haar, ý bạn đọc có áp dụng phương pháp tính tốn đặc trưng ảnh hay hơn, hiệu Giả sử ta có hai kí tự hình bên, nhìn mắt thường ta dễ dàng phân biệt hai kí tự 4, nhiên để máy tính phân biệt hai kí tự này? Bây ta đưa hai kí tự kích thước, chia nhỏ kí tự thành 16 nhỏ khác sau Hình 2.4.4.3.1 Chia vùng ký tự Ta nhận thấy tính tổng pixel đen hai ảnh số số phân biệt dựa vào ô (1,1), (1, 4), (2, 2), (3,3) … đó, tổng số điểm ảnh đen khác hồn tồn Tính tốn số điểm ảnh đen 16 vng ta thu 16 đặc trưng ảnh, 16 đặc trưng đủ để phân biệt kí tự Tuy nhiên, với 30 kí tự ta cần phải tính tốn nhiều đặc trưng, đặc trưng khơng thiết phải (tức khơng có điểm ảnh đen nào) hặc 38 1(tức toàn số điểm ảnh đen ơ) mà tỉ lệ tương đối Từ 16 đặc trưng trên, ta kết hợp chúng lại để tạo đặc trưng khác, chẳng hạn lấy tổng đặc trưng đường chéo (1,1) + (2,2) + (3,3) + (4,4) tổng đặc trưng xung quanh đường biên ảnh … số đặc trưng lớn việc phân loại lớp bị sai, có nghĩa xác suất nhận dạng lớn 2.4.4.4 Huấn luyện mơ hình SVM Để tạo mơ hình SVM phục vụ cho việc nhận dạng kí tự sau này, ta cần huấn luyện lưu mơ hình sau huấn luyện 2.4.4.4.1 Chuẩn bị sở liệu Ta cần chuẩn bị sở liệu tập hợp kí tự biển số xe Có 33 kí tự thường gặp biển số xe, ta cần phân loại 33 lớp này, trường hợp giả sử với lớp, tức tự tự ta có 10 ảnh, ta lưu ảnh vào folder, tên folder đặt tên theo kí tự, chẳng hạn folder chứa 10 ảnh kí tự 0, folder chứa 10 ảnh kí tự 1, … folder 33 chứa 10 ảnh kí tự Z ta cần đánh tên folder theo số tứ tự, số thứ tự nhãn tương ứng đưa vào việc nhận dạng Ta tính tốn đặc trưng kí tự lưu tất đặc trưng vào ma trận để phục vụ cho việc huấn luyện Hàm tính toán đặc trưng ảnh dựa ý tưởng tổng điểm đen khung hình, nhiên chuẩn hóa cách chia cho tổng tất điểm ảnh đen kí tự 2.4.4.4.2 Code SVM vector calculate_feature(Mat src) { 39 Mat img; if(src.channels() == 3) cvtColor(src, img, CV_BGR2GRAY); threshold(img, img, 100, 255, CV_THRESH_BINARY); vector r; resize(img, img, Size(40, 40)); int h = img.rows/4; int w = img.cols/4; int S = count_pixel(img); int T = img.cols * img.rows; for(int i = 0; i < img.rows; i += h) { for(int j = 0; j < img.cols; j += w) { Mat cell = img(Rect(i,j, h , w)); int s = count_pixel(cell); float f = (float)s/S; r.push_back(f); } } for(int i = 0; i < 16; i+= 4) { float f = r[i] + r[i+1] + r[i+2] + r[i+3]; r.push_back(f); } 40 for(int i = 0; i < 4; ++i) { float f = r[i] + r[i+4] + r[i+8] + r[i+ 12]; r.push_back(f); } r.push_back(r[0] + r[5] + r[10] + r[15]); r.push_back(r[3] + r[6] + r[9] + r[12]); return r; //32 dac trung } Trong hàm count_pixel hàm tính tốn số pixel đen ảnh int count_pixel(Mat img, bool black_pixel = true) { int black= 0; int white = 0; for(int i = 0; i < img.rows; ++i) for(int j = 0; j < img.cols; ++j) { if(img.at(i,j) == 0) black++; else white++; 41 } if(black_pixel) return black; else return white; } Đoạn code sau huấn lun mơ hình svm, với đầu vào folder chứa liệu huấn luyện nói (folder chứa 33 folder con, folder chứa 10 kí kí tự mẫu) CvSVMParams params; params.svm_type = CvSVM::C_SVC; params.kernel_type = CvSVM::RBF; params.gamma = 0.5; params.C = 16; params.term_crit = cvTermCriteria(CV_TERMCRIT_ITER, 100, 1e-6); SVM svm; Mat data = Mat(number_of_sample * number_of_class, number_of_feature, CV_32FC1); Mat label = Mat(number_of_sample * number_of_class, 1, CV_32FC1); int index = 0; vector folders = list_folder("D:/Data"); for(size_t i = 0; i < folders.size(); ++i) { coutLength < sizeof(cStr)) sprintf(cStr, "%s", sysImgpath); std::string imgpath(cStr); SaveFileDialog^ saveFile= gcnew SaveFileDialog(); if (saveFile->ShowDialog() == System::Windows::Forms::DialogResult::Cancel) { return; } System::String^ sysSaveimg = saveFile->FileName; char cStr_[50] = { }; if (sysSaveimg->Length < sizeof(cStr)) sprintf(cStr_, "%s", sysSaveimg); std::string savesvm(cStr_); if (TrainSVM(savesvm,imgpath)) { MessageBox::Show("Training completed."); } else MessageBox::Show("ERROR"); } 3.2.3 Processing - Đoạn mã sau thực q trình nhận dạng thơng qua hàm SVMPredict() in kết mục textBox1 Hoàn tất trình nhận dạng biển số xe private: System::Void btnProcess_Click(System::Object^ sender, System::EventArgs^ e) { textBox1->Text = ""; if (SVMPredict()) 47 { //do something //MessageBox::Show("Processing completed."); } else MessageBox::Show("ERROR"); } 3.3 DEMO chương trình - Sau trình chạy thử chương trình, nhóm thu kết thể qua giao diện sau: Hình 3.3.1 Giao diện hệ thống nhận dạng biển số xe Ơtơ 48 3.4 Kết Demo Số hình Số hình ảnh xác Số hình ảnh cho định ảnh tách kết vùng chứa ký tự biển số xe biển số Số hình ảnh không nhận dạng nhận dạng sai Số lần thử Số hình ảnh thử Demo 100 76 72 70 30 100 82 80 77 23 100 90 90 89 11  Thống kê số lần thử Demo hệ thơng nhận dạng biển số xe Ơtơ 49 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN  Kết luận: Độ xác chương trình nhận dạng biển số xe phụ thuộc vào ánh sáng môi trường Tuy nhiên yếu tố ta điều chỉnh Việc nhận dạng ký tự nhiều sai sót khơng có tập mẫu hồn chỉnh Chương trình viết Visual Studio 2015 giải toán nhận dạng với dung lượng lớn thực tế, qua giải yêu cầu đề tài Để giải khó khăn đề tài, xin đề xuất số ý kiến sau đây: ➢ Sử dụng camera chuyên dụng ➢ Thiết lập môi trường ổn định xung quanh để làm tăng độ xác ảnh chụp (xác định vị trí cố định để chụp ảnh) ➢ Thu thập nhiều mẫu ký tự để tăng tập mẫu qua tăng độ xác chương trình  Hướng phát triển: - Trong thời gian tới tập trung nghiên cứu đưa hướng giải cho biển số xe bị dính bùn lầy - Xử lý nhận dạng biển số biển số xe bị lệch, qua việc áp dụng phép quay ảnh - Xây dựng sở liệu để quản lý bãi giữ xe, truy xuất đến thông tin chủ xe thông qua biển số xe nhận dạng 50 TÀI LIỆU THAM KHẢO [1] Amin Sarafraz (2004), “Detects lines in a binary image using common computer vision operation known as the Hough Transform”, University of Tehran, Iran [2] [Beal72] Beale, E M L., "A derivation of conjugate gradients," in F.A Lootsma, ed., Numerical methods for nonlinear optimization, London: Academic Press, 1972 [3] [Caud89] Caudill, M., Neural Networks Primer, San Francisco, CA: Miller Freeman Publications, 1989 [4] [Cabu92] Caudill, M., and C.Butler, Understanding Neural Networks: Computer Explorations, vols and 2, cambridge, ma: the mit press, 1992 [5] Ondrej martinsky, “Algorithmic and mathematical principles of automatic number plate recognition systems ”, brno 2007 [6] Otsu, N (1979), “A Threshold Selection Method from Gray-Level Histograms”, IEEE Transactions on Systems, Man, and Cybernetics, Vol 9, No 1, pp 62-66 [7] www.Mathworks.com 51

Ngày đăng: 31/03/2018, 19:53

TỪ KHÓA LIÊN QUAN

w