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

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

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

--

--

Lecturer at Digital Innovation Technology, Rangsit University

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store
Karn Yongsiriwit

Karn Yongsiriwit

474 Followers

Lecturer at Digital Innovation Technology, Rangsit University