เทคโนโลยีปัญญาประดิษฐ์ หรือคอมพิวเตอร์เรียนรู้ด้วยตัวเอง (machine learning) เคยเป็นเทคโนโลยีที่คนทั่วไปเข้าถึงได้ยากและต้องการความเชี่ยวชาญเฉพาะ แต่ในช่วงปีที่ผ่านมาบริการคลาวด์ก็เริ่มออกบริการปัญญาประดิษฐ์มากขึ้นเรื่อยๆ ทำให้เราสามารถคิดพัฒนาแอปพลิเคชั่นต่อยอดได้
บริการประเภทหนึ่งที่เริ่มมีการให้บริการกันหลากหลาย คือบริการจับใบหน้า เช่น Google Vision API, Azure Computer Vision API, Watson Visual Recognition API, และ AWS Rekognition บริการเหล่านี้แม้จะมีความคล้ายกันคือการจับใบหน้า มักมีความแตกต่างกันไปบ้าง เช่น บริการของกูเกิลและ AWS นั้นสามารถค้นหาใบหน้าคนดังในภาพได้เอง ขณะที่บริการส่วนใหญ่มักสามารถบอกอารมณ์ของใบหน้าในภาพได้ กูเกิลพิเศษกว่าคนอื่นเล็กน้อยที่สามารถบรรยายของตกแต่งอย่างแว่นตา หรือหมวกได้ด้วย
แต่ในแง่ของการปรับแต่ง AWS Rekognition ยังเป็นเจ้าเดียวที่เปิดบริการ Face Recognition ที่เปิดให้ผู้ใช้สามารถสร้างฐานข้อมูลใบหน้าของตัวเอง ทำให้สามารถจับใบหน้าของคนที่เรารู้จักก่อนหน้าได้
สำหรับการใช้งานโดยทั่วไปเรามักมีการยกตัวอย่างสำหรับงานในแง่ของความปลอดภัย ที่เราสามารถใช้ AWS Rekognition มาใช้สำหรับการควบคุมการเข้าพื้นที่ต่างๆ ได้ (แต่ในการใช้งานจริงเราอยากให้ประตูถูกควบคุมด้วยเซิร์ฟเวอร์ในฝั่งตะวันตกของสหรัฐฯ จริงๆ?) ในบทความนี้เรายกอีกตัวอย่างหนึ่งที่สามารถใช้งาน AWS Rekognition ได้คือการจับ "เวลาออกอากาศ" ของดาราหรือนักร้องในรายการทีวี ที่เราอาจจะเคยเห็นดาราเกาหลีแซวกันในรายการต่างๆ บ้างว่าเมื่อมาออกรายการแล้วจะมีโอกาสได้ออกอากาศมากน้อยแค่ไหน
บทความนี้เราจึงจะมาสร้างระบบจับเวลาออกอากาศ ของสมาชิกวง Twice ในมิวสิควิดีโอ Likey
อ่านต่อได้...
ข้อมูลที่ใช้สร้างฐานข้อมูล เริ่มต้น ต้องหาภาพใบหน้าเพื่อสร้างฐานข้อมูลของสมาชิกแค่ละคนเสียก่อน ในกรณีนี้เราเซฟภาพจาก Google Image Search (เช่น Jihyo) แล้วเลือกเซฟภาพประมาณ 10 ภาพของแต่ละคนออกมา เมื่อครบแล้วจะได้ภาพ 90 ภาพ ตั้งชื่อภาพให้สื่อว่าจะหมายถึงใคร เช่น tzuyu_001.jpg, sana_002.jpg เป็นต้น
ระบบเก็บภาพลงฐานข้อมูลของ Rekognition เรียกว่า Index Faces หากเราใส่ภาพที่มีใบหน้าลงไปโดยไม่บอกข้อมูลอะไรเพิ่มเติม มันจะคืนค่า UUID ของใบหน้ามาให้โดยไม่มีข้อมูลอ้างอิงอื่นอีก แต่เราสามารถเลือกใส่ข้อมูล External Image ID ลงไปด้วยเพื่ออ้างอิงได้ว่าภาพใบหน้านี้มาจากไฟล์อะไร และในกรณีของโครงการนี้คือเราจะรู้ด้วยว่าใบหน้านี้หมายถึงใคร
ก่อนอื่นเราต้องสร้างฐานข้อมูลใบหน้าขึ้นมาก่อนด้วยคำสั่ง $ aws rekognition create-collection --collection-id twice
เราใช้ boto3 ที่เป็นโมดูลไพธอนสำหรับเชื่อมต่อ AWS เอาไว้ ส่วนตัวกุญแจการเข้า API และการเซ็ตอัพอยู่นอกขอบเขตบทความนี้
สคริปต์นี้จะไล่หาไฟล์ใบหน้าที่เราเซฟเก็บไว้ล่วงหน้าและอัพโหลดขึ้นไปฐานข้อมูลของ AWS โดยกระบวนการนี้มีค่าใช้จ่ายเพียงเล็กน้อยเพราะ AWS ไม่ได้เก็บรูปเอาไว้จริงๆ แต่เก็บเพียงข้อมูลลักษณะใบหน้า (metadata) เท่านั้น
การสร้างภาพจากวิดีโอ อาศัยซอฟต์แวร์ youtube-dl ดาวน์โหลดวิดีโอลงมาประมวลผลในเครื่อง และเพื่อลดข้อมูลที่ต้องประมวลผล เราอาจเลือกภาพเพียง 1 เฟรมจากทุกๆ 12 เฟรมด้วยคำสั่ง
ffmpeg -i likey.mp4 -vf "select=not(mod(n\,12))" -vsync vfr -q:v 2 img_%03d.jpg
จะได้ภาพมาประมาณ 443 ภาพ
ขั้นสุดท้ายของการประมวลผลคือการจับภาพใบหน้าจากภาพทั้งหมดที่เราแยกออกมาได้ เราใช้ API Search Faces by Image เป็นการอัพโหลดภาพเพื่อให้หาใบหน้าในฐานข้อมูลที่เรากำหนด โดยผลลัพธ์ออกมาเป็นไฟล์ CSV ที่ระบุเวลาและตำแหน่งที่พบใบหน้า
ในกรณีนี้เราใส่ภาพใบหน้าของคนเดียวกันซ้ำๆ ไปหลายครั้งในฐานข้อมูลแรก ผมพบว่า Rekognition มีพฤติกรรมแปลกๆ คือแทนที่จะจับใบหน้าทีละใบหน้าแล้วหาภาพในฐานข้อมูลที่ตรงที่สุด มันกลับส่งข้อมูลออกมาซ้ำๆ กันอยู่บ่อยๆ เช่นเฟรมแรก สามารถจับใบหน้า Jihyo ได้จากภาพอ้างอิง 5 ภาพ แถมทั้ง 5 ภาพกลับมีตำแหน่งต่างกันทั้งที่ในภาพน่าจะมีใบหน้าอยู่หน้าเดียวเท่านั้น
อย่างไรก็ดีเมื่อประมวลผลเสร็จก็จะได้ไฟล์ CSV ออกมา
เราสามารถประมวลผลข้อมูลได้อีกหลายอย่าง แต่ข้อมูลที่ง่ายที่สุดคือการหาว่าแต่ละคนได้ "ออกกล้อง" มาน้อยเพียงใด เราสามารถเลือกเพียง 2 คอลัมภ์แรกแล้วหาข้อมูลที่ไม่ซ้ำกัน จากนั้นนับออกมาว่าแต่ละคนปรากฎใบหน้าในเฟรมมากน้อยแค่ไหน
ปล. ผลนี้ยังไม่แม่นยำมากๆ อย่านำไปอ้างอิง
ผมทดสอบ Rekognition มาสักระยะ พบว่ามันน่าสนใจอย่างมากเพราะกระบวนการสร้างระบบจดจำใบหน้า หรือแม้แต่แค่ตรวจจับใบหน้าในภาพเคยเป็นเรื่องค่อนข้างซับซ้อน แต่ Rekognition ทำให้โปรแกรมเมอร์ทั่วๆ ไปเข้าถึงความสามารถเหล่านี้ได้ง่ายมาก
อย่างไรก็ดี Rekognition ยังมีข้อจำกัดของมันอยู่หลายประการ
แต่แม้จะมีข้อจำกัด Rekognition และบริการปัญญาประดิษฐ์อื่นๆ กำลังแสดงให้เห็นว่าเรื่องที่เคยต้องอาศัยความสามารถพิเศษกำลังกลายเป็นเรื่องที่ใครๆ ก็ใช้งานได้ หากมีจินตนาการเพียงพอว่าจะใช้ API เหล่านี้สร้างบริการใหม่ได้อย่างไร
Comments
ปร๊าดดดด เอาไปใช้กับ BNK48 รู้ได้เลยใครจะเป็น Center ดู MV มาใครได้ออกบ่อยมีบทบาทบ่อยได้เลย
ขอบคุณสำหรับบทความครับ ได้ไอเดียไปทำอะไรต่ออีกเยอะเลย
แต่มีตรงที่ว่า กูเกิลแยกแยะแว่นตาหรือหมวกได้ ตรงนี้ถ้าเป็นแว่นตาอเมซอนก็ทำได้นะ โดยบอกว่าใส่อยู่หรือเปล่า ส่วนหมวกเท่าที่ลอง ยังไม่ได้
หนูจื่อออกกล้องน้อยสุดเลย