Nhận Diện Gương Mặt Với 3 Dòng Code

Nhận Diện Gương Mặt Với 3 Dòng Code

Trong cái thời buổi mà AI gần như là phổ cập tới người người nhà nhà thì đi đâu bạn cũng sẽ nghe nhắc về AI. Vậy thực sự thì AI là phổ thông hay cực kì cao siêu ?

Theo quan điểm cá nhân của tôi thì là cả hai: nói nó cao siêu vì muốn hiểu sâu, hiểu kỹ, tìm tòi sáng tạo cái mới thì thực sự khó nhưng bảo là phổ thông vì hiện giờ các nguồn học và thư viện để dùng sẵn thực sự là rất nhiều và rất dễ tiếp cận.

Phần cao siêu thì chắc không phần phải nói gì thêm nhưng còn phổ thông, đơn giản thì chắc có nhiều người chưa đồng ý. Để chứng minh cho các anh, chị thấy không phải tôi chém gió thì hôm nay tôi sẽ hướng dẫn cách nhận diện gương mặt người trên ảnh chỉ với 3 dòng code. Let's make it so easy!!!!

Thiết lập môi trường

Đầu tiên là phần thiết lập môi trường, để cho đơn giản và thân thiện nhất tôi sẽ sử dụng Google Colab. Đây là một dịch vụ “trên mây” miễn phí chuyên phục vụ trong lĩnh vực AI, bạn có thể dễ dàng viết và chạy code Python trên các notebook ngay trên trình duyệt của mình.

Các bạn chỉ cần vào vào link trên chọn File là New notebook

 

Và chúng ta bắt đầu.

Chúng ta sẽ sử dụng 2 thư viện cho việc nhận diện gương mặt này: cv2 – cho đọc, ghi, xử lý ảnh và face_detection – cho nhận diện gương mặt.

Vì cv2 đã được Colab đưa vào sẵn nên chúng ta chỉ cần install thêm face_detection, sau đó sẽ import 2 thư viện này mà sử dụng.

! pip install face-detection

import cv2

import face_detection

Tiếp đó là đưa hình ảnh mà ta muốn thử lên Colab. Nhấp vào biểu tượng thư mục ở bên trái sau đó chọn nút Upload để tải ảnh lên.

  

Sau khi tải ảnh lên thành công các ảnh sẽ nằm dưới thư mục sample_data

 

Tiếp tới là 3 dòng code “bình thường”:

detector = face_detection.build_detector("DSFDDetector", confidence_threshold=.5, nms_iou_threshold=.3) # khởi tạo "model"
img = cv2.imread("baeyoohuyn.jpg") # đọc ảnh với tên được điền
detections = detector.detect(img) # nhận diện gương mặt trong ảnh

Biến detections sẽ trả về một danh sách các gương mặt nhận được trong ảnh, mỗi gương mặt sẽ có các thông tin vùng chứa gương mặt đó (tọa độ góc dưới trái, tọa độ góc trên phải của vùng) và độ tự tin khi nhận diện.

Với ví dụ trên ta thấy model bắt được 1 vùng chứa mặt người với tọa độ góc dưới trái là (218.98672, 144.85922) và tọa độ góc trên phải là (311.37323, 273.77774)  cùng độ tự tin 99,99% chính xác :>

Thế là xong phần nhận diện, 3 dòng code nhé.

Giờ ta sẽ dùng cv2 để vẽ lại cái khung xem 99,99% kia có chính xác không.

# Blue color in BGR 
color = (255, 0, 0)   
# Line thickness of 2 px 
thickness = 3
# Draw detect box on image
for face in range(len(detections)):
  pts1 = (detections[face][0],detections[face][1])
  pts2 = (detections[face][2],detections[face][3])

  image = cv2.rectangle(img, pts1, pts2, color, thickness) 

# rewrite detection image
cv2.imwrite("detected.jpg", image)

Và đây là thành phẩm

Tôi cũng đã thử với ảnh không có mặt người cũng như mặt nhiều người để xem kết quả như nào.

Với ảnh chỉ có mặt một chú khỉ thì kết quả là không có gì

  

Ảnh với nhiều khuôn mặt:

 

Khá là chính xác với 3 dòng code đấy chứ.

Các bạn có thể thử với các ảnh bị mờ, nhòe, ngược sáng các thứ xem vài dòng trên còn xịn không nhé.

Code gốc

Cuối cùng, đây là source code của thư viện xịn xò phía trên, ai vọc xong thấy hứng thú thì có thể tìm hiểu tiếp.

Nếu các bạn có gì thắc mắc về lĩnh vực thú vị này đừng ngại comment hỏi nhé.

Tôi sẽ “tri vô bất ngôn, ngôn vô bất tẫn”.