البرنامج التعليمي: استخدام الرؤية المخصصة مع جهاز IoT للإبلاغ عن الحالات المرئية

يوضح تطبيق العينة هذا كيفية استخدام Custom Vision لتدريب جهاز مزود بكاميرا للكشف عن الحالات المرئية. يمكنك تشغيل سيناريو الكشف هذا على جهاز IoT باستخدام نموذج ONNX تم تصديره.

تصف الحالة المرئية محتوى الصورة: غرفة فارغة أو غرفة مع أشخاص، ممر فارغ أو ممر مع شاحنة، وما إلى ذلك. في الصورة أدناه، يمكنك رؤية التطبيق يكتشف متى يتم وضع موزة أو تفاحة أمام الكاميرا.

Animation of a UI labeling fruit in front of the camera

سيوضح هذا البرنامج التعليمي كيفية:

  • تكوين التطبيق نموذج لاستخدام الرؤية المخصصة الخاصة بك والموارد مركز IoT.
  • استخدم التطبيق لتدريب مشروع الرؤية المخصصة.
  • استخدم التطبيق لتسجيل صور جديدة في الوقت الفعلي وإرسال النتائج إلى Azure.

في حال لم يكن لديك اشتراك Azure، فأنشئ حساباً مجانيّاً قبل البدء.

المتطلبات الأساسية

  • لاستخدام خدمة Custom Vision Service، ستحتاج إلى إنشاء موارد التدريب والتنبؤ لـ Custom Vision في Azure. ولتنفيذ ذلك في مدخل Azure، عليك ملء نافذة الحوار في الصفحة Create Custom Vision لإنشاء كل من موردي تدريب وتنبؤ.

    هام

    يجب أن يكون هذا المشروع مشروعا لتصنيف الصور المضغوطة ، لأننا سنقوم بتصدير النموذج إلى ONNX لاحقا.

  • ستحتاج أيضا إلى إنشاء مورد IoT Hub على Azure.
  • Visual Studio 2015 أو أحدث
  • اختياريًا، جهاز IoT تشغيل Windows 10 IoT Core الإصدار 17763 أو أعلى. يمكنك أيضًا تشغيل التطبيق مباشرة من جهاز الكمبيوتر الخاص بك.
    • بالنسبة إلى Raspberry Pi 2 و3، يمكنك إعداد Windows 10 مباشرة من تطبيق لوحة معلومات IoT. بالنسبة للأجهزة الأخرى مثل DrangonBoard، ستحتاج إلى وميضه باستخدام أسلوب eMMC. إذا كنت بحاجة إلى مساعدة في إعداد جهاز جديد، فشاهد إعداد جهازك في وثائق Windows IoT.

حول تطبيق التنبيهات المرئية

يعمل تطبيق تنبيهات IoT Visual في حلقة مستمرة، حيث يتم التبديل بين أربع حالات مختلفة حسب الاقتضاء:

  • لا يوجد نموذج: حالة عدم تشغيل. سوف التطبيق النوم باستمرار لثانية واحدة والتحقق من الكاميرا.
  • التقاط صور التدريب: في هذه الحالة، يلتقط التطبيق صورة ويحملها كصورة تدريب إلى مشروع الرؤية المخصصة الهدف. ثم ينام التطبيق لمدة 500 مللي ثانية ويكرر العملية حتى يتم التقاط العدد المستهدف المحدد من الصور. ثم يؤدي إلى تدريب نموذج الرؤية المخصصة.
  • في انتظار النموذج المدرب: في هذه الحالة، يستدعي التطبيق واجهة برمجة تطبيقات الرؤية المخصصة كل ثانية للتحقق مما إذا كان المشروع الهدف يحتوي على تكرار مدرب. عندما يعثر على واحد، فإنه يقوم بتنزيل نموذج ONNX المقابل إلى ملف محلي ويتحول إلى حالة تسجيل النقاط.
  • التسجيل: في هذه الحالة، يستخدم التطبيق التعلم الآلي من Windows لتقييم إطار واحد من الكاميرا مقابل نموذج ONNX المحلي. يتم عرض تصنيف الصورة الناتج على الشاشة وإرسالها كرسالة إلى مركز IoT. ثم ينام التطبيق لثانية واحدة قبل تسجيل صورة جديدة.

افحص بنية الكود

تتعامل الملفات التالية مع الوظيفة الرئيسية للتطبيق.

الملف ‏‏الوصف
MainPage.xaml يعرف هذا الملف واجهة المستخدم XAML. يستضيف عنصر تحكم كاميرا الويب ويحتوي على التسميات المستخدمة في تحديثات الحالة.
MainPage.xaml.cs يتحكم هذا الرمز في سلوك واجهة المستخدم XAML. إنه يحتوي على رمز معالجة الجهاز الحالة.
CustomVision\CustomVisionServiceWrapper.cs هذه الفئة هي برنامج تضمين يعالج التكامل مع خدمة الرؤية المخصصة.
CustomVision\CustomVisionONNXModel.cs هذه الفئة هي المجمع الذي يعالج التكامل مع Windows ML لتحميل نموذج ONNX وتسجيل الصور ضدها.
IoTHub\IotHubWrapper.cs هذه الفئة هي المجمع الذي يعالج التكامل مع مركز IoT لتحميل نتائج التسجيل إلى Azure.

إعداد تطبيق التنبيهات المرئية

اتبع هذه الخطوات للحصول على التطبيق تنبيهات مرئية IoT قيد التشغيل على جهاز الكمبيوتر الخاص بك أو جهاز IoT.

  1. استنساخ أو تنزيل عينة IoTVisualAlerts على GitHub.
  2. افتح IoTVisualAlerts.sln الحل في Visual Studio
  3. دمج مشروع الرؤية المخصصة:
    1. في البرنامج النصي CustomVision\CustomVisionServiceWrapper.cs ، قم بتحديث ApiKey المتغير باستخدام مفتاح التدريب الخاص بك.
    2. ثم قم Endpoint بتحديث المتغير بعنوان URL لنقطة النهاية المقترن بالمفتاح الخاص بك.
    3. قم بتحديث targetCVSProjectGuid المتغير بالمعرف المقابل لمشروع الرؤية المخصصة الذي تريد استخدامه.
  4. إعداد مورد IoT Hub:
    1. في البرنامج النصي IoTHub\IotHubWrapper.cs، قم بتحديث s_connectionString المتغير باستخدام سلسلة الاتصال المناسب لجهازك.
    2. في مدخل Microsoft Azure، قم بتحميل مثيل IoT Hub، وحدد أجهزة IoT ضمن Explorers، وحدد على جهازك المستهدف (أو أنشئ واحدا إذا لزم الأمر)، وابحث عن سلسلة الاتصال ضمن Primary الاتصال ion String. ستحتوي السلسلة على اسم IoT Hub ومعرف الجهاز ومفتاح الوصول المشترك؛ يحتوي على التنسيق التالي: {your iot hub name}.azure-devices.net;DeviceId={your device id};SharedAccessKey={your access key}.

تشغيل التطبيق

إذا كنت تقوم بتشغيل التطبيق على جهاز الكمبيوتر الخاص بك، فحدد الجهاز المحلي للجهاز الهدف في Visual Studio، وحدد x64 أو x86 للنظام الأساسي الهدف. ثم اضغط F5 لتشغيل البرنامج. ينبغي أن يبدأ التطبيق ويعرض البث المباشر من الكاميرا ورسالة الحالة.

إذا كنت تقوم بالنشر على جهاز IoT مع معالج ARM، فستحتاج إلى تحديد ARM كمنصة الهدف والجهاز البعيد كجهاز مستهدف. توفير عنوان IP لجهازك عند المطالبة (يجب أن يكون على نفس الشبكة مثل جهاز الكمبيوتر). يمكنك الحصول على عنوان IP من التطبيق الافتراضي Windows IoT بمجرد تشغيل الجهاز وتوصيله بالشبكة. ثم اضغط F5 لتشغيل البرنامج.

عند تشغيل التطبيق لأول مرة، لن يكون لديه أي معرفة بحالات مرئية. فإنه سيتم عرض رسالة حالة أنه لا يوجد نموذج متوفر.

التقاط صور التدريب

لإعداد نموذج، تحتاج إلى وضع التطبيق في حالة التقاط صور التدريب. اختر واحدًا من الخطوات التالية:

  • في حال كنت تقوم بتشغيل التطبيق على جهاز الكمبيوتر، فاستخدم الزر الموجود في الزاوية العلوية اليسرى من واجهة المستخدم.
  • إذا كنت تقوم بتشغيل التطبيق على جهاز IoT، فاتصل بالأسلوب EnterLearningMode على الجهاز من خلال IoT Hub. يمكنك استدعائه من خلال إدخال الجهاز في قائمة IoT Hub على مدخل Microsoft Azure، أو باستخدام أداة مثل IoT Hub Device Explorer.

عندما يدخل التطبيق في حالة التقاط صور التدريب، فإنه سيتم التقاط حوالي صورتين كل ثانية حتى يصل إلى العدد المستهدف من الصور. بشكل افتراضي، الهدف هو 30 صورة، ولكن يمكنك تعيين هذه المعلمة عن طريق تمرير الرقم المطلوب كوسيطة EnterLearningMode إلى أسلوب IoT Hub.

في أثناء التقاط التطبيق للصور، يجب أن تعرض الكاميرا لأنواع الحالات المرئية التي تريد اكتشافها (على سبيل المثال، غرفة فارغة، غرفة مع أشخاص، مكتب فارغ، مكتب مع شاحنة لعبة، وهلم جرًا).

تدريب نموذج الرؤية المخصصة

بمجرد انتهاء التطبيق من التقاط الصور، سيتم تحميلها ثم التبديل إلى حالة انتظار النموذج المدرب. في هذه المرحلة، تحتاج إلى الانتقال إلى موقع Custom Vision على الويب وبناء نموذج يستند إلى صور التدريب الجديدة. يظهر الرسم المتحرك التالي مثالاً على هذه العملية.

Animation: tagging multiple images of bananas

لتكرار هذه العملية مع السيناريو الخاص بك:

  1. سجل الدخول إلى موقع Custom Vision على الويب.
  2. ابحث عن المشروع المستهدف، والذي يجب أن يحتوي الآن على جميع صور التدريب التي قام التطبيق بتحميلها.
  3. لكل حالة مرئية تريد تعريفها، حدد الصور المناسبة ثم قم بتطبيق العلامة يدويا.
    • على سبيل المثال، إذا كان هدفك هو التمييز بين غرفة فارغة وغرفة بها أشخاص، نوصي بوضع علامات على خمس صور أو أكثر مع أشخاص كفئة جديدة، الأشخاص، ووضع علامات على خمس صور أو أكثر دون أشخاص كعلامة سلبية. وهذا من شأنه أن يساعد النموذج على التفريق بين الدولتين.
    • كمثال آخر، إذا كان هدفك هو تقريب مدى ملء الرف، فقد تستخدم علامات مثل EmptyShelf و PartiallyFullShelf و FullShelf.
  4. عند الانتهاء، حدد الزر تدريب .
  5. بمجرد اكتمال التدريب، سيكتشف التطبيق أن التكرار المدرب متاح. وسوف تبدأ عملية تصدير النموذج المدرب إلى ONNX وتحميله على الجهاز.

استخدام النموذج المدرب

بمجرد أن يقوم التطبيق بتنزيل النموذج المدرب، سيتم التبديل إلى حالة تسجيل النقاط وبدء تسجيل الصور من الكاميرا في حلقة مستمرة.

لكل صورة تم التقاطها، سيعرض التطبيق العلامة العلوية على الشاشة. إذا لم يتعرف على الحالة المرئية، فسيعرض بلا تطابقات. يرسل التطبيق أيضا هذه الرسائل إلى IoT Hub، وإذا كان هناك فئة يتم الكشف عنها، فستتضمن الرسالة التسمية ودرجة الثقة وخاصية تسمى detectedClassAlert، والتي يمكن استخدامها من قبل عملاء IoT Hub المهتمين في إجراء توجيه سريع للرسائل استنادا إلى الخصائص.

بالإضافة إلى ذلك، تستخدم العينة مكتبة Sense HAT للكشف عن وقت تشغيلها على Raspberry Pi مع وحدة Sense HAT، حتى تتمكن من استخدامها كشاشة إخراج عن طريق تعيين جميع أضواء العرض إلى الأحمر كلما اكتشفت فئة وفارغة عندما لا تكتشف أي شيء.

إعادة استخدام التطبيق

إذا كنت ترغب في إعادة تعيين التطبيق إلى حالته الأصلية، يمكنك القيام بذلك بالنقر فوق الزر الموجود في الزاوية العلوية اليسرى من واجهة المستخدم، أو عن طريق استدعاء الأسلوب DeleteCurrentModel من خلال مركز IoT.

في أي وقت، يمكنك تكرار خطوة تحميل صور التدريب بالنقر فوق زر واجهة المستخدم العلوي الأيمن أو استدعاء EnterLearningMode الأسلوب مرة أخرى.

إذا كنت تقوم بتشغيل التطبيق على جهاز وتحتاج إلى استرداد عنوان IP مرة أخرى (لإنشاء اتصال عن بعد من خلال Windows IoT Remote Client، على سبيل المثال)، يمكنك استدعاء GetIpAddress الأسلوب من خلال IoT Hub.

تنظيف الموارد

حذف مشروع الرؤية المخصصة إذا لم تعد تريد الاحتفاظ به. في موقع Custom Vision على الويب، انتقل إلى Projects وحدد أيقونة سلة المهملات ضمن مشروعك الجديد.

Screenshot of a panel labeled My New Project with a trash can icon

الخطوات التالية

في هذا البرنامج التعليمي، يمكنك إعداد تشغيل تطبيق يكشف معلومات الحالة المرئية على جهاز IoT ويرسل النتائج إلى مركز IoT. بعد ذلك، استكشف شفرة المصدر أو قم بإجراء أحد التعديلات المقترحة أدناه.

  • أضف أسلوب IoT Hub لتبديل التطبيق مباشرة إلى حالة Waiting For Trained Model . بهذه الطريقة، يمكنك تدريب الطراز مع الصور التي لم يتم التقاطها من قبل الجهاز نفسه ومن ثم دفع النموذج الجديد إلى الجهاز على الأمر.
  • اتبع البرنامج التعليمي لتصور بيانات المستشعر في الوقت الحقيقي لإنشاء لوحة معلومات Power BI لتصور تنبيهات IoT Hub المرسلة من قبل العينة.
  • اتبع البرنامج التعليمي لمراقبة IoT عن بعد لإنشاء Logic App يستجيب لتنبيهات IoT Hub عند الكشف عن الحالات المرئية.