สวัสดีพี่น้องแฟนบอยแฟนเกิร์ลสาวกวง 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
จบละครับ ใครทดสอบแล้วผลเป็นยังไง เจอบั๊กเจออะไร ก็บอกได้นะครับ จะเก็บเป็นข้อมูลไปปรับปรุงต่อไป
BNK48 vs AI ชวนทดสอบความแม่นยำของ Deep Learning ว่าจะทายชื่อไอดอลได้เก่งแค่ไหน
พอดีผมทดลองเขียน 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
จบละครับ ใครทดสอบแล้วผลเป็นยังไง เจอบั๊กเจออะไร ก็บอกได้นะครับ จะเก็บเป็นข้อมูลไปปรับปรุงต่อไป