- vừa được xem lúc

Nhận diện và so sánh khuôn mặt cực kỳ dễ dàng với deepface

0 0 22

Người đăng: HendrickPhan

Theo Viblo Asia

Giới thiệu

Nhận diện và so sánh khuôn mặt bằng máy học trong những năm trở lại đây là một đề tài rất hot nhận được sự quan tâm của rất nhiều doanh nghiệp bởi vì khả năng ứng dụng rộng rãi. Nó giúp cho những việc như điểm hay EKYC khác hàng trở nên 1 cách đơn giản, tự động và độ chính xác của rất cao. Thế nhưng không ít lập trình viên trong chúng ta gặp khó khăn khi phải xây dựng 1 hệ thống như thế vì không phải ai cũng đủ hiểu biết về máy học để có thể tự bắt đầu. Rất may là vì độ hot của đề tài này nên đã có rất nhiều open source hỗ trợ chúng ta. Một trong số đó là deepface. Thư viện deepface được viết để sử dụng với python3 và nó được tích hợp sẵn rất nhiều model nhận diện, so sánh tốt nhất hiện này (state of the art) như là: VGG-Face, Google FaceNet, OpenFace, Facebook DeepFace, DeepID, ArcFace, Dlib và SFace. Ở bài này mình sẽ hướng dẫn các bạn cài đặt và sử dụng thư viện này.

Cài đặt môi trường

Dĩ nhiên các bạn sẽ phải có python3 để chạy, mình sẽ không hướng dẫn cài python3 nữa. Trước khi viết hay cài đặt các lib cho python thì trước tiên chúng ta nên tạo virtual env(venv) để có thể có 1 môi trường riêng biệt cho dự án, tránh trường hợp khi ta có nhiều dự án trên cùng 1 máy sẽ dễ bị xung đột giữa các lib. Để tạo virtual env thì mình sẽ chạy lệnh
python3 -m venv venv
Sau khi có chạy thì chúng ta sẽ có 1 folder là venv ở trong folder dự án hiện tại. Chúng ta sẽ cần phải source lại folder này để có thể chuyển python3/pip về đây.
source venv/bin/activate
Các bạn lưu ý là nếu thay đổi terminal thì chúng ta sẽ phải source lại nếu không chúng ta sẽ đang sử dụng python của hệ thống. Nếu kỹ các bạn có thể chạy thêm which python3which pip để chắc chắn là venv hoạt động đúng.

Cài đặt thư viện

Linux:

pip install tensorflow
pip install deepface

MacOs: Bản thân mình thì xài mac nên việc cài lib có vẻ hơi khó khăn hơn do cái python của thằng mac nó không hỗ trợ mình install tensorflow với deepface dễ như linux, cho nên mình phải cài qua 1 số lệnh như sau thì mới có thể chạy thành công deepface

pip install tensorflow-macos
pip install tensorflow-metal
pip install retina-face --no-deps
pip install pandas Flask gdown mtcnn Pillow fire
pip install deepface --no-deps

Chạy thử 1 số hàm của deepface

Sau khi cài lib thành công thì chúng ta đã có thể sử dụng deepface. Ở đây mình sẽ thử nhận diện và so sánh khuôn mặt trong 2 bức hình này

kết quả nhận diện

code:

from deepface import DeepFace
import matplotlib.pyplot as plt detected_face_1 = DeepFace.detectFace(img_path = "face1.jpeg")
plt.imshow(detected_face_1)
plt.show() detected_face_2 = DeepFace.detectFace(img_path = "face2.jpeg")
plt.imshow(detected_face_2)
plt.show()

Tiếp theo ta sẽ thử so sánh 2 khuôn mặt này:

result = DeepFace.verify(img1_path = "./face1.jpeg", img2_path = "./face2.jpeg", model_name = "Facenet")
print(result)

Kết quả so sánh:
{'verified': False, 'distance': 0.8645276446946638, 'threshold': 0.4, 'model': 'Facenet', 'detector_backend': 'opencv', 'similarity_metric': 'cosine'}
verified ở đây là 2 khuôn mặt có khớp hay không và distance là độ chênh lệch của 2 khuôn mặt, càng về 0 thì sẽ càng giống nhau. Threshold là ngưỡng đúng sai, > threshold thì kết quả sẽ là false
Mặc định deepface dùng vgg-face nhưng mình thấy Facenet có vẻ chính xác hơn nên mình sẽ dùng model là Facenet. Lần đầu chạy có thể sẽ phải download model nhưng các lần sau sẽ không phải download nữa. Đây là danh sách các model mà các bạn có thể sử dụng:

  • VGG-Face
  • OpenFace
  • Facenet
  • Facenet512
  • DeepFace
  • DeepID
  • Dlib
  • ArcFace
  • SFace

Ngoài nhận diện và so sánh khuôn mặt, Deepface còn cung cấp cho chúng ta 1 số chức năng khá thú vị như phân tích khuôn mặt để dự đoán độ tuổi, giới tính, chủng tộc, cảm xúc. vd:

obj = DeepFace.analyze(img_path = "face1.jpeg", actions = ['age', 'gender', 'race', 'emotion'])
print(obj) 

kết quả sẽ là:

{'age': 40, 'region': {'x': 255, 'y': 29, 'w': 165, 'h': 165}, 'gender': 'Man', 'race': {'asian': 18.35305800158131, 'indian': 12.667413810933459, 'black': 27.042837562730167, 'white': 7.209931743736967, 'middle eastern': 5.449669760445938, 'latino hispanic': 29.277088002985}, 'dominant_race': 'latino hispanic', 'emotion': {'angry': 24.804694950580597, 'disgust': 0.0015981857359292917, 'fear': 7.38416463136673, 'happy': 0.19465479999780655, 'sad': 57.68662095069885, 'surprise': 0.2808759920299053, 'neutral': 9.647384285926819}, 'dominant_emotion': 'sad'}

Tổng kết

Như vậy là chúng ta đã có thể có cái nhìn tổng quan cũng như sử dụng được thư viện deepface để nhận diện, so sánh, phân tích khuôn mặt một cách dễ dàng mà không cần phải bỏ thời gian để tìm hiểu sâu về thuật toán. Mong các bạn có thể ứng dụng được thư viện này vào trong dự án của mình. Hẹn gặp các bạn ở các bài viết sau.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Hành trình AI của một sinh viên tồi

Mình ngồi gõ những dòng này vào lúc 2h sáng (chính xác là 2h 2 phút), quả là một đêm khó ngủ. Có lẽ vì lúc chiều đã uống cốc nâu đá mà giờ mắt mình tỉnh như sáo, cũng có thể là vì những trăn trở về lý thuyết chồng chất ánh xạ mình đọc ban sáng khiến không tài nào chợp mắt được hoặc cũng có thể do mì

0 0 143

- vừa được xem lúc

[Deep Learning] Key Information Extraction from document using Graph Convolution Network - Bài toán trích rút thông tin từ hóa đơn với Graph Convolution Network

Các nội dung sẽ được đề cập trong bài blog lần này. . Tổng quan về GNN, GCN. Bài toán Key Information Extraction, trích rút thông tin trong văn bản từ ảnh.

0 0 215

- vừa được xem lúc

Tìm hiểu về YOLO trong bài toán real-time object detection

1.Yolo là gì. . Họ các mô hình RCNN ( Region-Based Convolutional Neural Networks) để giải quyết các bài toán về định vị và nhận diện vật thể.

0 0 281

- vừa được xem lúc

Encoding categorical features in Machine learning

Khi tiếp cận với một bài toán machine learning, khả năng cao là chúng ta sẽ phải đối mặt với dữ liệu dạng phân loại (categorical data). Khác với các dữ liệu dạng số, máy tính sẽ không thể hiểu và làm việc trực tiếp với categorical variable.

0 0 256

- vừa được xem lúc

TF Lite with Android Mobile

Như các bạn đã biết việc đưa ứng dụng đến với người sử dụng thực tế là một thành công lớn trong Machine Learning.Việc làm AI nó không chỉ dừng lại ở mức nghiên cứu, tìm ra giải pháp, chứng minh một giải pháp mới,... mà quan trọng là đưa được những nghiên cứu đó vào ứng dụng thực tế, được sử dụng để

0 0 69

- vừa được xem lúc

Xây dựng hệ thống Real-time Multi-person Tracking với YOLOv3 và DeepSORT

Trong bài này chúng ta sẽ xây dựng một hệ thống sử dụng YOLOv3 kết hợp với DeepSORT để tracking được các đối tượng trên camera, YOLO là một thuật toán deep learning ra đời vào tháng 5 năm 2016 và nó nhanh chóng trở nên phổ biến vì nó quá nhanh so với thuật toán deep learning trước đó, sử dụng YOLO t

0 0 313