AR-ตัวกรองโดยใช้-Mediapipe-ปรับใช้-ด้วย-FastAPI/Heroku

MediaPipe คือเฟรมเวิร์กสำหรับการสร้างไปป์ไลน์การเรียนรู้ของเครื่องสำหรับการประมวลผลข้อมูลอนุกรมเวลา เช่น วิดีโอ เสียง ฯลฯ กรอบงานข้ามแพลตฟอร์มนี้ทำงานได้บนเดสก์ท็อป/เซิร์ฟเวอร์, Android, iOS และอุปกรณ์ฝังตัว เช่น Raspberry Pi และ Jetson Nano

หากต้องการใช้เครื่องมือนี้ ให้สร้าง virtualenv และ pip ​​install mediapipe

การแนะนำ

เคยสงสัยบ้างไหมว่าอะไรอยู่เบื้องหลัง "ตกลง Google!" นั่นคือสื่อกลาง

ตั้งแต่ปี 2012 เป็นต้นมา Google ได้นำไปใช้ในผลิตภัณฑ์และบริการต่างๆ มากมาย เริ่มแรกได้รับการพัฒนาเพื่อการวิเคราะห์วิดีโอและเสียงบน YouTube แบบเรียลไทม์ โดยทั่วไปแล้วจะรวมเข้ากับผลิตภัณฑ์หลายอย่างเช่น:

  1. ระบบการรับรู้ใน Nestcam
  2. โฆษณาเพิ่มความเป็นจริง
  3. การตรวจจับข้อโต้แย้งโดย Google Lens
  4. Gmail
  5. คลาวด์วิชั่น
  6. Google รูปภาพ
  7. กูเกิลโฮม ฯลฯ

Mediapipe ขับเคลื่อนผลิตภัณฑ์ปฏิวัติวงการที่เราใช้ทุกวัน Mediapipe แตกต่างจากเฟรมเวิร์กการเรียนรู้ของเครื่องอื่นๆ ตรงที่ต้องใช้ทรัพยากรเพียงเล็กน้อย มันมีขนาดเล็กและมีประสิทธิภาพมากจนแม้แต่อุปกรณ์ IoT ที่ฝังอยู่ก็สามารถทำงานได้ ในปี 2019 Mediapipe ได้เปิดโลกใหม่แห่งโอกาสสำหรับนักวิจัยและนักพัฒนา หลังจากการเปิดตัวสู่สาธารณะ

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

บางทีคุณอาจต้องการแกล้งทำเป็นแม่มดหรือซานต้า หรือดูเหมือนดูงดงามหรือดุร้าย หรือบางทีอาจสวมหน้ากากให้กับตัวละครที่คุณชื่นชอบโดยสวมหน้ากาก มีตัวกรองหลายพันรายการที่ขับเคลื่อนโดย Augmented Reality

ในบทความนี้ เราจะเรียนรู้วิธีสร้างตัวกรองของเราโดยใช้ Mediapipe

ทำไมต้อง Mediapipe?

นอกเหนือจากประสิทธิภาพที่เบาและรวดเร็วอย่างเห็นได้ชัด MediaPipe ยังรองรับความเข้ากันได้ข้ามแพลตฟอร์ม แนวคิดก็คือการสร้างโมเดล ML เพียงครั้งเดียวและปรับใช้บนแพลตฟอร์มและอุปกรณ์ต่างๆ พร้อมผลลัพธ์ที่สามารถทำซ้ำได้

ดังนั้น หนึ่งในส่วนที่น่าตื่นเต้นที่สุดของการใช้เครื่องมือนี้คือ เราไม่จำเป็นต้องเริ่มสร้างโมเดลตั้งแต่เริ่มต้น แต่เรานำเข้าเฟรมเวิร์กสื่อกลาง

รองรับแพลตฟอร์ม Python, C, Javascript, Android และ IOS และมีคุณสมบัติเช่น Face Detection, Face Mesh หรือ Facial Landmark Detection, Person Segmentation, Object Detection, Human Pose estimation ฯลฯ ขอข้อมูลเพิ่มเติมได้ไหม

ภาพรวมของ Face mesh?

ในบทความของเรา เรามุ่งเน้นการวิจัยเกี่ยวกับตาข่ายหน้า Mediapipe face mesh มอบจุดสังเกตใบหน้า 3 มิติจำนวน 468 จุดแบบเรียลไทม์ แม้กระทั่งบนอุปกรณ์เคลื่อนที่ รองรับทั้ง IOS และ Android ดังนั้นคุณสามารถสร้างแอพมือถือเหล่านั้นและใช้งาน Snapchat ได้อย่างเต็มที่ ในบล็อกโพสต์นี้ เราจะใช้ Python กับ MediaPipe และ OpenCV เพื่อใช้งานตัวกรอง AR

เช่นเดียวกับโมเดล Facial-Landmark อื่นๆ Mediapipe เริ่มต้นด้วย Face Detection และตรวจจับจุดสังเกตบนใบหน้าที่ตรวจพบ สำหรับ Face Detection ให้ใช้ Blazefast ซึ่งตามชื่อเลย คือรวดเร็วและเบามาก และปรับให้เหมาะสมสำหรับการอนุมาน GPU บนมือถือ การตรวจจับใบหน้าจะส่งสัญญาณออกบริเวณที่ครอบตัดจากเฟรมวิดีโอ จากนั้นเราจะเรียกใช้โมเดล 3D-Landmark บนพื้นที่ที่ครอบตัด

ภาพรวมไปป์ไลน์

ก่อนที่จะเข้าไปดูรายละเอียดสำคัญๆ เรามาพูดคุยถึงขั้นตอนการใช้งานตัวกรอง AR โดยใช้ Mediapipe และ OpenCV กันก่อน:

  1. ตรวจจับจุดสังเกตบนใบหน้า 468 จุดโดยใช้ Mediapipe Face Mesh
  2. เลือกจุดสังเกตที่เกี่ยวข้องเนื่องจากเราไม่ต้องการจุดสังเกต 468 จุด
  3. ใส่คำอธิบายประกอบตัวกรองด้วยจุดสังเกตที่เลือก
  4. โหลดคำอธิบายประกอบ
  5. ตรวจจับจุดสังเกตของใบหน้า
  6. รักษาจุดสังเกตให้คงที่
  7. แปลงฟิลเตอร์บนใบหน้าโดยใช้จุดสังเกต

เมื่อคุณมีภาพรวมของไปป์ไลน์แล้ว เรามาดูรายละเอียดกันดีกว่า

จุดสังเกตจากตาข่ายใบหน้า

เราเริ่มต้นด้วยการนำเข้า MediaPipe ต่อไป เราจะสร้างอินสแตนซ์ของ Face Mesh ที่มีพารามิเตอร์ที่กำหนดค่าได้สองตัวสำหรับการตรวจจับและติดตามจุดสังเกต

min_detection_confidence=0.5

min_tracking_confidence=0.5

ในที่สุด เราก็ส่งภาพอินพุตและรับรายการวัตถุใบหน้า

การรับตัวกรอง

ตอนนี้คุณมีพิกัดของจุดสังเกตแล้ว เราจะใช้พิกัดนั้นเพื่อซ้อนทับใบหน้าด้วยฟิลเตอร์ ตัวกรองเป็นเพียงความโปร่งใสของภาพ PNG

นี่คือตัวกรองที่เลือก:

การใส่คำอธิบายประกอบตัวกรองด้วยจุด

สำหรับตัวกรองคำอธิบายประกอบด้วยจุด เราใช้เครื่องมือคำอธิบายประกอบง่ายๆ ที่เรียกว่า makesense ซึ่งสามารถทำงานบนเบราว์เซอร์

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

ภาพรวมโค้ดทั่วไป

นำเข้าไลบรารีที่จำเป็น

เราจะใช้ apply_filter.py ไฟล์ที่มีคำจำกัดความฟังก์ชันบางอย่างสำหรับ 'Delaunay triangulation' และ 'triangle warping' เราจะดูว่ามันหมายถึงอะไรเมื่อเราเรียกมันในโค้ด

การกำหนดเส้นทางสำหรับรูปภาพที่กรองและคำอธิบายประกอบ

กำหนดฟังก์ชันเพื่อรับจุดสังเกตจากมีเดียไปป์

ฟังก์ชันในการโหลดภาพที่กรองแล้ว

รับช่องอัลฟ่าจากภาพตัวกรองเพื่อใช้ในภายหลังและแปลงภาพเป็น BGR

โหลดจุดสังเกตสำหรับคำอธิบายประกอบ

ค้นหาตัวเรือนูนสำหรับสามเหลี่ยม delaunay โดยใช้จุดสังเกต

ฟังก์ชั่นโหลดฟิลเตอร์และทา denaulay Triangulation คือฟิลเตอร์จำเป็นต้องบิดเบี้ยวบนใบหน้า

การติดตั้งใช้งานบน FastAPI

ในโปรเจ็กต์นี้ ในที่สุดเราก็ปรับใช้โดยใช้ FastAPI และโฮสต์บนแอป Heroku โปรดทราบว่าในการเรียกใช้ FastAPI คุณจะต้อง pip ติดตั้ง fastapi uvicorn ในสภาพแวดล้อม conda ของคุณ

รหัส FastAPI

หากต้องการรันโค้ด fastAPI ให้ใช้:

Server.py

วิดีโอสาธิต



บทสรุป

Augmented Reality เป็นพื้นที่ที่สำคัญมากในเทคโนโลยีล่าสุด และเป็นแรงจูงใจสำหรับการวิจัยนี้ อย่างไรก็ตาม กรอบงาน Mediapipe ML มีความสำคัญในการนำการวิจัยนี้ไปใช้ ขอขอบคุณ Google และทีมวิจัย ในโปรเจ็กต์นี้ เราใช้ makeense สำหรับคำอธิบายประกอบข้อมูล มีเดียไปป์สำหรับการนำตัวกรอง AR ไปใช้ FastAPI สำหรับการปรับใช้โมเดล และแอป Heroku สำหรับการปรับใช้โมเดลของเรากับเซิร์ฟเวอร์ Heroku

ข้อจำกัด

สิ่งสำคัญคือต้องทราบว่าเรากำลังทำงานใน 2 มิติเท่านั้น นั่นคือระนาบ x-y แม้ว่ามันจะให้ภาพลวงตาของการเป็น 3 มิติ แต่วิธีการของเราจึงขาดไปเมื่อฟิลเตอร์วัตถุ 3 มิติเข้ามามีบทบาทเหมือนกับแว่นกันแดด นอกจากนี้ การสาธิตนี้ยังมีประสิทธิภาพมากขึ้นด้วยเอฟเฟกต์แสงเพื่อให้เว็บแคมหรือกล้องสามารถตรวจจับใบหน้าได้

ข้อมูลอ้างอิง

ลิงก์ไปยัง GitHub: https://github.com/judsongroups/AR-Filters-using-Mediapipe-deployed-with-fastapi

ลิงก์ไปยังแอป heroku: http://snapchat-ar-filters.herokuapp.com/

ความชื่นชม

ขอขอบคุณเป็นพิเศษต่อพระเจ้าผู้ทรงฤทธานุภาพผู้ทรงเห็นเราผ่านงานวิจัยนี้ ถึง Zummit Africa Inc. สำหรับโอกาสในการเรียนรู้ วิจัย และเติบโตในด้านข้อมูล ขอขอบคุณทีมของฉันที่เป็นผู้นำ Valentine Enedah สำหรับการสนับสนุน และต่อ สมาชิกในทีมและผู้เขียนร่วม Samuel Okon (https://www.linkedin.com/in/samuel-okon-61456b1b4), Mariam, Sylvester, Selorm Adukonu และ Richard พวกคุณทุกคนเก่งที่สุด ขอบคุณสำหรับความไม่ย่อท้อทั้งหมดของคุณ ความพยายามเพื่อให้แน่ใจว่างานวิจัยนี้จะประสบความสำเร็จ