Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 29 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
29
Dung lượng
3,09 MB
Nội dung
TRƯỜNG ĐẠI HỌC BÁCH KHOA THÀNH PHỐ HỒ CHÍ MINH KHOA ĐIỆN-ĐIỆN TỬ ĐỒ ÁN NGÀNH ĐIỆN TỬ ĐỀ TÀI NHẬN DIỆN KHUÔN MẶT BẰNG PYTHON-OPENCV MSSV 1812981 1812700 TP HỒ CHÍ MINH, NĂM 2022 LỜI CẢM ƠN Để thực đề tài này, chúng em xin gửi lời cảm ơn sâu sắc đến thầy Hải Phú đ( giúp đỡ, truyền đ 愃 t cho chúng em ng kiến thư c c3n thiết, tư đ 愃 Ā mà chúng em c 愃 Ā thể thực tốt đề tài Do thời gian kiến thư c nhiều h 愃 n chế, đề tài em không tránh khỏi ng sai s 愃 Āt, em mong th3y g 愃 Āp ý, chỉnh sửa để c 愃 Ā thể hoàn thiện Xin chân thành cảm ơn! Tp Hồ Chí Minh, tháng năm 2022 Nhóm sinh viên thực Tr3n Xn Lộc Hồng Trung Kiên MỤC LỤC: CHƯƠNG GIỚI THIỆU 1.1 TỔNG QUAN 1.2 GIỚI THIỆU ĐỀ TÀI 1.3) Phân chia công việc CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 2.1 Ngôn ngư lập trình, thư viện cơng cụ hỗ trợ 2.1.1 Python 2.1.2 OpenCV 2.1.3 Các thư viện sử dụng 2.2.1 Tiền xử lý 2.2.2 Đối tượng nhận d 愃 ng 2.2.3 Các đặc trưng Haar-like 2.2.4 Cách áp dụng đặc trưng Haar-like để phát khuôn mặt ảnh 2.2.5 Số lượng đặc trưng Haar-like 2.3 Nhận diện khuôn mặt opencv 2.3.1 Trích xuất tính 2.3.2 So sánh khuôn mặt CHƯƠNG 3: QUY TRÌNH THỰC HIỆN 3.1 Phát khuôn mặt sử dụng phân t3ng Haar 3.1.1 Cài đặt phụ thuộc 3.1.2 Áp dụng t3ng Haar 3.1.3 Kết 3.2 Lấy dư liệu khuôn mặt tư webcam 3.2.1 Cài đặt phụ thuộc 3.2.2 chụp ảnh tư webcam lưu vào dataset 3.3 Huấn luyện tập dư liệu 3.3.1 đọc dư liệu tư id 3.3.2 Huấn luyện tập dư liệu sử dụng hàm training recognizer 3.4 Nhận diện khuôn mặt luồng video 3.4.1 Lấy dư liệu tư tập dư liệu đ( training 3.4.2 Đọc camera nhận diện khuôn mặt luồng video CHƯƠNG 4: KẾT QUẢ THỰC HIỆN CHƯƠNG 5: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 5.1 T 愃 Ām tắt kết luận 5.2 Hướng phát triển TÀI LIỆU THAM KHẢO PHỤ LỤC CHƯƠNG GIỚI THIỆU 1.1 TỔNG QUAN Hiện nay, với phát triển x( hội, vấn đề an ninh bảo mật yêu c3u khắt khe t 愃 i quốc gia giới Các hệ thống nhận d 愃 ng người đời với độ tin cậy ngày cao Một toán nhận d 愃 ng người quan tâm nhận d 愃 ng khn mặt Bài tốn nhận d 愃 ng khuôn mặt phục vụ m 愃 nh mẽ nhiều lĩnh vực đời sống đặt biệt ng lĩnh vực công nghệ cao yêu c3u bảo đảm an ninh bảo mật… Vì tốn nhận d 愃 ng khn mặt cịn tốn n 愃 Āng hổi ngày người ta ln tìm cách hoàn thiện n 愃 Ā để mang l 愃 i kết nhận d 愃 ng tốt 1.2 GIỚI THIỆU ĐỀ TÀI Giới thiệu chung phương pháp nhận dạng mặt người: a) Các phương pháp nhận dạng mặt người: Phương pháp nhận d 愃 ng c 愃 Ā lo 愃 i: Nhận d 愃 ng dựa đặc trưng ph3n tử khuôn mặt (Feature based face recognition) Nhận d 愃 ng dựa xét tổng thể khuôn mặt (Appearance based face recognition) Ngồi cịn c 愃 Ā số lo 愃 i nhận d 愃 ng sử dụng mô hình khn mặt, số phương pháp dùng cho lo 愃 i này: Nhận d 愃 ng 2D: Elastic Bunch Graph, Active Appearance Model Nhận d 愃 ng 3D: 3D Morphable Model b) Nhận dạng dựa đặc trưng khuôn mặt: Đây phương pháp nhận d 愃 ng khuôn mặt dựa việc xác định đặc trưng hình học chi tiết khn mặt (như vị trí, diện tích, hình d 愃 ng mắt, mũi, miệng,…), mối quan hệ giư a chúng (như khoảng cách hai mắt, khoảng cách hai lông mày,…) Ưu điểm phương pháp n 愃 Ā g3n với cách mà người sử dụng để nhận biết khuôn mặt Hơn nư a với việc xác định đặc tính mối quan hệ, phương pháp c 愃 Ā thể cho kết tốt trường hợp ảnh c 愃 Ā nhiều nhiễu bị nghiêng, bị xoay ánh sáng thay đổi Nhược điểm phương pháp cài đặt thuật toán phư c t 愃 p việc xác định mối quan hệ giư a đặc tính địi hỏi thuật tốn phư c t 愃 p Mặt khác, với ảnh kích thước bé đặc tính kh 愃 Ā phân biệt đ 愃 Ā kh 愃 Ā tính tốn đặc trưng khuôn mặt c) Nhận dạng dựa xét tồn diện khn mặt: Nhận d 愃 ng đựa tồn diện khn mặt, c 愃 Ā nghĩa không xét đến tư ng thành ph3n đặc trưng khn mặt nư a… Mình xem khn mặt khơng gian cụ thể tìm ng đặc trưng, ng đặc điểm khơng gian đ 愃 Ā Nội dung hướng tiếp cận xem ảnh c 愃 Ā kích thước RxC vector khơng gian RxC chiều Ta xây dựng không gian c 愃 Ā chiều nhỏ cho biểu diễn khơng gian đ 愃 Ā đặc điểm khuôn mặt không bị Trong không gian đ 愃 Ā, ảnh người tập trung l 愃 i thành nh 愃 Ām g3n cách xa nh 愃 Ām khác Hai phương pháp thường sử dụng hướng tiếp cận này: PCA (Principle Components Analysis) LDA (Linear Discriminant Analysis) Vâng, với hướng tiếp cận c 愃 Ā thể hình dung tương đối dễ chịu phải không Chúng ta không c3n phải phân tích nhiều đặc điểm khn mặt nư a đ 愃 Ā phương pháp tiếp cận tương đối dễ cài đặt hiệu việc nhận d 愃 ng Nhược điểm tất nhiên không khỏi tránh khỏi Tùy theo phương pháp sư dụng PCA hay LDA mà đánh giá nhược điểm hướng tiếp cận 1.3) Phân chia công việc nhóm Họ T Tr3n X Hồng Trun CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 2.1 Ngôn ngữ lập trình, thư viện cơng cụ hỗ trợ 2.1.1 Python Python thiết kế với ưu điểm m 愃 nh dễ đọc, dễ học, dễ nhớ Theo thời gian, Python d3n mở rộng sang hệ điều hành Mac OS, Windows,… c 愃 Ā thể sử dụng online tảng web Ở chủ đề này, nh 愃 Ām chọn lựa ngôn ngư lập trình Python dùng để lập trình cho việc nhận diện biển số xe ưu điểm mà ngơn ngư mang l 愃 i 2.1.2 OpenCV OpenCV (Open Computer Vision) thư viện m( nguồn mở hàng đ3u cho xử lý thị giác máy tính, machine learning, xử lý ảnh OpenCV đươc viết C/C++, c 愃 Ā tốc độ tính tốn nhanh, c 愃 Ā thể sử dụng với ng dụng liên quan đến thời gian thực Opencv c 愃 Ā interface cho C/C++, Python Java hỗ trợ cho Window, Linux, MacOs lẫn Android, iOS OpenCV OpenCV c 愃 Ā nhiều ng dụng nhận d 愃 ng xử lí ảnh 2.1.3 Các thư viện sử dụng - Thư viện numpy: thư viện toán học rât phổ biến m 愃 nh mẽ Python NumPy trang bị hàm số đ( tối ưu, cho phép làm việc hiệu với ma trận mảng, đặc biệt dư liệu ma trận mảng lớn với tốc độ xử lý nhanh nhiều l3n sử dụng Python đơn thu3n - Thư viện os: module os Python cung cấp chư c sử dụng để tương tác với hệ điều hành c 愃 Ā thông tin liên quan n 愃 Ā OS theo Module tiện ích tiêu chuẩn Python Module cung cấp cách linh động sử dụng chư c phụ thuộc vào hệ điều hành - Thư viện sqlite: sở dư liệu Back -end, b 愃 n c 愃 Ā thể sử dụng Python để xây dựng trang web t 愃 o công cụ c 愃 Ā yêu c3u lưu trư dư liệu SQLite sử dụng rộng r(i trường khác, chẳng h 愃 n HTML5 thiết bị đ3u cuối di động Python sqlite3 Trong thư viện tiêu chuẩn cung cấp giao diện sở dư liệu 2.2 Phát khuôn mặt phân tầng haar C 愃 Ā nhiều phương pháp để giải tốn xác định khn mặt người ảnh 2D dựa hướng tiếp cận khác Phương pháp Haar-like – Adaboost(viết tắt HA) hai tác giả Paul Viola Michael J.Jones phương pháp xác định mặt người dựa theo hướng tiếp cận diện m 愃 o Hướng tiếp cận diện m 愃 o tư c hệ thống nhận d 愃 ng khuôn mặt học mẫu khuôn mặt tư tập ảnh mẫu Sau trình học hay trình huấn luyện (training) thực xong, hệ thống rút ng tham số để phục vụ cho trình nhận d 愃 ng.Vì tiếp cận diện m 愃 o biết đến với tên gọi tiếp cận theo phương pháp học máy Bài báo cáo tập trung chủ yếu vào trình nhận d 愃 ng(sau đ( thực trình học) Về tổng quan, phương pháp HA xây dựng dựa kết hợp, lắp ghép thành ph3n, đ 愃 Ā là: - Các đặc trưng Haar-like: đặc trưng đặt vào vùng ảnh để tính tốn giá trị đặc trưng, tư ng giá trị đặc trưng đưa vào phân lo 愃 i Adaboost ta xác định ảnh c 愃 Ā khuôn mặt hay khơng - Ảnh tích hợp(Integral Image): thực cơng cụ giúp việc tính tốn giá trị đặc trưng Haar-like nhanh - Adaboost(Adaptive Boost): phân lo 愃 i (bộ lọc) ho 愃 t động dựa nguyên tắc kết hợp phân lo 愃 i yếu để t 愃 o lên phân lo 愃 i m 愃 nh Adaboost sử dụng giá trị đặc trưng Haar-like để phân lo 愃 i ảnh mặt hay mặt - Cascade of Classifiers: phân lo 愃 i t3ng với tâng phân lo 愃 i Adaboost, c 愃 Ā tác dụng tăng tốc độ phân lo 愃 i Như toán xác định mặt người ảnh tốn phân lo 愃 i ảnh thành hai lớp mặt mặt 2.2.1 Tiền xử lý Một lưu ý nhỏ phương pháp HA thực ảnh xám (gray image) Mỗi điểm ảnh(pixel) c 愃 Ā giá trị mư c xám tư đến 255(không gian màu bit) Như phương pháp HA không khai thác ng đặc điểm màu sắc khuôn mặt để nhận d 愃 ng song hiệu Ảnh màu chuyển ảnh xám để nhận d 愃 ng, việc chuyển đổi đơn giản, thực hàm chuyển đổi sử dụng với câu lệnh Opencv nên báo cáo chưa đề cập tới Sau chuyển thành ảnh xám, ảnh l 愃 i tiếp tục chuyển thành “ảnh tích hợp” (sẽ trình bày ph3n sau) bước đ3u tiên trình nhận d 愃 ng, đặc trưng Haar-like làm việc trực tiếp ảnh tích hợp 2.2.2 Đối tượng nhận dạng Trên ảnh, vùng khuôn mặt tập hợp điểm ảnh c 愃 Ā mối quan hệ khác biệt so với vùng ảnh khác, ng mối quan hệ t 愃 o lên đặc trưng riêng khuôn mặt Tất khuôn mặt người c 愃 Ā chung ng đặc điểm sau đ( chuyển qua ảnh xám, ví dụ như: - Vùng hai mắt tối vùng má vùng chán, tư c mư c xám vùng cao vượt trội so với hai vùng l 愃 i - Vùng giư a sống mũi tối vùng hai bên mũi - … Và nhiều ng đặc điểm khác khuôn mặt đặc trưng Haar like dựa vào đặc điểm để nhận d 愃 ng Về tổng quát, đặc trưng Haar like không sử dụng để nhận d 愃 ng khuôn mặt mà c 愃 Ā thể dùng để nhận d 愃 ng đối tượng ảnh( thân người, tay, chân, ô tơ, đồ vật,….) Bởi giống khn mặt, đối tượng c 愃 Ā ng đặc điểm riêng biệt đặc trưng vùng điểm ảnh, công việc đặc trưng Haar-like tính tốn giá trị tương quan giư a vùng ảnh đ 愃 Ā Đây bước ban đ3u cách áp dụng đặc trưng để phân lo 愃 i cửa sổ con, chi tiết cách phân lo 愃 i Adaboost Cascade of Classifiers trình bày mục sau 2.2.3 Các đặc trưng Haar-like Mỗi đặc trưng Haar-like miền hình chư nhật chia thành 2,3 hình chư nhật nhỏ phân biệt quy ước màu trắng đen Như hình vẽ lo 愃 i đặc trưng Haar-like gồm 2,3 hình chư nhật hợp thành Tư ng đặc trưng mở rộng thành tập đặc trưng: o Đặc trưng c 愃 nh: o Đặc trưng đường: o Đặc trưng tâm – xung quanh: Giá trị đặc trưng Haar-like khác biệt giư a tổng giá trị xám pixel vùng “đen” với tổng giá trị xám pixel vùng “trắng”: f(x) = Tổngvùng đen(pixel) - Tổngvùng trắng(pixel) Vậy đặt lên vùng ảnh, đặc trưng Haar-like tính tốn đưa giá trị đặc trưng h(x) vùng ảnh đ 愃 Ā 2.2.4 Cách áp dụng đặc trưng Haar-like để phát khn mặt ảnh Như đ( trình bày báo cáo 1, để phát khuôn mặt, hệ thống cho cửa sổ con(sub-window) c 愃 Ā kích thước cố định qt lên tồn ảnh đ3u vào Như c 愃 Ā nhiều ảnh ng với tư ng cửa sổ con, đặc trưng Haar-like đặc lên cửa sổ để tư đ 愃 Ā tính giá trị đặc trưng Sau đ 愃 Ā giá trị phân lo 愃 i xác nhận xem khung hình đ 愃 Ā c 愃 Ā phải khn mặt hay khơng Hình ví dụ: khung màu xanh cửa sổ con, đặc trưng Haar-like với kích thước vị trí đặt hình vẽ Ứng với đặc trưng trên, phân lớp yếu(weak classifier) hk(x) định nghĩa sau: (2) Trong đ 愃 Ā: X : cửa sổ c3n xét : ngưỡng fk: giá trị đặc trưng Haar-like pk: hệ số định chiều bất phương trình Ta hiểu cơng thư c đơn giản sau: giá trị đặc trưng Haar-like k:fk t 愃 i cửa sổ x vượt qua ngưỡng phân lớp hk(x) kết luận cửa sổ x khn mặt(hk(x)=1), cịn fk khơng vượt qua ngưỡng đ 愃 Ā khơng khuôn mặt Ngưỡng giá trị đ( rút sau qua trình huấn luyện phân lớp, trình bày sau Như ph3n đối tượng nhận d 愃 ng, ta thấy đặc trưng Haar-like k c 愃 Ā kích thước vị trí đặt cửa sổ x hình c 愃 Ā giá trị fk lớn(vì mư c xám vùng mắt lớn nhiều vùng má ) Giá trị fk lớn nhiều với h3u hết giá trị fk khác ta di chuyển cửa sổ x sang vị trí khác(qt tồn ảnh đ3u vào), với nhưỡng phù hợp, kết phân lớp hk(x) cho cửa sổ vị trí khn mặt cịn vị trí khác khơng Đương nhiên c 愃 Ā ng vị trí khác ảnh đ3u vào vơ tình cho fk vượt ngưỡng phân lớp yếu hk(x) kết luận khuôn mặt, ta không dùng đặc trưng Haar-like mà dùng nhiều đặc trưng ng vị trí kích thước khác cửa sổ làm giảm trùng hợp ngẫu nhiên 2.2.5 Số lượng đặc trưng Haar-like Việc xác định cửa sổ c 愃 Ā phải mặt hay sử dụng nhiều đặc trưng Haar-like Ứng với kích thước, kiểu đặc trưng vị trí đặt cửa sổ cho ta đặc trưng ng với phân lớp yếu x Vì tập hợp đ3y đủ số lượng đặc trưng cửa sổ lớn Theo tính tốn hai tác giả, với cửa sổ kích thước 2424 pixel số lượng đ3y đủ đặc trưng Haar-like 160000.C 愃 Ā hai vấn đề đặt đây: Thư giá trị đặc trưng Haar-like tính tổng giá trị điểm ảnh vùng đen trư tổng điểm ảnh vùng trắng, với số lượng lớn đặc trưng t 愃 o khối lượng tính tốn khổng lồ Điều không phù hợp để đáp ng thời gian thực thời gian xử lý lâu Thư hai số hàng trăm nghìn đặc trưng đ 愃 Ā khơng phải đặc trưng c 愃 Ā ích cho cơng việc phân lo 愃 i Nếu khơng tìm cách lo 愃 i bổ ng đặc trưng không c 愃 Ā ích để tập trung vào ng đặc trưng c 愃 Ā hiệu cao thời gian xử lý cách vơ ích Như ng ph3n sau l3n lượt tìm cách giải vấn đề 2.3 Nhận diện khuôn mặt opencv Cách nhận dạng khn mặt OpenCV hoạt động: 10 Dịng 1-3: Khởi t 愃 o t3ng để phát khuôn mặt, mắt nụ cười cách sử dụng hàm OpenCV CascadeClassifier () cách chuyển tệp XML làm đối số Dòng 4: Khởi t 愃 o nguồn cấp dư liệu webcam Dòng 6: Tiếp theo, khởi tạo vịng lặp while ch 愃 y vơ thời h 愃 n tất khung lặp qua M( kèm theo bên thực thi cho khung hình đến tư webcam Vịng lặp c 愃 Ā thể bị phá vỡ người dùng nhấn phím ‘thốt’ ( dịng 23-25 ) Dịng 7-9: Sử dụng chư c ‘read ()’ để tìm n 愃 p khung hình liên tiếp tư nguồn cấp dư liệu webcam Điều xử lý trước cách chuyển đổi n 愃 Ā thành thang độ xám (sử dụng cv2.cvtColor) sau đ 愃 Ā gửi đến đối tượng phân lo 愃 i khuôn mặt để phân lo 愃 i cách sử dụng hàm ‘detector’, hàm trả tọa độ (x, y, w, h) khuôn mặt phát phân lo 愃 i Dòng 11: Bắt đ3u vòng lặp for lặp qua tất mặt phát (và sử dụng hàm ‘cv2 rectangle’ để đặt hộp giới h 愃 n xung quanh n 愃 Ā) Để thuận tiện cho việc phát ánh mắt nụ cười (cả hai c 愃 Ā kích thước nhỏ hơn), xác định khu vực phụ khung video thang độ xám (là khu vực quay l 愃 i dịng khn mặt) Điều c 愃 Ā thể thực mắt nụ cười phát bên khuôn mặt ( Dòng 13-14 ) Dòng 16-21: Chuyển vùng phụ xác định bước trước đến t3ng ‘mắt’ ‘nụ cười’ để lo 愃 t tọa độ mắt nụ cười phát trả l 愃 i Tiếp theo, khởi t 愃 o vòng lặp ‘for’ cho mảng ( Dòng 18 & 20 ) đặt hộp giới h 愃 n xung quanh đối tượng phát ( Dịng 21 ) Dịng 27: Cuối cùng, giải phóng nguồn cấp dư liệu video webcam đ( tải vào nhớ Dòng 28: Đ 愃 Āng tất cửa sổ (Nếu c 愃 Ā cửa sổ mở ch 愃 y) 3.1.3 Kết Sau thực chi tiết theo hướng dẫn trên, kết nhận diện khuôn mặt lên ng ô chủ nhật khác c 愃 Ā nhiệm vụ nhận diện đối tượng mắt, mũi, miệng, 15 Như tham số gộp l 愃 i ng hình chư nhật chư a khuôn mặt hình chư nhật cho khn mặt Đồng thời n 愃 Ā lo 愃 i bỏ bớt ng kết sai ng kết sai cho khung hình chư nhật cịn kết c 愃 Ā nhiều khung hình lân cận bao lấy Ví dụ như ng hình chư nhật nhỏ tường hình Việc phát khuôn mặt video hay camera tương tự bư c ảnh, video chuỗi liên tiếp ng hình ảnh hiển thị (frame hình) Ta làm vịng lặp để thực phát khuôn mặt ng frame hình liên tiếp đưa kết liên tiếp Dưới chương trình phát khn mặt lấy đối tượng hình ảnh tư camera máy tính hiển thị: Trong chương trình này, lớp video_capture = cv2.VideoCapture(0) lớp xử lý ng frame hình lấy tư webcam mặc định máy tính Trong vòng lặp, thực lấy ảnh đ3u vào frame hình tư webcam hàm frame = video_capture.read() Sau đ 愃 Ā việc phát khuôn mặt frame hình thực tương tự ảnh bình thường chương trình đ3u tiên Sau kết hiển thị, chương trình tiếp tục nhận frame hình tiếp theo, phát hiển thị.Vịng lặp thực liên tục cho video với khuôn mặt phát 3.2 Lấy liệu khuôn mặt từ webcam 3.2.1 Cài đặt phụ thuộc 16 Dòng 1-4: cài đặt thư viện c3n thiết Dòng 5-10: viết hàm để insert update vào sqlite, kết nối với data Dòng 11-18: khởi t 愃 o vịng lặp ‘for’ để cài đặt thơng số gồm id, tên, năm sinh cho dư liệu 3.2.2 chụp ảnh từ webcam lưu vào dataset Dòng 20-22: đọc video tư webcam phát khuôn mặt luồng video hàm face_cascade Dịng 23-27: cài đặt thơng số gồm id, tên, năm sinh cho dư liệu Dòng 28-43: khởi t 愃 o vòng lặp ‘for’ lấy fram ảnh chuyển qua ảnh gray Lưu dư liệu bư c ảnh khuôn mặt vào file dataset, số ảnh lớn 200 máy ảnh tự động tắt Dư liệu lưu d 愃 ng ảnh xám với đuôi ‘.jpg’ 3.3 Huấn luyện tập liệu 3.3.1 đọc liệu từ id 17 Dòng 4-11: lấy dư liệu tư dataset sử dụng id Dòng 12-23: đọc ảnh tư dư liệu cách liên tục với waitKey = 10 3.3.2 Huấn luyện tập liệu sử dụng hàm training recognizer Dòng 26: Huấn luyện tập dũ liệu hàm training recognizer Dòng 27-30: Lưu dũ liệu đ( huấn luyện vào file recognizer/trainningData.yml 3.4 Nhận diện khuôn mặt luồng video 3.4.1 Lấy liệu từ tập liệu training 18 Dòng 1-4: cài đặt thư viện c3n thiết Dòng : hàm phát khn mặt Dịng 9-10: sử dụng hàm recognizer đọc dư liệu đ( training để nhận diện khuôn mặt Dòng 11-23: lấy data tư splite id 3.4.2 Đọc camera nhận diện khuôn mặt luồng video 19 Dòng 25-26: đọc dư liệu tư camera, lấy fram hình chuyển qua ảnh gray(ảnh xám) Dịng 27: Lấy hình ảnh đươc phát khn mặt Dịng 28-44: lấy hình ảnh khn mặt tư camera so sánh với dư liệu khuôn mặt đ( tranning.Nếu confidence < 90 xuất hình tên năm sinh khn mặt, khơng xt hình unknow CHƯƠNG 4: KẾT QUẢ THỰC HIỆN Mơ hình nhận diện khn mặt video: 20 21 Với g 愃 Āc độ khac thi mơ hình phát q trình trainning đ( chụp ảnh khn mặt với nhiều g 愃 Āc độ khác CHƯƠNG 5: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 5.1Tóm tắt kết luận 22 Qua đồ án này, đ( đ 愃 Āng g 愃 Āp hướng tiếp cận cho toán phát khuôn mặt Bên c 愃 nh đ 愃 Ā, hư a hẹn việc mở lo 愃 i đặc trưng c 愃 Ā thể phá triển cho xác định vị trí thành ph3n khn mặt mắt, mũi, miệng, v.v… Ngồi c 愃 Ā thể phát triển rộng để trở thành tốn nhận d 愃 ng khn mặt Tơi đ( tìm hiểu tốn phát mặt người dựa đặc trưng Haar like để nhận d 愃 ng khuôn mặt xác định ng dụng đặc trưng toán phát mặt người Tư đ 愃 Ā ta xây dựng hệ thống nhận diện người 5.2Hướng phát triển Chương trình phát mặt người ảnh đ( nhân d 愃 ng khuôn mặt chi tiết khuôn mặt Nhằm đưa ng ng dụng thực tế sống đ 愃 i: Phân tích cảm xúc khn mặt người Tổ chư c tìm kiếm liên quan đến người thơng qua khn mặt nhiều hệ sở dư liệu lớn Điều khiển vào quan, văn phòng Hệ thống quan sát, theo dõi bảo vệ Giải trí Nhận d 愃 ng tội ph 愃 m Hệ thống giao tiếp thông minh giư a người máy TÀI LIỆU THAM KHẢO https://pyimagesearch.com/2018/09/24/opencv-face-recognition/? fbclid=IwAR0VbKgZPXXnyM5RWOAEdRkHEaNx9qyBuATQG9hZIj78c3kackuAa5ExX1k https://www.mygreatlearning.com/blog/face-recognition/? 23 fbclid=IwAR2epc1oxjbiqF7jXSrn9Ocs3Quv6kvHU7VYxPWsxKLmPjzEDfCrE-TmDKo https://www.bogotobogo.com/python/OpenCV_Python/python_opencv3_Image_Object_Detection_Fa ce_Detection_Haar_Cascade_Classifiers.php? fbclid=IwAR25vuBDZBMJkDYSxey0BMF0eRfTULSpLkv70594ow6y5wXZHbiDfy262VQ PHỤ LỤC import cv2 import numpy as np face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades+ 24 "haarcascade_frontalface_default.xml") cap = cv2.VideoCapture(0) while(True): ret, frame = cap.read() gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray) for(x, y, w,h) in faces: cv2.rectangle(frame, (x,y), (x+w, y+h), (0,255,0), 2) cv2.imshow('DETECTING FACE', frame) if(cv2.waitKey(1) & 0xFF == ord('q')): break cap.release() cv2.destroyAllWindows() import cv2 import numpy as np import sqlite3 import os def insertOrUpdate(id, name, yearofbirth): conn = sqlite3.connect('C:/Nhận diện khuôn mặt/Data.db') 25 query = "SELECT * FROM People WHERE ID=" + id cusror = conn.execute(query) isRecordExist = for row in cusror: isRecordExist = if (isRecordExist == 0): query = "INSERT INTO People(Id,Name, YearOfBirth) Values(" + id + ",'" + name + "','" + yearofbirth + "')" else: query = "UPDATE People SET Name='" + name + "' YearOfBirth='" + yearofbirth + "' WHERE ID=" + id conn.execute(query) conn.commit() conn.close() # load tv face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml") # cap = cv2.VideoCapture(0) cap = cv2.VideoCapture(0, cv2.CAP_DSHOW) # captureDevice = camera # insert to db id = input("Nhập ID: ") name = input("Nhập Name: ") yearofbirth = input("Nhập năm sinh: ") insertOrUpdate(id, name, yearofbirth) sampleNum = while (True): ret, frame = cap.read() gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.3, 5) for (x, y, w, h) in faces: cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2) if not os.path.exists('dataSet'): os.makedirs('dataSet') sampleNum += cv2.imwrite('dataSet/User.' + str(id) + '.' + str(sampleNum) + ' jpg', gray[y: y + h, x: x + w]) cv2.imshow('frame', frame) cv2.waitKey(1) if sampleNum > 200: break cap.release() cv2.destroyAllWindows() 26 import cv2 import numpy as np import os from PIL import Image recognizer = cv2.face.LBPHFaceRecognizer_create() path='dataSet' def getImageWithId(path): #get the path of all the files in the folder 27 imagePaths=[os.path.join(path,f) for f in os.listdir(path)] faces=[] IDs=[] for imagePath in imagePaths: faceImg=Image.open(imagePath).convert('L'); faceNp=np.array(faceImg,'uint8') print(faceNp) print(os.path.split(imagePath)[1].split('.')) #split to get ID of the image ID=int(os.path.split(imagePath)[1].split('.')[1]) faces.append(faceNp) IDs.append(ID) cv2.imshow('tranning', faceNp) cv2.waitKey(10) return IDs, faces Ids,faces=getImageWithId(path) # trainning recognizer.train(faces,np.array(Ids)) if not os.path.exists('recognizer'): os.makedirs('recognizer') recognizer.save('recognizer/trainningData.yml') cv2.destroyAllWindows() import cv2 import numpy as np import os import sqlite3 from PIL import Image #Tranning hình ảnh nhận diện #Thư viện nhận diện khuôn mặt face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades+ "haarcascade_frontalface_default.xml") 28 recognizer = cv2.face.LBPHFaceRecognizer_create() recognizer.read('recognizer/trainningData.yml') #get data from sqlite by ID def getProfile(id): conn = sqlite3.connect('C:/Nhận diện khuôn mặt/Data.db') query = "SELECT * FROM People WHERE ID="+str(id) cursor = conn.execute(query) profile=None for row in cursor: profile = row conn.close() return profile cap = cv2.VideoCapture(0) fontface = cv2.FONT_HERSHEY_SIMPLEX while(True): #camera read ret , frame = cap.read() gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) faces=face_cascade.detectMultiScale(gray) for(x,y,w,h) in faces: cv2.rectangle(frame,(x,y),(x+w,y+h),(0, 255, 0), 2) roi_gray = gray[y:y+h, x:x+w] id, confidence = recognizer.predict(roi_gray) if confidence