Nhận diện khuôn mặt bằng python opencv (đồ án ngành điện tử)

29 0 0
Nhận diện khuôn mặt bằng python opencv (đồ án ngành điện tử)

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

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

Thông tin tài liệu

lOMoARcPSD|17160101 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 Xuân Lộc 1812700 Hoàng Trung Kiên TP HỒ CHÍ MINH, NĂM 2022 lOMoARcPSD|17160101 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 cn 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 thy 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 Trn Xuân Lộc Hoàng Trung Kiên lOMoARcPSD|17160101 MỤC LỤC: CHƯƠNG GIỚI THIỆU 1.1 TỔNG QUAN 1.2 GIỚI THIỆU ĐỀ TÀI .4 1.3) Phân chia công việc .5 CHƯƠNG 2: CƠ SỞ LÝ THUYẾT .6 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 .6 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 .8 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 .10 2.3 Nhận diện khuôn mặt opencv 10 2.3.1 Trích xuất tính 11 2.3.2 So sánh khuôn mặt .13 CHƯƠNG 3: QUY TRÌNH THỰC HIỆN 15 3.1 Phát khuôn mặt sử dụng phân tng Haar 15 3.1.1 Cài đặt phụ thuộc 15 3.1.2 Áp dụng tng Haar 15 3.1.3 Kết 16 3.2 Lấy dư뀃 liệu khuôn mặt tư뀀 webcam .17 3.2.1 Cài đặt phụ thuộc 17 3.2.2 chụp ảnh tư뀀 webcam lưu vào dataset .18 3.3 Huấn luyện tập dư뀃 liệu 18 3.3.1 đọc dư뀃 liệu tư뀀 id 18 3.3.2 Huấn luyện tập dư뀃 liệu sử dụng hàm training recognizer 19 3.4 Nhận diện khuôn mặt luồng video .19 3.4.1 Lấy dư뀃 liệu tư뀀 tập dư뀃 liệu đ愃̀ training 19 3.4.2 Đọc camera nhận diện khuôn mặt luồng video 20 CHƯƠNG 4: KẾT QUẢ THỰC HIỆN 21 CHƯƠNG 5: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 23 5.1 T漃Ām tắt kết luận .23 5.2 Hướng phát triển 23 TÀI LIỆU THAM KHẢO 24 PHỤ LỤC 24 lOMoARcPSD|17160101 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 cu 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 khuôn 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 cu 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 phn 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漃Ā gn với cách mà người sử dụng để nhận biết khn 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 lOMoARcPSD|17160101 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 toá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 phn đặc trưng khn mặt nư뀃a… Mình xem khuôn 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 gn 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 cn 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 Đ漃Āng g漃Āp Trn Xn Lộc Tìm hiểu ch愃⌀y code 50% Hồng Trung Kiên Demo, kiểm duyệt, viết báo cáo 50% lOMoARcPSD|17160101 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 dn 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 đu 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 ln sử dụng Python đơn thun - 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 cu 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ị đu 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 Downloaded by Free Games Android (vuchinhhp1@gmail.com) lOMoARcPSD|17160101 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 phn, đ漃Ā 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 tng 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 phn sau) bước đu 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 - … Downloaded by Free Games Android (vuchinhhp1@gmail.com) lOMoARcPSD|17160101 Và cịn nhiều như뀃ng đặc điểm khác khn 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 khuôn 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 đu 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 Downloaded by Free Games Android (vuchinhhp1@gmail.com) lOMoARcPSD|17160101 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 đu 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ổ cn 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 khuôn 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ư phn đố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 hu hết giá trị fk khác ta di chuyển cửa sổ x sang vị trí khác(qt tồn ảnh đu 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 đu vào vơ tình cho fk vượt Downloaded by Free Games Android (vuchinhhp1@gmail.com) lOMoARcPSD|17160101 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 đy đủ 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 đy đủ đặ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 phn sau ln 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 Downloaded by Free Games Android (vuchinhhp1@gmail.com) lOMoARcPSD|17160101  Dòng 1-3: Khởi t愃⌀o tng để 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 đu 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 khuôn mặt) Điều c漃Ā thể thực mắt nụ cười phát bên khn mặt ( Dịng 13-14 )  Dịng 16-21: Chuyển vùng phụ xác định bước trước đến tng ‘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 Downloaded by Free Games Android (vuchinhhp1@gmail.com) lOMoARcPSD|17160101 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 khn 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 khuôn 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 đu vào frame hình tư뀀 webcam hàm frame = video_capture.read() Sau đ漃Ā việc phát khn mặt frame hình thực tương tự ảnh bình thường chương trình đu 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 Downloaded by Free Games Android (vuchinhhp1@gmail.com) lOMoARcPSD|17160101 Dòng 1-4: cài đặt thư viện cn 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 Downloaded by Free Games Android (vuchinhhp1@gmail.com) lOMoARcPSD|17160101 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 Downloaded by Free Games Android (vuchinhhp1@gmail.com) lOMoARcPSD|17160101 Dòng 1-4: cài đặt thư viện cn 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 Downloaded by Free Games Android (vuchinhhp1@gmail.com) lOMoARcPSD|17160101 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 khuôn mặt video: 20 Downloaded by Free Games Android (vuchinhhp1@gmail.com) lOMoARcPSD|17160101 21 Downloaded by Free Games Android (vuchinhhp1@gmail.com) lOMoARcPSD|17160101 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.1 Tóm tắt kết luận 22 Downloaded by Free Games Android (vuchinhhp1@gmail.com) lOMoARcPSD|17160101 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át triển cho xác định vị trí thành phn khuôn 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 toá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 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 Downloaded by Free Games Android (vuchinhhp1@gmail.com) lOMoARcPSD|17160101 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 Downloaded by Free Games Android (vuchinhhp1@gmail.com) lOMoARcPSD|17160101 "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 Downloaded by Free Games Android (vuchinhhp1@gmail.com) lOMoARcPSD|17160101 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 Downloaded by Free Games Android (vuchinhhp1@gmail.com) lOMoARcPSD|17160101 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 Downloaded by Free Games Android (vuchinhhp1@gmail.com) lOMoARcPSD|17160101 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 Downloaded by Free Games Android (vuchinhhp1@gmail.com) lOMoARcPSD|17160101 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

Ngày đăng: 22/06/2023, 20:48

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

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

Tài liệu liên quan