หลายสัปดาห์ก่อนผมได้มีโอกาสชมวีดีโอสาธิตระบบ Face Detection ของบริษัทจีนเจ้าหนึ่ง ทางผู้แทนจำหน่ายเล่าว่ามันถูกใช้จริงแล้วที่ด่านผ่านแดนระหว่างฮ่องกงกับจีน โดยหลักการทำงานคือ กล้องวงจรปิดความละเอียดสูง จะถูกติดตั้งเอาไว้ตรงด่านผ่านแดน ในตำแหน่งที่ถ่ายติดหน้าของทุกคนที่เดินผ่าน จากนั้นภาพเคลื่อนไหวจากกล้อง ก็จะถูกส่งไปให้เครื่องจักรแยกภาพทีล่ะภาพ เพื่อวิเคราะห์ใบหน้าต่อไป
ทีนี้โดยความสามารถหลัก ๆ ของมันก็คือ มันจะจดจำใบหน้าของทุกคนที่ผ่านด่าน มันไม่รู้ว่าเจ้าของใบหน้าที่มันจำได้ชื่ออะไรบ้าง แต่มันจะรู้จักจับสังเกตรูปแบบแปลก ๆ ได้ เช่น ถ้าในแต่ล่ะวันเจอหน้าใครซ้ำ ๆ มันก็จะเอ๊ะ จะเตือนขึ้นมาว่าแปลกแล้วนะ หรือ ถ้ามันเจอความสัมพันธ์แปลก ๆ เช่น ทุกครั้งที่เจอหน้านี้ ก็มักจะเจอหน้านี้อยู่ในรูปด้วย ถึงแม้จะเดินห่างกัน ทำเหมือนไม่รู้จักกัน มันก็จะเอ๊ะ แล้วก็เตือนเหมือนกัน
ผู้แทนจำหน่ายสรุปตอนท้ายว่า เพราะระบบมันเอ๊ะได้แบบนี้แหล่ะ เลยจับได้ว่า หลายคนที่ผ่านด่านวันนึงหลายรอบ แถมทุกครั้งที่ผ่านด่าน ยังผ่านด้วยกันมาเป็นคู่หรือเป็นกลุ่มนั้น จริง ๆ แล้วเป็นแก๊งรับจ้างหิ้วสินค้าผ่านด่านเพื่อหนีภาษีนั่นเอง
หลายวันต่อมาผมมีเวลาว่างเลยมาทบทวนจากเรื่องนี้ สิ่งที่ทบทวนคือถ้าผมจะทำระบบแบบนี้ขึ้นมาบ้าง หลักคิดในการทำจะเป็นยังไง และจะใช้เครื่องมือหรือทฤษฎีอะไรทำขึ้นมา โดยความคิดทั้งหมดอยู่บนพื้นฐานความรู้และความเข้าใจของตัวผมเอง
ซึ่งผมว่าขั้นตอนน่าจะเป็นประมาณนี้
1) แยกหน้าคนออกจากภาพ ซึ่งสามารถทำได้ด้วยทฤษฎี Haar Cascades และใช้ Library OpenCV สำหรับทำเรื่องนี้ เพราะมีคำสั่งและข้อมูลหน้าคนที่่ผ่านการฝึกฝนเรียบร้อยแล้ว
2) สกัดคุณลักษณะเด่นออกจากขอบเขตใบหน้า (ซึ่งมันมีหลายทฤษฎี ผมเองยังไม่ชำนาญเรื่องนี้ ต้องไปค้นดูก่อน) แล้วก็นำคุณลักษณะเด่นไปเทียบในฐานข้อมูลว่าเคยมีมาก่อนมั้ย (ซึ่งอาจจะใช้ทฤษฎี Dynamic Time Wrapping หรือทฤษฎีอื่นเป็นตัวเปรียบเทียบ) ถ้าเทียบแล้วไม่เจอก็เพิ่มคุณลักษณะเด่นของหน้าคน ๆ นั้นในฐานข้อมูล พร้อมทั้งระบุหมายเลขไอดีกำกับ
3) เมื่อได้หมายเลขไอดีมาแล้ว ก็บันทึกไอดีของเจ้าของใบหน้า พร้อมกับวันที่และเวลาที่เห็นใบหน้า ลงในฐานข้อมูล
4) ดังนั้นในฐานข้อมูลจะมีข้อมูล 2 ส่วน ส่วนแรกเก็บคุณลักษณะเด่นของใบหน้ากับหมายเลขไอดี ส่วนที่สองเก็บประวัติการปรากฎตัวของไอดีตามวันเวลา ซึ่งฐานข้อมูลที่เลือกใช้ควรเป็นแบบ NoSQL น่าจะเหมาะกว่า และคิดว่า Graph Database น่าจะเหมาะสำหรับงานนี้ (คิดเองล้วน ๆ ยังไม่ได้พิสูจน์) เพราะต้องการค้นให้ได้เร็ว ๆ
5) นำประวัติการปรากฎตัวของไอดีในฐานข้อมูลส่วนที่สองในแต่ล่ะช่วงเวลา มาหา Frequent Itemset ตามหลักการของ Data Mining ด้วยขั้นตอนวิธี Association rule learning เพื่อจะได้พบความสัมพันธ์ที่น่าสนใจจากใบหน้าคนที่เกี่ยวข้องกัน
หลังจากคิดเรื่องขั้นตอนวิธีได้แล้ว ถัดมาที่ผมเลือกคิดคือถ้าไม่ทำเอง แต่จัดซื้อจัดหามาใช้แทน แล้วเรื่องของงบประมาณมันจะเป็นยังไง ซึ่งผมก็คิดว่างบประมาณเพื่อให้มีระบบแบบนี้ น่าจะแบ่งออกเป็นสี่ส่วน คือ
- ส่วนการพัฒนาซอฟต์แวร์ ตามขั้นตอนที่ผมประเมินเองข้างต้น
- ส่วนการจัดหาฮาร์ดแวร์ เพื่อให้ซอฟต์แวร์มีพื้นที่ทำงาน
- ส่วนการใช้งานระบบ ให้ฮาร์ดแวร์สามารถทำงานได้
- ส่วนการซ่อมบำรุง ให้ฮาร์ดแวร์และซอฟต์แวร์ยังคงมีประสิทธิภาพ ประสิทธิผล และพร้อมใช้งานอยู่เสมอ
โดยงบประมาณข้อที่ 1 และ 2 เป็นงบประมาณที่แพงที่สุด ราคารวม ๆ กันแล้วเป็นล้าน ๆ บาท ทำไมผมรู้ เพราะผมเคยเห็นใบเสนอราคามาแล้ว
สรุปแล้ว สำหรับงาน Face Dectection ตั้งแต่การสร้างจนถึงซ่อมบำรุง ล้วนมีความยากและความแพงตลอดเส้นทาง ยิ่งมีประสิทธิภาพ ประสิทธิผล และพร้อมใช้งานเท่าไหร่ ก็ยิ่งแพงมากขึ้นเท่านั้น
ดังนั้น ใครที่คิดว่าระบบ Face Detection ราคาถูก ต้องคิดใหม่นะ เพราะผู้แทนจำหน่ายเขายินดีจะลดราคาค่าซอฟต์แวร์ให้ ถ้าเรายอมซื้อฮาร์ดแวร์เขาเยอะ ๆ น่ะ เพราะระบบพวกนี้มันไม่ได้ใช้เพื่อประมวลผลกล้องวงจรปิดแค่ตัวเดียว มันต้องถูกออกแบบมาเพื่อประมวลผลกล้องวงจรปิดได้เป็นร้อย ๆ ตัวพร้อม ๆ กัน ถึงจะคุ้มกับที่สร้างขึ้นมา
ใครซื้อไปใช้กับกล้องวงจรปิดตัวเดียว ก็ต้องเจอราคาขั้นต่ำสำหรับใช้กับกล้องวงจรปิดหลายสิบตัวขึ้นไปอยู่ดี ดังนั้น สำหรับงาน Face Detection เมื่อจะจัดหาแล้ว ก็ต้องคิดใหญ่ไม่คิดเล็กล่ะ