Nhận dạng khuôn mặt thời gian thực bằng Python và OpenCV

Hệ thống nhận dạng khuôn mặt thời gian thực có khả năng xác định hoặc xác minh một người từ máy ảnh video. Để nhận ra khuôn mặt trong một khung ảnh, trước tiên bạn cần phải phát hiện xem có mặt người xuất hiện trong khung hình hay không. Nếu có, hãy đánh dấu một vùng chứa khuôn mặt (ROI), trích xuất ROI và xử lý nó để nhận ra khuôn mặt.

Phần mềm nhận dạng khuôn mặt thời gian thực

Dự án này được chia làm hai phần:

- Tạo cơ sở dữ liệu.

- Huấn luyện và thử nghiệm.

Trước tiên ta cùng tìm hiểu cách tạo một cơ sở dữ liệu.

Tạo một cơ sở dữ liệu

- Chụp lại ảnh người để nhận dạng khuôn mặt sau khi chạy tập lệnh create_database.py. Nó tự động tạo thư mục Train trong thư mục Database có chứa khuôn mặt để được công nhận. Bạn có thể đổi tên từ Train sang tên của người đó.

- Trong khi tạo cơ sở dữ liệu, hình ảnh khuôn mặt phải có các biểu cảm khác nhau, đó là lý do tại sao sự chậm trễ 0.38 giây được đưa ra để tạo tập dữ liệu. Trong ví dụ này, chúng ta lấy khoảng 45 hình ảnh / một người, chuyển hình ảnh sang màu xám và lưu vào thư mục cơ sở dữ liệu với tên của nó.

Huấn luyện và thử nghiệm

Công việc tiếp theo là huấn luyện phần mềm của bạn để nhận biết một người có trong cơ sở dữ liệu hay không. Sử dụng face_rec.py. Thuật toán được sử dụng ở đây là Local Binary Patterns Histograms (LBPH).

Hình 1. Ảnh chụp khuôn mặt của Haar.

Phát hiện khuôn mặt là quá trình tìm kiếm hoặc định vị một hoặc nhiều khuôn mặt người trong khung video hoặc hình ảnh. Thuật toán tính năng Haar giống như của Viola và Jones được sử dụng để phát hiện khuôn mặt. Trong các tính năng của Haar, tất cả các khuôn mặt của con người đều có cùng một số đặc tính chung. Những tính chính xác này có thể được kết hợp bằng cách sử dụng tính năng Haar, như thể hiện trong hình 1.

Hai tính chất chung cho khuôn mặt của con người là: 
1. Khu vực mắt tối hơn má trên. 
2. Khu vực mũi cây sáng hơn so với mắt.

Thành phần của hai tính chất tạo thành các đặc điểm khuôn mặt là: 
1. Vị trí và kích thước bao gồm mắt, miệng và mũi mũi 
2. Giá trị cho các độ dốc định hướng của cường độ điểm ảnh.

Ví dụ, sự khác biệt về độ sáng giữa các hình chữ nhật trắng và đen trên một khu vực cụ thể được cho bởi:

Value = Σ (pixels in black area)- Σ (pixels in white area).

Bắt đầu thực hiện

Cài đặt OpenCV và Python trên Ubuntu 16.04.

Dự án đã được thử nghiệm trên Ubuntu 16.04 sử dụng OpenCV 2.4.10. Các phiên bản cao hơn cũng có thể cài đặt được OpenCV 2.4.10.

$ sh ./install-opencv.sh

Sau khi cài đặt OpenCV, kiểm tra trong terminal sử dụng lệnh import, như thể hiện trong hình 2.

Hình 2: Kiểm tra OpenCV bằng lệnh import

Hình 3: Tạo cơ sở dữ liệu

1. Tạo cơ sở dữ liệu và chạy tập lệnh recogniser, như được đưa ra dưới đây (cũng thể hiện trong hình 3). Thực hiện ít nhất hai bộ dữ liệu trong cơ sở dữ liệu.

$ python create_database.py person_name

2. Chạy tập lệnh recogniser, như dưới đây:

$ python face_rec.py

Điều này sẽ bắt đầu huấn luyện, và máy ảnh sẽ mở ra, như thể hiện trong hình 4. Độ chính xác phụ thuộc vào số lượng bộ dữ liệu cũng như chất lượng máy ảnh và điều kiện ánh sáng.

Hình 4: Ảnh chụp màn hình nhận diện khuôn mặt

OpenCV 2.4.10

OpenCV cung cấp ba nhận diện khuôn mặt người sau đây: 
1. Người nhận biết bản thân 
2. Người nhận biết người nhận 
mặt đất 3. Người nhận biết gương mặt LBPH

Trong dự án này,nhận diện khuôn mặt LBPH được sử dụng, đó là hàm createLBPHFaceRecognizer().

LBP hoạt động trên các hình ảnh có tỷ lệ xám. Đối với mỗi pixel trong một ảnh có tỷ lệ xám, vùng lân cận được chọn xung quanh điểm ảnh hiện tại và giá trị LBP được tính cho pixel sử dụng vùng lân cận.

Sau khi tính giá trị LBP của điểm ảnh hiện tại, vị trí pixel tương ứng được cập nhật trong mặt nạ LBP (cùng chiều cao và chiều rộng với hình ảnh đầu vào) với giá trị LBP tính như hình 5.

Hình 5: Ảnh chụp màn hình của người nhận diện khuôn mặt LBPH

Trong hình ảnh, có tám điểm ảnh lân cận. Nếu giá trị pixel hiện tại lớn hơn hoặc bằng giá trị pixel lân cận, bit tương ứng trong mảng nhị phân được đặt thành 1. Nhưng nếu giá trị pixel hiện tại nhỏ hơn giá trị pixel lân cận, thì bit tương ứng trong mảng nhị phân là đặt thành 0.

Tải mã nguồn.

102 Technology via electronicsforu.com

17 Đánh giá
3.5/5
Theo chủ đề:
Bài viết liên quan
Điều gì sẽ xảy ra khi bạn dùng Raspberry Pi để gọi điện thoại?
Điều gì sẽ xảy ra khi bạn dùng Raspberry Pi để gọi điện thoại?

Hôm nay CÔNG NGHỆ 102 giới thiệu cho bạn một sản phẩm mới của vị kỹ sư này là một chiếc điện thoại có chức năng nghe gọi cũng dựa trên bo mạch Raspberry Pi....

Chuông cửa kết nối điện thoại thông minh không dây
Chuông cửa kết nối điện thoại thông minh không dây

Hiện nay, khái niệm Chuông cửa kết nối điện thoại không còn xa lạ gì với cuộc sống con người. Chuông cửa kết nối điện thoại không chỉ giúp thay thế hiệu quả cho các loại chuông cửa thông thường mà còn giúp người sử dụng có thể quan sát và giao tiếp trực tiếp với khách bấm chuông bên ngoài....