Data wow Face Embedding API

Data Wow Open API

บริษัท Data wow กำลังเปิด Open API ให้คนนอกทดลองได้ใช้งาน สำหรับการใช้งาน AI model ใน use case ต่าง ๆ

สวัสดีครับทุกท่านนนน วันนี้ผมมีสิ่งที่น่าสนใจมานำเสนอ บริษัท Data wow ที่ผมทำงานอยู่นั้นกำลังเปิด Open API ให้ทุกๆท่านได้ทดลองใช่งานกัน โดย API ตัวแรกที่เราภูมิใจนำเสนอ ก็คือ "Face embedding API" นั่นเองงง สำหรับ Face embedding API ที่เราเปิดนั้น เพื่อนๆ สามารถนำไปใช้งานในการเปรียบเทียบหน้าตาของบุคคลว่า เอ๊ะ รูป 2 รูปนี้เป็นคนเดียวกันรึเปล่า

Face Embedding API

Face Embedding คือการแปลงรูปภาพหน้าคนให้กลายเป็น vector เพื่อเป็นตัวแทนของภาพหน้านั้น ๆ [Face Embedding ของ Data Wow] มีขั้นตอนในการสร้าง Embedding Vector ดังนี้

  1. Face Detector: ใช้ RetinaNet ในการหาใบหน้าบนรูปและระบุตำแหน่ง Facial Landmark เช่น จมูก, ตา, และ ปากจำนวน 5 จุด โดยเราได้ปรับแต่ง RetinaNet เพิ่มเติมด้วยข้อมูลที่ Data Wow จัดทำขึ้นเอง ทำให้โมเดลมีความแม่นยำในการหาใบหน้าสูงถึง 95%

  2. Face Embedding: แปลงใบหน้าที่พบโดย Face Detector ให้เป็น Embedding Vector ขนาด 128 dimension ด้วย Neural Network ที่ใช้ Loss Function แบบ Angular Additive Margin Loss ซึ่งสามารถแยกหน้าที่แตกต่างกันได้มากกว่า 50,000 หน้า

เรามาดูกันว่า Face embedding API ใช้งานกันอย่างไร ไม่ยาก ๆ เขียน Code นิดเดียวก็ได้แล้ว

Environment สำหรับ API

URL: "https://backend.datawow.io" API_KEY: "Data wow"

POSTMAN API

สำหรับภาษาต่าง ๆ Postman documenter

Headers required 'X-Api-Key' = 'Data wow'

Body required form-data['image', 'File image'] หรือ form-data['image_url', 'url image']

ตัวอย่าง Request สำหรับภาษา Ruby

Request

ตัวอย่าง Response สำหรับภาษา Ruby

{ "data": { "slug": "4b55398c-1f0e-4918-a201-c600f2bd7e65", "status": "done", "imageurl": "https://datawow-demo.s3-ap-southeast-1.amazonaws.com/ice2.jpg", "results": { "faces": [ { "embedding": [ 0.08793905377388, -0.02070523239672184, 0.06881865113973618, ... ], "boundingbox": { "x1": 0.3211106030858968, "y1": 0.18583024342854818, "x2": 0.6111332452831726, "y2": 0.5628035227457683, "confidence": 0.9997031092643738 }, "landmarks": [ { "x": 0.3681415641394845, "y": 0.35111751556396487 }, { "x": 0.4957949704994623, "y": 0.3346814791361491 }, { "x": 0.4205733409638947, "y": 0.42969783147176105 }, { "x": 0.40488320073196366, "y": 0.4896906852722168 }, { "x": 0.5020971845163419, "y": 0.47675485610961915 } ] } ] } }, "status": "OK" }

จาก response ที่ได้

bounding_box จะเป็นค่าที่ AI model ไปจับหน้าในภาพได้ โดยจะมีค่า confidence คือ ความมั่นใจว่าเป็นหน้าคน
embedding จะ return มาเป็นค่า Vector เพื่อจะนำไปเทียบกับ Vector หาความใกล้เคียงกัน
landmarks จะเป็นจุดที่อยู่บนหน้า ประกอบไปด้วย ดวงตา, จมูก และ ปาก

Code สำหรับการเปรียบเทียบ Vector

Vector

จากตัวอย่างการเปรียบเทียบ Vector นั้นจะมีค่า อยู่ที่ 0.6513119868954528 สำหรับ ratio ที่เหมาะสมในการนำไปใช้สำหรับ Model type นี้คือมากกว่า 0.3 ขึ้นไป

ตัวอย่างภาพที่นำมาเปรียบเทียบ Image 1 Image 2

สำหรับ Open API ที่เปิดให้ใช้งาน จะเป็นตัว Staging Environment เชิญเล่นได้ตามอัธยาศัยครับ ถ้าสนใจที่จะใช้งานในระบบ Production Level ให้ติดต่อมาได้ที่ sale@datawow.io