[Golang x OpenCV] Face comparison with GoCV

Visarut Junsone
Lazy-Dev
Published in
2 min readSep 7, 2019

--

กลับมาอีกครั้งกับ golang x opencv ที่ครั้งนี้เราจะมาพูดถึง การเปรียบเทียบใบหน้าผ่าน GoCV ครั้งที่แล้วเราได้ลองทำ Face detect ด้วย GoCV ซึ่งภายใน Code นั้น จริงๆ แล้วเป็นเพียงตัวอย่างจากทาง Document ของ GoCV อยู่แล้ว และในนั้นยังมีตัวอย่างอื่นๆ อีกให้ได้ลองเล่นกัน

หาดูเพิ่มเติมได้ที่ gocv.io ← ไปดูได้เลยจ้า

มาเริ่มกันเถอะ ก่อนอื่นเราจะมาพูดถึง Concept ที่เราจะลองทำกันก่อน ซึ่งก็คือ

ต้องการที่จะเปรียบเทียบใบหน้าระหว่าง รูป 2 รูป

มาวางแผนแบบง่ายๆ กันดีกว่า

  1. ตรวจจับใบหน้าจากรูปที่ 1
  2. ตรวจจับใบหน้าจากรูปที่ 2
  3. นำรูปที่ 1 และ 2 มาเปรียบเทียบกัน

แผนสั้นๆ แบบนี้ มันจะเวิร์คไหมเนี่ย ยังไงก็ตาม เราก็ต้องมาลองดูกัน เอา ลุย

จากฟังก์ชั่นที่เราเขียนขึ้นมาใหม่ด้านบน ฟังก์ชั่นนี้มีไว้เพื่อ ตรวจจับใบหน้าจากรูปที่ 1 และ 2 จากนั้นก็เอาออกมาโชว์เพื่อดูว่าเรา Detect ได้จริงๆนะ

ผลก็จะเป็นแบบนี้

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

ขอคิดสักครู่ …………………………………………..

โอเค ได้ไอเดียแล้ว ลองดู Example ในเว็บ GoCV สิ จะเห็นว่ามีตัวอย่างนึงที่เรียกว่า Img-similarity ซึ่งจะทำการเปรียบเทียบความคล้ายคลึงของรูป ดังนั้นเราจะมาลองกัน จะเห็นว่าที่เรา Detect หน้าจากรูปด้านบนนั้น เราจะเปลี่ยนเป็น Crop รูปจากที่มัน Detect ได้แทน และเราก็จะเอา Code เขามาดัดแปลงสักหน่อย

กับ Code ที่แก้ไขนิดหน่อยตอนแรก

พอเราลองรันดูก็จะได้ผลลัพท์แบบนี้

แล้ว ไอแต่ละ Hash นี้มันคืออะไรละเนี่ย ถ้าอธิบายก็คงจะยาวแล้วหลุดเนื้อเรื่องหลักไป เอาเป็นว่า Hash ต่างๆ พวกนี้เนี่ยเป็น Algorithm ต่างที่เอาไว้ประมวลผลภาพนี้ละ ค่าแบบไหนถึงจะดีละ ก็ต้องอยู่ในระดับที่เป็นค่า meaning of value ของแต่ละ Algorithm นั้นเอง

จบแล้วจ้า

--

--

Visarut Junsone
Lazy-Dev

I’m Full-Stack Developer. ReactJS Golang C# Javascript C++ PHP and learning a lot more. Not lazy as it name. “Lazy-Dev”