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
1,33 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 GVHD: Nguyễn Phan Hải Phú SINH VIÊN THỰC HIỆN MSSV HỌ VÀ TÊN 1812981 Trần Xn Lộc 1812700 Hồng Trung Kiên TP HỒ CHÍ MINH, NĂM 2022 0 Tieu luan 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 như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 như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 Xuân Lộc Hoàng Trung Kiên 0 Tieu luan 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 0 Tieu luan 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 khn mặt phục vụ m愃nh mẽ nhiều lĩnh vực đời sống đặt biệt như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 hồ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 khuôn 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 0 Tieu luan 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 khn 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 nhưng đặc trưng, như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 khn 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ên Cơng việc Tr3n Xn Lộc Tìm hiểu ch愃y code Hoàng Trung Kiên Demo, kiểm duyệt, viết báo cáo Đ漃Āng g漃Āp 50% 50% 0 Tieu luan 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 0 Tieu luan 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 như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ư nhưng giá trị đặc trưng đưa vào phân lo愃i Adaboost ta xác định ảnh c漃Ā khn 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 như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, như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 như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 - … 0 Tieu luan Và nhiều như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漃Ā như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ư như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) (1) 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 khuôn mặt ảnh 0 Tieu luan 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 quét lên toà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 khn 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(quét toà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漃Ā nhưng vị trí khác ảnh đ3u vào vơ tình cho fk vượt 0 Tieu luan 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 như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ổ nhưng đặc trưng khơng c漃Ā ích để tập trung vào như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 khuôn mặt OpenCV hoạt động: 10 0 Tieu luan 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 nhưng ô chủ nhật khác c漃Ā nhiệm vụ nhận diện đối tượng mắt, mũi, miệng, 15 0 Tieu luan Như tham số gộp l愃i nhưng hình chư nhật chưa khn mặt hình chư nhật cho khuôn mặt Đồng thời n漃Ā lo愃i bỏ bớt nhưng kết sai như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 nhưng hình ảnh hiển thị (frame hình) Ta làm vịng lặp để thực phát khn mặt như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ý như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 0 Tieu luan 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 khn 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 0 Tieu luan 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 0 Tieu luan 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 khn 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 0 Tieu luan 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 0 Tieu luan 21 0 Tieu luan Với g漃Āc độ khac thi mơ hình phát trình trainning đ( chụp ảnh khuôn 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.1 Tóm tắt kết luận 22 0 Tieu luan Qua đồ án này, đ( đ漃Āng g漃Āp hướng tiếp cận cho tốn phát khn 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… Ngoà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.2 Hướ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 như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 khuôn 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 0 Tieu luan 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 0 Tieu luan "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 0 Tieu luan 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 0 Tieu luan 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 0 Tieu luan 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 0 Tieu luan 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