Explore Azure Cognitive Service

h4tl2
AltoTech
Published in
4 min readAug 24, 2018

สืบเนื่องจากทางสัปดาห์ที่ผ่านมาผมได้ไปสอนคอร์ส Basic AI ที่ Suranaree University of Technology มาและได้สอนตั้งแต่ definition AI จนถึงการ implement ด้วยท่าเทคนิคต่างๆทั้งใช้ machine learning และ deep learning ซึ่ง blog เกี่ยวกับ ML และ DL อย่างลึกๆจะตามมาครับ

แต่นอกจากในคอร์สจะสอน implement ด้วยตัวเองแล้ว ยังสอนให้ใช้ service ต่างๆมากมายเพื่อความรวดเร็วในการ develop product โดยในที่นี้จะขอหยิบของ microsoft หรือก็คือ Azure Cognitive Service มาลองเล่นกันดูเพื่อประโยชน์

ใน Cognitive Service ของ Microsoft นั้นค่อนข้างจะมี service มากมายให้ใช้กันเลยทีเดียว เขาแบ่งออกเป็น 5 หมวดใหญ่ได้แก่ Vision, Speech, Language, Knowledge, Search เราจะมาลองเล่นในส่วนของ Vision กับ Speech กัน

Vision API

vision API

Computer vision เห็นได้จากในรูปด้านบนว่า มันสามารถทำได้มากมายในที่นี้เราจะมาลองเล่นกับ Image Classification ดูคือทำ tagging image รูปภาพ แต่นอกเหนือจากนี้มันยังสามารถจับ text จากรูปภาพและ จำแนกรูปภาพสถานที่ที่มีชื่อเสียงหรือบุคคลโด่งดังจากรูปได้ด้วย

ในที่นี้เราจะใช้ Postman เพื่อทำการยิง API กันดู สามารถ download ได้ ที่นี่

https://azure.microsoft.com/en-us/services/cognitive-services/

  1. เข้าไปที่ลิงค์ข้างบน ละกด Try Cognitive Service for free
  2. เลือกที่ Vision API tab ละกด Get API Key
  3. หลังจากทำการ ลงทะเบียนเรียบร้อย เราควรจะได้หน้าแบบนี้

จากนั้นให้เปิด Postman ขึ้นมา เราจะมาลองทดสอบกันดูว่า service ที่ microsoft เปิดให้เราลองใช้นั้น แม่นยำละมีประสิทธิภาพพอที่จะมาใช้งานจริงหรือป่าว

โดยตัวแรกที่จะลองกันเลยคือ tagging image ใส่ endpoint เป็น

https://westcentralus.api.cognitive.microsoft.com/vision/v2.0/tag

และจากนั้น ให้เลือก body เป็น application/json และใส่ url ของภาพที่เราจะส่งไปในลักษณะนี้

{
"url": "paste_your_image_address_here"
}

ส่วนของ header นั้นให้เซ็ต Ocp-Apim-Subscription-Key เป็น key ที่ azure generate ให้ในรูปด้านบน

ส่วนรูปที่ผมจะลองเอามายิง คือรูปนี้ครับ

https://3c1703fe8d.site.internapcdn.net/newman/gfx/news/2018/europeslostf.jpg

ละนี่ก็คือ response ที่ตอบกลับมา

response from cv service

ซึ่งก็ถือว่าดีมากทีเดียวสำหรับรูปที่ค่อนข้างที่จะตรงไปตรงมาแบบนี้ ต่อมาเราจะมาลองกับสิ่งที่ค่อนข้างจะพบเห็นได้บ่อยและเราได้ใช้กันเยอะคือ Face API

Face API

มีทั้ง Face Detection, Face Verification, Face Identity และอื่นๆให้เล่น

ในที่นี้ผมจะลองเล่นกับ Face Detection และ Verification ว่าประสิทธิภาพออกมาดีจนให้เราสามารถไปใช้กับ Product อื่นๆของเราเลยหรือไม่

วิธีการยิงนั้นเหมือนกันเลยแค่เปลี่ยน endpoint เป็น

https://westcentralus.api.cognitive.microsoft.com/face/v1.0/detect?returnFaceAttributes=age,gender,headPose,smile,facialHair,glasses,emotion,hair,makeup,occlusion,accessories,blur,exposure,noise

โดยสามารถเลือก attribute ของใบหน้าที่จะคืนมาด้วยได้จากการเลือก params ที่เราจะส่งไป อย่างข้างบนคือ ผมเลือกให้คืนทั้งหมดที่ตัว azure มีให้เลือกมาเลย

โดยรูปที่ส่งไปคือ CEO ของ Altotech เราเอง ( ไปตามอ่าน medium ของเขาได้เลยครับ บทความดีๆเพียบ )

https://medium.com/@kwarodom

ละนี่คือ response ที่ตอบกลับมา

[
{
"faceId": "433e5400-209b-4121-b8c3-fe3264d96101",
"faceRectangle": {
"top": 57,
"left": 141,
"width": 94,
"height": 94
},
"faceAttributes": {
"smile": 1,
"headPose": {
"pitch": 0,
"roll": -5.2,
"yaw": -13.5
},
"gender": "male",
"age": 25,
"facialHair": {
"moustache": 0.1,
"beard": 0.1,
"sideburns": 0.1
},
"glasses": "NoGlasses",
"emotion": {
"anger": 0,
"contempt": 0,
"disgust": 0,
"fear": 0,
"happiness": 1,
"neutral": 0,
"sadness": 0,
"surprise": 0
},
"blur": {
"blurLevel": "low",
"value": 0.18
},
"exposure": {
"exposureLevel": "goodExposure",
"value": 0.65
},
"noise": {
"noiseLevel": "low",
"value": 0
},
"makeup": {
"eyeMakeup": false,
"lipMakeup": false
},
"accessories": [],
"occlusion": {
"foreheadOccluded": false,
"eyeOccluded": false,
"mouthOccluded": false
},
"hair": {
"bald": 0.05,
"invisible": false,
"hairColor": [
{
"color": "brown",
"confidence": 0.99
},
{
"color": "black",
"confidence": 0.98
},
{
"color": "blond",
"confidence": 0.13
},
{
"color": "red",
"confidence": 0.11
},
{
"color": "other",
"confidence": 0.09
},
{
"color": "gray",
"confidence": 0.09
}
]
}
}
}
]
  • faceId คือที่เราจะนำไปใช้ใน service อื่นๆเช่น face verification
  • face attributes จะคืนค่าที่เราขอไป ซึ่งมีความแม่นยำมากๆเลยทีเดียว อย่างเช่น smile, emotion, glasses ที่ผมลองทดสอบดูกับหลายๆรูปก็ถูกทั้งหมดเลยทีเดียว

ต่อมาคือ Face Verification โดยลักษณะการยิงนั้น เราต้องยิง service face detection เพื่อเอา faceId ก่อนจากนั้นจึงส่ง faceId ไปคู่กันเพื่อที่จะเปรียบเทียบ ซึ่ง Azure จะคืนค่า true/false พร้อม confidence ที่มันเชื่อกลับมา

request
response

Text Analytics

เราได้เห็นประสิทธิภาพของ Azure Cognitive กับทางด้านรูปภาพไปแล้ว ทีนี้เราจะมาลองทดสอบมัน กับการวิเคราห์ข้อความดูบ้าง ในที่นี้ผมยกตัวอย่างปัญหาคลาสลิกๆ อย่าง sentimental analysis มา เพราะน่าจะเห็นชัดเจนที่สุด โดยส่วนตัวผมได้ลองเล่นดูแล้ว ก็แม่นยำกันพอสมควร แต่ไม่ได้ capture รูปมา ใครสนใจทดสอบเพิ่มเติมก็ลองดูครับ

ขั้นแรกเราต้องไปเปิด Text Analytics API service ก่อน เพื่อเอา key ที่จะมา verify ตอนยิง api

ในส่วนของ header ให้ set เหมือนกับ Face API เลยเพียงแต่ของ body ให้เปลี่ยนเป็นลักษณะแบบนี้

{'documents' : 
[
{'id': '1', 'language': 'en', 'text': 'I had a wonderful experience! The rooms were wonderful and the staff was helpful.'},
{'id': '2', 'language': 'en', 'text': 'I had a terrible time at the hotel. The staff was rude and the food was awful.'},
{'id': '3', 'language': 'es', 'text': 'Los caminos que llevan hasta Monte Rainier son espectaculares y hermosos.'},
{'id': '4', 'language': 'es', 'text': 'La carretera estaba atascada. Había mucho tráfico el día de ayer.'}
]}

และ response จะคืนกลับมาเป็น score โดยถ้าใกล้ 1 มากคือ text นั้นมีแนวโน้มจะเป็น positive ส่วนถ้าใกล้ 0 จะเป็น negative

แต่ว่าตัว Azure Cognitive ยังไม่มีภาษาไทยรองรับนะครับ คาดว่าในอนาคตคงมี ส่วนภาษาที่รองรับแล้วตอนนี้ สามารถดูได้จาก ที่นี่ เลยครับ

Conclusion

ถ้าหากว่าเราต้องการความรวดเร็วและแม่นยำในการขึ้น product ผมมองว่าตัว azure นี่ก็มี service พื้นฐานๆที่ดีให้เราลองเล่นเยอะแยะเลยทีเดียว แต่ข้อเสียคือ face detection นั้นยังไม่ค่อยตรงกะชาวเอเชียสักเท่าไรในบาง attribute เช่น age ซึ่งคาดว่าน่าจะมาจากตัว data ที่ใช้ train ด้วยส่วนนึงอาจเป็นชาวยุโรป( ไม่แน่ใจนะครับแค่คาดเดา ) ส่วน text ก็ยังไม่รองรับภาษาไทย

--

--