เขียน Python สร้าง API ง่าย ๆ ด้วย FastAPI ให้บริการ Face Recognition ทดลองด้วยภาพสาว ๆ Blackpink 😆

Karn Yongsiriwit
4 min readJan 29, 2021

--

Python, Face Recognition, FastAPI and Blackpink

บทความนี้จะมาแนะนำการเขียน Python โดยใช้ FastAPI เพื่อให้บริการรู้จำใบหน้า (Face Recognition) กันนะครับ หรืออาจจะเรียกแบบคูล ๆ ได้ว่าเป็น Machine Learning as a Service (MLaas) เพียงแค่มีอินเทอร์เน็ตก็สามารถที่จะส่งรูปผ่าน URL ที่กำหนดเพื่อให้ได้ผลตอบกลับว่าในรูปที่ส่งมามีใบหน้าของใครอยู่บ้าง (แต่ได้เฉพาะที่มีใบหน้าและชื่อที่ลงทะเบียนไว้อยู่ก่อนหน้านั้นนะครับ 😅)

ปิดตา 1 ข้างก็รู้ว่าเป็น lisa 😆

สามารถดู clip และทำตามได้เช่นเดียวกันนะครับ เนื้อหาจะเหมือนในบทความนี้ครับ

Code ทั้งหมดที่ใช้ในบทความนี้สามารถดาวน์โหลดได้จาก GitHub ของผมเลยครับ

ขอขอบคุณบทความของ Thannob ที่แนะนำเรื่อง FastAPI ด้วยนะครับ ใครอยากรู้วิธีการใช้งานเบื้องต้น ไปอ่านได้เลยนะครับ

Software Installation

สำหรับมือใหม่เลยนะครับ เริ่มต้นให้ติดตั้ง software ที่จำเป็นก่อนดังนี้ครับ

  • Miniconda เครื่องมือในการจัดการ package ต่าง ๆ ของ Python โดยจะเหมาะสำหรับงานที่เกี่ยวกับวิทยาการข้อมูล (Data Scientist) ดาวน์โหลดและติดตั้งได้จาก https://docs.conda.io/en/latest/miniconda.html

*ระหว่างติดตั้ง Miniconda อย่าลืมเลือก Add Miniconda to my PATH enviornment vairable ด้วยนะครับ ตามรูปด้านล่าง จะได้เรียกคำสั่ง conda ผ่าน command prompt ได้

  • สำหรับ Windows นะครับ ให้ติดตั้ง Desktop development with C++ ที่มีให้เลือกจากตัวติดตั้งของ Visual Studio นะครับ จาก https://visualstudio.microsoft.com/ นะครับ ดูตามรูปได้เลยครับ
  • Visual Studio Code เครื่องมือสำหรับเขียน Python ครับ ใช้งานค่อนข้างง่าย และมีตัว plugin เสริมมากมาย ผู้เขียนแนะนำเลยครับ ดาวน์โหลดและติดตั้งได้จาก https://code.visualstudio.com/

สร้างสภาพแวดล้อมสำหรับ Python

เราสามารถใช้ conda ในการสร้างสภาพแวดล้อมสำหรับ Python ได้โดยใช้คำสั่งด้านล่างนะครับ โดยติดตั้ง package เพิ่มเติมๆหลัก ๆ คือ

  • face_recognition แบบจำลองการเรียนรู้ของเครื่อง (Machine Learning Model) สำหรับใช้ในการทำ Face Recognition สามารถอ่านรายละเอียดเพิ่มเติมได้ที่ https://github.com/ageitgey/face_recognition
  • fastapi สำหรับใช้ในการทำ API (https://fastapi.tiangolo.com/)
  • uvicorn สำหรับใช้ทำ Web Server Gateway Interface (WSGI) ใช้ในการรัน fastapi ครับ ดูข้อมูลเพิ่มเติมได้ที่ https://www.uvicorn.org/
  • pillow สำหรับใช้ในการประมวลผลภาพ https://pillow.readthedocs.io/
$ conda create -n face-api-venv
$ conda activate face-api-venv
$ conda install -c conda-forge face_recognition fastapi uvicorn python-multipart pillow

ลงทะเบียนชื่อและใบหน้าด้วย face_recognition

ภาพสาว ๆ Blackpink ที่ผมใช้ลงทะเบียนในตัวอย่างนี้นะครับ 😆

Code Python ด้านล่างใช้สำหรับการลงทะเบียนชื่อและภาพใบหน้าด้วย face_recognition โดยบรรทัดที่ 8–11 เป็นเชื่อและภาพที่ลงทะเบียนนะครับ โดยภาพตัวอย่างสามารถดาวน์โหลดได้จาก GitHub ของผมเลยครับ https://github.com/KarnYong/face-recognition-fastapi-docker

จากนั้นทำการ run code ด้านบน ได้ผลลัพธ์เป็นไฟล์ faces.p ที่จะเป็นข้อมูลชื่อและใบหน้าที่ลงทะเบียนไว้ สำหรับใช้ในการทำ Face Recognition ต่อไป

$ python face-model.py

ทดสอบการทำ Face Recognition จากข้อมูลที่ลงทะเบียน

Code Python ด้านล่างใช้สำหรับการนำรูปที่อ่านขึ้นมา (บรรทัดที่ 10) มาเปรียบเทียบกับใบหน้าที่ลงทะเบียนไว้ในไฟล์ faces.p และทำการเปรียบเทียบว่าในรูปที่อ่านขึ้นมามีใบหน้าที่ตรงกับข้อมูลที่ลงทะเบียนไว้หรือไม่ และทำการแสดงผลลัพธ์ออกมาเป็นทั้งข้อความและรูปภาพ

$ python face-test.py
['Jisoo', 'Jennie', 'Rose', 'Lisa']

สามารถลองทดสอบกับภาพอื่น ๆ ใน folder test ได้เลย มีทั้งภาพเดี่ยวและภาพหมู่ ผลลัพธ์ถูกต้องพอสมควร 😁

สร้าง API ด้วย FastAPI สำหรับทำ Face Recognition จากข้อมูลใบหน้าที่ลงทะเบียนไว้

Code Python ด้านล่างเป็นการสร้าง API ด้วย FastAPI สำหรับทำ Face Recognition จากข้อมูลใบหน้าที่ลงทะเบียนไว้ที่ไฟล์ faces.p

ใช้ request ในรูป POST สำหรับ path ของ URL /faces_recognition/ (บรรทัดที่ 19) โดยรับข้อมูลเป็นการอัพโหลดไฟล์ภาพ image_upload(บรรทัดที่ 20)

ทำการสั่ง start API ด้วยการใช้คำสั่ง uvicorn ด้านล่าง โดยกำหนด port เป็น 5000

$ conda activate face-api-venv
$ uvicorn face-api:app --port 5000 --reload

สามารถใช้ Terminal ใน Visual Studio Code ในการเรียกคำสั่งด้านบนได้ดังภาพ โดยผลลัพธ์ที่สำเร็จจะแสดงเป็น URL สำหรับเข้าเรียกใช้ API

สิ่งหนึ่งที่ FastAPI อำนวยความสะดวกให้ก็คือการทดสอบ API ผ่านหน้าเว็บ

เปิด Web Browser ใส่ URL http://127.0.0.1:5000/docs เพื่อทดลองใช้ API โดยกดปุ่ม POST ของ API URL /faces_recognition/

กดปุ่ม Try it out

ที่ image_upload ซึ่งเป็น parameter ที่กำหนดไว้ใน API เพื่อ upload file ให้กดปุ่ม Choose File

เลือกรูปของสาว Blackpink 😄 ที่ต้องการจากนั้นกดปุ่ม Execute

ขอเลือกเมนหน่อย 555 😆

ผลลัพธ์ที่ได้จะเป็นชื่อที่เกิดจากการทำ Face Recognition ด้วยข้อมูลชื่อและรูปของสาว ๆ Blackpink ที่ลงทะเบียนไว้

ผลลัพธ์ที่ได้เป็นน้อง Lisa 😄

หรือจะทดลองผ่าน POSTMAN ก็ได้ โดยใช้เป็น POST http://127.0.0.1:5000/faces_recognition โดยใน BODY ให้มี key เป็น image_upload และ browse เลือกรูปภาพที่อยู่ในเครื่อง ดังภาพด้านล่าง

จบแล้วครับ อาจจะไม่ได้อธิบายละเอียดมากนัก ถ้าใครถ้าใครติดปัญหาอะไรสามารถทักมาส่วนตัวได้นะครับ บทความหน้าจะมาพูดถึงการใช้ Docker ร่วมกับ FastAPI นะครับ ขอบคุณที่อ่านจนจบครับ 😃

ขอบคุณภาพสวย ๆ จาก Blackpink Official Facebook

บทความโดย อ.ดร.กานต์ ยงศิริวิทย์
วิทยาลัยนวัตกรรมดิจิทัลเทคโนโลยี มหาวิทยาลัยรังสิต

--

--

Karn Yongsiriwit
Karn Yongsiriwit

Written by Karn Yongsiriwit

Lecturer at Digital Innovation Technology, Rangsit University

No responses yet