12/08/2018, 15:47

Khái niệm Phát hiện khuôn mặt trong google vision

I. Khái niệm Phát hiện khuôn mặt Phát hiện khuôn mặt là quá trình tự động định vị khuôn mặt người trong phương tiện trực quan (hình ảnh kỹ thuật số hoặc video). Một khuôn mặt được phát hiện được báo cáo tại một vị trí có kích thước và hướng liên quan. Một khi khuôn mặt được phát hiện, nó có thể ...

I. Khái niệm Phát hiện khuôn mặt

Phát hiện khuôn mặt là quá trình tự động định vị khuôn mặt người trong phương tiện trực quan (hình ảnh kỹ thuật số hoặc video). Một khuôn mặt được phát hiện được báo cáo tại một vị trí có kích thước và hướng liên quan. Một khi khuôn mặt được phát hiện, nó có thể được tìm kiếm các điểm mốc như mắt và mũi.

Dưới đây là một số thuật ngữ chúng tôi sử dụng để thảo luận về phát hiện khuôn mặt và các chức năng khác nhau của Mobile Vision API.

  • Tính năng nhận diện khuôn mặt tự động xác định nếu hai khuôn mặt có khả năng tương ứng với cùng một người. Lưu ý rằng tại thời điểm này, Google Face API chỉ cung cấp chức năng cho việc phát hiện khuôn mặt và không phải đối mặt với sự công nhận.
  • Tính năng theo dõi khuôn mặt mở rộng việc dò tìm khuôn mặt cho các chuỗi video. Bạn có thể theo dõi bất kỳ khuôn mặt nào xuất hiện trong video trong bất kỳ khoảng thời gian nào. Đó là, khuôn mặt được phát hiện trong khung hình liên tiếp có thể được xác định là cùng một người. Lưu ý rằng đây không phải là một hình thức nhận dạng khuôn mặt; Cơ chế này chỉ làm cho suy luận dựa trên vị trí và chuyển động của khuôn mặt (s) trong một chuỗi video.
  • Một cột mốc là một địa điểm ưa thích trong một khuôn mặt. Mắt trái, mắt phải và mũi đều là ví dụ về các mốc. Face API cung cấp khả năng tìm các mốc trên một khuôn mặt đã được phát hiện.
  • Phân loại là xác định xem một đặc điểm mặt nào đó có mặt. Ví dụ, một khuôn mặt có thể được phân loại liên quan đến việc mắt của nó được mở hoặc đóng cửa. Một ví dụ khác là liệu khuôn mặt có mỉm cười hay không.

II. Định hướng khuôn mặt

API khuôn mặt phát hiện khuôn mặt ở nhiều góc độ khác nhau, như minh họa dưới đây: Hình 1. Định vị góc nhìn. (A) Hệ toạ độ với hình ảnh trong mặt phẳng XY và trục Z xuất hiện trong hình. (B) Ví dụ về góc đứng khi y == Euler Y, r == Euler Z.

Các góc Euler X , Euler Y và Euler Z mô tả hướng của khuôn mặt như thể hiện trong hình 1. Face API cung cấp phép đo Euler Y và Euler Z (nhưng không phải Euler X) cho khuôn mặt đã được phát hiện.

Góc Euler Z của khuôn mặt luôn được báo cáo. Góc Euler Y chỉ khả dụng khi sử dụng cài đặt chế độ "chính xác" của máy dò mặt (đối lập với cài đặt chế độ "nhanh", có một số phím tắt để phát hiện nhanh hơn). Góc Euler X hiện không được hỗ trợ.

III. Các địa danh

Mốc là điểm quan tâm trong khuôn mặt. Mắt trái, mắt phải và mũi đều là ví dụ về các mốc. Hình dưới đây cho thấy một số ví dụ về các điểm mốc: Thay vì phát hiện các điểm mốc đầu tiên và sử dụng mốc làm cơ sở để phát hiện toàn bộ khuôn mặt, Face API sẽ phát hiện toàn bộ khuôn mặt một cách độc lập với thông tin mốc chi tiết. Vì lý do này, việc phát hiện mốc là bước tùy chọn có thể thực hiện được sau khi phát hiện khuôn mặt. Việc phát hiện Landmark không được thực hiện theo mặc định vì phải mất thêm thời gian để chạy. Bạn có thể tùy ý chỉ định việc phát hiện mốc này nên được thực hiện.

Góc Euler Y Các điểm mốc phát hiện
<-36 độ Mắt trái, miệng trái, tai trái, nách, má trái
-36 độ đến -12 độ Miệng trái, chân mũi, miệng dưới, mắt phải, mắt trái, má trái, đầu tai trái
-12 độ đến 12 độ Mắt phải, mắt trái, mũi cơ, má trái, má phải, miệng trái, phải miệng, dưới miệng
12 độ đến 36 độ Miệng phải, mũi, miệng dưới, mắt trái, mắt phải, má phải, đầu tai phải
> 36 độ Mắt phải, phải miệng, tai phải, mũi, má phải

Mỗi điểm đánh dấu được phát hiện bao gồm vị trí liên quan của nó trong hình ảnh.

IV. Phân loại

Phân loại xác định một đặc điểm mặt nào đó có mặt. Android Face API hiện hỗ trợ hai phân loại: mắt mở và mỉm cười . IOS Face API hiện hỗ trợ phân loại cười . Phân loại được thể hiện như là một giá trị chắc chắn, cho thấy sự tự tin rằng nét mặt có mặt. Ví dụ, một giá trị 0,7 hoặc nhiều hơn cho việc phân loại cười cho thấy rằng có thể một người đang mỉm cười.

Cả hai loại phân loại này đều dựa vào sự phát hiện mốc.

Cũng lưu ý rằng phân loại "mắt mở" và "mỉm cười" chỉ hoạt động đối với mặt mặt trước, nghĩa là phải đối mặt với góc Euler Y nhỏ (tối đa khoảng +/- 18 độ).

V. Tạo bộ dò mặt

Trong ví dụ này, máy dò mặt được tạo ra trong phương pháp onCreate của hoạt động chính của ứng dụng. Nó được khởi tạo với các tùy chọn để phát hiện khuôn mặt với các điểm mốc trong một bức ảnh:

FaceDetector detector = new FaceDetector.Builder(context)
    .setTrackingEnabled(false)
    .setLandmarkType(FaceDetector.ALL_LANDMARKS)
    .build();

Cài đặt "theo dõi được kích hoạt" thành false được đề nghị để phát hiện các hình ảnh cá nhân không liên quan (trái ngược với video hoặc một loạt hình ảnh chụp liên tiếp), vì đây sẽ cho kết quả chính xác hơn. Nhưng để phát hiện các hình ảnh liên tiếp (ví dụ, video trực tiếp), việc theo dõi được kích hoạt cho kết quả chính xác và nhanh hơn.

Lưu ý rằng các điểm mốc trên khuôn mặt không bắt buộc khi phát hiện khuôn mặt, và phát hiện mốc là một bước riêng biệt (tùy chọn). Theo mặc định, tính năng phát hiện mốc không được kích hoạt vì nó làm tăng thời gian phát hiện. Chúng tôi cho phép ở đây để hình dung các điểm mốc đã được phát hiện.

VI. Phát hiện khuôn mặt và điểm mốc trên khuôn mặt

Với một bitmap, chúng ta có thể tạo ra Frame instance từ bitmap để cung cấp cho detector:

Frame frame = new Frame.Builder().setBitmap(bitmap).build();

Máy dò có thể được gọi đồng bộ với một khung để phát hiện khuôn mặt:

SparseArray<Face> faces = detector.detect(frame);

Kết quả trả về bao gồm một tập hợp các trường hợp mặt. Chúng ta có thể lặp lại bộ sưu tập các khuôn mặt, bộ sưu tập các điểm mốc cho mỗi mặt và rút ra kết quả dựa trên từng vị trí quan trọng:

for (int i = 0; i < faces.size(); ++i) {
    Face face = faces.valueAt(i);
    for (Landmark landmark : face.getLandmarks()) {
        int cx = (int) (landmark.getPosition().x * scale);
        int cy = (int) (landmark.getPosition().y * scale);
        canvas.drawCircle(cx, cy, 10, paint);
    }
}

VII. Truy vấn trạng thái hoạt động của máy dò mặt

Lần đầu tiên một ứng dụng sử dụng Face API được cài đặt trên thiết bị, GMS sẽ tải xuống một thư viện gốc cho thiết bị để phát hiện khuôn mặt Thông thường điều này được thực hiện bởi trình cài đặt trước khi ứng dụng được chạy lần đầu tiên. Nhưng nếu tải xuống chưa hoàn thành, thì phương pháp "phát hiện" ở trên sẽ không phát hiện bất kỳ khuôn mặt nào. Điều này có thể xảy ra nếu người dùng không trực tuyến, nếu người dùng thiếu không gian lưu trữ đầy đủ trên thiết bị của họ hoặc nếu tải bị trì hoãn khác (ví dụ do mạng chậm).

Máy dò sẽ tự động hoạt động khi tải xuống thư viện đã được hoàn thành trên thiết bị.

Phương pháp isOperational của detector có thể được sử dụng để kiểm tra nếu thư viện gốc yêu cầu hiện có:

if (!detector.isOperational()) {
    // ...
}

Ứng dụng của bạn có thể thực hiện hành động dựa trên trạng thái hoạt động của máy dò (ví dụ: tạm thời tắt tính năng nhất định hoặc hiển thị thông báo cho người dùng).

VIII. Phát hành bộ dò mặt

Bộ dò khuôn mặt sử dụng nguồn gốc để phát hiện. Vì lý do này, cần phải giải phóng máy dò khi không còn cần thiết nữa:

detector.release();

Nhưng lưu ý rằng bạn có thể sử dụng lại cùng một máy dò khuôn mặt để phát hiện với nhiều bức ảnh, nếu bạn chọn.

Nguồn dịch từ: https://developers.google.com/vision/android/detect-faces-tutorial link github demo: https://github.com/googlesamples/android-vision folder photo-demo.

0