ทำ Face recognition ด้วย M5Stick-V

Apirak Sang-ngenchai
Chiang Mai Maker Club
4 min readDec 25, 2019

Face recognition with M5Stick-V board (K210)

เนื้อหาภาคต่อจากบทความ ทำ Face Detection ง่าย ๆ ด้วย Sipeed Maix board

M5Stick-V บอร์ดพัฒนา AI ที่มาพร้อมกับกล้อง OV7740 ความเร็ว 60 fps แบบ VGA(640x480 pixels) มาพร้อมกับจอแสดงผลสี TFT ใช้ชิปเบอร์ ST7789 ขนาด 135x240 pixels นอกจากนี้ ภายในบอร์ดยังมีเซนเซอร์ built-in อย่างมากมาย ทั้ง MPU6886 (3-axis Gyro + 3-axis accelerometer), Power Management AXP192, PCM: MAX98357 และแน่นอนว่าด้วยขุมพลังของ Kendryte K210 จะทำให้สามารถนำไปงานได้หลากหลายไม่ว่าจะเป็น Object detection /classification Face detection / recognition ซึ่งจะได้ทดลองทำกันในบทความนี้

ทดลองโปรแกรม

1) อัพโหลด Firmware ให้กับบอร์ดโดยเปิดโปรแกรม kFlash GUI ทำการเลือก Board M5StickV และ Port ที่เชื่อมต่อให้เรียบร้อย จากนั้นเลือกไฟล์ Firmware (บทความนี้จะใช้ M5StickV_Firmware_1022_beta.kfpka) และทำการ Download ลงบอร์ดให้เรียบร้อย

2) เปิดโปรแกรม MaixPy IDE

3) ดาวน์โหลด Example code & Model

4) เปิดโปรแกรมตัวอย่างใน Folder /Example Code/m5stickV_find_face.py

5) นำ Model ใส่ SD Card (บทความก่อนหน้าจะโหลดเข้า Flash แต่บทความนี้จะใช้ SD Card แทนทำให้ใส่โมเดลที่ใหญ่ขึ้นได้นะครับ) โดยสามารถใช้โมเดลตัวอย่างใน Folder /Model/Demo_Model

6) ทำการเชื่อมต่อกับบอร์ด โดยกดที่รูปโซ่มุมล่างซ้าย

7) เมื่อเชื่อมต่อได้แล้ว สีของรูปโซ่จะเปลี่ยนเป็นสีแดง และจะปรากฏปุ่มเล่น สีเขียว เพื่อกดอัพโหลดโปรแกรมไปยังบอร์ด

8) เมื่อกดปุ่มเล่น โปรแกรมจะทำการรันบนบอร์ด และผลลัพท์ที่ได้ก็คือ Face Recognition นั่นเอง โดยให้เปิดรูปใน Folder /Model/Demo_Model/imageTest

9) เมื่อเปิด Serial Terminal จะปรากฏค่าที่ return มา ซึ่งประกอบไปด้วย
- x, y ตำแหน่งที่ตรวจเจอใบหน้า
- width, height ขนาดของกรอบที่วาด
- value ค่าความแม่นยำของใบหน้าที่ตรวจเจอ
- classid คลาสที่เจอ โมเดลตัวอย่างมีแค่ 2 คลาสคือ 0:man และ 1:tong
- index ลำดับของใบหน้าที่พบ
- objnum จำนวนของใบหน้าที่พบ

10) จากข้อมูลที่ return ออกมา จะได้ตำแหน่งของใบหน้าที่ตรวจจับเจอ ดังนั้นทำให้บอร์ดสามารถตรวจจับใบหน้าเจอ และแยกระหว่างบุคคล 2 คนได้ (2 class) โดยผู้พัฒนาสามารถนำไปต่อยอดเป็นระบบลงชื่อเข้างาน เปิดปิดประตู หรือใช้ในการระบุตัวตนได้อีกด้วย

สร้างโมเดลด้วยตนเอง

1) รวมรวบรูปภาพเก็บไว้ใน Folder /Train_Model/data/images เพื่อใช้สำหรับสร้างโมเดล โดยรูปที่ใช้จะเป็นรูปของบุคคล 2 คน ซึ่งจะแบ่งเป็น 2 คลาส คือ man และ tong โดยโมเดลตัวอย่างที่ใช้ จะสร้างโมเดลด้วยรูป 100 รูป / คน

2) เปิดโปรแกรม LabelImg เพื่อทำการสร้างเฉลยสำหรับการนำไปสร้างโมเดล

3) กด Open Dir และเลือก Folder /Train_Model/data/images จากนั้นเลือก Change Save Dir ไปที่ Folder /Train_Model/data/annotations

4) กด W ที่คีย์บอร์ด หรือคลิก Create\nRectBox เพื่อลากกรอบสี่เหลี่ยมเฉลยเฉย ๆ ใบหน้าที่ต้องการ และตั้งชื่อให้ตรงกับคลาสที่จะนำไปสร้างโมเดล

#กรณีมี 2 คนในรูปเดียวกัน สามารถเพื่อตั้งชื่อทั้ง 2 คลาส

5) ไฟล์เฉลยที่ได้ทั้งหมด จะเป็นไฟล์นามสกุล .xml ใน Folder /Train_Model/data/annotations

6) แก้ไขไฟล์ Config.json ใน Folder /Train_Model/data แก้ไขโปรแกรมดังนี้
บรรทัดที่ 6 : labels ทำการเพิ่มคลาสที่ต้องการสร้างโมเดล
บรรทัดที่ 17 : train_image_folder เพิ่ม path ของไฟล์รูปที่จะนำไปสร้างโมเดล
บรรทัดที่ 18 : train_annot_folder เพิ่ม path ของไฟล์เฉลยที่จะนำไปสร้างโมเดล

7) ทำการ Setup envelopment ตาม requirements.txt โดยใช้ Anaconda navigator ในการช่วยติดตั้ง ซึ่งขั้นตอนนี้จะเป็นการเตรียมเครื่องคอมพิวเตอร์เพื่อให้สามารถ Train model ได้

8) เปิด Terminal ของ envelopment ที่สร้างไว้ จากนั้นสั่งสร้างโมเดล

$ python train.py -c data/config.json

9) เมื่อสร้างโมเดลเสร็จ จะปรากฏไฟล์ model.h5 และ model.tflite

แปลงโมเดล tflite เป็น kmodel

1) เปิด Terminal เข้าไปที่ Folder /Model/Convert_2_kmodel/Maix_Toolbox (โปรแกรมที่เตรียมไว้ใช้สำหรับเครื่อง Windows สำหรับ OS อื่นให้โหลดโปรแกรม nncase ใหม่)

2) แปลงโมเดลด้วยคำสั่ง

./tflite2kmodel.sh model.tflite

3) จะได้ไฟล์นามสกุล .kmodel เพื่อนำไปใช้งานต่อไป

วิดีโอตัวอย่างการใช้งาน

Chiang Mai Maker Club
81/21–25 Prasing, Mueang, Chaing Mai, Thailand. 50200
FB: Chaing Mai Maker Club

--

--

Apirak Sang-ngenchai
Chiang Mai Maker Club

Sometime, We need to take a step away from certain things to reclaim your own self .