BNK48 vs AI ชวนทดสอบความแม่นยำของ Deep Learning ว่าจะทายชื่อไอดอลได้เก่งแค่ไหน

สวัสดีพี่น้องแฟนบอยแฟนเกิร์ลสาวกวง BNK48 ทุกทั่นครับ
พอดีผมทดลองเขียน Web App โปรแกรมรู้จำใบหน้า (Facial Recognition) ให้มันจดจำและพยายามทายชื่อสมาชิกวง BNK48 ให้ได้
ผมลองทดสอบด้วยตัวเองแล้ว มันก็แม่นในระดับนึง ทายได้ถูกเยอะ มีทายผิดบ้าง
แต่เทสคนเดียว เลยไม่ได้เทสละเอียดกับสมาชิกทั้งวงแบบจริงจัง เลยอยากได้คนมาร่วมกันทดสอบ จะได้รู้ว่าต้องปรับปรุงตรงไหนบ้างน่ะครับ

Support:
โปรแกรมนี้ทำงานบนเว็บบราวเซอร์ หลักๆคือ Google Chrome บนพีซีหรือแมค สามารถทำงานได้
ถ้าเป็นสมาร์ทโฟน ใช้กับ Chorme บนเครื่องแอนดรอยด์ได้
ถ้าเป็นเครื่องไอโฟน จะใช้ได้แต่กับ input ที่เป็นภาพถ่ายครับ ใช้อินพุทจากกล้องแบบไลฟ์ไม่ได้
แล้วถ้าใช้สมาร์ทโฟนที่เก่าๆหน่อย มันจะทำงานไม่ได้ เพราะตัว Neural network มันต้องการซีพียูแรงๆหน่อย (เดี๋ยวจะอธิบายเพิ่ม)

ลิ้งของโปรแกรมก็ตามนี้ครับ
https://supachaic.github.io/bnk48-face-recognition/

พอเข้าไปแล้วให้กด Photo Input ตรงเมนูบาร์ด้านบน แล้วโปรแกรมมันจะโหลด Deep learning model ซักพัก อาจจะใช้เวลา 5 วินาที

ช่วงสาระมีอยู่จริง
Deep learning นี่คือกระบวนการเรียนรู้ของเครื่องจักรแบบนึง (machine learning) ซึ่งอาศัย deep neural network หรือเครือข่ายระบบประสาทจำลองที่ซ้อนกันหลายๆ ชั้นในการเรียนรู้จดจำสิ่งที่เราสอนให้มันจำ ตรงนี้คล้ายๆกับสมองคนเรา คือตอนแรกเราให้มันดูข้อมูลชุดหนึ่งก่อน (training dataset) แล้วให้มันพยายามเดาคำตอบหรือทายให้ถูก ช่วงแรกๆ มันจะยังโง่ๆ อยู่ ทายผิดเป็นส่วนใหญ่ แต่พอเรา train หรือสอนมันได้มากพอ มันจะเริ่มเก่งและทายเก่งขึ้นเรื่อยๆ เรียกกระบวนการนี้ว่าการ training model ครับ

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

ถ้าสังเกตตรงกรอบสีดำด้านล่าง จะมีปุ่ม Choose File ให้กดใส่ภาพใหม่เข้าไปได้ สมมติถ้าเรามีภาพไอดอลเก็บไว้ในเครื่อง ก็กดเลือกเปลี่ยนภาพ ให้โปรแกรมมันลองทายดูได้แบบนี้ครับ

จะสังเกตได้ว่าภาพหน้าตรงมันจะทายได้เก่งและแม่น แล้วถ้าเป็นภาพหมู่แบบนี้ก็จะมีลุ้นหน่อยว่าจะทายถูกรึเปล่า

นอกจากรูปที่เก็บในเครื่องแล้ว ยังใส่ URL ของรูปตรงช่องที่ให้ใส่ URL แล้วกด Upload
เช่นลองใส่ URL นี้ดูครับ
https://scontent-nrt1-1.xx.fbcdn.net/v/t1.0-9/32548606_957100937785328_5968077183455854592_n.jpg?_nc_cat=108&_nc_ht=scontent-nrt1-1.xx&oh=e7ed0cad8aade6b39e5df5d9f7bdf11d&oe=5C8D8BD7
ผลน่าจะออกมาแบบนี้

แต่ไม่ใช่ว่าทุก URL รูปจะใส่ได้หมด บางเว็บอาจจะไม่อนุญาตให้ดึงรูป ก็จะโหลดไม่ไปครับ
เท่าที่ผมเทสดู ถ้าเป็นลิ้งรูปจาก facebook ก็จะได้หมดไม่มีปัญหา แต่ต้อง copy image address มานะครับ

ปัญหาที่เจอ
เท่าที่ทดสอบแล้วเจอว่าทายผิดคือรูปที่ไอดอลเอียงหน้า เอียงคอ หันข้าง ทำหน้าแปลกๆ ใส่แว่น พวกนี้จะทายเพี้ยนครับ
เช่นถ้าใส่รูป URL นี้
https://scontent-nrt1-1.xx.fbcdn.net/v/t1.0-9/33104673_959850934176995_3509649851824472064_n.jpg?_nc_cat=105&_nc_ht=scontent-nrt1-1.xx&oh=7786a4c705a7bff09aa41837c2740b2f&oe=5CC08544

ผลคือทายผิดไปเลย แค่เอียงคอนิดเดียวเอง

Video Camera
คราวนี้ถ้าลองกดตรง Video Input ก็จะเข้าโหมดเปิดหน้ากล้องเพื่อทำ live video input ครับ

ถ้าทดสอบบน PC ต้องกดยอมให้กล้อง webcam ทำงานด้วย
ถ้าเป็นเครื่อง Android โปรแกรมมันจะไปเปิดกล้องหลังให้เอง
ถ้าเป็นไอโฟน ส่วนนี้จะทำงานไม่ได้ครับ เพราะระบบความปลอดภัยของไอโฟนมันไม่ยอมให้บราวเซอร์เปิดทำงานกล้อง (ผมลองหาวิธีอยู่นาน ยังไม่ได้ซะที ใครรู้วิธีช่วยแนะนำด้วยเถิด)

พอกล้องเริ่มทำงาน โปรแกรมก็จะโหลดโมเดลเหมือนเดิม ใช้เวลาซักพักประมาณ 5 วินาที
เสร็จแล้วถ้าเราส่องกล้องไปที่หน้าใคร โปรแกรมมันจะพยายาม detect หน้าคนทุกๆ 1.5 วินาที
ถ้าตรวจเจอหน้าแล้ว แต่ไม่รู้จัก โปรแกรมก็จะไม่ทายชื่อครับ แต่ถ้ามันเช็คแล้วคล้ายไอดอลคนไหน มันก็จะพยายามทายชื่อให้

ผมทดสอบด้วยพีซี ก็ทำงานได้โอเค เพราะซีพียูพอจะรันโมเดล Deep learning แบบต่อเนื่องได้
แต่พอใช้เครื่อง Android ทดสอบให้มันจับภาพหน้าไอดอลจากคลิปบน youtube ก็จะกระตุกๆ หน่อย
การ detect และ recognize ช้าถึงช้ามาก คิดว่าคงเป็นเพราะซีพียูมือถือมันรันต่อเนื่องได้ไม่ไหว เมมไม่พอ ฮ่าฮ่า

ผมไม่สามารถทดสอบกับไอดอลตัวจริงได้ เพราะไม่ได้ไปที่ตู้ปลา ใครไปก็ฝากทดสอบหน่อยนะครับ หัวเราะ

อื่นๆ เกี่ยวกับการพัฒนา
User Interface (UI) ของโปรแกรมนี้ใช้ React เป็นตัวหลัก และมีแต่ front-end code ล้วนๆ ไม่มี back-end code ใดๆ ทั้งสิ้นครับ
ส่วนของ Deep learning model ใช้ไลบรารี face-api.js ซึ่งเป็น API ที่เขียนอยู่บน TensorFlow.js อีกที
ทำให้การทำงานของ Neural networks ทั้งหมดรันบนบราวเซอร์ล้วนๆ โดยไม่ต้องมี server-side program แต่อย่างใด

ผมแชร์โค้ดไว้เผื่อใครอยากเอาไปพัฒนาต่อเป็นแนวอื่นก็ตามสบายเลยครับ
https://github.com/supachaic/bnk48-face-recognition

ถ้าใครอยากอ่านวิธีพัฒนาสไตล์ tutorial เชิญที่ Medium ของผมครับ มีอธิบายหลักการทำงานแบบละเอียดอีกหน่อย
https://medium.com/@supachaic/facial-recognition-spa-for-bnk48-idol-group-using-react-and-face-api-js-ad62b43ec5b6

จบละครับ ใครทดสอบแล้วผลเป็นยังไง เจอบั๊กเจออะไร ก็บอกได้นะครับ จะเก็บเป็นข้อมูลไปปรับปรุงต่อไป
แสดงความคิดเห็น
โปรดศึกษาและยอมรับนโยบายข้อมูลส่วนบุคคลก่อนเริ่มใช้งาน อ่านเพิ่มเติมได้ที่นี่