المعلوماتية > الذكاء الصنعي
إلى أين وصلت تقنية تعقب حركة اليد لدى Google؟
تُعدّ القدرة على إدراك شكل اليد وحركتها عنصرًا مهمًّا في تحسين تجربة المستخدم عبر المجالات والمنصّات التكنولوجية المختلفة، ويمكن أن تشكّل أساسًا لفهم لغة الإشارة والتحكم في الأجهزة بواسطة إيماءات اليد، كذلك يمكنها أن تساعد على تطوير تقنيات الواقع المعزَّز (Augmented reality).
أطلقت Google مؤخرًا أنموذجًا للتعرف إلى حركات اليد، وذلك باستخدام إطار العمل المفتوح المصدر MediaPipe؛ إذ يوفر هذا الأنموذج تعرفًا دقيقًا إلى الأيدي والأصابع باستخدام تقنيات تعلم الآلة (Machine Learning) لاستنتاج 21 نقطة أساسية ثلاثية الأبعاد كما سنرى لاحقًا.
تحديد موقع النقاط الأساسية على يد متحركة.
يتألف إطار العمل MediaPipe من عدة نماذج تعمل بالتوافق فيما بينها مثلما التوارد (Pipeline)؛ أي عدة مسارات في الوقت نفسه، والنماذج هي:
- أنموذج لتعرف اليد يُسمّى BlazePalm: يعالج الصورة كاملةً ويضيف إليها مربعًا يحيط باليد.
- أنموذج العلامات الفارقة Landmark: مَهمته التعامل مع جزء الصورة الموجود ضمن المربع الذي أضافه الأنموذج السابق، والتعرف إلى النقاط الأساسية لليد (أو ما يُعرَف بالـKeypoints) التي تمثّل مفاصل الأصابع والمِعصم، ومن ثم تحديدها على الصورة بدقة عالية تناسب وضعية اليد.
- الأنموذج الأخير يمكن أن نطلق عليه اسم قارئ الإيماءات gesture recognizer، ومَهمته تعرف الإيماءات المشار إليها في حركة اليد؛ مثل علامة النصر أو أية إشارة أخرى معروفة.
- ونلاحظ أنه بالطريقة السابقة قُسِّم العمل وبُسِّط ليتمكن كل أنموذج من أداء مهمته على نحو أسرع وأفضل.
لنتحدث بتفصيلٍ أكثر عن النماذج السابقة:
- أنموذج BlazePalm الخاص بالتعرف إلى اليد: هو single-shot detector model؛ أي إنه أنموذج يتعامل مع الصور أو اللقطات على نحو فردي، ويُستخدَم في تطبيقات الزمن الحقيقي (real time) في الهواتف الذكية، إضافة إلى أنه يشبه أنموذجًا آخر متخصصًا بتعرُّف الوجوه وهو أنموذج BlazeFace الموجود في MediaPipe أيضًا.
يُعدّ التعرف إلى اليد من المَهمات المعقدة؛ إذ توجد عدة أحجام لليد، وهذا الأنموذج قادر على تحديد قرابة 20 حجمًا مختلفًا لليد (بالنسبة إلى الصورة أو الإطار الملتقط)، ثم إنه قادر على التعرف إلى اليد المبسوطة واليد المقبوضة (المغلقة).
وإذا أردنا المقارنة بين تقنيتَي تعرّف اليد وتعرُّف الوجه، فيُعدّ تعرف الوجه أسهلَ نسبيًّا وذلك لكثرة العلامات المميزة ضمن الوجه؛ مثل منطقة العيون والأنف والفم، في حين لا نلاحظ ذلك على نحو واضح في اليد، لذا؛ يُستعان بساعد اليد أو الجسم لتحديدها على نحو أفضل.
- أنموذج العلامات الفارقة: يعمل بعد اكتشاف اليد، ويحدد ما يصل إلى 21 نقطة رئيسة (إحداثية ) لمفاصل اليد والأصابع داخل المنطقة المربّعة المُحتوية على اليد والمُحددة في أنموذج BlazePalm، وهو قادر على تحديد موقع هذه النقاط حتى لو كانت اليد مغلقة أو يوجد تداخلٌ بين الأصابع وراحة اليد.
وللحصول على نتائج طبيعية ومنطقية؛ جُهِّز -يدويًّا- وفُهرِس قرابة 30 ألف صورة، مع 21 نقطة رئيسة في الفضاء الثلاثي الأبعاد (كما هو مُوضَّح في الصورة رقم 3)، وأُضيف البعد الثالث (العمق من القيم الرقمية في مصفوفة العمق depth map الخاصة بكل صورة). كذلك عُمِل على توليد صور لأيدٍ عالية الدقة ثلاثية الأبعاد 3D Graphics مع خلفيات متنوعة بغرض تحسين جودة التدريب.
ولما كان التدريب اعتمادًا على صور مولدة صناعيًّا لا يعطي نتائج جيدة؛ فكان لا بُدّ من الاعتماد على مخطط تدريبي يدمج مجموعات البيانات الطبيعية والمُصطنعة بعضها مع بعض.
إن الصور الموجودة في الصف العلوي لأيدٍ طبيعية واقعية محددة بـ21 نقطة رئيسة، في حين أنّ الصور التي في الصف السفلي هي صور مُصطنَعة ثلاثية الأبعاد.
يوضح الجدول الآتي نتائجَ الخطأ حسب الطريقة التي جُمِعت مجموعات البيانات على أساسها:
معدل الخطأ (الأقل هو الأفضل) | نمط التجميع |
16.1% | صور حقيقية فقط |
25.7% |
صور مُصطنَعة ثلاثية الأبعاد فقط |
13.4% |
صور حقيقية + صور مُصطنعة |
- أنموذج تعرف الإيماءات وحركات اليد: بعد تحديد الهيكل العظمي لليد (بـ21 نقطة)، تُطبَّق خوارزمية لاستخراج الإيماءات منه.
أولًا؛ ننظر إلى حالة كل إصبع -على سبيل المثال ملتوية أم مستقيمة- وهي تُحدَّد بواسطة الزوايا الناتجة عن المفاصل، ثم يُربَط بين الإيماء المُستنتَج مع مجموعة من الإيماءات المحددة مسبقًا.
وتتيح هذه التقنية الواضحة والفعّالة تعرفَ الإيماءاتِ الثابتة الأساسية بجودة معقولة، ثم إنّ الأنموذج الحالي مُدربٌ على إيماءات من مختلف الثقافات.
تعرُّف إيماءات اليد.
تعرُّف إيماءات أخرى لليد.
التنفيذ باستخدام إطار العمل MediaPipe:
لمعرفة المزيد عن طريقة عمل MediaPipe؛ يمكنك الاطلاع على المقال الآتي هنا
والآن لنشرح المخطط الذي نُفِّذ في MediaPipe:
مخطط العمل المُنفَّذ باستخدام MediaPipe.
بالنظر إلى المخطط السابق؛ يبدو كأنّه مُقسم إلى قسمين رئيسين:
- الأول مَهمته تعرف اليد وتحديدها، ويعمل في حالتين فقط؛ عند أول صورة (أي عند إطار الفيديو الذي تظهر فيه اليد أول مرة)، وعندما تختفي اليد مؤقتًا من المشهد.
- أما القسم الثاني فهو مسؤول عن تحديد النقاط الرئيسة على اليد، إضافة إلى تعرف إيماءات اليد. علمًا أنّ هذا القسم يعمل دائمًا.
ويمكن ملاحظة خطّين أزرقين:
- الأول يخرج من القسم "LandmarksToRectangle" المتخصص بتحديد النقاط، ويعود إلى القسم "ImageCropping" في الإطار التالي من أجل تحديث موقع النقاط.
- أما في حالة الفشل -أي اختفاء اليد مؤقتًا من المشهد- فنلاحظ خروج الخط الأزرق الطويل من "HandLandmark" وعودته إلى "RealTimeFlowLimiter" في الإطار التالي، وذلك لتحديد اليد من جديد.
برأيك؛ ما مدى أهمية هذا المشروع؟ وهل يمكن استخدامه في مشاريع ناجحة وتطبيقات مهمة؟
التعرف إلى عدّة أيدٍ ضمن الصورة، وتحديد مواقع النقاط الأساسية.
المصدر: