Series Nhận diện Idol: Phần 4.2 – Sử dụng Microsoft Face API để training hệ thống

Toàn bộ series Nhận diện Idol:

Sau phần 4.1, hẳn các bạn cũng đã hiểu cơ chế hoạt động của một hệ thống nhận diện khuôn mặt. Trong phần này, chúng ta sẽ sử dụng dữ liêu khuôn mặt đã có của 12 VAV Idol để huấn luyện cho máy (Được ngắm gái xinh chắc nó mừng lắm). Bắt đầu nào!

screen-shot-2017-01-06-at-4-45-17-pm

Hướng dẫn đăng kí FaceAPI

Ở phần 3, mình đã hướng dẫn các bạn đăng kí account Microsoft Cognitive API. Để đăng kí FaceAPI, các bạn đăng nhập, sau đó vào link này: https://www.microsoft.com/cognitive-services/en-us/face-api.

Bấm Get Started for Free, kéo xuống bấm Subscribe để đăng kí tương tự phần 3:

screen-shot-2017-01-07-at-11-41-42-pm

Tiếp theo, vào đây để kiểm tra, nếu thấy Face – Preview là ok: https://www.microsoft.com/cognitive-services/en-US/subscriptions. Nhớ bấm Copy để copy key và lưu vào chỗ nào nhé, sau này còn dùng.

screen-shot-2017-01-07-at-11-43-49-pm

Face API cho phép sử dụng 30000 lần mỗi tháng, tối đa 20 lần mỗi phút, đủ để bạn nghịch ngợm rồi. Nếu muốn phát triển hệ thống lớn các bạn có thể mua bản trả phí trên Azure (1000 call/ 1USD).

Giới thiệu sơ về FaceAPI

Các bạn có thể đọc qua document của API này ở đây: https://www.microsoft.com/cognitive-services/en-us/face-api/documentation/overview. Document khá ngắn, đọc 10 phút là xong.

Đây là một số khái niệm mà mình nghĩ bạn cần biết rõ trước khi sử dụng API:

  • Face: Mỗi khuôn mặt được lưu trên server là 1 face
  • Person: Mỗi người được lưu trên server là 1 person. 1 người có thể có nhiều khuôn mặt.
  • Person Group: Một Person Group là một nhóm người bao gồm nhiều người.
Quan hệ giữa Person Group, Person và Face
Quan hệ giữa Person Group, Person và Face

API có khá nhiều method, nhưng ta chỉ cần chú ý một số method sau đây:

Person Group

  • Create: Tạo mới Person Group
  • Train: Sao khi đã có đầy đủ ảnh, gọi API này để huấn luyện cho máy

Person

  • Create: Tạo mới Person với tên và info
  • Add Person Face: Thêm 1 ảnh khuôn mặt (face) cho person này
  • List Persons: Hiển thị toàn bộ Person trong 1 Person Group

Face

  • Detect: Phát hiện khuôn mặt trong ảnh, tương đương với phase Face Detection đã nói ở bài trước.
  • Identity: Đầu vào là id của khuôn mặtid của Person Group. Đầu ra là id của Person giống nhất. Tương đương với phase Face Recognition ở bài trước.

Viết code để huấn luyện cho máy

Ta sẽ phối hợp Postman và code để làm 4 bước sau (Xem lại hướng dẫn dùng postman nhé):

  1. Tạo 1 Person Group với id là vav-idols (Create Person Group)
  2. Tạo 12 Person, mỗi person tương ứng với 1 idol. Ta submit ảnh của mỗi idol lên để máy học (Create Person, Add Person Face)
  3. Gọi method Train của API (Train Person Group)
  4. Lấy id của các idol trên server về và lưu lại (List Person)

Bước 1, 3, 4 chỉ cần chạy một lần nên ta dùng Postman cho nhanh, đỡ phải viết code. Phần này hơi dài đấy nhé, nhớ kiên nhẫn.

Bắt đầu thôi nào!

1. Tạo Person Group với id là vav-idols

Các bạn mở Postman lên, dán link này vào: https://api.projectoxford.ai/face/v1.0/persongroups/vav-idols, chọn method là PUT, qua mục headers và body chọn param như trong ảnh nhé. (Trong headers, key là Ocp-Apim-Subscription-Key, value là key Microsoft của bạn).

screen-shot-2017-01-08-at-12-34-10-am

screen-shot-2017-01-08-at-12-34-03-am

2. Viết code để submit idol

Với mỗi idol, ta tạo 1 person trên hệ thống, userdata là sẽ id hiện tại của idol trong file filtered-idols.json. Ta dựa vào userdata để biết person đó là idol nào.

Sau khi tạo person, mỗi idol ta giữ lại 4 ảnh đầu và submit hết để huấn luyện. Lý do là 4 ảnh đầu sẽ được dùng để test độ chính xác của hệ thống.

Ở bản gốc do nhiều dữ liệu nên mình code bằng C#, giờ chúng ta dùng NodeJS để code ngắn và dễ hiểu hơn. (Đừng hỏi tại sao ngôn ngữ gì mình cũng biết ahihi, code dạo mà). Lưu ý là một số ảnh có thể không nhận diện được, do đó khi code ta cần để ý dùng try/catch.


// Sử dụng thư viện
var request = require('sync-request');
// Lấy danh sách idol từ file filtered-idols.json
var idols = require('./filtered-idols.json');
let key = '91bc85*******'; // Thay thế bằng key của bạn
let groupId = 'vav-idols';
// NodeJS không có thread.sleep nên ra dùng tạm function này
function sleep(time) {
console.log('Begin Sleep');
var stop = new Date().getTime();
while(new Date().getTime() < stop + time) {
;
}
console.log('End Sleep');
}
// Tạo idol trên hệ thống
function submitIdol(idol) {
let url = `https://api.projectoxford.ai/face/v1.0/persongroups/${groupId}/persons`;
console.log(`Begin submit idol: ${idol.id} – ${idol.name}`);
var res = request('POST', url, {
headers: {
'Ocp-Apim-Subscription-Key': key
},
json: {
name: idol.name,
userData: idol.id
}
});
if (res.statusCode == 200) {
var person = JSON.parse(res.getBody('utf8'));
console.log(`SUCCESS – Submit idol ${idol.id} – ${idol.name}. Person ID: ${person.personId}`);
// Bỏ 4 ảnh đầu
for (let i = 4; i < idol.images.length; i++) {
// Submit ảnh của idol lên hệ thống
try {
submitIdolFace(person.personId, idol.images[i].image);
sleep(4*1000); // Sleep 4 giây vì limit 20 call/phút
} catch (err) {
console.log('ERROR');
console.log(err);
}
}
} else {
console.log(res.getBody('utf8'));
}
}
// Submit ảnh của idol lên hệ thống
function submitIdolFace(personId, faceUrl) {
console.log(`Begin submit image ${faceUrl.substring(20,60)} for person id ${personId}`);
let url = `https://api.projectoxford.ai/face/v1.0/persongroups/${groupId}/persons/${personId}/persistedFaces`;
var res = request('POST', url, {
headers: {
'Ocp-Apim-Subscription-Key': key
},
json: {
url: faceUrl
}
});
if (res.statusCode == 200) {
console.log(`SUCCESS – Submit image ${faceUrl.substring(20,60)} for person id ${personId}.`);
}
}
for (let idol of idols) {
submitIdol(idol);
}

view raw

submit-idol.js

hosted with ❤ by GitHub

Để chạy code, các bạn làm theo các bước sau:

  1. Vào đây tải NodeJS: https://nodejs.org/en/download/
  2. Sau khi cài đặt, vào trang này, bấm Clone or Download để tải project của mình về: https://github.com/ToiDiCodeDaoSampleCode/idol-submit
  3. Mở cửa số cmd và cd vào thư mục đã giải nén, gõ “npm install” để tải thư viện.
  4. Copy file filtered-idols.json của bạn bỏ vào thư mục này
  5. Mở file index.js lên thay thế key ở dòng số 8 thành key của bạn rồi save lại.
  6. Từ cửa sổ cmd, gõ “node index.js” để chạy code.
  7. Code chạy khá lâu, khoảng 20-25 phút tùy vào tốc độ mạng. Các bạn cứ xem log trên console là thấy.

screen-shot-2017-01-08-at-1-22-27-am

3. Gọi API để train

Mở Postman và gọi method POST tới https://api.projectoxford.ai/face/v1.0/persongroups/vav-idols/train. Nhớ bỏ kèm key trong header nhé. Việc train chỉ mất khoảng 2,3 giây thôi.

screen-shot-2017-01-08-at-1-55-45-am

4. Lấy toàn person trong group vav-idols

Tiếp tục gọi method GET tới link: https://api.projectoxford.ai/face/v1.0/persongroups/vav-idols/persons để lấy danh sách person trong group, đừng quên key trong headers nhé.

screen-shot-2017-01-08-at-2-01-08-am

Bạn sẽ thấy kết quả trả về là 1 danh sách các idol, mỗi idol có 1 vài face. Hãy copy và lưu kết quả này vào 1 file, đặt tên là idol-person.json khác nhé, sẽ dùng tới trong phần sau đấy.

screen-shot-2017-01-08-at-2-04-17-am

Kết

Chúc mừng bạn đã hoàn thành phần 4.2, đây là phần dài và gian khổ nhất trong series. Sau khi hoàn thành phần này, API của các bạn đã được nạp dữ liệu và train xong. Nhớ cất kĩ 2 file filtered-idols.jsonidol-person.json để còn sử dụng ở phần sau.

Bây giờ, bạn có thể bắt đầu dùng API để nhận diện ảnh của 12 VAV Idol nổi tiếng như: Ngọc Tờ Rinh, Hường Hana, Vàng Anh, … Ở phần sau, mình sẽ hướng dẫn các bạn cách dùng API, cũng như test thử độ chính xác của nó nhé.

20 thoughts on “Series Nhận diện Idol: Phần 4.2 – Sử dụng Microsoft Face API để training hệ thống”

  1. Cảm ơn anh Hoàng, rất dễ hiểu :). Hy vọng có 1 bài viết về các công nghệ web mà anh áp dụng. e.g: Web dùng gì để code? Host ở đâu & paging recent search như thế nào,..

    Like

  2. Cứ báo lỗi Error: Server responded with status code 401.
    “Access denied due to invalid subscription key. Make sure you are subscribed to an API you are trying to call and provide the right key.” Nhưng em đã chèn key của Microsoft rồi, không biết nó bị lỗi ở đâu? Mong anh có thể gợi ý giúp em ạ. Em đã xem kỹ các phần trước rồi vẫn không được?

    Like

      1. em check rồi mà nó vẫn vậy. KO biết có check đúng hem 😀 . Anh chỉ em với

        Like

  3. Microsoft đã rút ngắn thời gian dùng thử xuống chỉ còn 7 ngày. Sau khi hết 7 ngày e có tiếp tục đky dùng thử được nữa không hay phải mua để dùng tiếp?

    Like

Leave a comment