Academia.eduAcademia.edu
TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THỰC PHẨM TP. HCM KHOA CÔNG NGHỆ ĐIỆN – ĐIỆN TỬ ĐỒ ÁN TỐT NGHIỆP KHÓA ĐIỆN BẢO MẬT 2 LỚP BẰNG VÂN TAY VÀ NHẬN DIỆN KHUÔN MẶT GVHD: Th.S Trần Hoàn SVTH: Hà Duy Thiện Lớp: 06DHDT2 MSSV: 2002150158 TP.H CH MINH, THÁNG 6, NĂM 2019 TRƯỜNG ĐẠI HỌC CÔNG NGHIỆP THỰC PHẨM TP. H CH MINH CỘNG HÕA XÃ HỘI CHỦ NGHĨA VIỆT NAM Độc lập – Tự do – Hạnh phúc KHOA CN ĐIỆN – ĐIỆN TỬ PHIẾU GIAO NHIỆM VỤ (Phiếu này phải đóng vào trang đầu tiên của báo cáo) 1. Họ và tên sinh viên đƣợc giao đề tài (Số lượng sinh viên: 1 ) (1) Hà Duy Thiện MSSV:2002150158 Lớp: 06DHDT2 2. Tên đề tài: KHÓA ĐIỆN BẢO MẬT 2 LỚP BẰNG VÂN TAY VA NHẬN DIỆN KHUÔN MẶT 3. Nhiệm vụ của đề tài: - Tìm hiểu và sử dụng cảm biến nhận dạng vân tay R305 và khóa điện 12v. - Tập trung nghiên cứu, tìm hiểu về nhận diện khuôn mặt (Face Recognition) chứ không chú trọng tìm hiểu phát hiện khuôn mặt (Face Detection). 4. Ngày giao nhiệm vụ khóa luận tốt nghiệp: 5. Ngày hoàn thành và nộp về khoa: ....................………………………………………. TP.Hồ Chí Minh, ngày .… tháng ..… năm 2019 Trưởng khoa Trưởng bộ môn Giảng viên hướng dẫn ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn NHẬN XÉT CỦA GIÁO VIÊN HƢỚNG DẪN ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. SVTH: Hà Duy Thiện 2 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. ............................................................................................................................................. SVTH: Hà Duy Thiện 3 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn LỜI CẢM ƠN Lời đầu tiên, em xin gửi đến Thầy Trần Hoàn lời cảm ơn chân thành và sâu sắc nhất. Nhờ có sự hướng dẫn và giúp đỡ tận tình của Thầy trong suốt thời gian qua, em đã có thể thực hiện và hoàn thành Đồ Án Tốt Nghiệp. Những lời nhận xét, góp ý và hướng dẫn tận tình của Thầy đã giúp em có một định hướng đúng đắn trong suốt quá trình thực hiện Đề tài, giúp em nhìn ra được những ưu khuyết điểm của Đề tài và từng bước hoàn thiện hơn. Đồng thời, em xin trân trọng cảm ơn các Thầy Cô của Trường đại học Công Nghiệp Thực Phẩm nói chung và của khoa Điện - Điện Tử nói riêng đã dạy dỗ chúng em suốt quãng thời gian ngồi trên ghế giảng đường Đại học. Những lời giảng của Thầy Cô trên bục giảng đã trang bị cho chúng em những kiến thức và giúp chúng em tích lũy thêm những kinh nghiệm. Bên cạnh đó, tôi xin cảm ơn sự hỗ trợ và giúp đỡ của bạn bè trong thời gian học tập tại Trường Đại Học đại học Công Nghiệp Thực Phẩm và trong quá trình hoàn thành Luận Văn Tốt Nghiệp này. Cuối cùng, con cũng chân thành cảm ơn sự động viên và sự hỗ trợ của gia đình và cha mẹ trong suốt thời gian học tập. Con xin gửi lời cảm ơn trân trọng nhất đến cha mẹ, người đã sinh ra và nuôi dưỡng con nên người. Sự quan tâm, lo lắng và hy sinh lớn lao của cha mẹ luôn là động lực cho con cố gắng phấn đấu trên con đường học tập của mình. Một lần nữa, con xin gửi đến cha mẹ sự biết ơn sâu sắc nhất. SVTH: Hà Duy Thiện 4 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn TÓM TẮT ĐỒ ÁN Thị giác máy tính và sinh trắc vân tay là những lĩnh vực khá mới mẻ và hứa hẹn nhiều bước phát triển nhảy vọt trong tương lai. Ở nước ta các đề tài nhận diện khuôn mặt vẫn chưa được phát triển đầy đủ, việc xây dựng hệ thống bảo mật ứng dụng đề tài này đã và đang được các nước trên thế giới hướng đến, ứng dụng nhiều trong thực tế như xác minh tội phạm, camera chống trộm, hệ thống chấm công, lưu trữ thông tin ở các máy ATM, các bãi giữ xe siêu thị, v.v nếu nhận diện khuôn mặt kết hợp với nhận diện dấu vân tay, thì sẻ tạo ra được một hệ thông bảo mật cực kỳ an toàn với người dùng. Đặc biệt là những nơi có yêu cầu bảo mật cao như các cơ quan pháp luật, nơi lưu trữ thông tin,… Đề tài: “Khóa điện bảo mật 2 lớp bằng vân tay và nhận diện gƣơng mặt ” được thực hiện dựa trên ý tưởng đó. Đây là một đề tài rất có ý nghĩa trong việc giúp bảo vệ tài sản của cá nhân hay một doanh nghiệp hay nhà nước, giúp chúng ta có cuộc sống an nhàn và an toàn hơn. Trong đề tài này, ngoài những kiến thức về xử lý ảnh số, OpenCV, nhận dạng vân tay từ arduino, giao tiếp giữa raspberry và arduino, đề tài còn tập trung đi sâu nghiên cứu về mô hình Cascade of Boosted Classifer dùng đặc trưng Haar-like Feature, thực hiện huấn luyện các bộ nhận dạng dùng ứng dụng HaarTraining. Kết hợp các kiến thức trên lại để xây dựng, thực hiện đề tài này. Sử dụng raspicam thu nhận hình ảnh chuyền về cho raspberry xử lý nhận dạng khuôn mặt và sử dụng arduino thực thi chức năng quét nhận dạng vân tay và điều khiển khóa điện. Tp. Hồ Chí Minh, ngày 12 tháng 6 năm 2019 Hà Duy Thiện SVTH: Hà Duy Thiện 5 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn MỤC LỤC NHẬN XÉT CỦA GIÁO VIÊN HƯỚNG DẪN ....................................................... 2 NHẬN XÉT CỦA GIÁO VIÊN PHẢN BIỆN .......................................................... 3 LỜI CẢM ƠN ............................................................................................................ 4 TÓM TẮT ĐỒ ÁN ..................................................................................................... 5 DANH MỤC HÌNH ẢNH .......................................................................................... 8 DANH MỤC CHỮ VIẾT TẮT ............................................................................... 10 CHƯƠNG 1. TỔNG QUAN VỀ ĐỀ TÀI ............................................................... 11 1.1. Đặt vấn đề .......................................................................................................... 11 1.2. Mục tiêu đề tài.................................................................................................... 11 1.3. Đối tượng và phạm vi nghiên cứu ....................................................................... 12 1.3.1. Đối tượng nghiên cứu ..................................................................................... 12 1.3.2. Phạm vi nghiên cứu ........................................................................................ 12 CHƯƠNG 2. CƠ SỞ LÝ THUYẾT ........................................................................ 13 2.1. Công nghệ sinh trắc ............................................................................................ 13 2.2. Nhận dạng vân tay .............................................................................................. 14 2.3. Nhận dạng khuôn mặt ......................................................................................... 14 2.4. Hệ thống xử lý ảnh ............................................................................................. 15 2.5. Kỹ thuật Adaboost .............................................................................................. 20 2.6. Đặc trưng Haar-like ............................................................................................ 22 2.7. Xử lý vân tay ...................................................................................................... 24 2.8. Giới thiệu linh kiện............................................................................................. 26 2.8.1. Giới thiệu Raspberry pi 3 model B+ ................................................................ 26 2.8.2. Giới thiệu Arduino uno ................................................................................... 27 2.8.3. Cảm biến nhận dạng vân tay R305 .................................................................. 30 2.8.4. Module 4 Relay với opto cách ly (5VDC) ....................................................... 31 SVTH: Hà Duy Thiện 6 ĐỒ ÁN TỐT NGHIỆP 2.8.5. 3.1. GVHD: ThS.Trần Hoàn Camera Raspberry pi V1 5MP ........................................................................ 32 Các phần mềm hỗ trợ ......................................................................................... 33 3.1.1. Advanced IP Scanner ...................................................................................... 33 3.1.2. MobaXterm .................................................................................................... 33 3.1.3. QT Creator...................................................................................................... 35 3.1.4. Arduino IDE ................................................................................................... 37 3.2. Thư viện ............................................................................................................. 38 3.2.1. Thư viện OpenCV ........................................................................................... 38 3.2.2. Thư viện Adafruit_Fingerprint ........................................................................ 42 3.3. Sơ đồ khối và lưu đồ .......................................................................................... 44 3.3.1. sơ đồ khối ....................................................................................................... 44 3.3.2. lưu đồ ............................................................................................................. 45 CHƢƠNG 4. KẾT QUẢ THỰC NGHIỆP ............................................................. 47 4.1. Sơ đồ nối dây ..................................................................................................... 47 4.2. Mô hình thực tế .................................................................................................. 47 4.3. Giao diện hiển thị ............................................................................................... 49 CHƢƠNG 5. KẾT LUẬN VÀ ĐỊNH HƢỚNG ĐỀ TÀI ........................................ 50 5.1. Kết quả đạt được ................................................................................................ 50 5.2. Hạn chế .............................................................................................................. 50 5.3. Hướng phát triển ................................................................................................ 50 PHỤ LỤC ................................................................................................................. 51 TÀI LIỆU THAM KHẢO ....................................................................................... 60 SVTH: Hà Duy Thiện 7 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn DANH MỤC HÌNH ẢNH Hình 2.1. Quá trình xử lý ảnh.................................................................................... 15 Hình 2.2. Sơ đồ tổng quát của một hệ thống xử lý ảnh ............................................ 116 Hình 2.3. Mô hình phân tần kết hợp các bộ phân loại yếu để xác định khuôn mặt ..... 21 Hình 2.4. Kết hợp các bộ phân loại yếu thành bộ phân loại mạnh ............................. 22 Hình 2.5. đặt trưng Haar-like cơ bản ......................................................................... 23 Hình 2.6. Đặc trưng cạnh (edge features) .................................................................. 23 Hình 2.7. Đặc trưng đường (line features) ................................................................. 23 Hình 2.8. Đặc trưng xung quanh tâm (center-surround features) ............................... 23 Hình 2.9. Cách tính Integral Image của ảnh .............................................................. 24 Hình 2.10. Ví dụ cách tính nhanh các giá trị mức xám của vùng D trên ảnh .............. 24 Hình 2.11. Quan hệ FAR, FRR, SUM và EER .......................................................... 25 Hình 2.12. Raspberry pi 3 mode B+ .......................................................................... 27 Hình 2.13. Arduino uno ............................................................................................ 28 Hình 2.14. Giao diện arduino IDE............................................................................. 30 Hình 2.15. Cảm biến nhận dạng vân tay R305 .......................................................... 31 Hình 2.16. Relay ....................................................................................................... 32 Hình 2.17. Camera Raspicam.................................................................................... 33 Hình 3.1. Phần mềm Advanced IP Scanner ............................................................... 34 Hình 3.2. Phần mềm MobaXterm ............................................................................. 35 Hình 3.3. Terminal MobaXterm ................................................................................ 36 Hình 3.4. Phần mềm Qt Creator ................................................................................ 37 Hình 3.5. Phần mềm Arduino IDE ............................................................................ 38 Hình 3.6. Cài thư viện cho Arduino trên Raspberry .................................................. 44 Hình 3.7. Kiểm tra thư viện Arduino ......................................................................... 44 Hình 3.8. Sơ đồ khối ................................................................................................. 44 Hình 3.9. Lưu đồ trên Raspberry ............................................................................... 46 Hình 3.10. Lưu đồ trên arduino ................................................................................. 47 Hình 3.11. Lưu đồ trên giao diện .............................................................................. 47 Hình 4.1 Sơ đồ nối dây ............................................................................................. 48 Hình 4.2 Mô hình mặt trước...................................................................................... 48 Hình 4.3 Mô hình mặt sau ......................................................................................... 49 Hình 4.4 Giao diện hiển thị ....................................................................................... 49 SVTH: Hà Duy Thiện 8 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn DANH M C BẢNG BI U Bảng 1. Các điểm lân cận của điểm ảnh ..................................................................... 18 SVTH: Hà Duy Thiện 9 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn DANH MỤC CHỮ VIẾT TẮT Viết tắt Tiếng anh Tiếng việt Môi trường thiết kế hợp nhất PIN Integrated Development Environment Personal Identification Number PEL Picture Element Điểm ảnh CGA Color Graphic Adaptor FRR False Reject Rate Bộ điều hợp hiển thị đồ họa Lỗi từ chối nhầm FAR False Accept Rate lỗi chấp nhận nhầm EER Equal Error Rate Mức độ lỗi cân bằng SSH Secure Shell Vỏ an toàn: một giao thức điều khiển từ xa cho phép người dùng kiểm soát và chỉnh sửa server từ xa qua Internet IDE SVTH: Hà Duy Thiện Mã số định danh cá nhanh 10 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn CHƢƠNG 1. TỔNG QUAN VỀ ĐỀ TÀI 1.1. Đặt vấn đề Từ xưa con người luôn mong muốn chế tạo một thiết bị "biết suy nghĩ và làm việc giống như con người". Để chế tạo được những con Robot có khả năng "suy nghĩ" và "tự hoạt động độc lập" gần giống như con người, ngoài các yêu cầu về phần cứng và phần mềm điều khiển thì yếu tố quan trọng không thể thiếu đó là "thị giác máy tính (Computer Vision)". "Thị giác máy tính" tương tự như "đôi mắt" của con người, nhờ đó Robot có thể "quan sát" được thế giới xung quanh chúng để có thể đưa ra phản ứng với bên ngoài. Vài chục năm qua, con người đã tạo ra các cảm biến, vi xử lý hình ảnh giống (và ở mức độ nào đó còn tốt hơn) khả năng nhìn của mắt người. Những thấu kính lớn hơn, hoàn hảo về mặt quang học cùng các điểm ảnh phụ bán dẫn nhỏ tới mức nano mét giúp các camera ngày nay có độ chính xác và nhạy đáng kinh ngạc, camera có thể chụp hàng ngàn ảnh mỗi giây và nhận diện từ xa với độ chính xác cao. Ở nước ta, hoạt động nghiên cứu và thiết kế các hệ thống nhận dạng đang có những bước đầu phát triển trong các trường đại học. Các đề tài nghiên cứu khoa học và đồ án trước đây chủ yếu tập trung vào các mảng nhận dạng dấu vân tay để hỗ trợ điều khiển trong các hệ thống an ninh… Tuy nhiên, các đề tài liên quan tới giao tiếp giữa người và máy tính thông qua nhận dạng khuôn mặt kết hợp với nhận dạng vân tay vẫn chưa được phát triển đầy đủ. Nhận thấy đây là hướng phát triển mới và có tiềm năng ứng dụng cao, đồ án “Khóa điện bảo mật 2 lớp bằng vân tay và nhận diện gƣơng mặt” tập trung vào việc kết hợp những kiến thức về thị giác máy tính và xử lí ảnh số để xây dựng nên một hệ thống mà trong đó con người có thể điều khiển đối tượng thông qua việc nhận diện khuôn mặt và vân tay. 1.2. Mục tiêu đề tài - Nhận diện được khuôn mặt người, nhận diện được vân tay. - Tìm hiểu cách thức vận hành của quá trình nhận dạng khuôn mặt. - Nghiên cứu các vấn đề thực tiễn cần giải quyết, đề ra các phương án giải quyết vấn đề khó khan. - Tìm hiểu cách thức vận hành, kết nối, cài đặt camera raspicam với raspberry pi 3 để tiến hành thu thập dữ liệu. - Tìm hiểu về phần mềm Arduino IDE, Qt creator, cách viết code và cài đặt các thư viện hỗ trợ. - Tìm hiểu các bộ thư viện: OpenCV, Adafruit_Fingerprint. SVTH: Hà Duy Thiện 11 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn 1.3. Đối tƣợng và phạm vi nghiên cứu 1.3.1. Đối tƣợng nghiên cứu - Thiết bị điều khiển trung tâm: Raspberry pi 3 B+. - Thiết bị điều khiển ngoại vi: Arduino uno. - Cảm biến: cảm biến nhận dạng vân tay R305. - Camera: camera raspberry (raspicam). - Các phương pháp, thuật toán để phục vụ cho việc phát hiện và nhận diện khuôn mặt người và vân tay - Nghiên cứu các bộ thư viện phục vụ cho quá trình xử lý: OpenCV, Adafruit_Fingerprint. 1.3.2. Phạm vi nghiên cứu - Tìm hiểu và sử dụng cảm biến nhận dạng vân tay R305 và khóa điện 12v. - Tập trung nghiên cứu, tìm hiểu về nhận dạng khuôn mặt (Face Recognition) chứ không chú trọng tìm hiểu phát hiện khuôn mặt (Face Detection). - Việc xử lý ảnh, nhận dạng khuôn mặt thỏa mãn các điều kiện:  Ánh sáng bình thường, ngược sáng, ánh sáng đèn điện. (Với bộ cơ sở dữ liệu tự thu thập).  Góc ảnh: Trực diện (frontal) hoặc góc nghiêng không quá 10o .  Không bị che khuất (no occulusion). SVTH: Hà Duy Thiện 12 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn CHƢƠNG 2. CƠ SỞ LÝ THUYẾT 2.1. Công nghệ sinh trắc Trong thời đại ngày nay, sự phát triển không ngừng của khoa học kỹ thuật đã giúp cho con người thuận tiện hơn trong các công việc hằng ngày. Với sự bùng nổ về công nghệ thông tin, quá trình toàn cầu hóa diễn ra nhanh chóng, sự bảo mật riêng tư thông tin cá nhân cũng như để nhận biết một người nào đó trong hàng tỉ người trên trái đất đòi hỏi phải có một tiêu chuẩn, hệ thống đảm nhận các chức năng đó. Công nghệ sinh trắc ra đời và đáp ứng được các yêu cầu trên. Nhiều công nghệ sinh trắc đã và đang được phát triển, một số chúng đang được sử dụng trong các ứng dụng thực tế và phát huy hiệu quả cao. Các đặc trưng sinh trắc thường được sử dụng là vân tay, gương mặt, mống mắt, tiếng nói. Mỗi đặc trưng sinh trắc có điểm mạnh và điểm yếu riêng, nên việc sử dụng đặc trưng sinh trắc cụ thể là tùy thuộc vào yêu cầu của mỗi ứng dụng nhất định. Các đặc trưng sinh trắc có thể được so sánh dựa vào các yếu tố sau: tính phổ biến, tính phân biệt, tính ổn định, tính thu thập, hiệu quả, tính chấp nhận. Trong yêu cầu về bảo mật và tìm kiếm, tính phân biệt (hai người khác nhau thì đặc trưng sinh trắc này phải khác nhau) và ổn định (đặc trưng sinh trắc này không thay đổi theo từng giai đoạn thời gian tương ứng với hạng mục đối sánh nhất định) được quan tâm nhiều hơn cả. Vân tay đã được biết tới với tính phân biệt (tính chất cá nhân) và ổn định theo thời gian cao nhất, vì vậy nó là đặc trưng sinh trắc được sử dụng rộng rãi nhất. Nhận dạng sinh trắc đề cập đến việc sử dụng các đặc tính hành vi và thể chất (ví dụ: vân tay, gương mặt, chữ kí…) có tính chất khác biệt để nhận dạng một người một cách tự động. Nhận dạng vân tay và nhận dạng khuôn mặt được xem là một trong những kỹ thuật nhận dạng hoàn thiện và đáng tin cậy nhất. Trong các tổ chức, cơ quan an ninh, quân sự, hành chính, khoa học… luôn có nhu cầu kiểm tra và trả lời các câu hỏi: “người này có phải là đối tượng đó hay không?”, “người này có được quyền truy cập và sử dụng thiết bị đó?”, “người này có được biết những thông tin đó?”… Phương pháp dựa vào thẻ bài truyền thống (ví dụ dùng chìa khóa…), phương pháp dựa vào trí thức (ví dụ dùng mật khẩu và PIN – Personal Identification Number) đã được sử dụng phổ biến nhưng thực tế đã chứng minh là không hiệu quả vì tính an toàn không cao và. Người ta nhận thấy các đặc trưng sinh trắc không thể dễ dàng bị thay thế, chia sẻ hay giả mạo.., chúng được xem là đáng tin cậy hơn trong nhận dạng một người so với các phương pháp trên. Vân tay và khuôn mặt là những đặc điểm khá đặc biệt của con người bởi vì tính đa dạng của nó, mỗi người sở hữu một dấu vân tay và khuôn mặt khác nhau. Chưa có thông tin trường hợp mà có những người cùng dấu vân tay và khuôn mặt trùng nhau. Bằng việc sử dụng vân SVTH: Hà Duy Thiện 13 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn tay và khuôn mặt, việc xác nhận một người có thể được thực hiện bằng một hệ thống nhận dạng vân tay và khuôn mặt hoàn toàn an toàn. 2.2. Nhận dạng vân tay Ngày nay, người ta cũng lợi dụng các đặc điểm riêng biệt của vân tay để xây dựng các hệ thống bảo mật các thông tin riêng tư cho người sở hữu chúng, từ việc dùng các ổ khóa vân tay thay thế cho các ổ khóa thông thường cho đến việc dùng vân tay thay thế mật khẩu đã quá phổ biến trong thời đại công nghệ thông tin. Người ta chỉ cần quét dấu vân tay của mình qua các thiết bị chức năng là có thể mở được một cánh cửa, đăng nhập vào hệ thống máy vi tính, qua một phòng bí mật hay các trạm bảo vệ bí mật. Đó là giải pháp an ninh tuyệt đối cho những yêu cầu bảo mật của con người trong nhiều lĩnh vực như: Kiểm soát an ninh trong các cơ quan của Chính phủ, trong quân đội, ngân hàng, trung tâm lưu trữ dữ liệu... hoặc để kiểm soát ra vào của nhân viên tại các trung tâm thương mại, các tập đoàn, các đại sứ quán... Trong lĩnh vực quản lý nhân sự, phương pháp nhận dạng vân tay còn hỗ trợ đắc lực cho việc quản lý và chấm công tại các nhà máy, xí nghiệp, công ty bằng máy các máy chấm công vân tay. Tuy nhiên, phổ biến nhất có lẽ là dấu vân tay của chúng ta qua mặt sau của chứng minh thư để xác định một cách nhanh nhất các đặc điểm, hồ sơ của một công dân đã được lưu trong cơ sở dữ liệu 2.3. Nhận dạng khuôn mặt Các công ty lớn như Facebook, Apple và Google đang tích cực nghiên cứu vấn đề này để cung cấp các dịch vụ như tìm kiếm trực quan, tự động gắn thẻ bạn bè trong các bài đăng trên phương tiện truyền thông xã hội và khả năng sử dụng khuôn mặt của bạn để mở khóa điện thoại di động, hay có thể thanh toán dịch vụ. Các cơ quan thực thi pháp luật cũng rất quan tâm, chủ yếu để nhận diện khuôn mặt trong hình ảnh kỹ thuật số. Phát hiện tội phạm nguy hiểm công nghệ nhận dạng khuôn mặt đang được một số lực lượng cảnh sát sử dụng để hỗ trợ vào việc thực thi pháp luật. Ví dụ, các nhân viên ở Ireland có ý định sử dụng công nghệ này để giúp xác định các nghi phạm ở các khu vực đông đúc. Các nhân viên ở New York đã sử dụng công nghệ này để bắt giữ một nghi can trong vụ hỏa hoạn. Ngoài ra, các sĩ quan cảnh sát Trung Quốc tại đường sắt cao tốc Zhengzhou East ở thủ phủ tỉnh Hà Nam cũng đang sử dụng công nghệ này để giúp xác định các nghi phạm. Hệ thống của họ sử dụng thiết bị di động được kết nối với máy ảnh, được gắn trên một cặp kính râm. SVTH: Hà Duy Thiện 14 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn Hệ thống kiểm tra chuyến bay, năm 2017 Baidu đã giới thiệu một hệ thống nhận diện khuôn mặt tại sân bay chính của Bắc Kinh, cho phép xác minh phi hành đoàn và nhân viên của hãng hàng không. Một sân bay ở thành phố Nanyang tỉnh Hà Nam cũng đang sử dụng một hệ thống tương tự như vậy. Tuy nhiên, hệ thống của họ đang áp dụng cho hành khách. Việc quét mặt được thực hiện và sử dụng để xác minh danh tính của họ trước khi lên máy bay. Quét khuôn mặt để mở khóa điện thoại “Mở khóa bằng khuôn mặt” là tính năng cho phép mở khóa điện thoại thông minh, cụ thể ở đây là Android bằng cách sử dụng “bản thiết kế”, tức là bản đồ cấu trúc độc đáo của khuôn mặt. Vào tháng 6/2018, theo eWeek.com, Google đã cấp bằng sáng chế một công nghệ có thể biến những biểu cảm trên khuôn mặt như một cái nháy mắt, một nụ cười,… thành một mã để mở khóa các thiết bị. Hi vọng điều này sẽ khó khăn hơn để giả mạo. Hỗ trợ trong việc thanh toán vào tháng 7/2018, một công ty Phần Lan, Uniqul đã tạo ra một hệ thống có thể thanh toán tiền thông qua nhận dạng khuôn mặt. Tại một cửa hàng, thay vì thanh toán bằng tiền mặt hoặc thẻ tín dụng, chỉ cần đưa ra một biểu cảm cho máy quét để mua hàng. Một bài báo của Huffington Post mô tả công nghệ mới này, họ đã sử dụng nhận dạng khuôn mặt làm phương pháp bảo mật chính. 2.4. Hệ thống xử lý ảnh Con người thu nhận thông tin qua các giác quan, trong đó thị giác đóng vai trò quan trọng nhất. Những năm trở lại đây với sự phát triển của phần cứng máy tính, xử lý ảnh và đồ họa đã phát triển một cách mạnh mẽ và có nhiều ứng dụng trong cuộc sống. Xử lý ảnh và đồ họa đóng vai trò quan trọng trong tương tác người máy. Quá trình xử lý ảnh được xem như là quá trình thao tác ảnh đầu vào nhằm cho ra kết quả mong muốn. Kết quả đầu ra của một quá trình xử lý một kết luận. Ảnh Xử lý ảnh Kết quả Hình 2.1. Quá trình xử lý ảnh Ảnh có thể xem là tập hợp các điểm ảnh và mỗi điểm ảnh được xem như là đặc trưng cường độ sáng hay một dấu hiệu nào đó tại một vị trí nào đó của đối tượng trong không gian và nó có thể xem như một hàm n biến P(c1, c2, …, cn). Do đó, ảnh trong xử lý ảnh có thể xem như ảnh n chiều. Sơ đồ tổng quát của một hệ thống xử lý ảnh: SVTH: Hà Duy Thiện 15 ĐỒ ÁN TỐT NGHIỆP Thu nhận ảnh GVHD: ThS.Trần Hoàn Tiền xử lý ảnh Phân đoạn ảnh Biểu diễn Nhận dạng và nội suy Cơ sở tri thức Hình 2.2. Sơ đồ tổng quát của một hệ thống xử lý ảnh Sơ đồ này bao gồm các phần sau: Phần thu nhận ảnh (Image Acquisition). Ảnh có thể nhận qua camera màu hoặc đen trắng. Camera thường dùng là loại quét dòng; ảnh tạo ra có dạng hai chiều. Chất lượng một ảnh thu nhận được phụ thuộc vào thiết bị thu, môi trường (ánh sáng, thời tiết). Tiền xử lý (Image Processing). Sau bộ thu nhận, ảnh có thể bị nhiễu, độ tương phản thấp nên cần đưa vào bộ tiền xử lý để nâng cao chất lượng. Chức năng chính của bộ tiền xử lý là lọc nhiễu, nâng độ tương phản để làm ảnh rõ, nét hơn. Phân đoạn (Segmentation) hay phân vùng ảnh. Phân vùng ảnh là tách một ảnh đầu vào thành các vùng thành phần để biểu diễn phân tích, nhận dạng ảnh. Ví dụ: để nhận dạng chữ (hoặc mã vạch) trên phong bì thư cho mục đích phân loại bưu phẩm, cần chia các câu, chữ, về địa chỉ hoặc tên người thành các từ, các chữ, các số (hoặc các vạch) riêng biệt để nhận dạng. Đây là phần phức tạp khó khăn nhất trong xử lý ảnh và cũng dễ gây lỗi, làm mất độ chính xác của ảnh. Kết quả nhận dạng ảnh phụ thuộc rất nhiều vào công đoạn này. Biểu diễn ảnh (Image Representation). Đầu ra ảnh sau phân đoạn chứa các điểm ảnh của vùng ảnh (ảnh đã phân đoạn) cộng với mã liên kết với các vùng lân cận. Việc chọn các tính chất để thể hiện ảnh gọi là trích chọn đặc trưng (Feature Selection) gắn với việc tách các đặc tính của ảnh dưới dạng các thông tin định lượng hoặc làm cơ sở để phân biệt lớp đối tượng này với đối tượng khác trong phạm vi ảnh nhận được. Ví dụ: trong nhận dạng ký tự trên phong bì thư, chúng ta miêu tả các đặc trưng của từng ký tự giúp phân biệt ký tự này với ký tự khác. Nhận dạng ảnh và nội suy ảnh (Image Recognition and Interpretation). Nhận dạng ảnh là quá trình xác định ảnh. Quá trình này thường thu được bằng cách so sánh với mẫu chuẩn đã được học (hoặc lưu từ trước). Nội suy là phán đoán theo ý nghĩa trên cơ sở nhận dạng. Ví dụ: một loạt chữ số và nét gạch ngang trên phong bì thư có thể được nội suy thành mã điện thoại. Có nhiều cách phân loại ảnh khác nhau về ảnh. SVTH: Hà Duy Thiện 16 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn Theo lý thuyết về nhận dạng, các mô hình toán học về ảnh được phân theo hai loại nhận dạng ảnh cơ bản: - Nhận dạng theo tham số. - Nhận dạng theo cấu trúc. Một số đối tượng nhận dạng khá phổ biến hiện nay đang được áp dụng trong khoa học và công nghệ là: nhận dạng ký tự (chữ in, chữ viết tay, chữ ký điện tử), nhận dạng văn bản (Text), nhận dạng vân tay, nhận dạng mã vạch, nhận dạng mặt người… Cơ sở tri thức (Knowledge Base). Như đã nói ở trên, ảnh là một đối tượng khá phức tạp về đường nét, độ sáng tối, dung lượng điểm ảnh, môi trường để thu ảnh phong phú kéo theo nhiễu. Trong nhiều khâu xử lý và phân tích ảnh ngoài việc đơn giản hóa các phương pháp toán học đảm bảo tiện lợi cho xử lý, người ta mong muốn bắt chước quy trình tiếp nhận và xử lý ảnh theo cách của con người. Trong các bước xử lý đó, nhiều khâu hiện nay đã xử lý theo các phương pháp trí tuệ con người. Vì vậy, ở đây các cơ sở tri thức được phát huy. Một số khái niệm cơ bản: Điểm ảnh (Picture Element): Gốc của ảnh (ảnh tự nhiên) là ảnh liên tục về không gian và độ sáng. Để xử lý được bằng máy tính (số), ảnh cần phải được số hóa. Số hóa ảnh là sự biến đổi gần đúng một ảnh liên tục thành một tập điểm phù hợp với ảnh thật về vị trí (không gian) và độ sáng (mức xám). Khoảng cách giữa các điểm ảnh đó được thiết lập sao cho mắt người không phân biệt được ranh giới giữa chúng. Mỗi một điểm như vậy gọi là điểm ảnh (PEL: Picture Element) hay gọi tắt là Pixel. Trong khuôn khổ ảnh hai chiều, mỗi pixel ứng với cặp tọa độ (x, y). Định Nghĩa: Điểm ảnh (Pixcel) là một phần tử của ảnh số tại tọa độ (x, y) với độ xám hoặc màu nhất định. Kích thước và khoảng cách giữa các điểm ảnh đó được chọn thích hợp sao cho mắt người cảm nhận sự liên tục về không gian và mức xám (hoặc màu) của ảnh số gần như ảnh thật. Mỗi một phần tử trong ma trận được gọi là một phần tử ảnh. Độ phân giải của ảnh: Độ phân giải (Resolution) của ảnh là mật độ điểm ảnh được ấn định trên một ảnh số được hiển thị. Theo định nghĩa, khoảng cách giữa các điểm ảnh phải được chọn sao cho mắt người vẫn thấy được sự liên tục của ảnh. Việc lựa chọn khoảng cách thích hợp tạo nên một mật độ phân bổ đó chính là độ phân giải và được phân bố theo trục x và y trong không gian hai chiều. Ví dụ: Độ phân giải của ảnh trên màn hình CGA (Color Graphic Adaptor) là một lưới điểm theo chiều ngang màn hình: 320 điểm chiều dọc * 200 điểm ảnh (320*200). Rõ ràng, cùng màn hình CGA 12 “ta nhận thấy mịn hơn màn hình CGA 17” độ phân giải 320*200. Lý do: cùng một mật độ (độ phân giải) nhưng diện tích mà hình rộng hơn thì độ mịn (liên tục của các điểm) kém hơn. SVTH: Hà Duy Thiện 17 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn Mức xám của ảnh: Một điểm ảnh (pixcel) có hai đặc trưng cơ bản là vị trí (x, y) của điểm ảnh và độ xám của nó. Dưới đây chúng ta xem xét một số khái niệm và thuật ngữ thường dùng trong xử lý ảnh. - Định nghĩa: Mức xám của điểm ảnh là cường độ sáng của nó được gán bằng giá trị số tại điểm đó. - Các thang mức xám thông thường: 16,32,64,128, 256 (Mức 256 là mức phổ dụng. Lý do: từ kỹ thuật máy tính dùng 1 byte (8bit) để biểu diễn mức xám: Mức xám dùng 1 byte biểu diễn: 28 = 256, tức là từ 0 đến 255). - Ảnh đen trắng: Là ảnh có hai màu đen, trắng (không chứa mầu khác) với mức xám ở các điểm ảnh có thể khác nhau. - Ảnh nhị phân: Ảnh chỉ có hai mức đen trắng phân biệt, tức dùng 1 bit mô tả 21 mức khác nhau. Nói cách khác: mỗi điểm ảnh của ảnh nhị phân chỉ có thể là 0 hoặc 1. - Ảnh màu: Trong khuôn khổ lý thuyết 3 màu (Red, Blue, Green) để tạo nên thế giới màu, người ta thường dùng 3 byte để mô tả mức màu, khi đó các giá trị màu: 28*3 = 224 ≈ 16,7 triệu màu. Định nghĩa ảnh số: Ảnh số là tập hợp các điểm ảnh với mức xám phù hợp dùng để mô tả ảnh gần với ảnh thật. Quan hệ giữa các điểm ảnh: Các lân cận của điểm ảnh (Image Neighbors): Giả sử có điểm ảnh p tại tọa độ (x, y) có 4 điểm lân cận gần nhất theo chiều đứng và ngang (có thể coi như lân cận 4 hướng chính: Đông, Tây, Nam, Bắc). {( x-1,y); (x, y-1); (x+1, y); (x, y+1)}= N4(p) Trong đó, số 1 là giá trị logic; N4(p): tập 4 điểm lân cận của p. Đông tây Nam (x-1,y-1) Bắc SVTH: Hà Duy Thiện (x,y-1) (x+1,y-1) (x-1,y) (x,y) (x+1,y) (x-1,y+1) (x,y+1) (x+1,y+1) Bảng 1. Các điểm lân cận của điểm ảnh 18 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn Các lân cận chéo: Các điểm lân cận chéo Np(P) (Có thể coi lân cận chéo là 4 hướng: Đông-Nam, Đông-Bắc, Tây-Nam, Tây-Bắc) Np(P) = {(x+1,y+1); (x+1, y-1); (x-1, y+1); (x-1, y-1)} Tập kết hợp: N8(p) = N4(p) + Np(p) là tập hợp 8 lân cận của điểm ảnh p. Chú ý: Nếu (x, y) nằm ở biên (mép) ảnh; một số điểm sẽ nằm ngoài ảnh. Các mối liên kết điểm ảnh: Liên kết 4: Hai điểm ảnh p và q được nói là liên kết 4 với các giá trị cường độ sáng V nếu q nằm trong một các lân cận của p, tức p thuộc N4(p). Liên kết 8: Hai điểm ảnh p và q nằm trong một các lân cận của p, tức q thuộc N8(p). Liên kết m (liên kết hỗn hợp): Hai điểm ảnh p và q với các giá trị cường độ sáng V được nói là liên kết m nếu: - q thuộc N4(p) hoặc - q thuộc Np(p). Đo khoảng cách giữa các điểm ảnh: Khoảng cách D(p) giữa hai điểm ảnh p tọa độ (x, y), q tọa độ (s, t) là hàm khoảng cách (Distance) hoặc Metric nếu: - D(p,q) ≥ 0 (Với D(p,q) = 0 nếu và chỉ nếu p = q). - D(p,q) = D (p, q). - D(p, z) ≤ D(p,q) + D(q, z); z là một điểm ảnh khác. Khoảng cách Euclide: Khoảng cách Euclide giữa hai điểm ảnh p(x, y) và q(s, t) được định nghĩa như sau: De(p,q) = [(x - s)2 + (y – t)2 ] 1/2 Khoảng cách khối: Khoảng cách D4(p,q) được gọi là khoảng cách khối đồ thị (City-Block Distance) và được xác định như sau: D4(p,q) = |x - s| + |y - t| Giá trị khoảng cách giữa các điểm ảnh r: giá trị bán kính r giữa điểm ảnh từ tâm điểm ảnh đến tâm điểm ảnh q khác. Ví dụ: Màn hình CGA 12’’ (12’’*2,54cm = 30,48cm = 304,8mm) độ phân giải 320*200; tỷ lệ 4/3 (chiều dài/chiều rộng). Theo định lý Pitago về tam giác vuông, đường chéo sẽ láy tỷ lệ 5 phần (5/4/3: đường chéo/chiều dài/chiều rộng màn hình), khi đó độ dài thật là (305/244/183) chiều rộng màn hình 183mm ứng với màn hình CGA 200 điểm ảnh theo chiều dọc. Như vậy, khoảng cách điểm ảnh lân cận của CGA 12’’ là ≈ 1mm. Khoảng cách D8(p,q) còn gọi là khoảng cách bàn cờ (Chess-Board Distance) giữa điểm ảnh p, q được xác định như sau: D8(p,q) = max (|x – s|, |y – t|). SVTH: Hà Duy Thiện 19 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn 2.5. Kỹ thuật Adaboost Kỹ thuật boosting: Boosting là kỹ thuật dùng để tăng độ chính xác cho các thuật toán học (Learning Algorithm). Nguyên lý cơ bản của nó là kết hợp các bộ phân loại yếu (weak classifiers) thành một bộ phân loại mạnh. Trong đó weak classifiers là bộ phân loại đơn giản chỉ cần có độ chính xác trên 50%. Bằng cách này chúng ta nói bộ phân loại đã được "boost". Xét 1 bài toán phân loại 2 lớp (mẫu cần nhận dạng được phân vào 1 trong 2 lớp) với D là tập huấn luyện gồm có n mẫu. Trước tiên, chúng ta sẽ chọn ngẫu nhiên n1 mẫu từ tập D (n1 < n) để tạo tập D1 . Sau đó chúng ta sẽ xây dựng weak classifier đầu tiên C1 từ tập D1 . Tiếp theo chúng ta sẽ xây dựng tập D2 để huấn luyện bộ phân loại C2 , D2 sẽ được xây dựng sao cho một nửa số mẫu của nó được phân loại đúng bởi C1 và nửa còn lại bị phân loại sai bởi C1 . Bằng cách này, C2 chứa đựng những thông tin bổ sung cho C1 . Bây giờ chúng ta sẽ huấn luyện C2 từ D2 . Tiếp theo, chúng ta sẽ xây dựng tập D3 từ những mẫu không được phân loại tốt bởi sự kết hợp giữa C1 và C2 : những mẫu còn lại trong D mà C1 và C2 cho kết quả khác nhau. Như vậy, D3 sẽ gồm những mẫu mà C1 và C2 hoạt động không hiệu quả. Sau cùng, chúng ta sẽ huấn luyện bộ phân loại C3 từ D3 . Bây giờ, chúng ta đã có một strong classifier: sự kết hợp giữa C1 , C2 , C3 . Khi tiến hành nhận dạng một mẫu X, kết quả sẽ được quyết định bởi sự thoả thuận của 3 bộ C1 , C2 , và C3 . Nếu cả C1 và C2 đều phân X về cùng một lớp thì lớp này chính là kết quả phân loại X, ngược lại nếu C1 và C2 phân X vào 2 lớp khác nhau, C3 sẽ quyết định X thuộc về lớp nào. Kỹ thuật Adaboost: AdaBoost là một bộ phân loại mạnh phi tuyến phức dựa trên hướng tiếp cận boosting được Freund và Schapire đưa ra vào năm 1995. Adaboost cũng hoạt động trên nguyên tắc kết hợp tuyến tính các weak classifiers để hình thành một strong classifier. Là một cải tiến của tiếp cận boosting, AdaBoost sử dụng thêm khái niệm trọng số (weight) để đánh dấu các mẫu khó nhận dạng. Trong quá trình huấn luyện, cứ mỗi weak classifiers được xây dựng, thuật toán sẽ tiến hành cập nhật lại trọng số để chuẩn bị cho việc xây dựng weak classifier kế tiếp: tăng trọng số của các mẫu bị nhận dạng sai và giảm trọng số của các mẫu được nhận dạng đúng bởi weak classifier vừa xây dựng. Bằng cách này weak classifer sau có thể tập trung vào các mẫu mà các weak classifiers trước nó làm chưa tốt. Sau cùng, các weak classifers sẽ được kết hợp tùy theo mức độ tốt của chúng để tạo nên strong classifier. SVTH: Hà Duy Thiện 20 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn AdaBoost kết hợp các bộ phân loại yếu sử dụng các đặc trưng Haar-like theo mô hình phân tầng (cascade) như hình dưới: Vùng ảnh con cần xét h1 Là khuôn mặt h2 Không là khuôn mặt Không là khuôn mặt hn Là khuôn mặt Khuôn mặt Hình 2.3. Mô hình phân tần kết hợp các bộ phân loại yếu để xác định khuôn mặt AdaBoost sẽ kết hợp các bộ phân loại yếu thành bộ phân loại mạnh như sau: H(x) = sign(a1h1(x) +a2h2(x) + ... + anhn(x)) (a = alpha) Với: at >= 0 là hệ số chuẩn hoá cho các bộ phân loại yếu Hình 2.4.. Kết hợp các bộ phân loại yếu thành bộ phân loại mạnh SVTH: Hà Duy Thiện 21 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn 2.6. Đặc trƣng Haar-like Đặc trưng Haar-like Do Viola và Jones công bố, gồm 4 đặc trưng cơ bản để xác định khuôn mặt người. Mỗi đặc trưng Haar–like là sự kết hợp của hai hay ba hình chữ nhật "trắng" hay "đen" như trong hình sau: Hình 2.5. đặt trưng Haar-like cơ bản Để sử dụng các đặt trưng này vào việc xác định khuôn mặt người, 4 đặt trưng Haarlike cơ bản được mở rộng ra, và được chia làm 3 tập đặc trưng như sau: Đặc trưng cạnh (edge features): Hình 2.6. Đặc trưng cạnh (edge features) Đặc trưng đường (line features): Hình 2.7. Đặc trưng đường (line features) Đặc trưng xung quanh tâm (center-surround features): Hình 2.8. Đặc trưng xung quanh tâm (center-surround features) Dùng các đặc trưng trên, ta có thể tính được giá trị của đặc trưng Haar-like là sự chênh lệch giữa tổng của các pixel của các vùng đen và các vùng trắng như trong công thức sau: f(x) = Tổngvùng đen(các mức xám của pixel) - Tổngvùng trắng(các mức xám của pixel). Sử dụng giá trị này, so sánh với các giá trị của các giá trị pixel thô, các đặc trưng Haarlike có thể tăng/giảm sự thay đổi in-class/out-of-class (bên trong hay bên ngoài lớp khuôn mặt người), do đó sẽ làm cho bộ phân loại dễ hơn. SVTH: Hà Duy Thiện 22 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn Như vậy ta có thể thấy rằng, để tính các giá trị của đặc trưng Haar-like, ta phải tính tổng của các vùng pixel trên ảnh. Nhưng để tính toán các giá trị của các đặc trưng Haar-like cho tất cả các vị trí trên ảnh đòi hỏi chi phí tính toán khá lớn, không đáp ứng được cho các ứng dụng đòi hỏi tính run-time. Do đó Viola và Jones đưa ra một khái niệm gọi là Integral Image, là một mảng 2 chiều với kích thước bằng với kích của ảnh cần tính các đặc trưng Haar-like, với mỗi phần tử của mảng này được tính bằng cách tính tổng của điểm ảnh phía trên (dòng-1) và bên trái (cột-1) của nó. Bắt đầu từ vị trí trên, bên trái đến vị trí dưới, phải của ảnh, việc tính toán này đơn thuần chỉ đựa trên phép cộng số nguyên đơn giản, do đó tốc độ thực hiện rất nhanh. Hình 2.9. Cách tính Integral Image của ảnh Sau khi đã tính được Integral Image, việc tính tổng các giá trị mức xám của một vùng bất kỳ nào đó trên ảnh thực hiện rất đơn giản theo cách sau: Giả sử ta cần tính tổng các giá trị mức xám của vùng D như trong hình 4, ta có thể tính như sau: D = A + B + C + D – (A+B) – (A+C) + A Với A + B + C + D chính là giá trị tại điểm P4 trên Integral Image, tương tự như vậy A+B là giá trị tại điểm P2, A+C là giá trị tại điểm P3, và A là giá trị tại điểm P1. Vậy ta có thể viết lại biểu thức tính D ở trên như sau: Hình 2.10. Ví dụ cách tính nhanh các giá trị mức xám của vùng D trên ảnh SVTH: Hà Duy Thiện 23 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn Tiếp theo, để chọn các đặc trưng Haar-like dùng cho việc thiết lập ngưỡng, Viola và Jones sử dụng một phương pháp máy học được gọi là AdaBoost. AdaBoost sẽ kết hợp các bộ phân loại yếu để tạo thành một bộ phân loại mạnh. Với bộ phân loại yếu chỉ cho ra câu trả lời chính xác chỉ hơn viện đoán một cách ngẫn nhiên một chút, còn bộ phân loại mạnh có thể đưa ra câu trả lời chính xác trên 60%. 2.7. Xử lý vân tay Hai phương pháp nhận dạng vân tay thường được sử dụng là: - Phương pháp 1: Dựa vào các đặc tính cụ thể của dấu vân tay, như điểm cuối, điểm rẽ nhánh của các vân trên tay, đây là phương pháp được sử dụng trong đồ án này. - Phương pháp 2: So sánh toàn bộ đặc tính của dấu vân tay. Thực tế đây là hai mức độ của nhận dạng và dễ thấy rằng phương pháp 2 đã bao gồm phương pháp 1. Tuy nhiên do đặc điểm của vân tay, nếu ta không phải so sánh quá nhiều (cơ sở dữ liệu không quá lớn) các đặc điểm đặc biệt trên dấu vân tay đủ để ta nhận dạng ra dấu vân tay đó của ai. Identification (Nhận diện dấu vân tay): Dấu vân tay sẽ được đưa thu thập từ một sensor để đối chiếu với database chứa các vân tay để truy ra các đặc điểm muốn truy xuất. Việc đối sánh ảnh vân tay cần nhận dạng chỉ cần được tiến hành trên các vân tay (có trong cơ sở dũ liệu) thuộc loại đã được xác định nhờ quá trình phân loại. Đây là giai đoạn quyết định xem hai ảnh vân tay có hoàn toàn giống nhau hay không và đưa ra kết quả nhận dạng, tức là ảnh vân tay cần nhận dạng tương ứng với vân tay của cá thể nào đã được lưu trữ trong cơ sỏ dữ liệu. Để đánh giá một hệ thống nhận dạng vân tay ta cần phân tích hai loại lỗi đó là: Lỗi từ chối nhầm (False Reject Rate: FRR) và lỗi chấp nhận nhầm (False Accept Rate: FAR). FFR= (số lỗi từ chối nhầm của các vân tay khác nhau) / (tổng số lần đối sách của các vân tay khác nhau). FAR= (số lỗi chấp nhận nhầm của các vân tay khác nhau) / (tổng số lần đối sách của các vân tay khác nhau). Giá trị của hai loại lỗi này có mối quan hệ với nhau thông qua giá trị ngưỡng đối sánh T (threshold) là sai lệch cho phép giữa mẫu cần đối sánh với mẫu được lưu trong cơ sở dữ liệu. Khi chọn giá trị ngưỡng thấp thì lỗi từ chối nhầm sẽ tăng, lỗi chấp nhận nhầm sẽ giảm và ngược lại. Hệ thống thường được đánh giá theo hai cách: - Tỷ lệ cực tiểu SUMmin = (FAR + FRR)min: Theo quan điểm dù là loại lỗi gì cũng là lỗi, do đó tỷ lệ lỗi cực tiểu SUMmin là hệ số lỗi nhỏ nhất mà hệ thống có thể đạt được. SVTH: Hà Duy Thiện 24 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn - Mức độ lỗi cân bằng (Equal Error Rate: EER): Đó là điểm mà FAR và FRR bằng nhau. Mối quan hệ giữa FAR, FRR, SUM và EER theo ngưỡng T được thể hiện ở hình dưới. Hình 2.11. Quan hệ FAR, FRR, SUM và EER Như vậy dựa theo cách trên, để nhận diện vân tay theo đúng tên gọi của mình, cảm biến vân tay sẽ quét vân tay và so sánh với một hình ảnh quét vân tay đã được lưu lại từ trước. Do mỗi người có một vân tay khác nhau nên hệ thống có thể nhận dạng người sử dụng một cách an toàn. SVTH: Hà Duy Thiện 25 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn 2.8. Giới thiệu linh kiện 2.8.1. Giới thiệu Raspberry pi 3 model B+ Raspberry Pi là cái máy tính giá 35 USD kích cỡ như iPhone và chạy HĐH Linux. Với mục tiêu chính của chương trình là giảng dạy máy tính cho trẻ em. Được phát triển bởi Raspberry Pi Foundation – là tổ chức phi lợi nhuận với tiêu chí xây dựnghệ thống mà nhiều người có thể sử dụng được trong những công việc tùy biến khác nhau. Hình 2.12. Raspberry pi 3 mode B+ Raspberry Pi sản xuất bởi 3 OEM: Sony, Qsida, Egoman. Và được phân phối chính bởi Element14, RS Components và Egoman. Nhiệm vụ ban đầu của dự án Raspberry Pi là tạo ra máy tính rẻ tiền có khả năng lập trình cho những sinh viên , nhưng Pi đã được sự quan tầm từ nhiều đối tượng khác nhau . Đặc tính của Raspberry Pi xây dựng xoay quanh bộ xử lí SoC Broadcom BCM2837 (là chip xử lí mobile mạnh mẽ có kích thước nhỏ hay được dùng trong điện thoại di động) bao gồm CPU, GPU, bộ xử lí âm thanh video, và các tính năng khác…Tất cả được tích hợp bên trong chip có điện năng thấp này. SVTH: Hà Duy Thiện 26 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn Raspberry Pi không thay thế hoàn toàn hệ thống để bàn hoặc máy xách tay . Bạn không thể chạy Windows trên đó vì BCM2837 dựa trên cấu trúc ARM nên không hỗ trợ mã x86/x64 , nhưng vẫn có thể chạy bằng Linux với các tiện ích như lướt web , môi trường Desktop và các nhiệm vụ khác . Tuy nhiên Raspberry Pi là một thiết bị đa năng đáng ngạc nhiên với nhiều phần cứng có giá thành rẻ nhưng rất hoàn hảo cho những hệ thống điện tử, thiết lập hệ thống xử lý tính toán cho những bài học trải nghiệm lập trình. Phần cứng và cổng giao tiếp: - Broadcom BCM2837B0, Cortex-A53 (ARMv8) 64-bit SoC @ 1.4GHz. 1GB SDRAM 2.4GHz and 5GHz IEEE 802.11.b/g/n/ac wireless LAN, Bluetooth 4.2, BLE. Gigabit Ethernet over USB 2.0 (maximum throughput 300 Mbps) 1 cổng HDMI cho đầu ra âm thanh / video số . Jack Headphone Stereo 3.5mm cho đầu ra âm thanh Analog . 4 cổng USB . 1 đầu đọc thẻ nhớ SD để tải hệ điều hành . 01 cổng Ethernet LAN. 2.8.2. Giới thiệu Arduino uno Mạch Arduino Uno là dòng mạch Arduino phổ biến, khi mới bắt đầu làm quen lập trình với Arduino thì mạch Arduino thường nói tới chính là dòng Arduino UNO. Arduino Uno R3 là dòng cơ bản, linh hoạt, thƣờng đƣợc sử dụng cho người mới bắt đầu. Bạn có thể sử dụng các dòng Arduino khác nhƣ: Arduino Mega, Arduino Nano, Arduino Micro… Nhưng với những ứng dụng cơ bản thì mạch Arduino Uno là lựa chọn phù hợp nhất. Hình 2.13. Arduino uno SVTH: Hà Duy Thiện 27 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn Arduino UNO có thể sử dụng 3 vi điều khiển họ 8bit AVR là: ATmega8 (Board Arduino Uno r2), ATmega168, ATmega328 (Board Arduino Uno r3). Bộ não này có thể xử lí những tác vụ đơn giản nhƣ điều khiển đèn LED nhấp nháy, xử lí tín hiệu cho xe điều khiển từ xa, điều khiển động cơ bước, điều khiển động cơ serve, làm một trạm đo nhiệt độ – độ ẩm và hiển thị lên màn hình LCD,… hay những ứng dụng khác. Mạch Arduino UNO R3 với thiết kế tiêu chuẩn sử dụng vi điều khiển ATmega328. Tuy nhiên nếu yêu cầu phần cứng của bạn không cao hoặc túi tiền không cho phép, bạn có thể sử dụng các loại vi điều khiển khác có chức năng tương đương nhƣng rẻ hơn như ATmega8 (bộ nhớ flash 8KB) hoặc ATmega168 (bộ nhớ flash 16KB). Nguồn sử dụng Arduino UNO R3 có thể đƣợc cấp nguồn 5V thông qua cổng USB hoặc cấp nguồn ngoài với điện áp khuyên dùng là 7-12V DC hoặc điện áp giới hạn là 6- 20V. Thường thì cấp nguồn bằng pin vuông 9V là hợp lí nhất nếu bạn không có sẵn nguồn từ cổng USB. Nếu cấp nguồn vƣợt quá ngƣỡng giới hạn trên, bạn sẽ làm hỏng Arduino UNO. Các chân năng lượng: GND (Ground): cực âm của nguồn điện cấp cho Arduino UNO. Khi bạn dùng các thiết bị sử dụng những nguồn điện riêng biệt thì những chân này phải được nối với nhau. 5V: cấp điện áp 5V đầu ra. Dòng tối đa cho phép ở chân này là 500mA. 3.3V: cấp điện áp 3.3V đầu ra. Dòng tối đa cho phép ở chân này là 50mA. Vin (Voltage Input): để cấp nguồn ngoài cho Arduino UNO, bạn nối cực dương của nguồn với chân này và cực âm của nguồn với chân GND. IOREF: điện áp hoạt động của vi điều khiển trên Arduino UNO có thể được đo ở chân này. Và dĩ nhiên nó luôn là 5V. Mặc dù vậy bạn không được lấy nguồn 5V từ chân này để sử dụng bởi chức năng của nó không phải là cấp nguồn. RESET: việc nhấn nút Reset trên board để reset vi điều khiển tƣơng đương với việc chân RESET được nối với GND qua 1 điện trở 10KΩ. Chân giao tiếp: 10 (SS), 11 (MOSI), 12 (MISO), 13 (SCK). Ngoài các chức năng thông thường, 4 chân này còn dùng để truyền phát dữ liệu bằng giao thức SPI với các thiết bị khác. 2 chân Serial: 0 (RX) và 1 (TX): dùng để gửi (transmit – TX) và nhận (receive – RX) dữ liệu TTL Serial. Arduino Uno có thể giao tiếp với thiết bị khác thông qua 2 chân này. Kết nối bluetooth thường thấy nói nôm na chính là kết nối Serial không dây. Nếu không cần giao tiếp Serial, bạn không nên sử dụng 2 chân này nếu không cần thiết SVTH: Hà Duy Thiện 28 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn Đặc biệt, Arduino UNO có 2 chân A4 (SDA) và A5 (SCL) hỗ trợ giao tiếp I2C/TWI với các thiết bị khác. Lập trình cho Arduino: Các thiết bị dựa trên nền tảng Arduino đƣợc lập trình bằng ngôn riêng. Ngôn ngữ này dựa trên ngôn ngữ Wiring được viết cho phần cứng nói chung. Và Wiring lại là một biến thể của C/C++. Một số ngƣời gọi nó là Wiring, một số khác thì gọi là C hay C/C++. Riêng mình thì gọi nó là “ngôn ngữ Arduino”, và đội ngũ phát triển Arduino cũng gọi như vậy. Ngôn ngữ Arduino bắt nguồn từ C/C++ phổ biến hiện nay do đó rất dễ học, dễ hiểu. Nếu học tốt chương trình Tin học 11 thì việc lập trình Arduino sẽ rất dễ thở đối với bạn. Để lập trình cho Mạch Arduino, nhà phát triển cung cấp một môi trường lập trình Arduino đƣợc gọi là Arduino IDE (Intergrated Development Environment) như hình dưới đây. Hình 2.14. Giao diện arduino IDE SVTH: Hà Duy Thiện 29 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn 2.8.3. Cảm biến nhận dạng vân tay R305 Cảm biến nhận dạng vân tay R305 được tích hợp nhân xử lý nhận dạng vân tay phía trong, tự động gán vân tay với 1 chuỗi data và truyền qua giao tiếp UART ra ngoài nên hoàn toàn không cần các thao tác xử lý hình ảnh, đơn giản chỉ là phát lệnh đọc/ghi và so sánh chuỗi UART nên rất dễ sử dụng và lập trình. Cảm biến nhận dạng vân tay R305 có khả năng lưu nhiều vân tay cho 1 ID (1 người), thích hợp cho các ứng dụng bảo mật, khóa cửa, sinh trắc học,... Hình 2.15. Cảm biến nhận dạng vân tay R305 Thông số kỹ thuật: - Nguồn cấp: 3.6 - 6VDC - Giao tiếp: TTL-UART hoặc USB 1.1 - Dòng điện hoạt động: 100 - 150mA - Chế độ nhận dạng: 1:1 hoặc 1:N (1 ID nhiều vân tay, tùy thuộc vào cấu hình) - Baudrate: 9600xN bps (mặc định N=6 tức 9600x6 = 57600bps) - Character File Size: 256 bytes - Image acquiring time : <0.5s - Template size : 512 bytes - Storage capacity: 120 Security level : 5 (1, 2, 3, 4, 5(highest)) - FAR : <0.001% - FRR: <0.1% - Thời gian nhận dạng trung bình: < 0.8s (1:880) - Kích thước: 18mm*22mm SVTH: Hà Duy Thiện 30 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn - Nhiệt độ và độ ẩm hoạt động: -10 đến 40 độ C, RH: 40%-85% - Nhiệt độ và độ ẩm bảo quản: -40 đến 85 độ C, RH: <85% 2.8.4. Module 4 Relay với opto cách ly (5VDC) Module 4 relay thích hợp cho các ứng dụng đóng ngắt điện thế cao AC hoặc DC, các thiết bị tiêu thụ dòng lớn, module thiết kế nhỏ gọn, có opto và transistor cách ly, kích đóng bằng mức thấp (0V) phù hợp với mọi loại MCU và thiết kế có thể sử dụng nguồn ngoài giúp cho việc sử dụng trở nên thật linh động và dễ dàng. Thông số kỹ thuật: - Sử dụng điện áp nuôi 5VDC. - 4 Relay đóng ngắt ở điện thế kích bằng 0V nên có thể sử dụng cho cả tín hiệu 5V hay 3v3 (cần cấp nguồn ngoài), mỗi Relay tiêu thụ dòng khoảng 80mA. - Điện thế đóng ngắt tối đa: AC250V - 10A hoặc DC30V - 10A. - Có đèn báo đóng ngắt trên mỗi Relay. Hình 2.16. Relay SVTH: Hà Duy Thiện 31 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn 2.8.5. Camera Raspberry pi V1 5MP Camera Raspberry Pi V1 5MP là Version đầu tiên của module camera cho Raspberry Pi với cảm biến OV5647 độ phân giải 5MP, sử dụng tương thích với tất cả các dòng Raspberry Pi từ trước đến nay, chất lượng hình ảnh tốt, độ phân giải cao và có khả năng quay phim ở chất lượng HD. Thông số kỹ thuật: - Module Camera V1 cho Raspberry Pi. - Cảm biến: OV5647. - Độ phân giải: 5MP. - Độ phân giải hình: 2592x1944 pixel. - Quay phim HD 1080P 30, 720P 60, VGA 640x480P 60. - Lens: Fixed Focus. - Conector: Ribon conector. - Kích thước: 25x24x9mm. Hình 2.17. Camera Raspicam SVTH: Hà Duy Thiện 32 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn CHƢƠNG 3. CƠ SỞ THỰC HIỆN 3.1. Các phần mềm hỗ trợ 3.1.1. Advanced IP Scanner Trình quét mạng miễn phí và tin cậy nhằm phân tích mạng LAN. Chương trình hiển thị tất cả các thiết bị mạng, cho phép bạn truy cập các thư mục chia sẻ, cung cấp khả năng điều khiển máy tính từ xa (thông qua RDP và Radmin) và thậm chí có thể tắt máy tính từ xa. Chương trình dễ sử dụng và có thể chạy ở dạng phiên bản cơ động. Phần mền này giúp tìm địa chỉ IP của raspberry khi đã kết nối cùng mạng. Ở đây ta thấy địa chỉ IP của raspberry là: 192.168.1.2. Hình 3.1. Phần mềm Advanced IP Scanner 3.1.2. MobaXterm Đây là một SSH Client (Secure Shell Client), ứng dụng quản trị máy chủ từ xa thông qua SSH dành cho máy khách khá tốt và có nhiều tiện lợi. đối với MobaXterm, có thể truy cập vào SSH,...và đặc biệt là có thể sử dụng ứng dụng này để gõ lệnh UNIX ở môi trường Windows. MobaXterm có các tính năng chính như: - Lưu trữ thông tin của nhiều server theo dạng profile. Muốn kết nối vào server nào thì click 1 cái, nó sẽ tự mở tab mới. - Có tính năng Multi Execution – Nghĩa là gõ một lệnh thực thi cùng lúc trên nhiều server. - Kết nối một server vô nhiều giao thức khác nhau. - Miễn phí hoàn toàn. SVTH: Hà Duy Thiện 33 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn - Hỗ trợ lưu session, không cần gõ lại mật khẩu mà chỉ cần nhập username là nó tự tìm session phù hợp. - Remote vào máy tính khác, giống như Teamviewer. - Tự động truy cập vào thư mục trên sFTP nơi SSH đang thực thi. - Hỗ trợ quay lại Macro, ví dụ như nếu gõ mấy command để cài ứng dụng gì đó thì có thể lưu vào Macro và lần sau muốn dùng chỉ cần ấn 1 cái. - Tích hợp nhiều công cụ nhỏ như Editor, máy tính và kể cả game giải trí trong lúc chờ đợi làm việc nữa. Và nhiều tính năng linh ta linh tinh khác, nó khá rộng lớn. Hình 3.2. Phần mềm MobaXterm Để tiến hành kết nối đến raspberry ta thực hiện các bước: nhấn vào “Session”, chọn “SSH”, tại “Remote Host” ta nhập địa chỉ IP của raspberry đã được dò ở phần trước là: “192.168.1.2”, rồi nhấn “OK”. Sau khi nhấn “OK” xuất hiện “login as:” thì nhập “pi” (pi là tên đặt cho raspberry) rồi enter. Nếu chưa đăng nhập lần nào thì sẻ phải nhập password đã đặt, nếu đã đăng nhập thì sẻ vào thẳng giao diện terminator. SVTH: Hà Duy Thiện 34 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn Hình 3.3. Terminal MobaXterm 3.1.3. QT Creator Qt Creator là một tiện ích đa nên tảng làm việc thông qua môi trường phát triển tích hợp (viết tắt là IDE) hỗ trợ các nhà phát triển tạo ứng dụng cho nền tảng máy tính và thiết bị di động. Mặc dù có nhiều tham số riêng nhưng Qt Creator mang đến một giao diện rõ ràng, đơn giản, cho phép người dùng thiết lập một dự án mới bằng cách sử dụng phương pháp từng bước tiện dụng, đặc biệt đối với người chưa có kinh nghiệm vì họ sẽ được trợ giúp trong toàn bộ quá trình. Cũng là ứng dụng lập trình C ++, nhưng phần mềm Bloodshed Dev C++ lại sử dụng trình biên dịch Mingw, tích hợp với Cygwin và nhiều chương trình biên dịch trên nền tảng GCC. Với Bloodshed Dev C++ bạn có thể viết nhiều loại ứng dụng trên nền tảng mã nguồn mở khá nhanh chóng. Qt Creator cung cấp một số công cụ được dùng để tùy chỉnh bố cục chương trình đang tạo và bộ chỉnh sửa văn bản cài sẵn hỗ trợ cho ngôn ngữ lập trình C++ và QML, đánh dấu cú pháp, tùy chọn hoàn thành mã và kiểm tra cú pháp mã lệnh. Hơn nữa, chương trình cho phép xây dựng, chạy và triển khai các ứng dụng QT cho môi trường máy tính và thiết bị di động, sử dụng chế độ gỡ lỗi để phân tích trạng thái ứng dụng (tích hợp nhiều trình gỡ lỗi như Trình gỡ lỗi ký tự GNU, Trình gỡ lỗi điều khiển Microsoft và JavaScript) cũng như các gói phần mềm cài đặt thiết kế phát hành ở nhiều cửa hàng và kênh ứng dụng khác nhau. SVTH: Hà Duy Thiện 35 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn Có thể xem thêm Orwell Dev C++ để tạo và chỉnh sửa nhiều định dạng file phổ biến như nguồn .C, cpp, .cc, .C ++ hoặc .CP. Bên cạnh đó Orwell Dev C++ còn cung cấp giao diện khá đẹp mắt cho phép lựa chọn môi trường hoạt động, điều khiển tab dễ dàng. Khi nói đến lập cấu hình cài đặt một dự án mới, có thể lựa chọn tiện ích muốn tạo (Các công cụ Qt Quick hay HTML5 hay Qt), thiết lập ngôn ngữ lập trình, sử dụng hệ điều khiển phiên bản và thiết kế các phiên bản tệp dự án riêng biệt. Quá trình phát triển ứng dụng Qt Quick và các tiện ích công cụ hoàn thành với hai bộ chỉnh sửa hình ảnh tích hợp (Trình thiết kế Qt Quick và Trình thiết kế Qt). Qt Creator có nhiều công cụ cho phép ghi và chỉnh sửa mã dễ dàng hơn vì có thể sử dụng chức năng tìm kiếm tăng dần và nâng cao, thực hiện thao tác phân tích lại mã để tìm và đổi tên các ký hiệu cũng như lập cấu hình bộ chỉnh sửa mã nguồn về font chữ, màu sắc và thụt đầu dòng. Thêm vào đó, Qt Creator bao gồm công cụ phân tích mã Valgrind dùng để xác định lỗi và rò rỉ bộ nhớ, các hệ thống xây dựng khác nhau (qmake và CMake), hoạt động của dòng lệnh và các công cụ bên ngoài. Để khởi động QT Creator(đã cài trên raspberry), nhập vào terminator lệnh: “qtcreator” rồi enter. Hình 3.4. Phần mềm Qt Creator SVTH: Hà Duy Thiện 36 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn 3.1.4. Arduino IDE Môi trường lập trình Arduino IDE có thể chạy trên ba nền tảng phổ biến nhất hiện nay là Windows, Macintosh OSX và Linux. Do có tính chất nguồn mở nên môi trường lập trình này hoàn toàn miễn phí và có thể mở rộng thêm bởi người dùng có kinh nghiệm. Ngôn ngữ lập trình có thể được mở rộng thông qua các thư viện C++. Và do ngôn ngữ lập trình này dựa trên nền tảng ngôn ngữ C của AVR nên người dùng hoàn toàn có thể nhúng thêm code viết bằng AVR C vào chương trình nếu muốn. Arduino Toolbar: có một số button và chức năng của chúng như sau : - Verify : kiểm tra code có lỗi hay không - Upload: nạp code đang soạn thảo vào Arduino - New, Open, Save : Tạo mới, mở và Save sketch - Serial Monitor : Đây là màn hình hiển thị dữ liệu từ Arduino gửi lên máy tính . . . hoặc tổ hợp phìm CTRL + SHIFT + M - Hình 3.5. Phần mềm Arduino IDE SVTH: Hà Duy Thiện 37 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn 3.2. Thƣ viện 3.2.1. Thƣ viện OpenCV OpenCV ( thị giác máy tính ) là một thư viện các chức năng lập trình chủ yếu nhắm vào tầm nhìn máy tính thời gian thực . Được phát triển đầu tiên bởi Intel , sau này được Willow Garage hỗ trợ sau đó là Itseez (sau này được Intel mua lại ). Lịch sử phát triển: Chính thức ra mắt vào năm 1999, dự án OpenCV ban đầu là một sáng kiến của Intel Research nhằm thúc đẩy các ứng dụng tăng cường CPU , một phần của một loạt các dự án bao gồm dò tia thời gian thực và tường hiển thị 3D. Những người đóng góp chính cho dự án bao gồm một số chuyên gia tối ưu hóa ở Intel Russia, cũng như Nhóm Thư viện Hiệu suất của Intel. Phiên bản alpha đầu tiên của OpenCV đã được phát hành ra công chúng tại Hội nghị IEEE về Tầm nhìn máy tính và Nhận dạng mẫu năm 2000, và năm bản beta được phát hành từ năm 2001 đến 2005. Phiên bản 1.0 đầu tiên được phát hành vào năm 2006. Phiên bản 1.1 "trước khi phát hành "Được phát hành vào tháng 10 năm 2008. Phiên bản chính thứ hai của OpenCV là vào tháng 10 năm 2009. OpenCV 2 bao gồm những thay đổi lớn đối với giao diện C ++ , hướng đến các mẫu dễ dàng hơn, an toàn hơn về kiểu, các chức năng mới và triển khai tốt hơn cho các hiệu suất hiện có về mặt hiệu suất (đặc biệt là trên đa hệ thống cốt lõi). Các bản phát hành chính thức hiện đang diễn ra sáu tháng một lần và việc phát triển hiện được thực hiện bởi một nhóm độc lập của Nga được hỗ trợ bởi các tập đoàn thương mại. Vào tháng 8 năm 2012, hỗ trợ cho OpenCV đã được tiếp quản bởi một tổ chức phi lợi nhuận OpenCV.org, nơi duy trì một nhà phát triển và trang web mở cho người dùng. Vào tháng 5 năm 2016, Intel đã ký một thỏa thuận mua lại Itseez, một nhà phát triển hàng đầu của OpenCV. Ứng dụng opencv: - 2D and 3D feature toolkits Egomotion estimation Facial recognition system Gesture recognition Human–computer interaction (HCI) Mobile robotics Motion understanding Object identification Segmentation and recognition Stereopsis stereo vision: depth perception from 2 cameras SVTH: Hà Duy Thiện 38 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn - Structure from motion (SFM) - Motion tracking - Augmented reality Các thư viện hỗ trợ cho thuật toán học máy: - Boosting Decision tree learning Gradient boosting trees Expectation-maximization algorithm k-nearest neighbor algorithm Naive Bayes classifier Artificial neural networks Random forest Support vector machine (SVM) Deep neural networks (DNN) Hướng dẫn cài thư viện opencv trên Raspberry: Thực hiện lệnh dưới đây để xóa phiên bản OpenCV cũ: sudo apt-get remove libopencv* sudo apt-get autoremove Kiểm tra dung lượng trống Raspberry bằng câu lệnh dưới đây: df –h Tiến hành cài đặt opencv: Cập nhật hệ thống: sudo apt-get update sudo apt-get upgrade sudo rpi-update sudo reboot Cài đặt devel tools: sudo apt-get install build-essential cmake cmake-curses-gui pkg-config Cài đặt các thư viện cần thiết: sudo apt-get install \ libjpeg-dev \ libtiff5-dev \ SVTH: Hà Duy Thiện 39 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn libjasper-dev \ libpng12-dev \ libavcodec-dev \ libavformat-dev \ libswscale-dev \ libeigen3-dev \ libxvidcore-dev \ libx264-dev \ libgtk2.0-dev Cài thư viện v4l từ repository: sudo apt-get -y install libv4l-dev v4l-utils Bật kernel module: sudo modprobe bcm2835-v4l2 Cài đặt python-dev & numpy: sudo apt-get install python2.7-dev python2-numpy sudo apt-get install python3-dev python3-numpy Tải nguồn OpenCV: sudo mount /dev/your-dev-name /home/pi/usbmem mkdir /home/pi/usbmem/opencv cd /home/pi/usbmem/opencv wgethttps://github.com/opencv/opencv/archive/3.2.0.zip - O opencv_source.zip wgethhttps://github.com/opencv/opencv_contrib/archive/3.2.0.zip-O opencv_contrib.zip Giải nén Unzip files opencv vừa tải về: cd /home/pi/usbmem/opencv unzip opencv_source.zip unzip opencv_contrib.zip Tạo thư mục làm việc: cd /home/pi/usbmem/opencv/opencv-3.2.0 SVTH: Hà Duy Thiện 40 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn mkdir build cd build Bắt đầu cấu hình build sử dụng command line switch: cmake -D CMAKE_BUILD_TYPE=RELEASE \ -D CMAKE_INSTALL_PREFIX=/usr/local \ -D BUILD_WITH_DEBUG_INFO=OFF \ -D BUILD_DOCS=OFF \ -D BUILD_EXAMPLES=OFF \ -D BUILD_TESTS=OFF \ -D BUILD_opencv_ts=OFF \ -D BUILD_PERF_TESTS=OFF \ -D INSTALL_C_EXAMPLES=ON \ -D INSTALL_PYTHON_EXAMPLES=ON \ -D OPENCV_EXTRA_MODULES_PATH=../../opencv_contrib3.2.0/modules\ -D ENABLE_NEON=ON \ -D WITH_LIBV4L=ON \ Sau khi chạy CMake chúng ta sẽ nhận được: Configuring done Generating done Build files have been written to: /home/pi/usbmem/opencv/opencv-3.2.0/build Tiến hành Build OpenCV: Make –j4 Quá trình biên dịch khoảng 2 tiếng chúng ta có thể thấy kết quả: [100%] Built target ... Cài đặt OpenCV: sudo make install sudo ldconfig Kiểm tra cài đặt: SVTH: Hà Duy Thiện 41 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn import cv2 print (cv2.__version__) nếu cài đặt thư viện thành công thì chạy 2 câu lệnh sẽ ra phiên bản opencv đã cài. Nếu ko ra thì đã cài thất bại phải tiến hành kiểm tra lại xem có bỏ sót bước nào không nếu có thì chỉ việc chạy lại câu lệnh đó. 3.2.2. Thƣ viện Adafruit_Fingerprint Thư viện Adafruit_Fingerprint là một thư viện mã nguồn mở, đáp ứng nhu cầu sử dụng cảm biến nhận dạng vân tay. Adafruit_Fingerprint được viết với nhiều ví dụ để người đọc có thể tham khảo hỗ trợ người dùng khi làm việc với cảm biến dễ dàng. Hướng dẫn cài thư viện Adafruit_Fingerprint thực hiện theo các bước: - Tại IDE arduino, chọn Sketch. - Tại Sketch, chọn Include Library. - Tại Include Library, chọn Manage Libraries…, xuất hiện bảng library Manage. - Tại ô tìm kiếm của bảng library Manage, nhập vào “Adafruit_Fingerprint”. - Chọn thư viện Adafruit Fingerprint Sensor Library, chọn install. Như vậy là đã cài xong thư viện Adafruit_Fingerprint để sử dụng cảm biến nhận dạng vân tay. Hướng dẫn cài đặt thư viện Adafruit_Fingerprint cho raspberry: Tải thư viện Adafruit_Fingerprint tại: https://github.com/adafruit/AdafruitFingerprint-Sensor-Library xuống windows. Upload file:” Adafruit-Fingerprint-Sensor-Library-master.zip” từ windows sang raspberry theo đường dẫn: /home/pi/sketchbook/libraries/ (đường dẫn này sẻ đúng khi đã cài IDE arduino trên raspberry) như hình. Sau khi upload file xong, tại cửa xổ terminal trên MobaXterm, nhập:” $ cd sketchbook/libraries/ “ để truy cập vào thư mục libraries. Nhập: “$ unzip Adafruit-Fingerprint-Sensor-Library-master.zip” để giải nén file .zip. Sau khi giải nén file .zip, tiến hành đổi tên cho thư viện, loại các ký tự đặt biệt. Ở đây là dấu “-“. SVTH: Hà Duy Thiện 42 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn Hình 3.6. Cài thư viện cho Arduino trên Raspberry Sau khi đổi tên xong ta mở arduino lên bằng việc nhập vào: “arduino” trên terminal, và kiểm tra lại xem đã có thư viện chưa. Hình 3.7. Kiểm tra thư viện Arduino SVTH: Hà Duy Thiện 43 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn 3.3. Sơ đồ khối và lƣu đồ 3.3.1. sơ đồ khối Khối nguồn Khối hiển thị Khối điều khiển Khối camera và cảm biến Khối thực thi Hình 3.8. Sơ đồ khối Khối nguồn: - Nguồn cấp cho camera là nguồn được lấy từ raspberry. - Nguồn cấp cho arduino là nguồn từ raspberry. - Nguồn cấp cho khối thực thi là nguồn 12v. Khối điều khiển: xử lý tất cả dữ liệu xử lý ảnh truyền về máy tính và kết nối với arduino để điều khiển khối thực thi. Khối camera và cảm biến: thu nhận hình ảnh và vân tay để xử lý. Khối hiển thị: hiển thị trên máy tính bằng Qt creator thông qua MobaXterm. Khối thực thi: nhận tín hiệu từ arduino để thực hiện công việc được giao, led sáng tắt, khóa điện đóng mở. SVTH: Hà Duy Thiện 44 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn 3.3.2. lƣu đồ - Lưu đồ xử lý trên raspberry: Bắt đầu Thu nhận hình ảnh từ camera Xác định đối tượng sai Đúng Kiểm tra mẫu Đối tượng sai Đúng Gửi tín hiệu cho Arduino Hình 3.9. Lưu đồ trên Raspberry SVTH: Hà Duy Thiện 45 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn - Lưu đồ xử lý trên arduino: Bắt đầu Nhận tín hiệu từ Raspberry Kiểm tra mẫu vân tay Sai Gửi tín hiệu cho Raspberry Đúng Bật led báo hiệu Mở khóa điện Tắt led báo hiệu Hình 3.10. Lưu đồ trên arduino - Lưu đồ xử lý trên giao diện: Bắt đầu Chọn recognition Chọn recognition hay Training Gọi hàm xử lý ảnh để nhận diện khuôn mặt Chọn training Lấy giá trị từ ô add name Gán giá trị add name vào mẫu hình vừa lấy. Gọi hàm training để tạo mẫu nhận diện khuôn mặt. Hình 3.11. Lưu đồ trên giao diện SVTH: Hà Duy Thiện 46 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn CHƢƠNG 4. KẾT QUẢ THỰC NGHIỆP 4.1. Sơ đồ nối dây Hình 4.1. Sơ đồ nối dây 4.2. Mô hình thực tế Mặt trước: Hình 4.2. Mô hình mặt trước SVTH: Hà Duy Thiện 47 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn Mặt sau: Hình 4.3. Mô hình mặt sau Để mô hình mang tính thực tiễn hơn, mẫu thiết kế mô hình cánh cữa này bao gồm hai mặt. mỗi mặt có một nhiệm vụ khác nhau, mặt trước vừa bảo vệ vừa là nơi đặt các cảm biến, camera thu nhận hình ảnh, vân tay truyền về bộ xử lý trung tâm được tích hợp đặt ở mặt sau của cánh cữa. Khi cấp nguồn thì raspberry sẻ tự động kết nối với wifi đã cài đặt từ trước, lập tứ bật camera rồi cảm biến vân tay để thu thập thông tin của người muốn vào. SVTH: Hà Duy Thiện 48 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn 4.3. Giao diện hiển thị Hình 4.4. giao diện hiển thị SVTH: Hà Duy Thiện 49 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn CHƢƠNG 5. KẾT LUẬN VÀ ĐỊNH HƢỚNG ĐỀ TÀI 5.1. Kết quả đạt đƣợc Thực hiện được các mục tiêu đề ra, mặc dù còn nhiều thiếu sót nhưng nhờ sự hướng dẫn tận tình của thầy hướng dẫn, đề tài đồ án “Khóa điện bảo mật 2 lớp bằng vân tay và nhận diện khuôn mặt” đã đạt được kết quả tốt. Áp dụng thành công trên cơ sở lý thuyết của xử lý ảnh, đưa ra được hệ thống có tính chất bảo mật cao, an toàn cho người sử dụng. Sử dụng các bộ thư viện khá tốt, mặc dù chưa sử dụng hết được các tính năng ưu việt mà thư viện hỗ trợ. 5.2. Hạn chế Để nhận diện chính xác hơn, ta cần bộ mẫu ảnh tốt nhất, càng nhiều càng nhận diện chính xác hơn. Bộ mẫu ảnh tốt nhất là bộ mẫu ảnh có chân dung khuôn mặt đối tượng mà ở đó gồm nhiều bức ảnh có độ sáng và góc độ khác nhau. Quá trình xử lý ảnh còn một vấn đề là khi xử lý, để nhận diện được một khuôn mặt thì chỉ cần có mẫu ảnh, nhưng để cắt ra được khuôn mặt chính xác nhất thì vẫn chưa làm được, tỉ lệ cắt được khuôn mặt khá thấp vì thế cần nâng cao khả năng này dể có kết quả tốt nhất. 5.3. Hƣớng phát triển Đề tài này hướng phát triển khá rõ ràng, nâng cao khả năng nhận diện sẻ đảm bảo được được độ an toàn cao nhất có thể. Nâng cao trang thiết bị, kết hợp thẻ từ và phím số sẻ được bốn lớp bảo mật. Có thể nói là “khó” có thể vượt qua được hệ thống bảo mật cao như vậy. Ngoài ra, nên thay đổi bộ xử lý trung tâm vì raspberry chưa đáp ứng mạnh mẽ được tính thời gian thực so với những bộ xữ lý mạnh hơn. SVTH: Hà Duy Thiện 50 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn PHỤ LỤC Code arduino điều khiển cảm biến vân tay #include <Adafruit_Fingerprint.h> #include <SoftwareSerial.h> SoftwareSerial mySerial(2, 3); Adafruit_Fingerprint finger = Adafruit_Fingerprint(&mySerial); void setup() { Serial.begin(9600); while (!Serial); // For Yun/Leo/Micro/Zero/... delay(100); Serial.println("\n\nAdafruit finger detect test"); finger.begin(57600); if (finger.verifyPassword()) { Serial.println("Found fingerprint sensor!"); } else { Serial.println("Did not find fingerprint sensor :("); while (1) { delay(1); } } finger.getTemplateCount(); Serial.print("Sensor contains "); Serial.print(finger.templateCount); Serial.println(" templates"); Serial.println("Waiting for valid finger..."); } void loop() // run over and over again { getFingerprintIDez(); delay(50); //don't ned to run this at full speed. } uint8_t getFingerprintID() { uint8_t p = finger.getImage(); switch (p) { case FINGERPRINT_OK: Serial.println("Image taken"); break; case FINGERPRINT_NOFINGER: Serial.println("No finger detected"); return p; case FINGERPRINT_PACKETRECIEVEERR: Serial.println("Communication error"); return p; case FINGERPRINT_IMAGEFAIL: Serial.println("Imaging error"); return p; SVTH: Hà Duy Thiện 51 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn default: Serial.println("Unknown error"); return p; } // OK success! p = finger.image2Tz(); switch (p) { case FINGERPRINT_OK: Serial.println("Image converted"); break; case FINGERPRINT_IMAGEMESS: Serial.println("Image too messy"); return p; case FINGERPRINT_PACKETRECIEVEERR: Serial.println("Communication error"); return p; case FINGERPRINT_FEATUREFAIL: Serial.println("Could not find fingerprint features"); return p; case FINGERPRINT_INVALIDIMAGE: Serial.println("Could not find fingerprint features"); return p; default: Serial.println("Unknown error"); return p; } // OK converted! p = finger.fingerFastSearch(); if (p == FINGERPRINT_OK) { Serial.println("Found a print match!"); } else if (p == FINGERPRINT_PACKETRECIEVEERR) { Serial.println("Communication error"); return p; } else if (p == FINGERPRINT_NOTFOUND) { Serial.println("Did not find a match"); return p; } else { Serial.println("Unknown error"); return p; } // found a match! Serial.print("Found ID #"); Serial.print(finger.fingerID); Serial.print(" with confidence of "); Serial.println(finger.confidence); SVTH: Hà Duy Thiện 52 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn return finger.fingerID; } // returns -1 if failed, otherwise returns ID # int getFingerprintIDez() { uint8_t p = finger.getImage(); if (p != FINGERPRINT_OK) return -1; p = finger.image2Tz(); if (p != FINGERPRINT_OK) return -1; p = finger.fingerFastSearch(); if (p != FINGERPRINT_OK) return -1; // found a match! Serial.print("Found ID #"); Serial.print(finger.fingerID); Serial.print(" with confidence of "); Serial.println(finger.confidence); return finger.fingerID; } Code hàm main #include "mainwindow.h" #include <stdio.h> #include <stdlib.h> #include <QApplication> #include <opencv2/core/core.hpp> #include <opencv2/highgui/highgui.hpp> #include <opencv2/face.hpp> #include <opencv2/videoio.hpp> #include <opencv2/objdetect.hpp> #include <opencv2/imgproc.hpp> #include <iostream> #include <fstream> #include <sstream> #include <QThread> #include <QDebug> #include <string> #include <QDir> #include <QString> #include "process.h" int main(int argc, char *argv[]) { QApplication a(argc, argv); Process *processRecog = new Process(); MainWindow w; QObject::connect(processRecog,SIGNAL(signalShowImage(Mat&,vector<Rect>&)), &w,SLOT(setImage(Mat&,vector<Rect>&))); QObject::connect(&w,SIGNAL(signalSetFlagTraining(bool)),processRecog,SLOT(set FlagTraining(bool))); QObject::connect(&w,SIGNAL(signalSetTrain()),processRecog,SLOT(train())); SVTH: Hà Duy Thiện 53 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn processRecog->preprocess(); w.show(); processRecog->detect(); return a.exec(); } Code Giao diện #include "mainwindow.h" #include "ui_mainwindow.h" #include <QPixmap> #include <QLabel> #include <QDebug> #include <stdio.h> #include <string.h> #include <QDir> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); qDebug() <<"Init UI"; ui->m_label->setAlignment(Qt::AlignCenter); pix = pix.scaled(ui->m_label->size(),Qt::KeepAspectRatio); } MainWindow::~MainWindow() { delete ui; } void MainWindow::setImage(Mat& img,vector<Rect>& rects) { // qDebug()<<"setImage";using namespace cv; frame = img; m_rects.clear(); m_rects = rects; cv::resize(img, img, Size(320,240)); ui->m_label->setPixmap(QPixmap::fromImage(QImage((unsigned char*) img.data, img.cols, img.rows, QImage::Format_RGB888).rgbSwapped())); } void MainWindow::on_addface_clicked() { if(m_rects.size() == 1){ QDir dir; SVTH: Hà Duy Thiện 54 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn qDebug()<<"add image"; QString str = ui->textEdit->toPlainText(); qDebug()<<"str" <<str; QString cmd = QString("mkdir %1/%2").arg("/home/pi/doantotnghiep/demowebcam/dataset").arg(str); qDebug()<<"cmd "<<cmd; system(cmd.toLatin1().data()); QString path = QString("%1/%2/").arg("/home/pi/doantotnghiep/demowebcam/dataset").arg(str); dir.setPath(path); QStringList images = dir.entryList(QStringList() << "*.jpg" << "*.JPG",QDir::Files); int num = images.count(); qDebug()<<"num"<<num << dir.count(); QString filename = QString("%1/%2/%3.jpg").arg("/home/pi/doantotnghiep/demowebcam/dataset").arg(st r).arg(num); qDebug()<<"filename"<<filename; imwrite(filename.toLatin1().data(),frame(m_rects.at(0))); } } void MainWindow::on_radioButton_toggled(bool checked) { if(checked) { signalSetFlagTraining(true); } } void MainWindow::on_radioButton_2_toggled(bool checked) { if(checked) { signalSetFlagTraining(false); } } void MainWindow::on_train_clicked() { signalSetTrain(); } Code các hàm xữ lý ảnh: #include "process.h" #define RASPICAM Process::Process(QObject *parent) : QObject(parent) { SVTH: Hà Duy Thiện 55 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn this->isTraining = false;//mode : recognition } void Process::read_file(const QString& filename, vector<Mat>& images, vector<int>& labels,QMap<int,QString>& mapLabel){ QDir dir; dir.setPath(filename); QStringList list = dir.entryList(QDir::AllDirs); qDebug() << list; //filter incorrect folder for(int i = list.size()-1; i >=0 ; --i){ if(list.at(i).contains(".")) { list.removeAt(i); } } qDebug() << list; for (int j = 0 ; j<=list.size()-1;j++){ if(this->isTraining==true){ QString fdname = QString("%1/%2").arg(filename).arg(list.at(j)); dir.setPath(fdname); QStringList listfile = dir.entryList(QStringList()<< "*jpg"<<"*JPG"<<"*pgm",QDir::Files); for (int k = 0 ; k<=listfile.size()-1;k++){ QString imgname = QString("%1/%2").arg(fdname).arg(listfile.at(k)); Mat img = imread(imgname.toLatin1().data(), IMREAD_GRAYSCALE); if(img.data != NULL){ resize(img, img, Size(168,192), 0, 0, INTER_CUBIC); images.push_back(img); labels.push_back(j); } } } mapLabel.insert(j,list.at(j)); } } void Process::preprocess() { vector<Mat> images; vector<int> labels; QString path = "/home/pi/doantotnghiep/demowebcam/dataset"; read_file(path,images,labels,mapLabel); qDebug() << images.size(); qDebug() << labels.size(); qDebug() << mapLabel.keys(); SVTH: Hà Duy Thiện 56 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn qDebug() << mapLabel.values(); if(this->isTraining == true) { if(images.size() <= 1) { string error_message = "This demo needs at least 2 images to work. Please add more images to your data set!"; CV_Error(Error::StsError, error_message); } printf("Begin training \n"); qDebug() << "Begin training"; model->train(images, labels); model->write("/home/pi/doantotnghiep/demowebcam/model/model"); printf("train finished \n"); qDebug() << "train finished"; }else if(isTraining == false) { printf("Begin load model \n"); qDebug() << "Begin load model"; model->read("/home/pi/doantotnghiep/demowebcam/model/model"); printf("Load model finished \n"); qDebug() << "Load model finished"; } } void Process::train() { qDebug()<<"SetTrain"<< isTraining; this->isTraining = true; this->preprocess(); } void Process::setFlagTraining(bool flag) { qDebug()<<"SetFlag" << flag; this->isTraining = flag; } QString Process::testing(cv::Mat img) { int predictedLabel = -1; double confidence = 0.0; cv::cvtColor(img, img, CV_BGR2GRAY); resize(img, img, Size(168,192), 0, 0, INTER_CUBIC); model->predict(img, predictedLabel, confidence); //printf(" confidence = %.10f ",confidence); SVTH: Hà Duy Thiện 57 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn qDebug() << "Predicte Label" << mapLabel.value(predictedLabel); return mapLabel.value(predictedLabel); } void Process::detect() { Mat img; #ifdef RASPICAM raspicam::RaspiCam_Cv Camera; //set camera params Camera.set( CV_CAP_PROP_FORMAT, CV_8UC3 ); //Open camera cout<<"Opening Camera..."<<endl; if (!Camera.open()) { cerr<<"Error opening the camera"<<endl; } #elif VideoCapture cap(0); cap.open(0); #endif // Camera.release(); CascadeClassifier face_cascade; face_cascade.load( "/usr/local/share/OpenCV/haarcascades/haarcascade_frontalcatface.xml" ); for (;;) { #ifdef RASPICAM Camera.grab(); Camera.retrieve ( img); #elif // Image from camera to Mat cap >> img; // obtain input image from source cap.retrieve(img, CV_CAP_OPENNI_BGR_IMAGE); #endif // Container of faces vector<Rect> faces; // Detect faces face_cascade.detectMultiScale( img, faces, 1.1, 2, 0|CV_HAAR_SCALE_IMAGE, Size(168, 192) ); QString label = ""; if(this->isTraining==false)//mode recog { SVTH: Hà Duy Thiện 58 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn if(faces.size()==1){ label = testing(img(faces.at(0))); qDebug() << label; } } // To draw rectangles around detected faces for (unsigned i = 0; i<faces.size(); i++){ rectangle(img,faces[i], Scalar(255, 0, 0), 2, 1); if(this->isTraining==false)//mode recog { cv::putText(img,label.toLatin1().data(),Point(faces[i].x,faces[i].y),FONT_HERSHEY_ PLAIN, 3, Scalar(0,255,0)); } } signalShowImage(img,faces); // imshow("HaDuyThien-2002150158", img); int key2 = waitKey(20); if(key2 == 13) // enter out break; } } SVTH: Hà Duy Thiện 59 ĐỒ ÁN TỐT NGHIỆP GVHD: ThS.Trần Hoàn TÀI LIỆU THAM KHẢO [1]https://docs.opencv.org/2.4/modules/contrib/doc/facerec/facerec_tutorial.html# id27 [2]https://github.com/adafruit/Adafruit-Fingerprint-Sensor-Library [3]https://www.uco.es/investiga/grupos/ava/node/40 [4Auranuch Lorsakul and Jackrit Suthakorn. “Traffic Sign Recognition Using Neural Network on OpenCV: Toward Intelligent Vehicle/Driver Assistance System”. Center for Biomedical and Robotics Technology (BART LAB), Department of Biomedical Engineering, Faculty of Engineering, Mahidol University, 25/25 Putthamonthon 4 Road, Salaya, Putthamonthon, Nakornpathom, 73170, Thailand. [5]H. Fleyeh E. Davami. “Eigen-based traffic sign recognition”. Computer Science Department, School for Technology and Business Studies, Dalarna University, Rodavagen 3, 78188 Borlange, Sweden. SVTH: Hà Duy Thiện 60