Face RecognitionMachine LearningPython

Review: บริการ AI for Thai มาทดสอบระบบการระบุตำแหน่งบุคคลในภาพ (Person Detection) ด้วย Python กัน

เรามาใช้ Services: AI for Thai ของ Nectec กันหน่อยทำงานร่วมกับ Python เพื่อตรวจหาตำแหน่งของบุคคลในภาพถ่ายด้วยระบบ Person Detection

เรามาใช้ Services: AI for Thai ของ Nectec กันหน่อยทำงานร่วมกับ Python เพื่อตรวจหาตำแหน่งของบุคคลในภาพถ่ายด้วยระบบ Person Detection

หลายเดือนก่อนผมกับนักศึกษามีโอกาสไปช่วยงานโครงการแพลตฟอร์มบริการเทคโนโลยีปัญญาประดิษฐ์
ภายใต้แนวคิด “AI สัญชาติไทย” เพื่อตอบโจทย์ความต้องการใช้งานในประเทศไทย ร่วมกับ Nectec ก็มีเอาแพลตฟอร์มมาเล่นบ้างช่วยปรับบ้างตามภาษา พอดีช่วงนี้ก็วิ่งเข้าไปช่วยงาน NECTEC อยู่เยอะพอประมาณ ก็เลยขอรีวิวทำ Tutorial ของเจ้า Services ของเค้าหน่อยอย่าง AI for Thai ประเดิมคือระบบ Person Detection ที่ตรวจจับว่า Person หรือบุคคลที่ปรากฏในภาพถ่ายนั้นอยู่ตำแหน่งไหนของรูปภาพ

ก่อนจะใช้งานจำเป็นต้องลงทะเบียนผู้ใช้งานผ่านเว็บไซต์ https://aiforthai.in.th/index.php#home 

เมื่อเข้าระบบเสร็จแล้วเราจะเห็นหน้า Dashboard ให้เราไปที่เมนู Developer

ส่วนที่เราจะใช้งานคือ Person & Activity นั่นเอง ไปดูที่: https://aiforthai.in.th/aiplatform/#/person

Document ของเค้าจะบอกเราชัดเจนอยู่แล้วว่าการใช้งานนั้นทำยังไง (หลักๆ ผมจะไปที่ Python ก่อน) ซึ่งเจ้า Person Detection นั้นคือ ระบบระบุตำแหน่งบุคคลในภาพ โดยอาจเป็นภาพของบุคคลเพียงคนเดียวหรือภาพของกลุ่มบุคคลก็ได้ ตัวอย่างก็ตามภาพข้างล่าง:

ภาพจาก https://docs.openvinotoolkit.org/latest/_models_intel_person_detection_asl_0001_description_person_detection_asl_0001.html
ภาพจาก https://docs.openvinotoolkit.org/latest/_models_intel_person_detection_asl_0001_description_person_detection_asl_0001.html

ระบบ Ai for Thai จะมี API Key ให้เรา Request Protocol เพื่อเรียกใช้งานซึ่งการ Response และ Request จะมี Policy ที่จำกัดอยู่ให้ศึกษาข้อมูลในเว็บไซต์ให้ดีก่อน

ส่วน Header / Parameter นั้นก็จะประกอบไปด้วย:

  • src_img : ภาพที่จะใช้ค้นหาภาพบุคคลในรูปจะรองรับเฉพาะไฟล์สกุล Jpg, jpeg
  • json_export : แสดงผลลัพธ์ในรูปแบบ JSON (true/false)
  • img_export : URL สำหรับการดาวน์โหลดรูปภาพ (true/false)

งั้นเราลองเอาภาพตัวเองเช่นเดิมมาใช้ดู

banyapon.jpg
banyapon.jpg

ทำการสร้างไฟล์ humandetect_aiforthai.py ขึ้นมา หลังจากนั้นเอา Code ตัวอย่างขอเขามา run ดูเลย

import requests
 
url = "https://api.aiforthai.in.th/person/human_detect/"
 
files = {'src_img':open('banyapon.jpg', 'rb')}
 
data = {'json_export':'true','img_export':'true'}
 
headers = {
    'Apikey': "n0Ju2NMISMrBk9F1jCaNAPuZXdxWfVOi"
}
 
response = requests.post(url, files=files, headers=headers, data=data)
 
print(response.json())

ผลลัพธ์มันจะ Return มาดังนี้:

จะอยู่ในรูปแบบของ JSON Arrays ตามจำนวนคนที่พบในรูปภาพจะมีองค์ประกอบดังนี้

    • json_data : ข้อมูลในรูปแบบ JSON (ถ้าเลือก)
    •  object: person (ชนิดของ object)
    • x0: ตำแหน่งมุมซ้ายบนของกรอบสี่เหลี่ยมรอบตัวคน ในแนวแกน x
    • y0: ตำแหน่งมุมซ้ายบนของกรอบสี่เหลี่ยมรอบตัวคน ในแนวแกน y
    • x1: ตำแหน่งมุมขวาล่างของกรอบสี่เหลี่ยมรอบตัวคน ในแนวแกน x
    • y1: ตำแหน่งมุมขวาล่างของกรอบสี่เหลี่ยมรอบตัวคน ในแนวแกน y

ทดสอบดูสิ

โอเคมัน Return เป็น JSON มาให้ตามที่บอก ดังนั้นเราเอา matplotlib และ numpy มาช่วยตีตารางดีกว่า:

ประกาศตัวแปรเพิ่มคือ:

import numpy as np
import json
import matplotlib.pyplot as plot
import matplotlib.patches as patches

แทรกคำสั่งต่อไปนี้ในส่วนของการเรียก API จาก code ตัวอย่างของ NECTEC

from PIL import Image
images = np.array(Image.open('banyapon.jpg'), dtype=np.uint8)

แก้ไขส่วนของ response ดึงค่ามา แสดง print ให้เป็นดังนี้:

response = requests.post(url, files=files, headers=headers, data=data)
data = response.json()
for item in data['json_data']:
    _object = (item['object'])
    left = (item['x0'])
    top = (item['y0'])
    right = (item['x1'])
    bottom = (item['y1'])

    figure, get_axis = plot.subplots(1)
    get_axis.imshow(images)
    rect = patches.Rectangle((left, top), right, bottom, linewidth=1,edgecolor='g', facecolor='none')
    get_axis.add_patch(rect)
    plot.show()

ตัวอย่างคือผมเอา JSON Parser ไปสนเอาค่าตัวแปรพิกัดของคนค่า x0,y0,x1,y1 มาเพื่อทำการวาดตารางด้วย matplotlib ในคำสั่ง:

figure, get_axis = plot.subplots(1)
get_axis.imshow(images)
rect = patches.Rectangle((left, top), right, bottom, linewidth=1,edgecolor='g', facecolor='none')
get_axis.add_patch(rect)
plot.show()

Code ไฟล์ Python ของเราจะเป็นดังนี้ครับ:

import requests
import numpy as np
import json
import matplotlib.pyplot as plot
import matplotlib.patches as patches

from PIL import Image
url = "https://api.aiforthai.in.th/person/human_detect/"
images = np.array(Image.open('banyapon.jpg'), dtype=np.uint8)
files = {'src_img': open('banyapon.jpg', 'rb')}

data = {'json_export': 'true', 'img_export': 'true'}

headers = {
    'Apikey': "<<ไป Copy มาเองนะ>>"
}

response = requests.post(url, files=files, headers=headers, data=data)
data = response.json()
for item in data['json_data']:
    _object = (item['object'])
    left = (item['x0'])
    top = (item['y0'])
    right = (item['x1'])
    bottom = (item['y1'])

    figure, get_axis = plot.subplots(1)
    get_axis.imshow(images)
    rect = patches.Rectangle((left, top), right, bottom, linewidth=1,edgecolor='g', facecolor='none')
    get_axis.add_patch(rect)
    plot.show()

ทดสอบ Run ผ่าน Visual Studio Code ดูจะได้ผลลัพธ์ดังนี้:

ทดสอบจำนวนคนหลายๆ คนมันจะ วนลูป Detect ทีละคนนะ ขี้เกียจแก้ Code ดังนั้นก็ทดสอบกันดู

จะเห็นว่า Ai for Thai จะมีเรื่องเด่นอยู่คือ มันเร็ว แต่ส่วนของ Person Detection นั้นยังต้องหา อัลกอริทึมไปคำนวณประมวลผลให้เสถียรอีกนิด (ผิดเอง) แต่ถามว่าใช้ง่ายไหม ง่ายมากครับ แนะนำให้ลองไปใช้งานกันดู AI สำหรับคนไทย

Asst. Prof. Banyapon Poolsawas

อาจารย์ประจำสาขาวิชาการออกแบบเชิงโต้ตอบ และการพัฒนาเกม วิทยาลัยครีเอทีฟดีไซน์ & เอ็นเตอร์เทนเมนต์เทคโนโลยี มหาวิทยาลัยธุรกิจบัณฑิตย์ ผู้ก่อตั้ง บริษัท Daydev Co., Ltd, (เดย์เดฟ จำกัด)

Related Articles

Back to top button

Adblock Detected

เราตรวจพบว่าคุณใช้ Adblock บนบราวเซอร์ของคุณ,กรุณาปิดระบบ Adblock ก่อนเข้าอ่าน Content ของเรานะครับ, ถือว่าช่วยเหลือกัน