Nhận diện ảnh dùng OPENCV

91 878 3
Nhận diện ảnh dùng OPENCV

Đ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

Ngày nay, với sự phát triển mạnh mẽ của ngành công nghiệp điện tử phần cứng, các máy tính đóng vai trò ngày càng quan trọng trong công việc cũng như đời sống. Tuy nhiên, mảnh ghép còn thiếu của máy tính chính là thị giác. Nếu mảnh ghép này được hoàn thiện sẽ góp phần nâng trí tuệ nhân tạo (AI) lên một tầm cao mới và các máy tính có thể làm các công việc nhƣ con ngƣời. Khởi đầu vào thập niên 70, khi mà ngành khoa học không gian vũ trụ phát triển, vấn đề đặt ra là cần có các robot thám hiểm có khả năng nhận biết như con ngƣời. Ngày nay, với các máy tính có cấu hình mạnh mẽ, thị giác đã được ứng dụng trong nhiều lĩnh vực. OpenCV (Open Computer Vision library) do Intel phát triển, được giới thiệu năm 1999 đã đóng vai trò xác lập chuẩn giao tiếp, dữ liệu, thuật toán cho lĩnh vực CV và tạo điều kiện cho mọi ngƣời tham gia nghiên cứu và phát triển ứng dụng. Gìn giữ trật tự an ninh luôn là vấn đề cấp thiết của xã hội. Hiện nay, một số công nghệ nhận diện bằng vân tay, nhận diện mống mắt,… đã được áp dụng nhưng chi phí mua sắm trang thiết bị vẫn còn cao. Với mong muốn tìm ra giải pháp giải quyết vấn đề trên, nhóm nghiên cứu đã mạnh dạn chọn đề tài Nhận diện hình ảnh dùng thƣ viện OpenCV, mục tiêu chính là xây dựng ứng dụng nhận diện khuôn mặt ở các hướng nhìn khác nhau với chi phí thấp. Ngoài ra, nhóm còn xây dựng ứng dụng nhận diện biển số xe ô tô hƣớng tới thiết kế bãi giữ xe thông minh. Các phương pháp nghiên cứu tư duy phân tích, DOITS, 6 chiếc mũ tư duy đã được vận dụng trong đề tài. Vì đề tài mang tính chất tìm hiểu và ứng dụng, nên nhóm nghiên cứu chỉ tập trung vào phần xử lý ảnh dùng thư viện OpenCV. Ứng dụng nhận diện khuôn mặt sẽ hoạt động trên kit Raspberry PI và xử lý trực tiếp ảnh nhận từ camera. Do khuôn khổ của đề tài có hạn nên ứng dụng nhận diện biển số xe chỉ dừng lại ở việc nhận diện biển số trên ảnh tĩnh.

BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƢỜNG ĐẠI HỌC SƢ PHẠM KỸ THUẬT TPHCM BÁO CÁO TỔNG KẾT ĐỀ TÀI NGHIÊN CỨU KHOA HỌC CỦA SINH VIÊN NHẬN DIỆN HÌNH ẢNH DÙNG THƢ VIỆN OPENCV SV 2015-63 Thuộc nhóm nghành khoa học: Khoa học kỹ Thuật công nghệ Tp Hồ Chí Minh, 08/2015 BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƢỜNG ĐẠI HỌC SƢ PHẠM KỸ THUẬT TPHCM BÁO CÁO TỔNG KẾT ĐỀ TÀI NGHIÊN CỨU KHOA HỌC CỦA SINH VIÊN NHẬN DIỆN HÌNH ẢNH DÙNG THƢ VIỆN OPENCV SV 2015-63 Thuộc nhóm nghành khoa học: Khoa học kỹ thuật công nghệ Sinh viên thực hiện: Đinh Việt Hòa Nam Khoa Điện - Điện Tử Năm thứ: 3/ Số năm đào tạo: Dân tộc: Nùng Lớp, khoa: 12141VT2B, Ngƣời hƣớng dẫn: PGS.TS Trần Thu Hà Tp Hồ Chí Minh, 08/2015 MỤC LỤC Mục lục i Danh mục bảng biểu iii Danh mục từ viết tắt iv Thông tin kết nghiên cứu đề tài v Mở đầu vii Chƣơng Cơ sở lý thuyết 1.1 Giới thiệu thƣ viện OpenCV 1.2 Không gian màu RGB xám 1.3 Mức xám cân mức xám 1.4 Đặc trƣng Haar-like 1.6 Chuỗi phân lớp (Cascade Classifier) 10 a Ý tƣởng 10 b Huấn luyện cascade 11 Chƣơng Ứng dụng nhận diện khuôn mặt kit Raspberry PI nhận diện biển số xe ô tô 14 2.1 Ứng dụng nhận diện khuôn mặt kit Raspberry PI 14 2.1.1 Giới thiệu kit Raspberry PI 14 a Phần cứng 14 b Phần mềm 17 2.1.2 Hiện thực hóa ứng dụng 19 a Bài toán thiết kế 19 b Lƣu đồ giải thuật 21 c Tập tin huấn luyện 24 d Các hàm, chƣơng trình đƣợc sử dụng ứng dụng 28 e Kết ứng dụng 29 2.2 Ứng dụng nhận diện biển số xe ô tô 35 2.2.1 Tính ứng dụng 35 2.2.2 Lƣu đồ giải thuật 36 2.2.3 Cấu trúc ứng dụng kết 36 Kết luận kiến nghị 41 Tài liệu tham khảo 42 i Phụ lục I 43 Phụ lục II 45 Phụ lục III 46 Phụ lục IV 58 Phụ lục V 60 Phụ luc VI 70 ii DANH MỤC BẢNG BIỂU Bảng Kết thử nghiệm ứng dụng nhận diện khuôn mặt kit Raspberry PI 41 iii DANH MỤC CÁC TỪ VIẾT TẮT Từ viết tắt AI CMOS CPU CSI Artificial Intelligence Complementary Metaloxide Sermiconductor Central Processing Unit Camera Serial Interface CV DOITs Computer Vision Define problem-Open mind and apply creative techniquesIdentify best solution-Transform Full HD GPU HD IDE OPENCV Full High Definition Graphical Processing Unit High Definition Intergrated Development Environment OPEN Computer Vision SoC System on Chip Ý nghĩa Trí tuệ nhân tạo Chất bán dẫn meta oxit bổ sung Bộ xử lý trung tâm Cổng kết nối camera truyền liệu nối tiếp Thị giác máy tính Phƣơng pháp tƣ sáng tạo: Xác định vấn đề - Cởi mở ý tƣợng sáng tạo – Xác định ý tƣởng hay – Chuyển bƣớc Độ phân giải 1920x1280 Bộ xử lý đồ họa Độ phân giải 1280x720 Mô trƣờng phát triển tích hợp Thị giác máy tính (mã nguồn) mở Hệ thống vi mạch tích hợp đế silicon iv BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƢỜNG ĐH SƢ PHẠM KỸ THUẬT TPHCM THÔNG TIN KẾT QUẢ NGHIÊN CỨU CỦA ĐỀ TÀI Thông tin chung: - Tên đề tài: Nhận diện hình ảnh dùng thƣ viện OpenCV - SV thực hiện: Đinh Việt Hòa Mã số SV: 12141084 Nguyễn Anh Hoàng Mã số SV: 12141088 - Lớp: 12141VT2B Khoa: Điện – Điện Tử - Ngƣời hƣớng dẫn: PGS.TS Trần Thu Hà Năm thứ: Số năm đào tạo: Mục tiêu đề tài: - Hiện nay, đa số ứng dụng nhận diện hình ảnh đƣợc xây dựng phần mềm Matlab Đây phần mềm thƣơng mại có chi phí quyền cao Những ứng dụng xây dựng phần mềm chạy tốt máy tính có cấu hình tƣơng đối cao Trong năm gần đây, công nghệ IoTs (Internet of Things) phát triển mạnh mẽ, kèm với xu hƣớng phát triển thiết bị cầm tay nhỏ gọn Chúng ta chạy ứng dụng Matlab thiết bị nhƣ điện thoại thông minh, máy tính bảng…đƣợc cấu hình chúng không tƣơng thích không đủ mạnh - Mục tiêu đề tài tìm hiểu xây dựng ứng dụng nhận diện hình ảnh mã nguồn mở hoạt động board mạch chuyên dụng chạy hệ điều hành LINUX có kích thƣớc nhỏ gọn để triển khai IoTs nhƣ Raspberry PI Đề tài tập trung vào ứng dụng chính:  Nhận diện khuôn mặt kit Raspberry PI với hƣớng nhìn khác (lên trên, xuống dƣới, qua trái, qua phải) ứng dụng dự án nhà thông minh văn phòng  Nhận diện biển số xe ô tô máy tính chạy hệ điều hành Windows cách tự động - Để hoạt động thiết bị kể trên, mã nguồn ứng dụng cần đƣợc tối ƣu hóa để làm giảm tiêu tốn tài nguyên nhƣ CPU, GPU, RAM,…Hơn nữa, điều kiện cần có ứng dụng phải có đặc tính không giới hạn số lƣợng đối tƣợng nhận diện đƣợc Đây mục tiêu mà đề tài hƣớng đến Tính sáng tạo: - Triển khai nhận diện hình ảnh với thƣ viện OpenCV với ƣu điểm dễ phát triển ứng dụng Đặc biệt mã nguồn mở, giúp tiết kiệm chi phí quyền - Ứng dụng nhận diện xác khuôn mặt hƣớng nhìn khác điều kiện môi trƣờng thực tế Kết nghiên cứu: - Đề tài đạt đƣợc mục tiêu nghiên cứu đặt Ứng dụng nhận diện khuôn mặt nhận diện biển số xe hoạt động ổn định xác Đóng góp mặt giáo dục đào tạo, kinh tế - xã hội, an ninh, quốc phòng khả áp dụng đề tài: Dựa vào kết đạt đƣợc, đề tài phát triển thành hệ thống kiểm soát vào văn phòng, dự án tòa nhà thông minh (smart home) Ứng dụng nhận diện biển số xe đƣợc ứng dụng bãi giữ xe thông minh, trạm thu phí đƣờng Công bố khoa học SV từ kết nghiên cứu đề tài (ghi rõ tên tạp chí có) nhận xét, đánh giá sở áp dụng kết nghiên cứu (nếu có): Không có Ngày 15 tháng 08 năm 2015 SV chịu trách nhiệm thực đề tài (kí, họ tên) v Nhận xét ngƣời hƣớng dẫn đóng góp khoa học SV thực đề tài (phần người hướng dẫn ghi): Xác nhận Trƣờng (kí tên đóng dấu) Ngày tháng năm Ngƣời hƣớng dẫn (kí, họ tên) vi MỞ ĐẦU Ngày nay, với phát triển mạnh mẽ ngành công nghiệp điện tử phần cứng, máy tính đóng vai trò ngày quan trọng công việc nhƣ đời sống Tuy nhiên, mảnh ghép thiếu máy tính thị giác Nếu mảnh ghép đƣợc hoàn thiện góp phần nâng trí tuệ nhân tạo (AI) lên tầm cao máy tính làm công việc nhƣ ngƣời Khởi đầu vào thập niên 70, mà ngành khoa học không gian vũ trụ phát triển, vấn đề đặt cần có robot thám hiểm có khả nhận biết nhƣ ngƣời Ngày nay, với máy tính có cấu hình mạnh mẽ, thị giác đƣợc ứng dụng nhiều lĩnh vực OpenCV (Open Computer Vision library) Intel phát triển, đƣợc giới thiệu năm 1999 đóng vai trò xác lập chuẩn giao tiếp, liệu, thuật toán cho lĩnh vực CV tạo điều kiện cho ngƣời tham gia nghiên cứu phát triển ứng dụng Gìn giữ trật tự an ninh vấn đề cấp thiết xã hội Hiện nay, số công nghệ nhận diện vân tay, nhận diện mống mắt,… đƣợc áp dụng nhƣng chi phí mua sắm trang thiết bị cao Với mong muốn tìm giải pháp giải vấn đề trên, nhóm nghiên cứu mạnh dạn chọn đề tài Nhận diện hình ảnh dùng thƣ viện OpenCV, mục tiêu xây dựng ứng dụng nhận diện khuôn mặt hƣớng nhìn khác với chi phí thấp Ngoài ra, nhóm xây dựng ứng dụng nhận diện biển số xe ô tô hƣớng tới thiết kế bãi giữ xe thông minh Các phƣơng pháp nghiên cứu tƣ phân tích, DOITS, mũ tƣ đƣợc vận dụng đề tài Vì đề tài mang tính chất tìm hiểu ứng dụng, nên nhóm nghiên cứu tập trung vào phần xử lý ảnh dùng thƣ viện OpenCV Ứng dụng nhận diện khuôn mặt hoạt động kit Raspberry PI xử lý trực tiếp ảnh nhận từ camera Do khuôn khổ đề tài có hạn nên ứng dụng nhận diện biển số xe dừng lại việc nhận diện biển số ảnh tĩnh vii CHƢƠNG CƠ SỞ LÝ THUYẾT 1.1 Giới thiệu thƣ viện OpenCV OpenCV (Open Computer Vision library) hoàn thiện thành phiên 1.0 năm 2006 Phiên 3.0 Thƣ viện OpenCV lúc đầu đƣợc viết ngôn ngữ lập trình C, sau đƣợc mở rộng sang ngôn ngữ khác nhƣ Python, C++ tƣơng thích với hệ điều hành Windows, Linux, Mac OS Trƣớc OpenCV công cụ chuẩn cho lĩnh vực CV Các đoạn code đơn lẻ nhà nghiên cứu tự viết thƣờng không thống không ổn định Các công cụ thƣơng mại nhƣ Matlab, Simulink, Halcon, v.v lại có giá cao thích hợp cho công ty phát triển ứng dụng lớn Ngoài có giải pháp kèm theo thiết bị phần cứng mà phần lớn mã đóng đƣợc thiết kế riêng cho thiết bị, khó khăn cho việc mở rộng ứng dụng OpenCV công cụ hữu ích cho việc nghiên cứu, ứng dụng CV ƣu điểm sau:  OpenCV công cụ chuyên dụng: Đƣợc Intel phát triển theo hƣớng tối ƣu hóa cho ứng dụng xử lí phân tích ảnh, với cấu trúc liệu hợp lý, thƣ viện tạo giao diện, truy xuất thiết bị phần cứng đƣợc tích hợp sẵn OpenCV thích hợp để phát triển nhanh ứng dụng  OpenCV công cụ mã nguồn mở: Không công cụ miễn phí (với BSD license), việc đƣợc xây dựng mã nguồn mở giúp OpenCV trở thành công cụ thích hợp cho nghiên cứu phát triển, với khả thay đổi mở rộng mô hình, thuật toán Cấu trúc thƣ viện OpenCV: // In each face, detect eyes eyes_cascade.detectMultiScale( faceROI, |CV_HAAR_SCALE_IMAGE, Size(30, 30) ); eyes, 1.1, 2, // if no glasses if (eyes.size()==2) { trace(" face without glasses"); // detect eyes for( size_t j = 0; j < 2; j++ ) { Point eye_center( faces[i].x + eyes[1-j].x + eyes[1-j].width/2, faces[i].y + eyes[1-j].y + eyes[1-j].height/2 ); if (j==0) // left eye { Myeye_left.x =eye_center.x; Myeye_left.y =eye_center.y; } if (j==1) // right eye { Myeye_right.x =eye_center.x; Myeye_right.y =eye_center.y; } } } else { // tests with glasses glasses_cascade.detectMultiScale( faceROI, |CV_HAAR_SCALE_IMAGE, Size(20, 20) ); if (eyes.size()!=2) return 0; else { eyes, 1.1, 2, trace(" face with glasses"); for( size_t j = 0; j < 2; j++ ) { 68 Point eye_center( faces[i].x + eyes[1-j].x + eyes[1-j].width/2, faces[i].y + eyes[1-j].y + eyes[1-j].height/2 ); if (j==0) // left eye { Myeye_left.x =eye_center.x; Myeye_left.y =eye_center.y; } if (j==1) // right eye { Myeye_right.x =eye_center.x; Myeye_right.y =eye_center.y; } } } } } // sometimes eyes are inversed ! we switch them if (Myeye_right.xbutton1 = (gcnew System::Windows::Forms::Button()); this->button2 = (gcnew System::Windows::Forms::Button()); this->pictureBox1 = (gcnew System::Windows::Forms::PictureBox()); this->textBox1 = (gcnew System::Windows::Forms::TextBox()); this->label1 = (gcnew System::Windows::Forms::Label()); (cli::safe_cast(this>pictureBox1))->BeginInit(); this->SuspendLayout(); // // button1 // this->button1->Location = System::Drawing::Point(645, 314); 71 this->button1->Margin = System::Windows::Forms::Padding(4, 5, 4, 5); this->button1->Name = L"button1"; this->button1->Size = System::Drawing::Size(213, 68); this->button1->TabIndex = 0; this->button1->Text = L"Chon bien so can nhan dien"; this->button1->UseVisualStyleBackColor = true; this->button1->Click += gcnew System::EventHandler(this, &MyForm::button1_Click); // // button2 // this->button2->Location = System::Drawing::Point(645, 466); this->button2->Margin = System::Windows::Forms::Padding(4, 5, 4, 5); this->button2->Name = L"button2"; this->button2->Size = System::Drawing::Size(213, 60); this->button2->TabIndex = 1; this->button2->Text = L"Thoat"; this->button2->UseVisualStyleBackColor = true; this->button2->Click += gcnew System::EventHandler(this, &MyForm::button2_Click); // // pictureBox1 // this->pictureBox1->BorderStyle = System::Windows::Forms::BorderStyle::Fixed3D; this->pictureBox1->Location = System::Drawing::Point(17, 20); this->pictureBox1->Margin = System::Windows::Forms::Padding(4, 5, 4, 5); this->pictureBox1->Name = L"pictureBox1"; this->pictureBox1->Size = System::Drawing::Size(543, 558); this->pictureBox1->SizeMode = System::Windows::Forms::PictureBoxSizeMode::Zoom; this->pictureBox1->TabIndex = 2; this->pictureBox1->TabStop = false; // // textBox1 // this->textBox1->Cursor = System::Windows::Forms::Cursors::No; 72 this->textBox1->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 15, System::Drawing::FontStyle::Bold)); this->textBox1->ForeColor = System::Drawing::Color::FromArgb(static_cast(static_cast(0)), static_cast(static_cast(0)), static_cast(static_cast(192))); this->textBox1->Location = System::Drawing::Point(592, 131); this->textBox1->Margin = System::Windows::Forms::Padding(4, 5, 4, 5); this->textBox1->Multiline = true; this->textBox1->Name = L"textBox1"; this->textBox1->Size = System::Drawing::Size(280, 72); this->textBox1->TabIndex = 4; // // label1 // this->label1->AutoSize = true; this->label1->Font = (gcnew System::Drawing::Font(L"Microsoft Sans Serif", 12)); this->label1->ForeColor = System::Drawing::Color::Navy; this->label1->Location = System::Drawing::Point(592, 52); this->label1->Margin = System::Windows::Forms::Padding(4, 0, 4, 0); this->label1->Name = L"label1"; this->label1->Size = System::Drawing::Size(200, 20); this->label1->TabIndex = 5; this->label1->Text = L"Bien So Xe Xac Dinh Duoc"; // // MyForm // this->AutoScaleDimensions = System::Drawing::SizeF(8, 20); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->ClientSize = System::Drawing::Size(917, 602); this->Controls->Add(this->label1); this->Controls->Add(this->textBox1); this->Controls->Add(this->pictureBox1); this->Controls->Add(this->button2); this->Controls->Add(this->button1); 73 this->Font = (gcnew System::Drawing::Font(L"Arial Narrow", 12, System::Drawing::FontStyle::Bold, System::Drawing::GraphicsUnit::Point, static_cast(0))); this->Margin = System::Windows::Forms::Padding(4, 5, 4, 5); this->Name = L"MyForm"; this->Text = L"Chuong trinh nhan dien bien so xe v1.0"; this->Load += gcnew System::EventHandler(this, &MyForm::MyForm_Load); (cli::safe_cast(this>pictureBox1))->EndInit(); this->ResumeLayout(false); this->PerformLayout(); } #pragma endregion private: private: char* ConvertStringtoChar(System::String ^str) { char *str2=(char*)(void*) Marshal::StringToHGlobalAnsi(str); return str2; } private: System::Void MyForm_Load(System::Object^ sender, System::EventArgs^ e) { } private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { Mat src; Mat src_luu; Mat src_pyrdown; Mat Threshold; Mat hinh_chu_nhat; Mat hinh_chu_nhat1; Mat s1=getStructuringElement(MORPH_CROSS,cv::Size(3,3),cv::Point(1,1)); Mat s2=getStructuringElement(MORPH_CROSS,cv::Size(3,3),cv::Point(1,1)); 74 int w=src.cols; int h=src.rows; Mat mImg; //anh xu ly hinh thai hoc int kq=0; int so_ky_tu=0; Mat Element=getStructuringElement(MORPH_CROSS,cv::Size(5,5),cv::Point(1,1)); OpenFileDialog^ dlg=gcnew OpenFileDialog ; dlg>Filter="Image(*.bmp;*jpg;*.jpeg;*png)|*.bmp;*jpg;*.jpeg;*png|All file (*.*)|*.*||"; if(dlg>ShowDialog()==System::Windows::Forms::DialogResult::Cancel) { return ; } src = imread(ConvertStringtoChar(dlg->FileName),1); // Read the file Bitmap ^bmp=gcnew Bitmap(dlg->FileName); pictureBox1->Image=bmp; pictureBox1->Refresh(); if(! src.data ) { return ; } //code here { destroyAllWindows(); textBox1->Text=""; cv::resize(src,src,cv::Size(800,600)); src_luu=src; //imshow("1",src); morphologyEx(src,mImg,CV_MOP_BLACKHAT,s1); //imshow("2",mImg); cvtColor(mImg,mImg,CV_BGR2GRAY); cv::normalize(mImg,mImg,0,255,CV_MINMAX); //imshow("3",mImg); vectorcontours1; string name="a"; //Bat dau nhi phan hoa nguong dong cho toan bo buc anh, gia tri bat dau la for(int i=8;i25&&r.height(r.height/1.6)){ so_ky_tu++; } } 76 if(so_ky_tu>5){ for(size_t k=0;k0.2&&r2.width/(float)r2.height5&&r2.height>(r.height/1.6)){ toa_do=r2.x; rectangle(src,r2,Scalar(255,0,0),1,8,0); bx=src(r); cvtColor(bx,bx_gray,CV_BGR2GRAY); threshold(bx_gray,bx_binary,t,255,CV_THRESH_BINARY); r2.x=r2.x+2;r2.width=r2.width-3; sapxep[dem]=r2; r2.x=r2.x+r.x;r2.y=r2.y+r.y; dem++; } } //Ket thuc tach cac ky tu rieng biet, vung bien so for(int t=0;tText +="S-"; if(so==15) textBox1->Text +="F-"; if(so==16) textBox1->Text +="V-"; if(so==17) textBox1->Text +="X-"; if(so==18) textBox1->Text +="K-"; if(so==19) textBox1->Text +="P-"; if(so==20) textBox1->Text +="N-"; if(so==21) textBox1->Text +="H-"; if(so==22) textBox1->Text +="M-"; if(so==23) textBox1->Text +="U-"; if(so==24) textBox1->Text +="L-"; } SoChan.close(); //Ket thuc phan nhan dien // -// } } 80 if(so_ky_tu>5) goto diem1; } //Ket thuc phan tach vung bien so } } //Ket thuc phan nhi phan hoa nguong dong cho toan bo buc anh diem1: int x=0; } } //Ket thuc ham chinh float tinhnguongdong(Mat mImg) { float dem=0; for(int c=0;c < (mImg.cols);c++) { for(int h=0;h[...]... dụng gồm các bƣớc sau: Bƣớc 1: Tạo cơ sở dữ liệu phục vụ việc nhận diện Bƣớc này ngƣời dùng sẽ chạy chế độ huấn luyện Hình ảnh sẽ đƣợc chụp từ camera, xử lý sau đó đƣợc lƣu lại Bƣớc 2: Nhận diện khuôn mặt Ứng dụng sẽ chạy với chế độ nhận diện Đầu tiên ngƣời dùng sẽ đăng nhập mật khẩu Sau đó, ứng dụng sẽ xử lý ảnh thu từ camera để nhận diện đối tƣợng, nếu đối tƣợng có trong cơ sở dữ liệu thì kit Raspberry... kit Raspberry PI 18 2.1.2 Hiện thực hóa ứng dụng nhận diện khuôn mặt a Bài toán thiết kế Các giải pháp nhận diện đã rất phát triển trong những năm gần đây với sự ra đời của các hệ thống nhận diện vân tay, mống mắt, giọng nói…Mặc dù công nghệ nhận diện khuôn mặt có độ chính xác không cao nhƣ những phƣơng pháp kể trên nhƣng nó có ƣu điểm là quá trình nhận diện không cần đến sự tiếp xúc trực tiếp giữa đối... sáng trên từng pixel ảnh qua công thức sau: Y '  0.2126R  0.7152G  0.0722B (1.1) Trong OpenCV, ta sử dụng hàm cvtColor để chuyển đổi ảnh từ hệ màu RGB sang ảnh xám: cvtColor(original, gray, CV_BGR2GRAY); 3 Trong đó original là ma trận ảnh gốc, gray là ma trận ảnh sau khi chuyển đổi, CV_BGR2GRAY là tham số cho biết ảnh gốc (RGB) sẽ đƣợc chuyển thành ảnh xám (Gray) a) Ảnh RGB gốc b) Ảnh xám sau khi chuyển... đã xây dựng đƣợc cascade đến bộ phân lớp thứ i Ta sẽ đƣa các ảnh không phải khuôn mặt vô cascade hiện thời và tiến hành nhận dạng Các ảnh mà bị cho là khuôn mặt sẽ đƣợc đƣa vào tập N để xây dựng tiếp bộ phân lớp thứ i+1 13 CHƢƠNG 2 ỨNG DỤNG NHẬN DIỆN KHUÔN MẶT TRÊN KIT RASPBERRY PI VÀ ỨNG DỤNG NHẬN DIỆN BIỂN SỐ XE Ô TÔ 2.1 ỨNG DỤNG NHẬN DIỆN KHUÔN MẶT TRÊN KIT RASPBERRY PI 2.1.1 Giới thiệu kit raspberry... Tách khuôn mặt Chuẩn hóa kích thƣớc ảnh Nhận diện khuôn mặt Biến đếm = 0 S Đúng ngƣời? Thông báo Đ Biến đếm +1 Thông báo S Đếm ... vào phần xử lý ảnh dùng thƣ viện OpenCV Ứng dụng nhận diện khuôn mặt hoạt động kit Raspberry PI xử lý trực tiếp ảnh nhận từ camera Do khuôn khổ đề tài có hạn nên ứng dụng nhận diện biển số xe... xe, xử lý nhận diện, sau hiển thị kết nhận diện đƣợc lên hình Hình : Giao diện ứng dụng nhận diện biển số xe ô tô 35 2.2.2 Lƣu đồ giải thuật Hình 2.16 Lƣu đồ giải thuật ứng dụng nhận diện biển... phản 37 Kết quả: Hình 2.17 Giao diện ứng dụng nhận diện biển số xe Hình 2.18 Kết nhận diện biển số xe thứ 38 Hình 2.19 Kết nhận diện biển số xe thứ Hình 2.20 Kết nhận diện biển số xe thứ Kết sai

Ngày đăng: 03/04/2016, 23:28

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan