البرنامج التعليمي: تنفيذ تصنيف الصور على الحافة مع خدمة Custom Vision Service

ينطبق على:علامة اختيار IoT Edge 1.5 IoT Edge 1.5 علامة اختيار IoT Edge 1.4 IoT Edge 1.4

هام

IoT Edge 1.5 LTS وIoT Edge 1.4 LTS هي إصدارات مدعومة. IoT Edge 1.4 LTS هو نهاية العمر الافتراضي في 12 نوفمبر 2024. إذا كنت تستخدم إصدارا سابقا، فشاهد تحديث IoT Edge.

يستطيع Azure IoT Edge أن يجعل حل IoT أكثر كفاءة من خلال نقل أحمال العمل من السحابة إلى الحافة. هذه الإمكانية تصلح جيدا للخدمات التي تعالج كميات كبيرة من البيانات، مثل نماذج رؤية الكمبيوتر. تتيح لك Azure الذكاء الاصطناعي Custom Vision إنشاء مصنفات صور مخصصة ونشرها على الأجهزة كحاويات. تمكنك هاتان الخدمتان معًا من العثور على رؤى من الصور أو تدفق الفيديو دون الحاجة إلى نقل جميع البيانات خارج الموقع أولًا. توفر Custom Vision مصنفًا يقارن الصورة بنموذج مدرب لإنشاء رؤى.

على سبيل المثال، يمكن أن تحدد Custom Vision على جهاز IoT Edge ما إذا كان الطريق السريع يشهد زحامًا أعلى أو أقل من المعتاد، أو ما إذا كان مرآب السيارات يحتوي على أماكن لركن السيارات المتاحة على التوالي. يمكن مشاركة هذه الرؤى مع خدمة أخرى لاتخاذ الإجراء اللازم.

في هذا البرنامج التعليمي، تتعلم كيفية:

  • إنشاء مصنف صور باستخدام Custom Vision.
  • تطوير وحدة IoT Edge تستعلم عن خادم ويب Custom Vision على جهازك.
  • إرسال نتائج مصنف الصور إلى IoT Hub.

المخطط - بنية البرنامج التعليمي، تنظيم المصنف ونشره

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

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

تلميح

يُمثل هذا البرنامج التعليمي نسخة مبسطة من نموذج مشروع Custom Vision and Azure IoT Edge on a Raspberry Pi 3. تم تصميم هذا البرنامج التعليمي للتشغيل على سحابة VM ويستخدم الصور الثابتة لتدريب مصنف الصورة واختباره، حيث يمكن لشخص قد بدأ للتو في تقييم Custom Vision على IoT Edge الاستفادة من ذلك. يستخدم نموذج المشروع الأجهزة، ويتم إعداد موجز مباشر للكاميرا لتدريب مصنف الصور واختباره، حيث يمكن لشخص يريد تجربة سيناريو أكثر تفصيلًا وواقعية الاستفادة من ذلك.

إنشاء مصنف صور باستخدام Custom Vision

لإنشاء مصنف صور، يتعين عليك إنشاء مشروع Custom Vision وتوفير صور التدريب. لمزيد من المعلومات حول الخطوات التي يتعين عليك إجراؤها في هذا القسم، راجع How to build a classifier with Custom Vision.

بمجرد بناء مصنف الصور وتدريبه، يمكنك تصديره كحاوية Docker ونشره على جهاز IoT Edge.

إنشاء مشروع جديد

  1. في متصفح الويب، انتقل إلى Custom Vision web page.

  2. حدد Sign in ثم قم بتسجيل الدخول باستخدام الحساب ذاته الذي تستخدمه للوصول إلى موارد Azure.

  3. حدد New project.

  4. إنشاء مشروعك باستخدام القيم التالية:

    الحقل القيمة
    الاسم توفير اسم لمشروعك، مثل EdgeTreeClassifier.
    ‏‏الوصف وصف اختياري للمشروع.
    Resource حدد إحدى مجموعات موارد Azure التي تتضمن مورد خدمة ustom Vision Service أو create new إذا لم تقم بإضافة مورد بعد.
    نوع الكائن تصنيف
    أنواع التصنيف متعدد الفئات (علامة واحدة لكل صورة)
    المجالات عام (ضغط)
    قدرات التصدير الأنظمة الأساسية (Tensorflow، CoreML، ONNX، ...)
  5. حدد إنشاء مشروع

تحميل الصور وتدريب المصنف

يتطلب إنشاء مصنف صورة مجموعة من صور التدريب وصور الاختبار.

  1. استنساخ نماذج من صور أو تنزيلها من Cognitive-CustomVision-Windows الريبو على آلة التطوير المحلية.

    git clone https://github.com/Microsoft/Cognitive-CustomVision-Windows.git
    
  2. العودة إلى مشروع Custom Vision وحدد Add images.

  3. تصفح مستودع git الذي قمت باستنساخه محليًّا، وانتقل إلى مجلد الصورة الأولى، Cognitive-CustomVision-Windows / Samples / Images / Hemlock. حدد الصور الـ 10 كافة في المجلد ثم Open.

  4. إضافة العلامة hemlock إلى هذه المجموعة من الصور واضغط على enter لتطبيق العلامة.

  5. حدد Upload 10 files.

    تحميل الملفات التي تحمل علامة hemlock إلى Custom Vision

  6. عند تحميل الصور بنجاح، حدد Done.

  7. حدد Add images مرة أخرى.

  8. تصفح مجلد الصورة الثانية، Cognitive-CustomVision-Windows / Samples / Images / Japanese Cherry. حدد الصور الـ 10 كافة في المجلد ثم Open.

  9. إضافة العلامة japanese cherry إلى هذه المجموعة من الصور واضغط على enter لتطبيق العلامة.

  10. حدد Upload 10 files. عند تحميل الصور بنجاح، حدد Done.

  11. عند وضع علامات على مجموعتي الصور وتحميلهما، حدد Train لتدريب المصنف.

تصدير المصنف

  1. بعد تدريب المصنف، حدد Export على صفحة أداء المصنف.

    تصدير مصنف الصور الذي تم تدريبه

  2. حدد DockerFile للنظام الأساسي.

  3. حدد Linux للإصدار.

  4. حدد تصدير.

    تصدير باعتباره DockerFile مع حاويات Linux

  5. عند اكتمال التصدير، حدد Download واحفظ الحزمة المضغوطة محليًّا على الكمبيوتر. استخراج كافة الملفات من الحزمة. يمكنك استخدام هذه الملفات لإنشاء وحدة IoT Edge التي تحتوي على خادم تصنيف الصور.

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

إنشاء حل IoT Edge

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

إنشاء حل جديد

الحل عبارة عن طريقة منطقية لتطوير وحدات متعددة وتنظيمها لنشر IoT Edge واحد. يحتوي الحل على تعليمات برمجية لوحدات نمطية واحدة أو أكثر وبيان النشر الذي يعلن كيفية تكوينها على جهاز IoT Edge.

  1. في Visual Studio Code، حدد View>Command Palette لفتح لوحة أوامر Visual Studio Code.

  2. في لوحة الأوامر، أدخل الأمر Azure IoT Edge: New IoT Edge solution وقم بتشغيله. في لوحة الأوامر، قدم المعلومات التالية لإنشاء الحل الخاص بك:

    الحقل القيمة
    حدد مجلدًا اختر الموقع على جهاز التطوير الخاص بك ل Visual Studio Code لإنشاء ملفات الحل.
    تقديم اسم حل أدخل اسمًا وصفيًّا للحل، مثل CustomVisionSolution، أو اقبل استخدام الاسم الافتراضي.
    تحديد قالب الوحدة النمطية اختر Python Module.
    تقديم اسم وحدة نمطية قم بتسمية وحدتك النمطية ⁩classifier⁦.

    من المهم أن يكون اسم الوحدة النمطية هذا صغيرا. يُعد IoT Edge حساسًا لحالة الأحرف عند الإشارة إلى الوحدات النمطية، ويستخدم هذا الحل مكتبة تقوم بتنسيق كافة الطلبات بالأحرف الصغيرة.
    توفير مستودع صور Docker للوحدة النمطية يتضمن مستودع الصور اسم سجل الحاوية واسم صورة الحاوية الخاصة بك. تم ملء صورة الحاوية مسبقًا من الخطوة الأخيرة. استبدل localhost:5000 بقيمة خادم تسجيل الدخول من سجل حاوية Azure. يمكنك استرداد خادم تسجيل الدخول من صفحة النظرة العامة الخاصة بسجل الحاوية في مدخل Azure.

    تبدو السلسلة النهائية مثل <اسم> السجل.azurecr.io/classifier.

    توفير مستودع صور Docker

تقوم نافذة Visual Studio Code بتحميل مساحة العمل حل IoT Edge.

إضافة بيانات اعتماد التسجيل الخاصة بك

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

يحاول ملحق IoT Edge سحب بيانات اعتماد سجل الحاوية من Azure وتعبئتها في ملف البيئة. تحقق لمعرفة ما إذا كانت بيانات الاعتماد الخاصة بك مضمنة بالفعل. إذا لم يكن كذلك، فأضفها الآن:

  1. في مستكشف Visual Studio Code، افتح ملف .env.
  2. حدث الحقول باستخدام قيم اسم المستخدم وكلمة المرور التي نسختها من سجل حاوية Azure.
  3. احفظ هذا الملف.

إشعار

يستخدم هذا البرنامج التعليمي بيانات اعتماد تسجيل دخول المسؤول لسجل حاوية Azure، والتي تعتبر ملائمة لسيناريوهات التطوير والاختبار. عندما تكون جاهزًا لسيناريوهات الإنتاج، نوصي بخيار مصادقة أقل امتيازًا مثل أساسيات الخدمة. لمزيد من المعلومات، راجع إدارة الوصول إلى سجل الحاوية.

تحديد بنية الهدف

حاليًّا يمكن لـ Visual Studio Code إنشاء وحدات للأجهزة التي تعمل بنظامي Linux AMD64 وLinux ARM32v7. تحتاج إلى تحديد البنية التي تستهدفها مع كل حل، لأن الحاوية مبنية ويتم تشغيلها بشكل مختلف لكل نوع من أنواع البني. الافتراضي هو Linux AMD64، وهو ما نستخدمه لهذا البرنامج التعليمي.

  1. افتح لوحة الأوامر وابحث عن Azure IoT Edge: Set Default Target Platform for Edge Solution، أو حدد رمز الاختصار في الشريط الجانبي أسفل النافذة.

  2. في لوحة الأوامر، حدد بنية الهدف من قائمة الخيارات. في هذا البرنامج التعليمي، نستخدم جهازا ظاهريا Ubuntu كجهاز IoT Edge، لذا احتفظ ب amd64 الافتراضي.

إضافة مصنف الصور

يحتوي قالب وحدة Python في Visual Studio Code على بعض نماذج التعليمات البرمجية التي يمكنك تشغيلها لاختبار IoT Edge. لن تستخدم التعليمات البرمجية في هذا السيناريو. بدلًا من ذلك، استخدم الخطوات الموجودة في هذا القسم لاستبدال نموذج التعليمات البرمجية مع حاوية مصنف الصور التي قمت بتصديرها مسبقًا.

  1. في مستكشف الملفات، تصفح للوصول إلى حزمة Custom Vision التي قمت بتنزيلها واستخراجها. قم بنسخ المحتويات كافة من الحزمة المستخرجة. ينبغي أن يظهر لك مجلدان، app و azuremlوملفان، Dockerfile و README.

  2. في مستكشف الملفات، تصفح للوصول إلى الدليل حيث طلبت من Visual Studio Code إنشاء حل IoT Edge.

  3. افتح مجلد الوحدة النمطية المصنف. إذا كنت تستخدم الأسماء المقترحة في القسم السابق، فستبدو بنية المجلد كما يلي CustomVisionSolution / modules / classifier.

  4. قم بلصق الملفات في المجلد classifier.

  5. ارجع إلى نافذة Visual Studio Code. يجب أن تعرض مساحة عمل الحل ملفات مصنف الصور في مجلد الوحدة النمطية.

    مساحة عمل الحل مع ملفات مصنف الصور

  6. افتح الملف module.json في المجلد «المصنف».

  7. تحديث المعلمة platforms للإشارة إلى Dockerfile الجديدة التي قمت بإضافتها، وإزالة جميع الخيارات إلى جانب AMD64، وهو البنية الوحيدة التي نستخدمها لهذا البرنامج التعليمي.

    "platforms": {
        "amd64": "./Dockerfile"
    }
    
  8. احفظ تغييراتك.

إنشاء وحدة نمطية لمحاكاة الكاميرا

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

إضافة وحدة نمطية جديدة وتكوينها

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

  1. في نافذة Visual Studio Code نفسها، استخدم لوحة الأوامر لتشغيل Azure IoT Edge: Add IoT Edge Module. في لوحة الأوامر، قم بتوفير المعلومات التالية للوحدة النمطية الجديدة:

    المطالبة القيمة‬
    تحديد ملف قالب النشر حدد ملف deployment.template.js في المجلد CustomVisionSolution.
    تحديد قالب الوحدة النمطية حدد Python Module.
    تقديم اسم وحدة نمطية تسمية الوحدة النمطية cameraCapture
    توفير مستودع صور Docker للوحدة النمطية استبدل localhost:5000 بقيمة Login server من سجل حاوية Azure.

    تبدو السلسلة النهائية مثل registryname.azurecr.io/cameracapture>.<

    تقوم نافذة Visual Studio Code بتحميل الوحدة النمطية الجديدة في مساحة عمل الحل، وتحديث ملف deployment.template.json. الآن يجب أن يظهر لك مجلدا وحدة نمطية: classifier (المصنف) وcameraCapture.

  2. افتح ملف main.py في المجلد modules / cameraCapture.

  3. استبدل الملف بأكمله بالتعليمات البرمجية التالية. يُرسل نموذج التعليمات البرمجية هذا طلبات POST إلى خدمة معالجة الصور قيد التشغيل في الوحدة النمطية للمصنف. نقدم وحدة الحاوية هذه مع نموذج من الصورة لاستخدامها في الطلبات. ومن ثم يتم حزم الاستجابة كرسالة IoT Hub وإرسالها إلى قائمة انتظار الإخراج.

    # Copyright (c) Microsoft. All rights reserved.
    # Licensed under the MIT license. See LICENSE file in the project root for
    # full license information.
    
    import time
    import sys
    import os
    import requests
    import json
    from azure.iot.device import IoTHubModuleClient, Message
    
    # global counters
    SENT_IMAGES = 0
    
    # global client
    CLIENT = None
    
    # Send a message to IoT Hub
    # Route output1 to $upstream in deployment.template.json
    def send_to_hub(strMessage):
        message = Message(bytearray(strMessage, 'utf8'))
        CLIENT.send_message_to_output(message, "output1")
        global SENT_IMAGES
        SENT_IMAGES += 1
        print( "Total images sent: {}".format(SENT_IMAGES) )
    
    # Send an image to the image classifying server
    # Return the JSON response from the server with the prediction result
    def sendFrameForProcessing(imagePath, imageProcessingEndpoint):
        headers = {'Content-Type': 'application/octet-stream'}
    
        with open(imagePath, mode="rb") as test_image:
            try:
                response = requests.post(imageProcessingEndpoint, headers = headers, data = test_image)
                print("Response from classification service: (" + str(response.status_code) + ") " + json.dumps(response.json()) + "\n")
            except Exception as e:
                print(e)
                print("No response from classification service")
                return None
    
        return json.dumps(response.json())
    
    def main(imagePath, imageProcessingEndpoint):
        try:
            print ( "Simulated camera module for Azure IoT Edge. Press Ctrl-C to exit." )
    
            try:
                global CLIENT
                CLIENT = IoTHubModuleClient.create_from_edge_environment()
            except Exception as iothub_error:
                print ( "Unexpected error {} from IoTHub".format(iothub_error) )
                return
    
            print ( "The sample is now sending images for processing and will indefinitely.")
    
            while True:
                classification = sendFrameForProcessing(imagePath, imageProcessingEndpoint)
                if classification:
                    send_to_hub(classification)
                time.sleep(10)
    
        except KeyboardInterrupt:
            print ( "IoT Edge module sample stopped" )
    
    if __name__ == '__main__':
        try:
            # Retrieve the image location and image classifying server endpoint from container environment
            IMAGE_PATH = os.getenv('IMAGE_PATH', "")
            IMAGE_PROCESSING_ENDPOINT = os.getenv('IMAGE_PROCESSING_ENDPOINT', "")
        except ValueError as error:
            print ( error )
            sys.exit(1)
    
        if ((IMAGE_PATH and IMAGE_PROCESSING_ENDPOINT) != ""):
            main(IMAGE_PATH, IMAGE_PROCESSING_ENDPOINT)
        else: 
            print ( "Error: Image path or image-processing endpoint missing" )
    
  4. احفظ الملف main.py.

  5. افتح ملف requirements.txt.

  6. إضافة سطر جديد لمكتبة لتضمينها في الحاوية.

    requests
    
  7. احفظ الملف requirements.txt.

إضافة صورة اختبار إلى الحاوية

بدلًا من استخدام كاميرا حقيقية لتوفير موجز بالصور لهذا السيناريو، سنستخدم صورة اختبار واحدة. يتم تضمين صورة اختبار في GitHub repo التي قمت بتنزيلها لصور التدريب سابقًا في البرنامج التعليمي هذا.

  1. انتقل إلى صورة الاختبار، الموجودة في Cognitive-CustomVision-Windows / Samples / Images / Test.

  2. قم بنسخ test_image.jpg

  3. تصفح للوصول إلى دليل حل IoT Edge وقم بلصق صورة الاختبار في المجلد modules / cameraCapture . يجب أن تكون الصورة في المجلد ذاته مثل ملف main.py الذي قمت بتحريره في القسم السابق.

  4. في Visual Studio Code، افتح الملف Dockerfile.amd64 للوحدة النمطية cameraCapture.

  5. بعد السطر الذي يؤسس دليل العمل WORKDIR /app، قم بإضافة السطر التالي من التعليمات البرمجية:

    ADD ./test_image.jpg .
    
  6. احفظ ملف Dockerfile.

قم بإعداد بيان النشر

لقد قمت حتى الآن في هذا البرنامج التعليمي بتدريب نموذج Custom Vision لتصنيف صور الأشجار، وتعبئة هذا النموذج كوحدة IoT Edge النمطية. ثم قمت بإنشاء وحدة نمطية ثانية يمكنها الاستعلام عن خادم تصنيف الصور والإبلاغ عن نتائجه إلى IoT Hub. والآن، يمكنك إنشاء بيان النشر الذي سيُطلع جهاز IoT Edge على كيفية بدء هاتين الوحدتين معًا وتشغيلهما.

يوفر ملحق IoT Edge لـ Visual Studio Code قالبًا في كل حل من حلول IoT Edge لمساعدتك في إنشاء بيان نشر.

  1. افتح الملف deployment.template.json في مجلد الحل.

  2. ابحث عن قسم modules الذي يجب أن يحتوي على ثلاث وحدات نمطية: الوحدتان اللتان قمت بإنشائهما، classifier (المصنف) وcameraCapture، والثالث المضمن افتراضيًّا، SimulatedTemperatureSensor.

  3. احذف الوحدة النمطية SimulatedTemperatureSensor مع المعلمات الخاصة بها كافة. يتم تضمين هذه الوحدة النمطية لتوفير نموذج بيانات لسيناريوهات الاختبار، ولكننا لسنا بحاجة إليها في هذا النشر.

  4. إذا قمت بتسمية وحدة تصنيف الصور شيئًا آخر غير classifier، فتحقق من الاسم الآن وتأكد من أنه يتكون من أحرف صغيرة. استدعاء الوحدة النمطية cameraCapture الوحدة النمطية للمصنف باستخدام مكتبة طلبات تقوم بتنسيق كافة الطلبات في أحرف صغيرة وIoT Edge الحساسة للأحرف.

  5. تحديث المعلمة createOptions للوحدة النمطية cameraCapture مع JSON التالية. تؤدي هذه المعلومات إلى إنشاء متغيرات البيئة في حاوية الوحدة النمطية التي يتم استردادها في عملية main.py. من خلال تضمين هذه المعلومات في بيان النشر، يمكنك تغيير الصورة أو نقطة النهاية دون الحاجة إلى إعادة إنشاء صورة الوحدة النمطية.

    "createOptions": "{\"Env\":[\"IMAGE_PATH=test_image.jpg\",\"IMAGE_PROCESSING_ENDPOINT=http://classifier/image\"]}"
    

    إذا قمت بتسمية الوحدة النمطية لـ Custom Vision باسم آخر غير classifier، فقم بتحديث قيمة نقطة النهاية لمعالجة الصور لمطابقتها.

  6. في الجزء السفلي من الملف، قم بتحديث المعلمة routes للوحدة النمطية $edgeHub. تود توجيه نتائج التنبؤ من cameraCapture إلى IoT Hub.

        "routes": {
          "cameraCaptureToIoTHub": "FROM /messages/modules/cameraCapture/outputs/* INTO $upstream"
        },
    

    إذا قمت بتسمية الوحدة النمطية الثانية باسم آخر غير cameraCapture، فقم بتحديث قيمة الموجه لمطابقتها.

  7. احفظ ملف deployment.template.js.

بناء ودفع حل IoT Edge الخاص بك

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

بعد تكوين الصور في السجل، يمكنك نشر الحل في جهاز IoT Edge. يمكنك تعيين وحدات نمطية على جهاز من خلال مركز IoT، ولكن يمكنك أيضاً الوصول إلى مركز وأجهزة IoT من خلال Visual Studio Code. في هذا القسم، يمكنك إعداد الوصول إلى IoT Hub ثم استخدام Visual Studio Code لنشر الحل الخاص بك على جهاز IoT Edge.

أولاً، قم بإنشاء الحل ودفعه إلى سجل الحاوية.

  1. افتح المحطة الطرفية المتكاملة Visual Studio Code عن طريق تحديد عرض>المحطة الطرفية.

  2. تسجيل الدخول إلى Docker من خلال إدخال الأمر التالي في المحطة الطرفية. تسجيل الدخول باستخدام اسم المستخدم وكلمة المرور وخادم تسجيل الدخول من سجل الحاويات Azure. يمكنك استرداد هذه القيم من قسم Access keys في السجل الخاص بك في منصة Azure.

    docker login -u <ACR username> -p <ACR password> <ACR login server>
    

    قد تتلقى تحذيرًا أمنيًا يوصي باستخدام --password-stdin. على الرغم من أن أفضل الممارسات موصى بها لسيناريوهات الإنتاج، إلا أنها خارج نطاق هذا البرنامج التعليمي. لمزيد من المعلومات، راجع مرجع تسجيل دخول docker.

  3. في مستكشف Visual Studio Code، انقر بزر الماوس الأيمن فوق ملف deployment.template.json وحدد Build and Push IoT Edge solution.

    يبدأ أمر الإنشاء والدفع ثلاث عمليات. أولًا، يقوم بإنشاء مجلد جديد في الحل يُسمى config والذي يحتوي على بيان النشر الكامل، والذي تم إنشاؤه من المعلومات الموجودة في قالب النشر وملفات الحل الأخرى. ثانيًا، يقوم بتشغيل docker build لإنشاء صورة الحاوية بناءً على dockerfile المناسب للبنية المستهدفة. بعد ذلك، يتم تشغيل docker push لدفع مستودع الصور إلى سجل الحاوية الخاص بك.

    قد تستغرق هذه العملية عدة دقائق في المرة الأولى ولكن أسرع في المرة التالية التي تقوم بتشغيل الأوامر.

نشر الوحدات النمطية على الجهاز

استخدم مستكشف Visual Studio Code وملحق Azure IoT Edge لنشر مشروع الوحدة النمطية على جهاز IoT Edge. لديك بالفعل بيان نشر مُجهز للسيناريو الخاص بك، الملف deployment.amd64.json في مجلد التكوين. كل ما عليك القيام به الآن هو تحديد جهاز لتلقي النشر.

تأكد من أن جهاز IoT Edge الخاص بك يعمل.

  1. في مستكشف Visual Studio Code، ضمن قسم Azure IoT Hub، قم بتوسيع Devices لمشاهدة قائمة أجهزة IoT الخاصة بك.

  2. انقر بزر الماوس الأيمن فوق اسم جهاز IoT Edge الخاص بك، ثم حدد Create Deployment for Single Device.

  3. حدد ملف deployment.amd64.json في مجلد التكوين ثم حدد بيان نشر Edge. لا تستخدم ملف deployment.template.json.

  4. ضمن جهازك، قم بتوسيع Modules لمشاهدة قائمة بالوحدات النمطية التي تم نشرها وتشغيلها. حدد زر التحديث. يجب أن تشاهد وحدات classifier و cameraCapture الجديدة تعمل جنبًا إلى جنب مع $edgeAgent و $edgeHub.

كما يمكنك أيضًا التحقق من أن جميع الوحدات النمطية تعمل على جهازك نفسه. على جهاز IoT Edge، قم بتشغيل الأمر التالي لمشاهدة حالة الوحدات النمطية.

iotedge list

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

عرض نتائج تحليلات التصنيف

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

من جهازك، اعرض سجلات وحدة cameraCapture النمطية للاطّلاع على الرسائل التي يتم إرسالها والتأكيد على أنها وردت بواسطة IoT Hub.

iotedge logs cameraCapture

على سبيل المثال، يجب أن تشاهد الإخراج كما يلي:

admin@vm:~$ iotedge logs cameraCapture
Simulated camera module for Azure IoT Edge. Press Ctrl-C to exit.
The sample is now sending images for processing and will indefinitely.
Response from classification service: (200) {"created": "2023-07-13T17:38:42.940878", "id": "", "iteration": "", "predictions": [{"boundingBox": null, "probability": 1.0, "tagId": "", "tagName": "hemlock"}], "project": ""}

Total images sent: 1
Response from classification service: (200) {"created": "2023-07-13T17:38:53.444884", "id": "", "iteration": "", "predictions": [{"boundingBox": null, "probability": 1.0, "tagId": "", "tagName": "hemlock"}], "project": ""}

يمكنك أيضا عرض الرسائل من Visual Studio Code. انقر بزر الماوس الأيمن فوق اسم جهاز IoT Edge وحدد بدء مراقبة نقطة نهاية الحدث المضمنة.

[IoTHubMonitor] [2:43:36 PM] Message received from [vision-device/cameraCapture]:
{
  "created": "2023-07-13T21:43:35.697782",
  "id": "",
  "iteration": "",
  "predictions": [
    {
      "boundingBox": null,
      "probability": 1,
      "tagId": "",
      "tagName": "hemlock"
    }
  ],
  "project": ""
}

إشعار

في البداية، قد تظهر لك أخطاء الاتصال في الإخراج من وحدة cameraCapture النمطية. ويرجع ذلك إلى التأخير بين الوحدات النمطية التي يتم نشرها والبدء.

تقوم وحدة cameraCapture النمطية بإعادة الاتصال تلقائيًّا حتى ينجح الأمر. بعد نجاح الاتصال، سترى رسائل تصنيف الصور المتوقعة.

تتضمن النتائج من الوحدة النمطية Custom Vision التي يتم إرسالها كرسائل من وحدة cameraCapture احتمال أن تكون الصورة إما من شجرة hemlock أو cherry. بما أن الصورة هي hemlock، فينبغي أن يظهر الاحتمال على أنه 1.0.

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

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

غير ذلك يمكنك حذف التكوينات المحلية وموارد Azure التي استخدمتها في هذه المقالة لتجنب التكاليف.

قم بحذف موارد Azure.

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

لحذف الموارد:

  1. سجل الدخول إلى مدخل Azure، وحدد "Resource groups".

  2. حدد اسم مجموعة الموارد التي تحتوي على موارد اختبار IoT Edge.

  3. راجع قائمة الموارد الموجودة في مجموعة الموارد الخاصة بك. إذا كنت تريد حذفها جميعاً، يمكنك تحديد Delete resource group. إذا كنت تريد حذف بعضها فقط، فيمكنك النقر فوق كل مورد لحذفها بشكل فردي.

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

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

تابع إلى البرامج التعليمية التالية للتعرف على الطرق الأخرى التي يمكن أن يساعدك بها Azure IoT Edge في تحويل البيانات إلى رؤى للأعمال على الحافة.