Quickstart: إنشاء مشروع تصنيف صور باستخدام مكتبة عميل Custom Vision أو REST API

البدء مع مكتبة عميل الرؤية المخصصة لـ .NET. اتبع هذه الخطوات لتثبيت الحزمة وتجربة التعليمات البرمجية المثال لإنشاء نموذج تصنيف صورة. ستقوم بإنشاء مشروع وإضافة علامات وتدريب المشروع واستخدام عنوان URL لنقطة نهاية التنبؤ للمشروع لاختباره برمجيا. استخدم هذا المثال كنموذج لإنشاء تطبيقك الخاص بالتعرف على الصور.

إشعار

إذا كنت ترغب في إنشاء نموذج التصنيف والتدرب عليه دون كتابة التعليمات البرمجية، يُرجى مراجعة الإرشادات المستندة إلى المتصفح بدلاً من ذلك.

نماذجوثائق مرجعية | تعليمة مصدر المكتبة البرمجية (تدريب)(تنبؤ) | حزمة (NuGet) (تدريب)(تنبؤ) | نماذج

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

  • اشتراك Azure - إنشاء اشتراك مجانًا
  • إصدار Visual Studio IDE أو الإصدار الحالي من .NET Core.
  • بمجرد أن يكون لديك اشتراك Azure، قم بإنشاء مورد Custom Vision في مدخل Microsoft Azure لإنشاء مورد تدريب وتنبؤ.
    • يمكنك استخدام مستوى التسعير الحر (F0) لتجربة الخدمة، والترقية لاحقًا إلى مستوى مدفوع للإنتاج.

إنشاء متغيرات البيئة

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

انتقل إلى مدخل Azure. إذا تم نشر موارد Custom Vision التي أنشأتها في قسم المتطلبات الأساسية بنجاح، فحدد الزر Go to Resource ضمن Next Steps. يمكنك العثور على المفاتيح ونقاط النهاية في صفحات مفتاح الموارد ونقطة النهاية، ضمن إدارة الموارد. ستحتاج إلى الحصول على مفاتيح لكل من موارد التدريب والتنبؤ، جنبا إلى جنب مع نقاط نهاية واجهة برمجة التطبيقات.

يمكنك العثور على معرف مورد التنبؤ في علامة تبويب خصائص مورد التنبؤ في مدخل Microsoft Azure، المدرجة كمعرف المورد.

تلميح

يمكنك أيضا استخدام https://www.customvision.ai/ للحصول على هذه القيم. بعد تسجيل الدخول، حدد أيقونة Settings في أعلى اليمين. في صفحات الإعداد ، يمكنك عرض جميع المفاتيح ومعرف المورد ونقاط النهاية.

تنبيه

لا تقم بتضمين المفتاح مباشرة في التعليمات البرمجية الخاصة بك، ولا تنشره بشكل عام. راجع مقالة أمان خدمات Azure الذكاء الاصطناعي لمزيد من خيارات المصادقة مثل Azure Key Vault.

لتعيين متغيرات البيئة، افتح نافذة وحدة التحكم واتبع الإرشادات الخاصة بنظام التشغيل وبيئة التطوير.

  1. لتعيين VISION_TRAINING KEY متغير البيئة، استبدل your-training-key بأحد مفاتيح مورد التدريب الخاص بك.
  2. لتعيين VISION_TRAINING_ENDPOINT متغير البيئة، استبدل your-training-endpoint بنقطة النهاية لمورد التدريب الخاص بك.
  3. لتعيين VISION_PREDICTION_KEY متغير البيئة، استبدل your-prediction-key بأحد مفاتيح مورد التنبؤ الخاص بك.
  4. لتعيين VISION_PREDICTION_ENDPOINT متغير البيئة، استبدل your-prediction-endpoint بنقطة النهاية لمورد التنبؤ الخاص بك.
  5. لتعيين VISION_PREDICTION_RESOURCE_ID متغير البيئة، استبدل your-resource-id بمعرف المورد لمورد التنبؤ الخاص بك.
setx VISION_TRAINING_KEY your-training-key
setx VISION_TRAINING_ENDPOINT your-training-endpoint
setx VISION_PREDICTION_KEY your-prediction-key
setx VISION_PREDICTION_ENDPOINT your-prediction-endpoint
setx VISION_PREDICTION_RESOURCE_ID your-resource-id

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

الإعداد

إنشاء تطبيق C# جديد

باستخدام Visual Studio، قم بإنشاء تطبيق .NET Core جديد.

تثبيت مكتبة العميل

بمجرد إنشاء مشروع جديد، تثبيت مكتبة العميل بالنقر بزر الماوس الأيمن فوق حل المشروع في "Solution Explorer" وتحديد "Manage NuGet Packages". في إدارة الحزمة المراد فتحها، حدد "Browse"، "check" تضمين الإصدار المسبق والبحث عن Microsoft.Azure.CognitiveServices.Vision.CustomVision.TrainingوMicrosoft.Azure.CognitiveServices.Vision.CustomVision.Prediction. حدد أحدث إصدار ثم ثبته.

تلميح

هل تريد عرض ملف التعليمات البرمجية للبدء السريع بالكامل في الحال؟ يُمكن العثور على GitHub، والذي يحتوي على أمثلة التعليمات البرمجية في التشغيل السريع.

من دليل المشروع، افتح الملف program.cs ثم أضف التوجيهات using التالية:

using Microsoft.Azure.CognitiveServices.Vision.CustomVision.Prediction;
using Microsoft.Azure.CognitiveServices.Vision.CustomVision.Training;
using Microsoft.Azure.CognitiveServices.Vision.CustomVision.Training.Models;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading;

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

// Retrieve the environment variables for your credentials:
private static string trainingEndpoint = Environment.GetEnvironmentVariable("VISION_TRAINING_ENDPOINT");

private static string trainingKey = Environment.GetEnvironmentVariable("VISION_TRAINING_KEY");
private static string predictionEndpoint = Environment.GetEnvironmentVariable("VISION_PREDICTION_ENDPOINT");
private static string predictionKey = Environment.GetEnvironmentVariable("VISION_PREDICTION_KEY");

private static string predictionResourceId = Environment.GetEnvironmentVariable("VISION_PREDICTION_RESOURCE_ID");

private static List<string> hemlockImages;
private static List<string> japaneseCherryImages;
private static Tag hemlockTag;
private static Tag japaneseCherryTag;
private static Iteration iteration;
private static string publishedModelName = "treeClassModel";
private static MemoryStream testImage;

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

CustomVisionTrainingClient trainingApi = AuthenticateTraining(trainingEndpoint, trainingKey);
CustomVisionPredictionClient predictionApi = AuthenticatePrediction(predictionEndpoint, predictionKey);

Project project = CreateProject(trainingApi);
AddTags(trainingApi, project);
UploadImages(trainingApi, project);
TrainProject(trainingApi, project);
PublishIteration(trainingApi, project);
TestIteration(predictionApi, project);
DeleteProject(trainingApi, project);

مصادقة العميل

وفقاً للأسلوب الجديد، أنشئ مثيل تدريب وتنبؤ العملاء باستخدام نقطة النهاية والمفاتيح.

private static CustomVisionTrainingClient AuthenticateTraining(string endpoint, string trainingKey)
{
    // Create the Api, passing in the training key
    CustomVisionTrainingClient trainingApi = new CustomVisionTrainingClient(new Microsoft.Azure.CognitiveServices.Vision.CustomVision.Training.ApiKeyServiceClientCredentials(trainingKey))
    {
        Endpoint = endpoint
    };
    return trainingApi;
}
private static CustomVisionPredictionClient AuthenticatePrediction(string endpoint, string predictionKey)
{
    // Create a prediction endpoint, passing in the obtained prediction key
    CustomVisionPredictionClient predictionApi = new CustomVisionPredictionClient(new Microsoft.Azure.CognitiveServices.Vision.CustomVision.Prediction.ApiKeyServiceClientCredentials(predictionKey))
    {
        Endpoint = endpoint
    };
    return predictionApi;
}

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

هذا الكود الصغير القادم من التعليمات البرمجية يقوم بإنشاء مشروع تصنيف صورة. سيظهر المشروع الذي تم إنشاؤه على موقع الرؤية المخصصة. راجع أسلوب إنشاء مشروع لتحديد الخيارات الأخرى عند إنشاء مشروعك (موضح في دليل مدخل الويب إنشاء مصنف).

private static Project CreateProject(CustomVisionTrainingClient trainingApi)
{
    // Create a new project
    Console.WriteLine("Creating new project:");
    return trainingApi.CreateProject("My New Project");
}

إضافة علامات للمشروع

تُحدد هذه الطريقة العلامات التي ستقوم بتدريب الطراز عليها.

private static void AddTags(CustomVisionTrainingClient trainingApi, Project project)
{
    // Make two tags in the new project
    hemlockTag = trainingApi.CreateTag(project.Id, "Hemlock");
    japaneseCherryTag = trainingApi.CreateTag(project.Id, "Japanese Cherry");
}

تحميل الصور ووضع علامات عليها

أولا، قم بتنزيل نموذج الصور لهذا المشروع. حفظ محتويات نموذج مجلد الصور على جهازك المحلي.

ثم قم بتعريف أسلوب مساعد لتحميل الصور في هذا الدليل. قد تحتاج إلى تحرير وسيطة GetFiles للإشارة إلى الموقع الذي يتم حفظ الصور فيه.

private static void LoadImagesFromDisk()
{
    // this loads the images to be uploaded from disk into memory
    hemlockImages = Directory.GetFiles(Path.Combine("Images", "Hemlock")).ToList();
    japaneseCherryImages = Directory.GetFiles(Path.Combine("Images", "Japanese_Cherry")).ToList();
    testImage = new MemoryStream(File.ReadAllBytes(Path.Combine("Images", "Test", "test_image.jpg")));
}

بعد ذلك، حدد طريقة لتحميل الصور، وتطبيق العلامات وفقًا لموقع المجلد الخاص بها (تم فرز الصور بالفعل). يمكنك تحميل الصور ووضع علامة عليها بشكل متكرر، أو على دفعة (تصل إلى 64 لكل دفعة). تحتوي هذه التعليمات البرمجية المتكررة على أمثلة من كليهما.

private static void UploadImages(CustomVisionTrainingClient trainingApi, Project project)
{
    // Add some images to the tags
    Console.WriteLine("\tUploading images");
    LoadImagesFromDisk();

    // Images can be uploaded one at a time
    foreach (var image in hemlockImages)
    {
        using (var stream = new MemoryStream(File.ReadAllBytes(image)))
        {
            trainingApi.CreateImagesFromData(project.Id, stream, new List<Guid>() { hemlockTag.Id });
        }
    }

    // Or uploaded in a single batch 
    var imageFiles = japaneseCherryImages.Select(img => new ImageFileCreateEntry(Path.GetFileName(img), File.ReadAllBytes(img))).ToList();
    trainingApi.CreateImagesFromFiles(project.Id, new ImageFileCreateBatch(imageFiles, new List<Guid>() { japaneseCherryTag.Id }));

}

التدريب على المشروع

يُنشئ هذا الأسلوب تكرار التدريب الأول في المشروع. إنه يوضح الخدمة حتى اكتمال التدريب.

private static void TrainProject(CustomVisionTrainingClient trainingApi, Project project)
{
    // Now there are images with tags start training the project
    Console.WriteLine("\tTraining");
    iteration = trainingApi.TrainProject(project.Id);

    // The returned iteration will be in progress, and can be queried periodically to see when it has completed
    while (iteration.Status == "Training")
    {
        Console.WriteLine("Waiting 10 seconds for training to complete...");
        Thread.Sleep(10000);

        // Re-query the iteration to get it's updated status
        iteration = trainingApi.GetIteration(project.Id, iteration.Id);
    }
}

تلميح

التدريب باستخدام علامات محددة

اختيارياً، يمكنك التدريب على مجموعة فرعية فقط من العلامات المطبقة. قد ترغب في القيام بذلك إذا لم تكن قد طبقت ما يكفي من العلامات المُحددة حتى الآن، ولكن لديك ما يكفي من العلامات الأخرى. في استدعاء"TrainProject"، استخدام المعلمة الخاصة بـ trainingParameters. أنشئ "TrainingParameters" وتعيين خاصية "SelectedTags" لإدراجها في قائمة معرفات العلامات التي تريد استخدامها. سيدربك النموذج على التعرف فقط على العلامات المُدرجة في تلك القائمة.

نشر التكرار الحالي

يتيح هذا الأسلوب الاستعلام عن التكرار الحالي للنموذج. يُمكن استخدام اسم الطراز كمرجع لإرسال طلبات التنبؤ. تحتاج إلى إدخال القيمة لـ predictionResourceId. يُمكن العثور على معرف مورد التنبؤ في علامة التبويب "Properties" الخاصة بالمورد في مدخل Microsoft Azure، المُدرجة باسم معرف المورد.

private static void PublishIteration(CustomVisionTrainingClient trainingApi, Project project)
{
    trainingApi.PublishIteration(project.Id, iteration.Id, publishedModelName, predictionResourceId);
    Console.WriteLine("Done!\n");

    // Now there is a trained endpoint, it can be used to make a prediction
}

اختبار نقطة نهاية التنبؤ

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

private static void TestIteration(CustomVisionPredictionClient predictionApi, Project project)
{

    // Make a prediction against the new project
    Console.WriteLine("Making a prediction:");
    var result = predictionApi.ClassifyImage(project.Id, publishedModelName, testImage);

    // Loop over each prediction and write out the results
    foreach (var c in result.Predictions)
    {
        Console.WriteLine($"\t{c.TagName}: {c.Probability:P1}");
    }
}

شغّل التطبيق

قم بتشغيل التطبيق بنقر الزر Debug أعلى نافذة IDE.

عند تشغيل التطبيق، فإنه يجب فتح نافذة وحدة تحكم وكتابة الإخراج التالي:

Creating new project:
        Uploading images
        Training
Done!

Making a prediction:
        Hemlock: 95.0%
        Japanese Cherry: 0.0%

يمكنك بعد ذلك التحقق من أن صورة الاختبار (الموجودة في Images/Test/) موسومة بشكل مناسب. قم بالضغط على أي مفتاح للخروج من التطبيق يمكنك أيضاً العودة إلى الموقع الإلكتروني لـ Custom Vision ورؤية الحالة الحالية لمشروعك الذي تم إنشاؤه حديثاً.

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

إذا كنت ترغب في تنفيذ مشروع تصنيف الصور الخاص بك (أو تجربة مشروع الكشف عن الكائنات بدلاً من ذلك)، فقد ترغب في حذف مشروع تعريف الشجرة من هذا المثال. يسمح الاشتراك المجاني بمشروعي Custom Vision.

على موقع ويب Custom Vision، انتقل إلى Projects وحدِّد سلة المهملات ضمن My New Project.

لقطة شاشة للوحة تسمى مشروعي الجديد مع أيقونة سلة المهملات.

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

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

يقدم هذا الدليل إرشادات ونماذج من التعليمات البرمجية لمساعدتك على البدء في استخدام مكتبة عميل Custom Vision لإنشاء نموذج تصنيف الصور. ستقوم بإنشاء مشروع وإضافة علامات وتدريب المشروع واستخدام عنوان URL لنقطة نهاية التنبؤ للمشروع لاختباره برمجيًا. استخدم هذا المثال كنموذج لإنشاء تطبيقك الخاص بالتعرف على الصور.

إشعار

إذا كنت ترغب في إنشاء نموذج التصنيف والتدرب عليه دون كتابة التعليمات البرمجية، يُرجى مراجعة الإرشادات المستندة إلى المتصفح بدلاً من ذلك.

استخدام مكتبة عميل الرؤية المخصصة للانتقال إلى:

  • إنشاء مشروع Custom Vision جديد
  • إضافة علامات للمشروع
  • تحميل الصور ووضع علامات عليها
  • التدريب على المشروع
  • نشر التكرار الحالي
  • اختبار نقطة نهاية التنبؤ

الوثائق المرجعية (التدريب)(التنبؤ)

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

  • اشتراك Azure - إنشاء اشتراك مجانًا
  • Go 1.8+
  • بمجرد أن يكون لديك اشتراك Azure، قم بإنشاء مورد Custom Vision في مدخل Microsoft Azure لإنشاء مورد تدريب وتنبؤ.
    • يمكنك استخدام مستوى التسعير الحر (F0) لتجربة الخدمة، والترقية لاحقًا إلى مستوى مدفوع للإنتاج.

إنشاء متغيرات البيئة

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

انتقل إلى مدخل Azure. إذا تم نشر موارد Custom Vision التي أنشأتها في قسم المتطلبات الأساسية بنجاح، فحدد الزر Go to Resource ضمن Next Steps. يمكنك العثور على المفاتيح ونقاط النهاية في صفحات مفتاح الموارد ونقطة النهاية، ضمن إدارة الموارد. ستحتاج إلى الحصول على مفاتيح لكل من موارد التدريب والتنبؤ، جنبا إلى جنب مع نقاط نهاية واجهة برمجة التطبيقات.

يمكنك العثور على معرف مورد التنبؤ في علامة تبويب خصائص مورد التنبؤ في مدخل Microsoft Azure، المدرجة كمعرف المورد.

تلميح

يمكنك أيضا استخدام https://www.customvision.ai/ للحصول على هذه القيم. بعد تسجيل الدخول، حدد أيقونة Settings في أعلى اليمين. في صفحات الإعداد ، يمكنك عرض جميع المفاتيح ومعرف المورد ونقاط النهاية.

تنبيه

لا تقم بتضمين المفتاح مباشرة في التعليمات البرمجية الخاصة بك، ولا تنشره بشكل عام. راجع مقالة أمان خدمات Azure الذكاء الاصطناعي لمزيد من خيارات المصادقة مثل Azure Key Vault.

لتعيين متغيرات البيئة، افتح نافذة وحدة التحكم واتبع الإرشادات الخاصة بنظام التشغيل وبيئة التطوير.

  1. لتعيين VISION_TRAINING KEY متغير البيئة، استبدل your-training-key بأحد مفاتيح مورد التدريب الخاص بك.
  2. لتعيين VISION_TRAINING_ENDPOINT متغير البيئة، استبدل your-training-endpoint بنقطة النهاية لمورد التدريب الخاص بك.
  3. لتعيين VISION_PREDICTION_KEY متغير البيئة، استبدل your-prediction-key بأحد مفاتيح مورد التنبؤ الخاص بك.
  4. لتعيين VISION_PREDICTION_ENDPOINT متغير البيئة، استبدل your-prediction-endpoint بنقطة النهاية لمورد التنبؤ الخاص بك.
  5. لتعيين VISION_PREDICTION_RESOURCE_ID متغير البيئة، استبدل your-resource-id بمعرف المورد لمورد التنبؤ الخاص بك.
setx VISION_TRAINING_KEY your-training-key
setx VISION_TRAINING_ENDPOINT your-training-endpoint
setx VISION_PREDICTION_KEY your-prediction-key
setx VISION_PREDICTION_ENDPOINT your-prediction-endpoint
setx VISION_PREDICTION_RESOURCE_ID your-resource-id

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

الإعداد

تثبيت مكتبة عميل الرؤية المخصصة

لكتابة تطبيق تحليل الصور باستخدام الرؤية المخصصة للانتقال، ستحتاج إلى مكتبة عميل خدمة الرؤية المخصصة. شغّل الأمر التالي في PowerShell :

go get -u github.com/Azure/azure-sdk-for-go/...

أو إذا كنت تستخدم dep، في نطاق مستودعك:

dep ensure -add github.com/Azure/azure-sdk-for-go

احصل على التعليمات البرمجية للنموذج

يستخدم هذا المثال الصور من مستودع نماذج Python SDK لخدمات Azure الذكاء الاصطناعي على GitHub. استنساخ أو تحميل هذا المستودع إلى بيئة التطوير الخاصة بك. تذكر موقع المجلد الخاص به لخطوة لاحقة.

إنشاء مشروع الرؤية المخصصة

أنشئ ملفًا جديدًا يُسمى sample.go في دليل مشروعك المفضل وافتحه في برنامج محرر التعليمات البرمجية المفضل لديك.

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

راجع أسلوب إنشاء مشروع لتحديد الخيارات الأخرى عند إنشاء مشروعك (موضح في دليل مدخل الويب إنشاء مصنف).

import(
    "context"
    "bytes"
    "fmt"
    "io/ioutil"
    "path"
    "log"
    "time"
    "github.com/Azure/azure-sdk-for-go/services/cognitiveservices/v3.0/customvision/training"
    "github.com/Azure/azure-sdk-for-go/services/cognitiveservices/v3.0/customvision/prediction"
)

var (
    training_key string = os.Getenv("VISION_TRAINING_KEY")
    prediction_key string = os.Getenv("VISION_PREDICTION_KEY")
    prediction_resource_id = os.Getenv("VISION_PREDICTION_RESOURCE_ID")
    endpoint string = os.Getenv("VISION_ENDPOINT")    

    project_name string = "Go Sample Project"
    iteration_publish_name = "classifyModel"
    sampleDataDirectory = "<path to sample images>"
)

func main() {
    fmt.Println("Creating project...")

    ctx = context.Background()

    trainer := training.New(training_key, endpoint)

    project, err := trainer.CreateProject(ctx, project_name, "sample project", nil, string(training.Multilabel))
    if (err != nil) {
        log.Fatal(err)
    }

إضافة علامات في المشروع

لإضافة علامات تصنيف إلى مشروعك، أضف التعليمات البرمجية التالية بنهاية ملف sample.go :

// Make two tags in the new project
hemlockTag, _ := trainer.CreateTag(ctx, *project.ID, "Hemlock", "Hemlock tree tag", string(training.Regular))
cherryTag, _ := trainer.CreateTag(ctx, *project.ID, "Japanese Cherry", "Japanese cherry tree tag", string(training.Regular))

تحميل الصور ووضع علامات عليها

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

إشعار

ستحتاج إلى تغيير المسار إلى الصور استنادا إلى المكان الذي قمت بتنزيل مشروع Azure الذكاء الاصطناعي services Go SDK Samples سابقا.

fmt.Println("Adding images...")
japaneseCherryImages, err := ioutil.ReadDir(path.Join(sampleDataDirectory, "Japanese Cherry"))
if err != nil {
    fmt.Println("Error finding Sample images")
}

hemLockImages, err := ioutil.ReadDir(path.Join(sampleDataDirectory, "Hemlock"))
if err != nil {
    fmt.Println("Error finding Sample images")
}

for _, file := range hemLockImages {
    imageFile, _ := ioutil.ReadFile(path.Join(sampleDataDirectory, "Hemlock", file.Name()))
    imageData := ioutil.NopCloser(bytes.NewReader(imageFile))

    trainer.CreateImagesFromData(ctx, *project.ID, imageData, []string{ hemlockTag.ID.String() })
}

for _, file := range japaneseCherryImages {
    imageFile, _ := ioutil.ReadFile(path.Join(sampleDataDirectory, "Japanese Cherry", file.Name()))
    imageData := ioutil.NopCloser(bytes.NewReader(imageFile))
    trainer.CreateImagesFromData(ctx, *project.ID, imageData, []string{ cherryTag.ID.String() })
}

التدريب على المشروع ونشره

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

fmt.Println("Training...")
iteration, _ := trainer.TrainProject(ctx, *project.ID)
for {
    if *iteration.Status != "Training" {
        break
    }
    fmt.Println("Training status: " + *iteration.Status)
    time.Sleep(1 * time.Second)
    iteration, _ = trainer.GetIteration(ctx, *project.ID, *iteration.ID)
}
fmt.Println("Training status: " + *iteration.Status)

trainer.PublishIteration(ctx, *project.ID, *iteration.ID, iteration_publish_name, prediction_resource_id))

استخدام نقطة نهاية التنبؤ

لإرسال صورة إلى نقطة نهاية التنبؤ واسترداد التنبؤ، أضف التعليمات البرمجية التالية إلى نهاية الملف:

    fmt.Println("Predicting...")
    predictor := prediction.New(prediction_key, endpoint)

    testImageData, _ := ioutil.ReadFile(path.Join(sampleDataDirectory, "Test", "test_image.jpg"))
    results, _ := predictor.ClassifyImage(ctx, *project.ID, iteration_publish_name, ioutil.NopCloser(bytes.NewReader(testImageData)), "")

    for _, prediction := range *results.Predictions    {
        fmt.Printf("\t%s: %.2f%%", *prediction.TagName, *prediction.Probability * 100)
        fmt.Println("")
    }
}

شغّل التطبيق

شغِّل sample.go .

go run sample.go

يجب أن تكون مخرجات التطبيق مشابهة للنص التالي:

Creating project...
Adding images...
Training...
Training status: Training
Training status: Training
Training status: Training
Training status: Completed
Done!
        Hemlock: 93.53%
        Japanese Cherry: 0.01%

يمكنك بعد ذلك التحقق من أن صورة الاختبار (الموجودة في <base_image_url>/Images/Test/) موسومة بشكل مناسب. يمكنك أيضاً العودة إلى الموقع الإلكتروني لـ Custom Vision ورؤية الحالة الحالية لمشروعك الذي تم إنشاؤه حديثاً.

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

إذا كنت ترغب في تنفيذ مشروع تصنيف الصور الخاص بك (أو تجربة مشروع الكشف عن الكائنات بدلاً من ذلك)، فقد ترغب في حذف مشروع تعريف الشجرة من هذا المثال. يسمح الاشتراك المجاني بمشروعي Custom Vision.

على موقع ويب Custom Vision، انتقل إلى Projects وحدِّد سلة المهملات ضمن My New Project.

لقطة شاشة للوحة تسمى مشروعي الجديد مع أيقونة سلة المهملات.

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

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

البدء باستخدامCustom Vision client library الخاصة بـ Java لإنشاء نموذج تصنيف الصور. اتبع هذه الخطوات لتثبيت الحزمة وتجربة نموذج تعليمات البرمجة للمهام الأساسية. استخدم هذا المثال كنموذج لإنشاء تطبيقك الخاص بالتعرف على الصور.

إشعار

إذا كنت ترغب في إنشاء نموذج التصنيف والتدرب عليه دون كتابة التعليمات البرمجية، يُرجى مراجعة الإرشادات المستندة إلى المتصفح بدلاً من ذلك.

استخدم مكتبة عميلCustom Vision client library الخاص بـ Java لـ:

  • إنشاء مشروع Custom Vision جديد
  • إضافة علامات للمشروع
  • تحميل الصور ووضع علامات عليها
  • التدريب على المشروع
  • نشر التكرار الحالي
  • اختبار نقطة نهاية التنبؤ

نماذج التوثيق المرجعي | التعليمة البرمجية لمصدر المكتبة (تدريب)(تنبؤ)| بيانات اصطناعية (Maven) (تدريب)(تنبؤ) | نماذج

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

إنشاء متغيرات البيئة

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

انتقل إلى مدخل Azure. إذا تم نشر موارد Custom Vision التي أنشأتها في قسم المتطلبات الأساسية بنجاح، فحدد الزر Go to Resource ضمن Next Steps. يمكنك العثور على المفاتيح ونقاط النهاية في صفحات مفتاح الموارد ونقطة النهاية، ضمن إدارة الموارد. ستحتاج إلى الحصول على مفاتيح لكل من موارد التدريب والتنبؤ، جنبا إلى جنب مع نقاط نهاية واجهة برمجة التطبيقات.

يمكنك العثور على معرف مورد التنبؤ في علامة تبويب خصائص مورد التنبؤ في مدخل Microsoft Azure، المدرجة كمعرف المورد.

تلميح

يمكنك أيضا استخدام https://www.customvision.ai/ للحصول على هذه القيم. بعد تسجيل الدخول، حدد أيقونة Settings في أعلى اليمين. في صفحات الإعداد ، يمكنك عرض جميع المفاتيح ومعرف المورد ونقاط النهاية.

تنبيه

لا تقم بتضمين المفتاح مباشرة في التعليمات البرمجية الخاصة بك، ولا تنشره بشكل عام. راجع مقالة أمان خدمات Azure الذكاء الاصطناعي لمزيد من خيارات المصادقة مثل Azure Key Vault.

لتعيين متغيرات البيئة، افتح نافذة وحدة التحكم واتبع الإرشادات الخاصة بنظام التشغيل وبيئة التطوير.

  1. لتعيين VISION_TRAINING KEY متغير البيئة، استبدل your-training-key بأحد مفاتيح مورد التدريب الخاص بك.
  2. لتعيين VISION_TRAINING_ENDPOINT متغير البيئة، استبدل your-training-endpoint بنقطة النهاية لمورد التدريب الخاص بك.
  3. لتعيين VISION_PREDICTION_KEY متغير البيئة، استبدل your-prediction-key بأحد مفاتيح مورد التنبؤ الخاص بك.
  4. لتعيين VISION_PREDICTION_ENDPOINT متغير البيئة، استبدل your-prediction-endpoint بنقطة النهاية لمورد التنبؤ الخاص بك.
  5. لتعيين VISION_PREDICTION_RESOURCE_ID متغير البيئة، استبدل your-resource-id بمعرف المورد لمورد التنبؤ الخاص بك.
setx VISION_TRAINING_KEY your-training-key
setx VISION_TRAINING_ENDPOINT your-training-endpoint
setx VISION_PREDICTION_KEY your-prediction-key
setx VISION_PREDICTION_ENDPOINT your-prediction-endpoint
setx VISION_PREDICTION_RESOURCE_ID your-resource-id

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

الإعداد

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

في إطار نافذة وحدة التحكم (مثل cmd أو PowerShell أو Bash)، يمكنك إنشاء دليل جديد لتطبيقك وانتقل إليه.

mkdir myapp && cd myapp

بادر بتشغيل الأمر gradle init من دليل العمل خاصتك. سينشئ هذا الأمر ملفات بناء أساسية لـ Gradle، بما في ذلك build.gradle.kts، والذي يجري استخدامه في وقت التشغيل لإنشاء تطبيقك وتكوينه.

gradle init --type basic

عند طلب اختيار DSL، حدد Kotlin.

تثبيت مكتبة العميل

حدد build.gradle.kts وافتحه باستخدام IDE أو محرر النص المفضل لديك. ثم انسخ في تكوين البناء التالي. يُعرّف هذا التكوين المشروع على أنه تطبيق Java التي تُعد نقطة دخوله هي الفئة CustomVisionQuickstart. إنه يستورد مكتبات الرؤية المُخصصة.

plugins {
    java
    application
}
application { 
    mainClassName = "CustomVisionQuickstart"
}
repositories {
    mavenCentral()
}
dependencies {
    compile(group = "com.azure", name = "azure-cognitiveservices-customvision-training", version = "1.1.0-preview.2")
    compile(group = "com.azure", name = "azure-cognitiveservices-customvision-prediction", version = "1.1.0-preview.2")
}

إنشاء ملف Java

من دليل العمل الخاص بك، قم بتشغيل الأمر التالي لإنشاء مجلد مصدر المشروع:

mkdir -p src/main/java

الانتقال إلى المجلد الجديد وأنشِئ ملفاً باسم CustomVisionQuickstart.java. افتحه في المحرر المفضل لديك أو IDE وأضف عبارات import التالية:

import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.UUID;

import com.google.common.io.ByteStreams;

import com.microsoft.azure.cognitiveservices.vision.customvision.training.models.Classifier;
import com.microsoft.azure.cognitiveservices.vision.customvision.training.models.Domain;
import com.microsoft.azure.cognitiveservices.vision.customvision.training.models.DomainType;
import com.microsoft.azure.cognitiveservices.vision.customvision.training.models.ImageFileCreateBatch;
import com.microsoft.azure.cognitiveservices.vision.customvision.training.models.ImageFileCreateEntry;
import com.microsoft.azure.cognitiveservices.vision.customvision.training.models.Iteration;
import com.microsoft.azure.cognitiveservices.vision.customvision.training.models.Project;
import com.microsoft.azure.cognitiveservices.vision.customvision.training.models.Region;
import com.microsoft.azure.cognitiveservices.vision.customvision.training.models.TrainProjectOptionalParameter;
import com.microsoft.azure.cognitiveservices.vision.customvision.training.CustomVisionTrainingClient;
import com.microsoft.azure.cognitiveservices.vision.customvision.training.Trainings;
import com.microsoft.azure.cognitiveservices.vision.customvision.training.CustomVisionTrainingManager;
import com.microsoft.azure.cognitiveservices.vision.customvision.prediction.models.ImagePrediction;
import com.microsoft.azure.cognitiveservices.vision.customvision.prediction.models.Prediction;
import com.microsoft.azure.cognitiveservices.vision.customvision.prediction.CustomVisionPredictionClient;
import com.microsoft.azure.cognitiveservices.vision.customvision.prediction.CustomVisionPredictionManager;
import com.microsoft.azure.cognitiveservices.vision.customvision.training.models.Tag;

تلميح

هل تريد عرض ملف التعليمات البرمجية للبدء السريع بالكامل في الحال؟ يُمكن العثور على GitHub، والذي يحتوي على أمثلة التعليمات البرمجية في التشغيل السريع.

في فئة CustomVisionQuickstart للتطبيق، أنشئ متغيرات تسترد مفاتيح المورد ونقطة النهاية من متغيرات البيئة.

// retrieve environment variables
final static String trainingApiKey = System.getenv("VISION_TRAINING_KEY");
final static String trainingEndpoint = System.getenv("VISION_TRAINING_ENDPOINT");
final static String predictionApiKey = System.getenv("VISION_PREDICTION_KEY");
final static String predictionEndpoint = System.getenv("VISION_PREDICTION_ENDPOINT");
final static String predictionResourceId = System.getenv("VISION_PREDICTION_RESOURCE_ID");

هام

انتقل إلى مدخل Azure. إذا تم نشر موارد Custom Vision التي أنشأتها في قسم المتطلبات الأساسية بنجاح، فحدد الزر Go to Resource ضمن Next Steps. يُمكنك العثور على المفاتيح ونقاط النهاية في صفحات مفتاح ونقاط النهاية. للموارد. ستحتاج إلى الحصول على مفاتيح موارد التدريب والتنبؤ، بالإضافة إلى نقطة نهاية API لمورد التدريب.

يُمكن العثور على معرف مورد التنبؤ في علامة التبويب "Properties" الخاصة بالمورد في مدخل Microsoft Azure، المُدرجة باسم معرف المورد.

هام

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

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

Project project = createProject(trainClient);
addTags(trainClient, project);
uploadImages(trainClient, project);
trainProject(trainClient, project);
publishIteration(trainClient, project);
testProject(predictor, project);

نموذج الكائن

تتعامل الفئات والواجهات التالية مع بعض الميزات الرئيسية لمكتبة عميل Java الخاصة بالرؤية المُخصصة.

Name ‏‏الوصف
CustomVisionTrainingClient يُعالج هذا الفصل إنشاء نماذجك وتدريبها ونشرها.
CustomVisionPredictionClient تعالج هذه الفئة الاستعلام عن نماذجك للتنبؤات بتصنيف الصور.
ImagePrediction تُحدد هذه الفئة تنبؤاً لكائن واحد على صورة واحدة. يتضمن خصائص معرف الكائن واسم ودرجة الثقة.

أمثلة على التعليمات البرمجية

توضح لك هذه المقتطفات البرمجية كيفية القيام بالمهام التالية باستخدام مكتبة عميل الرؤية المخصصة لـ Java:

مصادقة العميل

وفقاً للأسلوب الرئيسي، أنشئ مثيل تدريب وتنبؤ العملاء باستخدام نقطة النهاية والمفاتيح.

// Authenticate
CustomVisionTrainingClient trainClient = CustomVisionTrainingManager
        .authenticate(trainingEndpoint, trainingApiKey)
        .withEndpoint(trainingEndpoint);
CustomVisionPredictionClient predictor = CustomVisionPredictionManager
        .authenticate(predictionEndpoint, predictionApiKey)
        .withEndpoint(predictionEndpoint);

إنشاء مشروع Custom Vision

T## إنشاء مشروع Custom Vision الجديد

يُنشئ الأسلوب التالي مشروع تصنيف الصور. سيظهر المشروع الذي تم إنشاؤه على موقع ويب الرؤية المُخصصة الذي زرته سابقاً. يُرجى الاطلاع على التحميلات الزائدة لأسلوب "CreateProject" لتحديد الخيارات الأخرى عند إنشاء مشروعك (الموضح في دليل بوابة الويبإنشاء مصنف).

public static Project createProject(CustomVisionTrainingClient trainClient) {
    System.out.println("ImageClassification Sample");
    Trainings trainer = trainClient.trainings();

    System.out.println("Creating project...");
    Project project = trainer.createProject().withName("Sample Java Project").execute();

    return project;
}

إضافة العلامات للمشروع

تُحدد هذه الطريقة العلامات التي ستقوم بتدريب الطراز عليها.

public static void addTags(CustomVisionTrainingClient trainClient, Project project) {

    Trainings trainer = trainClient.trainings();

    // create hemlock tag
    Tag hemlockTag = trainer.createTag().withProjectId(project.id()).withName("Hemlock").execute();
    // create cherry tag
    Tag cherryTag = trainer.createTag().withProjectId(project.id()).withName("Japanese Cherry").execute();
}

تحميل الصور ووضع علامات عليها

أولا، قم بتنزيل نموذج الصور لهذا المشروع. حفظ محتويات نموذج مجلد الصور على جهازك المحلي.

public static void uploadImages(CustomVisionTrainingClient trainClient, Project project) {
    Trainings trainer = trainClient.trainings();
    System.out.println("Adding images...");
    for (int i = 1; i <= 10; i++) {
        String fileName = "hemlock_" + i + ".jpg";
        byte[] contents = GetImage("/Hemlock", fileName);
        AddImageToProject(trainer, project, fileName, contents, hemlockTag.id(), null);
    }

    for (int i = 1; i <= 10; i++) {
        String fileName = "japanese_cherry_" + i + ".jpg";
        byte[] contents = GetImage("/Japanese_Cherry", fileName);
        AddImageToProject(trainer, project, fileName, contents, cherryTag.id(), null);
    }
}

تستخدم القصاصة البرمجية السابقة وظيفتين مساعدتين لاسترداد الصور كتدفقات موارد وتحميلها إلى الخدمة (يُمكن تحميل ما يصل إلى 64 صورة في دفعة واحدة).

private static void AddImageToProject(Trainings trainer, Project project, String fileName, byte[] contents,
        UUID tag, double[] regionValues) {
    System.out.println("Adding image: " + fileName);
    ImageFileCreateEntry file = new ImageFileCreateEntry().withName(fileName).withContents(contents);

    ImageFileCreateBatch batch = new ImageFileCreateBatch().withImages(Collections.singletonList(file));

    // If Optional region is specified, tack it on and place the tag there,
    // otherwise
    // add it to the batch.
    if (regionValues != null) {
        Region region = new Region().withTagId(tag).withLeft(regionValues[0]).withTop(regionValues[1])
                .withWidth(regionValues[2]).withHeight(regionValues[3]);
        file = file.withRegions(Collections.singletonList(region));
    } else {
        batch = batch.withTagIds(Collections.singletonList(tag));
    }

    trainer.createImagesFromFiles(project.id(), batch);
}

private static byte[] GetImage(String folder, String fileName) {
    try {
        return ByteStreams.toByteArray(CustomVisionSamples.class.getResourceAsStream(folder + "/" + fileName));
    } catch (Exception e) {
        System.out.println(e.getMessage());
        e.printStackTrace();
    }
    return null;
}

التدريب على المشروع

يُنشئ هذا الأسلوب تكرار التدريب الأول في المشروع. إنه يوضح الخدمة حتى اكتمال التدريب.

public static void trainProject(CustomVisionTrainingClient trainClient, Project project) {
    System.out.println("Training...");
    Trainings trainer = trainClient.trainings();

    Iteration iteration = trainer.trainProject(project.id(), new TrainProjectOptionalParameter());

    while (iteration.status().equals("Training")) {
        System.out.println("Training Status: " + iteration.status());
        Thread.sleep(1000);
        iteration = trainer.getIteration(project.id(), iteration.id());
    }
    System.out.println("Training Status: " + iteration.status());
}

نشر التكرار الحالي

يتيح هذا الأسلوب الاستعلام عن التكرار الحالي للنموذج. يُمكن استخدام اسم الطراز كمرجع لإرسال طلبات التنبؤ. تحتاج إلى إدخال القيمة لـ predictionResourceId. يُمكن العثور على معرف مورد التنبؤ في علامة التبويب "Properties" الخاصة بالمورد في مدخل Microsoft Azure، المُدرجة باسم معرف المورد.

public static String publishIteration(CustomVisionTrainingClient trainClient, Project project) {
    Trainings trainer = trainClient.trainings();
    // The iteration is now trained. Publish it to the prediction endpoint.
    String publishedModelName = "myModel";
    trainer.publishIteration(project.id(), iteration.id(), publishedModelName, predictionResourceId);
}

اختبار نقطة نهاية التنبؤ

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

// load test image
public static void testProject(CustomVisionPredictionClient predictor, Project project) {

    byte[] testImage = GetImage("/Test", "test_image.jpg");

    // predict
    ImagePrediction results = predictor.predictions().classifyImage().withProjectId(project.id())
            .withPublishedName(publishedModelName).withImageData(testImage).execute();

    for (Prediction prediction : results.predictions()) {
        System.out.println(String.format("\t%s: %.2f%%", prediction.tagName(), prediction.probability() * 100.0f));
    }
}

شغّل التطبيق

يمكنك إنشاء التطبيق باستخدام:

gradle build

قم بتشغيل التطبيق باستخدام الأمر gradle run:

gradle run

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

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

إذا كنت ترغب في تنفيذ مشروع تصنيف الصور الخاص بك (أو تجربة مشروع الكشف عن الكائنات بدلاً من ذلك)، فقد ترغب في حذف مشروع تعريف الشجرة من هذا المثال. يسمح الاشتراك المجاني بمشروعي Custom Vision.

على موقع ويب Custom Vision، انتقل إلى Projects وحدِّد سلة المهملات ضمن My New Project.

لقطة شاشة للوحة تسمى مشروعي الجديد مع أيقونة سلة المهملات.

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

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

يوفر هذا الدليل إرشادات ونماذج من التعليمات البرمجية لمساعدتك على البدء في استخدام مكتبة عميل Custom Vision الخاصة بـ Node.js لإنشاء نموذج تصنيف الصور. ستقوم بإنشاء مشروع وإضافة علامات وتدريب المشروع واستخدام عنوان URL لنقطة نهاية التنبؤ للمشروع لاختباره برمجيًا. استخدم هذا المثال كنموذج لإنشاء تطبيقك الخاص بالتعرف على الصور.

إشعار

إذا كنت ترغب في إنشاء نموذج التصنيف والتدرب عليه دون كتابة التعليمات البرمجية، يُرجى مراجعة الإرشادات المستندة إلى المتصفح بدلاً من ذلك.

قم باستخدام مكتبة عميل Custom Vision لـ.NET لـ:

  • إنشاء مشروع Custom Vision جديد
  • إضافة علامات للمشروع
  • تحميل الصور ووضع علامات عليها
  • التدريب على المشروع
  • نشر التكرار الحالي
  • اختبار نقطة نهاية التنبؤ

نماذج التوثيق المرجعي (تدريب)(تنبؤ) | التعليمة البرمجية لمصدر المكتبة (تدريب)(تنبؤ) | حزمة (npm)(تدريب)(تنبؤ) | نماذج

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

  • اشتراك Azure - إنشاء اشتراك مجانًا
  • الإصدار الحالي من Node.js
  • بمجرد أن يكون لديك اشتراك Azure، قم بإنشاء مورد Custom Vision في مدخل Microsoft Azure لإنشاء مورد تدريب وتنبؤ.
    • يمكنك استخدام مستوى التسعير الحر (F0) لتجربة الخدمة، والترقية لاحقًا إلى مستوى مدفوع للإنتاج.

إنشاء متغيرات البيئة

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

انتقل إلى مدخل Azure. إذا تم نشر موارد Custom Vision التي أنشأتها في قسم المتطلبات الأساسية بنجاح، فحدد الزر Go to Resource ضمن Next Steps. يمكنك العثور على المفاتيح ونقاط النهاية في صفحات مفتاح الموارد ونقطة النهاية، ضمن إدارة الموارد. ستحتاج إلى الحصول على مفاتيح لكل من موارد التدريب والتنبؤ، جنبا إلى جنب مع نقاط نهاية واجهة برمجة التطبيقات.

يمكنك العثور على معرف مورد التنبؤ في علامة تبويب خصائص مورد التنبؤ في مدخل Microsoft Azure، المدرجة كمعرف المورد.

تلميح

يمكنك أيضا استخدام https://www.customvision.ai/ للحصول على هذه القيم. بعد تسجيل الدخول، حدد أيقونة Settings في أعلى اليمين. في صفحات الإعداد ، يمكنك عرض جميع المفاتيح ومعرف المورد ونقاط النهاية.

تنبيه

لا تقم بتضمين المفتاح مباشرة في التعليمات البرمجية الخاصة بك، ولا تنشره بشكل عام. راجع مقالة أمان خدمات Azure الذكاء الاصطناعي لمزيد من خيارات المصادقة مثل Azure Key Vault.

لتعيين متغيرات البيئة، افتح نافذة وحدة التحكم واتبع الإرشادات الخاصة بنظام التشغيل وبيئة التطوير.

  1. لتعيين VISION_TRAINING KEY متغير البيئة، استبدل your-training-key بأحد مفاتيح مورد التدريب الخاص بك.
  2. لتعيين VISION_TRAINING_ENDPOINT متغير البيئة، استبدل your-training-endpoint بنقطة النهاية لمورد التدريب الخاص بك.
  3. لتعيين VISION_PREDICTION_KEY متغير البيئة، استبدل your-prediction-key بأحد مفاتيح مورد التنبؤ الخاص بك.
  4. لتعيين VISION_PREDICTION_ENDPOINT متغير البيئة، استبدل your-prediction-endpoint بنقطة النهاية لمورد التنبؤ الخاص بك.
  5. لتعيين VISION_PREDICTION_RESOURCE_ID متغير البيئة، استبدل your-resource-id بمعرف المورد لمورد التنبؤ الخاص بك.
setx VISION_TRAINING_KEY your-training-key
setx VISION_TRAINING_ENDPOINT your-training-endpoint
setx VISION_PREDICTION_KEY your-prediction-key
setx VISION_PREDICTION_ENDPOINT your-prediction-endpoint
setx VISION_PREDICTION_RESOURCE_ID your-resource-id

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

الإعداد

إنشاء تطبيق Node.js جديد

في إطار نافذة وحدة التحكم (مثل cmd أو PowerShell أو Bash)، يمكنك إنشاء دليل جديد لتطبيقك وانتقل إليه.

mkdir myapp && cd myapp

شغّل الأمر npm init لإنشاء تطبيق node باستخدام ملف package.json.

npm init

تثبيت مكتبة العميل

لكتابة تطبيق تحليل الصور باستخدامCustom Vision لـ Node.js، ستحتاج إلى حزم NPM الخاصة بـ Custom Vision. لتثبيتها، قم بتشغيل الأمر التالي في PowerShell:

npm install @azure/cognitiveservices-customvision-training
npm install @azure/cognitiveservices-customvision-prediction

تحديث ملف تطبيقك package.json باستخدام التبعيات.

أنشئ ملفاً جديداً باسم index.js ومن ثم استورد المكتبات التالية:

const util = require('util');
const fs = require('fs');
const TrainingApi = require("@azure/cognitiveservices-customvision-training");
const PredictionApi = require("@azure/cognitiveservices-customvision-prediction");
const msRest = require("@azure/ms-rest-js");

تلميح

هل تريد عرض ملف التعليمات البرمجية للبدء السريع بالكامل في الحال؟ يُمكن العثور على GitHub، والذي يحتوي على أمثلة التعليمات البرمجية في التشغيل السريع.

إنشاء متغيرات لنقطة نهاية ومفاتيح Azure للمورد الخاص بك.

// retrieve environment variables
const trainingKey = process.env["VISION_TRAINING_KEY"];
const trainingEndpoint = process.env["VISION_TRAINING_ENDPOINT"];

const predictionKey = process.env["VISION_PREDICTION_KEY"];
const predictionResourceId = process.env["VISION_PREDICTION_RESOURCE_ID"];
const predictionEndpoint = process.env["VISION_PREDICTION_ENDPOINT"];

علاوة على ذلك، أضف حقولاً لاسم مشروعك ومعلمة مهلة للمكالمات غير المتزامنة.

const publishIterationName = "classifyModel";
const setTimeoutPromise = util.promisify(setTimeout);

نموذج الكائن

Name ‏‏الوصف
TrainingAPIClient يُعالج هذا الفصل إنشاء نماذجك وتدريبها ونشرها.
PredictionAPIClient تعالج هذه الفئة الاستعلام عن نماذجك للتنبؤات بتصنيف الصور.
التنبؤ تُحدد هذه الفئة تنبؤاً لكائن واحد على صورة واحدة. يتضمن خصائص معرف الكائن واسم ودرجة الثقة.

أمثلة على التعليمات البرمجية

توضح لك هذه المقتطفات البرمجية كيفية تنفيذ المهام التالية باستخدام مكتبة عميل Custom Vision لـ JavaScript:

مصادقة العميل

إنشاء مثيل لكائنات العميل مع نقطة النهاية والمفتاح. قم بإنشاء كائن ApiKeyCredentials باستخدام المفتاح، واستخدامه مع نقطة النهاية لإنشاء TrainingAPIClient وPredictionAPIClient.

const credentials = new msRest.ApiKeyCredentials({ inHeader: { "Training-key": trainingKey } });
const trainer = new TrainingApi.TrainingAPIClient(credentials, trainingEndpoint);
const predictor_credentials = new msRest.ApiKeyCredentials({ inHeader: { "Prediction-key": predictionKey } });
const predictor = new PredictionApi.PredictionAPIClient(predictor_credentials, predictionEndpoint);

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

بدء تشغيل دالة جديدة لاحتواء جميع استدعاءات دالة Custom Vision. إضافة التعليمات البرمجية التالية لإنشاء مشروع خدمة Custom Vision الجديد.

(async () => {
    console.log("Creating project...");
    const sampleProject = await trainer.createProject("Sample Project");

إضافة علامات للمشروع

لإضافة علامات تصنيف إلى مشروعك، أضف التعليمات البرمجية التالية إلى الدالة:

const hemlockTag = await trainer.createTag(sampleProject.id, "Hemlock");
const cherryTag = await trainer.createTag(sampleProject.id, "Japanese Cherry");

تحميل الصور ووضع علامات عليها

أولا، قم بتنزيل نموذج الصور لهذا المشروع. حفظ محتويات نموذج مجلد الصور على جهازك المحلي.

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

const sampleDataRoot = "Images";

console.log("Adding images...");
let fileUploadPromises = [];

const hemlockDir = `${sampleDataRoot}/Hemlock`;
const hemlockFiles = fs.readdirSync(hemlockDir);
hemlockFiles.forEach(file => {
    fileUploadPromises.push(trainer.createImagesFromData(sampleProject.id, fs.readFileSync(`${hemlockDir}/${file}`), { tagIds: [hemlockTag.id] }));
});

const cherryDir = `${sampleDataRoot}/Japanese_Cherry`;
const japaneseCherryFiles = fs.readdirSync(cherryDir);
japaneseCherryFiles.forEach(file => {
    fileUploadPromises.push(trainer.createImagesFromData(sampleProject.id, fs.readFileSync(`${cherryDir}/${file}`), { tagIds: [cherryTag.id] }));
});

await Promise.all(fileUploadPromises);

هام

ستحتاج إلى تغيير المسار إلى الصور (sampleDataRoot) استنادا إلى المكان الذي قمت بتنزيل Azure الذكاء الاصطناعي services Python SDK Samples repo.

التدريب على المشروع

تُنشئ التعليمة البرمجية التكرار الأول لنموذج التنبؤ.

console.log("Training...");
let trainingIteration = await trainer.trainProject(sampleProject.id);

// Wait for training to complete
console.log("Training started...");
while (trainingIteration.status == "Training") {
    console.log("Training status: " + trainingIteration.status);
    await setTimeoutPromise(1000, null);
    trainingIteration = await trainer.getIteration(sampleProject.id, trainingIteration.id)
}
console.log("Training status: " + trainingIteration.status);

نشر التكرار الحالي

ينشر هذا الرمز التكرار الذي تم التدريب عليه إلى نقطة نهاية التنبؤ. يُمكن استخدام الاسم المُطلق على التكرار المنشور لإرسال طلبات التنبؤ. لا يتوفر التكرار في نقطة نهاية التنبؤ حتى يتم نشره.

// Publish the iteration to the end point
await trainer.publishIteration(sampleProject.id, trainingIteration.id, publishIterationName, predictionResourceId);

اختبار نقطة نهاية التنبؤ

لإرسال صورة إلى نقطة نهاية التنبؤ واسترداد التنبؤ، أضف التعليمات البرمجية التالية إلى الدالة.

const testFile = fs.readFileSync(`${sampleDataRoot}/Test/test_image.jpg`);

const results = await predictor.classifyImage(sampleProject.id, publishIterationName, testFile);

// Show results
console.log("Results:");
results.predictions.forEach(predictedResult => {
    console.log(`\t ${predictedResult.tagName}: ${(predictedResult.probability * 100.0).toFixed(2)}%`);
});

وبالتالي، أغلق دالة Custom Vision ثم استدعها.

})()

شغّل التطبيق

شغّل التطبيق باستخدام الأمر node المُتاح على ملف التشغيل السريع.

node index.js

يجب أن تكون مخرجات التطبيق مشابهة للنص التالي:

Creating project...
Adding images...
Training...
Training started...
Training status: Training
Training status: Training
Training status: Training
Training status: Completed
Results:
         Hemlock: 94.97%
         Japanese Cherry: 0.01%

يمكنك بعد ذلك التحقق من أن صورة الاختبار (الموجودة في <sampleDataRoot>/Test/) موسومة بشكل مناسب. يمكنك أيضاً العودة إلى الموقع الإلكتروني لـ Custom Vision ورؤية الحالة الحالية لمشروعك الذي تم إنشاؤه حديثاً.

إذا كنت ترغب في تنفيذ مشروع تصنيف الصور الخاص بك (أو تجربة مشروع الكشف عن الكائنات بدلاً من ذلك)، فقد ترغب في حذف مشروع تعريف الشجرة من هذا المثال. يسمح الاشتراك المجاني بمشروعي Custom Vision.

على موقع ويب Custom Vision، انتقل إلى Projects وحدِّد سلة المهملات ضمن My New Project.

لقطة شاشة للوحة تسمى مشروعي الجديد مع أيقونة سلة المهملات.

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

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

بدء استخدام مكتبة عميل Custom Vision لـ Python. اتبع هذه الخطوات لتثبيت الحزمة وتجربة التعليمات البرمجية المثال لإنشاء نموذج تصنيف صورة. ستقوم بإنشاء مشروع وإضافة علامات وتدريب المشروع واستخدام عنوان URL لنقطة نهاية التنبؤ للمشروع لاختباره برمجيًا. استخدم هذا المثال كنموذج لإنشاء تطبيقك الخاص بالتعرف على الصور.

إشعار

إذا كنت ترغب في إنشاء نموذج التصنيف والتدرب عليه دون كتابة التعليمات البرمجية، يُرجى مراجعة الإرشادات المستندة إلى المتصفح بدلاً من ذلك.

استخدم مكتبة عميل Custom Vision لـ Python:

  • إنشاء مشروع Custom Vision جديد
  • إضافة علامات للمشروع
  • تحميل الصور ووضع علامات عليها
  • التدريب على المشروع
  • نشر التكرار الحالي
  • اختبار نقطة نهاية التنبؤ

نماذج التوثيق المرجعي | التعليمة البرمجية لمصدر المكتبة | حزمة (PyPi) | عينات

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

  • اشتراك Azure - إنشاء اشتراك مجانًا
  • Python 3.x
    • يجب أن يتضمن تثبيت Python خاصتك pip. يمكنك التحقق مما إذا كانت لديك نقطة مثبتة عن طريق تشغيل pip --version على سطر الأوامر. الحصول على نقطة عن طريق تثبيت أحدث إصدار من Python.
  • بمجرد أن يكون لديك اشتراك Azure، قم بإنشاء مورد Custom Vision في مدخل Microsoft Azure لإنشاء مورد تدريب وتنبؤ.
    • يمكنك استخدام مستوى التسعير الحر (F0) لتجربة الخدمة، والترقية لاحقًا إلى مستوى مدفوع للإنتاج.

إنشاء متغيرات البيئة

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

انتقل إلى مدخل Azure. إذا تم نشر موارد Custom Vision التي أنشأتها في قسم المتطلبات الأساسية بنجاح، فحدد الزر Go to Resource ضمن Next Steps. يمكنك العثور على المفاتيح ونقاط النهاية في صفحات مفتاح الموارد ونقطة النهاية، ضمن إدارة الموارد. ستحتاج إلى الحصول على مفاتيح لكل من موارد التدريب والتنبؤ، جنبا إلى جنب مع نقاط نهاية واجهة برمجة التطبيقات.

يمكنك العثور على معرف مورد التنبؤ في علامة تبويب خصائص مورد التنبؤ في مدخل Microsoft Azure، المدرجة كمعرف المورد.

تلميح

يمكنك أيضا استخدام https://www.customvision.ai/ للحصول على هذه القيم. بعد تسجيل الدخول، حدد أيقونة Settings في أعلى اليمين. في صفحات الإعداد ، يمكنك عرض جميع المفاتيح ومعرف المورد ونقاط النهاية.

تنبيه

لا تقم بتضمين المفتاح مباشرة في التعليمات البرمجية الخاصة بك، ولا تنشره بشكل عام. راجع مقالة أمان خدمات Azure الذكاء الاصطناعي لمزيد من خيارات المصادقة مثل Azure Key Vault.

لتعيين متغيرات البيئة، افتح نافذة وحدة التحكم واتبع الإرشادات الخاصة بنظام التشغيل وبيئة التطوير.

  1. لتعيين VISION_TRAINING KEY متغير البيئة، استبدل your-training-key بأحد مفاتيح مورد التدريب الخاص بك.
  2. لتعيين VISION_TRAINING_ENDPOINT متغير البيئة، استبدل your-training-endpoint بنقطة النهاية لمورد التدريب الخاص بك.
  3. لتعيين VISION_PREDICTION_KEY متغير البيئة، استبدل your-prediction-key بأحد مفاتيح مورد التنبؤ الخاص بك.
  4. لتعيين VISION_PREDICTION_ENDPOINT متغير البيئة، استبدل your-prediction-endpoint بنقطة النهاية لمورد التنبؤ الخاص بك.
  5. لتعيين VISION_PREDICTION_RESOURCE_ID متغير البيئة، استبدل your-resource-id بمعرف المورد لمورد التنبؤ الخاص بك.
setx VISION_TRAINING_KEY your-training-key
setx VISION_TRAINING_ENDPOINT your-training-endpoint
setx VISION_PREDICTION_KEY your-prediction-key
setx VISION_PREDICTION_ENDPOINT your-prediction-endpoint
setx VISION_PREDICTION_RESOURCE_ID your-resource-id

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

الإعداد

تثبيت مكتبة العميل

لكتابة تطبيق تحليل الصور باستخدامCustom Vision الخاصة بلغة Python، ستحتاج إلى مكتبة عميل Custom Vision. بعد تثبيت Python، قم بتشغيل الأمر التالي في PowerShell أو نافذة وحدة التحكم:

pip install azure-cognitiveservices-vision-customvision

إنشاء تطبيق Python جديد

قم بإنشاء ملف Python جديد واستيراد المكتبات التالية.

from azure.cognitiveservices.vision.customvision.training import CustomVisionTrainingClient
from azure.cognitiveservices.vision.customvision.prediction import CustomVisionPredictionClient
from azure.cognitiveservices.vision.customvision.training.models import ImageFileCreateBatch, ImageFileCreateEntry, Region
from msrest.authentication import ApiKeyCredentials
import os, time, uuid

تلميح

هل تريد عرض ملف التعليمات البرمجية للبدء السريع بالكامل في الحال؟ يُمكن العثور على GitHub، والذي يحتوي على أمثلة التعليمات البرمجية في التشغيل السريع.

إنشاء متغيرات لنقطة نهاية ومفاتيح Azure للمورد الخاص بك.

# retrieve environment variables
ENDPOINT = os.environ["VISION_TRAINING_ENDPOINT"]
training_key = os.environ["VISION_TRAINING_KEY"]
prediction_key = os.environ["VISION_PREDICTION_KEY"]
prediction_resource_id = os.environ["VISION_PREDICTION_RESOURCE_ID"]

نموذج الكائن

Name ‏‏الوصف
CustomVisionTrainingClient يُعالج هذا الفصل إنشاء نماذجك وتدريبها ونشرها.
CustomVisionPredictionClient تعالج هذه الفئة الاستعلام عن نماذجك للتنبؤات بتصنيف الصور.
ImagePrediction تُحدد هذه الفئة تنبؤاً لكائن واحد على صورة واحدة. يتضمن خصائص معرف الكائن واسمه وموقع المربع المحيط للكائن ودرجة الثقة.

أمثلة على التعليمات البرمجية

توضح لك هذه المقتطفات البرمجية كيفية القيام بالمهام التالية مع مكتبة عميل Custom Vision لـ Python:

مصادقة العميل

قم بإنشاء عميل تدريب وتوقع باستخدام نقطة النهاية والمفاتيح لديك. أنشئ كائنات ApiKeyServiceClientCredentials باستخدام مفاتيحك، واستخدمها مع نقطة النهاية لإنشاء كائن CustomVisionTrainingClient وCustomVisionPredictionClient.

credentials = ApiKeyCredentials(in_headers={"Training-key": training_key})
trainer = CustomVisionTrainingClient(ENDPOINT, credentials)
prediction_credentials = ApiKeyCredentials(in_headers={"Prediction-key": prediction_key})
predictor = CustomVisionPredictionClient(ENDPOINT, prediction_credentials)

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

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

راجع أسلوب create_project لتحديد خيارات أخرى عند إنشاء مشروعك (موضح في دليل مدخل ويب إنشاء مصنف).

publish_iteration_name = "classifyModel"

credentials = ApiKeyCredentials(in_headers={"Training-key": training_key})
trainer = CustomVisionTrainingClient(ENDPOINT, credentials)

# Create a new project
print ("Creating project...")
project_name = uuid.uuid4()
project = trainer.create_project(project_name)

إضافة علامات للمشروع

لإضافة علامات تصنيف إلى مشروعك، أضف التعليمات البرمجية التالية:

# Make two tags in the new project
hemlock_tag = trainer.create_tag(project.id, "Hemlock")
cherry_tag = trainer.create_tag(project.id, "Japanese Cherry")

تحميل الصور ووضع علامات عليها

أولا، قم بتنزيل نموذج الصور لهذا المشروع. حفظ محتويات نموذج مجلد الصور على جهازك المحلي.

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

base_image_location = os.path.join (os.path.dirname(__file__), "Images")

print("Adding images...")

image_list = []

for image_num in range(1, 11):
    file_name = "hemlock_{}.jpg".format(image_num)
    with open(os.path.join (base_image_location, "Hemlock", file_name), "rb") as image_contents:
        image_list.append(ImageFileCreateEntry(name=file_name, contents=image_contents.read(), tag_ids=[hemlock_tag.id]))

for image_num in range(1, 11):
    file_name = "japanese_cherry_{}.jpg".format(image_num)
    with open(os.path.join (base_image_location, "Japanese_Cherry", file_name), "rb") as image_contents:
        image_list.append(ImageFileCreateEntry(name=file_name, contents=image_contents.read(), tag_ids=[cherry_tag.id]))

upload_result = trainer.create_images_from_files(project.id, ImageFileCreateBatch(images=image_list))
if not upload_result.is_batch_successful:
    print("Image batch upload failed.")
    for image in upload_result.images:
        print("Image status: ", image.status)
    exit(-1)

إشعار

ستحتاج إلى تغيير المسار إلى الصور استنادا إلى المكان الذي قمت بتنزيل Azure الذكاء الاصطناعي services Python SDK Samples repo.

التدريب على المشروع

تُنشئ التعليمة البرمجية التكرار الأول لنموذج التنبؤ.

print ("Training...")
iteration = trainer.train_project(project.id)
while (iteration.status != "Completed"):
    iteration = trainer.get_iteration(project.id, iteration.id)
    print ("Training status: " + iteration.status)
    print ("Waiting 10 seconds...")
    time.sleep(10)

تلميح

التدريب باستخدام علامات محددة

اختيارياً، يمكنك التدريب على مجموعة فرعية فقط من العلامات المطبقة. قد ترغب في القيام بذلك إذا لم تكن قد طبقت ما يكفي من العلامات المُحددة حتى الآن، ولكن لديك ما يكفي من العلامات الأخرى. في الاستدعاء "train_project"، حدد المعلمة الاختيارية "selected_tags" إلى قائمة سلاسل المعرفات الخاصة بالعلامات التي تريد استخدامها. سيدربك النموذج على التعرف فقط على العلامات المُدرجة في تلك القائمة.

نشر التكرار الحالي

لا يتوفر التكرار في نقطة نهاية التنبؤ حتى يتم نشره. تتيح التعليمات البرمجية التالية الاستعلام عن التكرار الحالي للنموذج.

# The iteration is now trained. Publish it to the project endpoint
trainer.publish_iteration(project.id, iteration.id, publish_iteration_name, prediction_resource_id)
print ("Done!")

اختبار نقطة نهاية التنبؤ

لإرسال صورة إلى نقطة نهاية التنبؤ واسترداد التنبؤ، أضف التعليمات البرمجية التالية إلى نهاية الملف:

# Now there is a trained endpoint that can be used to make a prediction
prediction_credentials = ApiKeyCredentials(in_headers={"Prediction-key": prediction_key})
predictor = CustomVisionPredictionClient(ENDPOINT, prediction_credentials)

with open(os.path.join (base_image_location, "Test/test_image.jpg"), "rb") as image_contents:
    results = predictor.classify_image(
        project.id, publish_iteration_name, image_contents.read())

    # Display the results.
    for prediction in results.predictions:
        print("\t" + prediction.tag_name +
              ": {0:.2f}%".format(prediction.probability * 100))

شغّل التطبيق

شَغّل CustomVisionQuickstart.py.

python CustomVisionQuickstart.py

يجب أن تكون مخرجات التطبيق مشابهة للنص التالي:

Creating project...
Adding images...
Training...
Training status: Training
Training status: Completed
Done!
        Hemlock: 93.53%
        Japanese Cherry: 0.01%

يمكنك بعد ذلك التحقق من أن صورة الاختبار (الموجودة في <base_image_location>/images/Test/) موسومة بشكل مناسب. يمكنك أيضاً العودة إلى الموقع الإلكتروني لـ Custom Vision ورؤية الحالة الحالية لمشروعك الذي تم إنشاؤه حديثاً.

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

إذا كنت ترغب في تنفيذ مشروع تصنيف الصور الخاص بك (أو تجربة مشروع الكشف عن الكائنات بدلاً من ذلك)، فقد ترغب في حذف مشروع تعريف الشجرة من هذا المثال. يسمح الاشتراك المجاني بمشروعي Custom Vision.

على موقع ويب Custom Vision، انتقل إلى Projects وحدِّد سلة المهملات ضمن My New Project.

لقطة شاشة للوحة تسمى مشروعي الجديد مع أيقونة سلة المهملات.

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

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

ابدأ باستخدام واجهة برمجة تطبيقاتCustom Vision REST. اتبع هذه الخطوات لاستدعاء واجهة برمجة تطبيقات وإنشاء نموذج تصنيف صورة. ستقوم بإنشاء مشروع وإضافة علامات وتدريب المشروع واستخدام عنوان URL لنقطة نهاية التنبؤ للمشروع لاختباره برمجيًا. استخدم هذا المثال كنموذج لإنشاء تطبيقك الخاص بالتعرف على الصور.

إشعار

يتم استخدام Custom Vision بسهولة أكبر من خلال SDK لمكتبة العميل أو من خلال الإرشادات المستندة إلى المتصفح.

قم باستخدام مكتبة عميل Custom Vision لـ.NET لـ:

  • إنشاء مشروع Custom Vision جديد
  • إضافة علامات للمشروع
  • تحميل الصور ووضع علامات عليها
  • التدريب على المشروع
  • نشر التكرار الحالي
  • اختبار نقطة نهاية التنبؤ

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

  • اشتراك Azure - إنشاء اشتراك مجانًا
  • بمجرد أن يكون لديك اشتراك Azure، قم بإنشاء مورد Custom Vision في مدخل Microsoft Azure لإنشاء مورد تدريب وتنبؤ والحصول على المفاتيح ونقطة النهاية. انتظر حتى يتم نشرها وانقر فوق زرالانتقال إلى المورد.
    • ستحتاج إلى المفتاح ونقطة النهاية من الموارد التي أنشأتها لتوصيل التطبيق الخاص بك بالرؤية المخصصة. ستلصق المفتاح ونقطة النهاية في التعليمات البرمجية أدناه لاحقًا في التشغيل السريع.
    • يمكنك استخدام مستوى التسعير الحر (F0) لتجربة الخدمة، والترقية لاحقًا إلى مستوى مدفوع للإنتاج.
  • الإصدار 6.0+ من PowerShell، أو تطبيق سطر أوامر مشابهة.

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

ستستخدم أمرًا مشابهًا لما يلي لإنشاء مشروع تصنيف الصور. سيظهر المشروع الذي تم إنشاؤه على موقع الرؤية المخصصة.

curl -v -X POST -H "Training-key: {subscription key}" "https://{endpoint}/customvision/v3.3/Training/projects?name={name}"

نسخ الأمر إلى محرر نصوص وإجراء التغييرات التالية:

  • استبدل {subscription key} بمفتاح اشتراك Face الصالح.
  • استبدل {endpoint} بنقطة النهاية التي تتوافق مع مفتاحك.

    إشعار

    الموارد الجديدة التي تم إنشاؤها بعد 1 يوليو 2019 ستستخدم أسماء النطاقات الفرعية المخصصة. لمزيد من المعلومات وقائمة كاملة بنقاط النهاية الإقليمية، راجع أسماء النطاقات الفرعية المخصصة لخدمات Azure الذكاء الاصطناعي.

  • استبدل {name} باسم مشروعك.
  • تعيين معلمات URL أخرى بشكل اختياري لتكوين نوع النموذج الذي سيستخدمه مشروعك. راجع واجهة برمجة تطبيقات CreatProject للحصول على خيارات.

ستتلقى استجابة JSON كما يلي. "id" احفظ قيمة مشروعك في موقع مؤقت.

{
  "id": "00000000-0000-0000-0000-000000000000",
  "name": "string",
  "description": "string",
  "settings": {
    "domainId": "00000000-0000-0000-0000-000000000000",
    "classificationType": "Multiclass",
    "targetExportPlatforms": [
      "CoreML"
    ],
    "useNegativeSet": true,
    "detectionParameters": "string",
    "imageProcessingSettings": {
      "augmentationMethods": {}
    }
  },
  "created": "string",
  "lastModified": "string",
  "thumbnailUri": "string",
  "drModeEnabled": true,
  "status": "Succeeded"
}

إضافة علامات للمشروع

استخدم الأمر التالي لتعريف العلامات التي ستقوم بتدريب النموذج عليها.

curl -v -X POST -H "Training-key: {subscription key}" "https://{endpoint}/customvision/v3.3/Training/projects/{projectId}/tags?name={name}"
  • قم مرة أخرى بإدراج مفتاح وعنوان URL نقطة النهاية الخاصين بك.
  • استبدل {projectId} بمعرف المشروع الخاص بك.
  • استبدل {name} باسم العلامة التي تريد استخدامها.

كرر هذه العملية لجميع العلامات التي ترغب في استخدامها في مشروعك. إذا كنت تستخدم أمثلة الصور المقدمة، أضف العلامات "Hemlock" و "Japanese Cherry".

ستتلقى استجابة JSON كما يلي. "id" احفظ قيمة كل علامة في موقع مؤقت.

{
  "id": "00000000-0000-0000-0000-000000000000",
  "name": "string",
  "description": "string",
  "type": "Regular",
  "imageCount": 0
}

تحميل الصور ووضع علامات عليها

بعد ذلك، قم بتنزيل نموذج الصور لهذا المشروع. حفظ محتويات نموذج مجلد الصور على جهازك المحلي.

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

curl -v -X POST -H "Content-Type: multipart/form-data" -H "Training-key: {subscription key}" "https://{endpoint}/customvision/v3.3/Training/projects/{projectId}/images?tagIds={tagArray}"
--data-ascii "{binary data}"
  • قم مرة أخرى بإدراج مفتاح وعنوان URL نقطة النهاية الخاصين بك.
  • استبدل {projectId} بمعرف المشروع الخاص بك.
  • استبدل {tagArray} بمعرف العلامة.
  • ثم، قم بملء نص الطلب الأساسي بالبيانات الثنائية للصور التي تريد وضع علامة عليها.

التدريب على المشروع

تقوم هذه الطريقة بتدريب النموذج على الصور ذات العلامات التي قمت بتحميلها وتعيد معرفا لتكرار المشروع الحالي.

curl -v -X POST -H "Content-Type: application/json" -H "Training-key: {subscription key}" "https://{endpoint}/customvision/v3.3/Training/projects/{projectId}/train"
  • قم مرة أخرى بإدراج مفتاح وعنوان URL نقطة النهاية الخاصين بك.
  • استبدل {projectId} بمعرف المشروع الخاص بك.
  • استبدل {tagArray} بمعرف العلامة.
  • ثم، قم بملء نص الطلب الأساسي بالبيانات الثنائية للصور التي تريد وضع علامة عليها.
  • إذا رغبت يمكنك استخدم معلمات URL الأخرى. راجع Train Project API للحصول على خيارات.

تلميح

التدريب باستخدام علامات محددة

اختيارياً، يمكنك التدريب على مجموعة فرعية فقط من العلامات المطبقة. قد ترغب في القيام بذلك إذا لم تكن قد طبقت ما يكفي من العلامات المُحددة حتى الآن، ولكن لديك ما يكفي من العلامات الأخرى. أضف محتوى JSON الاختياري إلى النص الأساسي لطلبك. قم بتعبئة "selectedTags" الصفيف بمعرفات العلامات التي تريد استخدامها.

{
  "selectedTags": [
    "00000000-0000-0000-0000-000000000000"
  ]
}

تحتوي استجابة JSON على معلومات حول مشروعك المدرب، بما في ذلك معرف التكرار ("id"). حفظ هذه القيمة للخطوة التالية.

{
  "id": "00000000-0000-0000-0000-000000000000",
  "name": "string",
  "status": "string",
  "created": "string",
  "lastModified": "string",
  "trainedAt": "string",
  "projectId": "00000000-0000-0000-0000-000000000000",
  "exportable": true,
  "exportableTo": [
    "CoreML"
  ],
  "domainId": "00000000-0000-0000-0000-000000000000",
  "classificationType": "Multiclass",
  "trainingType": "Regular",
  "reservedBudgetInHours": 0,
  "trainingTimeInMinutes": 0,
  "publishName": "string",
  "originalPublishResourceId": "string"
}

نشر التكرار الحالي

يتيح هذا الأسلوب الاستعلام عن التكرار الحالي للنموذج. يمكنك استخدام اسم النموذج الذي تم إرجاعه كمرجع لإرسال طلبات التنبؤ.

curl -v -X POST -H "Training-key: {subscription key}" "https://{endpoint}/customvision/v3.3/Training/projects/{projectId}/iterations/{iterationId}/publish?publishName={publishName}&predictionId={predictionId}"
  • قم مرة أخرى بإدراج مفتاح وعنوان URL نقطة النهاية الخاصين بك.
  • استبدل {projectId} بمعرف المشروع الخاص بك.
  • استبدل {iterationId} بالمعرف الذي تم إرجاعه في الخطوة السابقة.
  • استبدل {publishedName} بالاسم الذي تريد تعيينه لنموذج التنبؤ الخاص بك.
  • استبدل {predictionId} بمعرف مورد التنبؤ الخاص بك. يُمكن العثور على معرف مورد التنبؤ في علامة التبويب "Properties" الخاصة بالمورد في مدخل Microsoft Azure، المُدرجة باسم معرف المورد.
  • إذا رغبت يمكنك استخدم معلمات URL الأخرى. راجع واجهة برمجة تطبيقات Publish Iteration.

اختبار نقطة نهاية التنبؤ

وأخيرًا، استخدم هذا الأمر لاختبار النموذج المدرب الخاص بك عن طريق تحميل صورة جديدة عليه لتصنيفها مع العلامات. يمكنك استخدام الصورة في مجلد "الاختبار" من الملفات الخاصة بالعينة التي قمت بتحميلها في وقت سابق.

curl -v -X POST -H "Training-key: {subscription key}" "https://{endpoint}/customvision/v3.3/Training/projects/{projectId}/iterations/{iterationId}/publish?publishName={publishName}&predictionId={predictionId}"
  • قم مرة أخرى بإدراج مفتاح وعنوان URL نقطة النهاية الخاصين بك.
  • استبدل {projectId} بمعرف المشروع الخاص بك.
  • استبدل {publishedName} بالاسم الذي استخدمته في الخطوة السابقة.
  • قم بإضافة البيانات الثنائية للصورة المحلية إلى نص الطلب الأساسي.
  • إذا رغبت يمكنك استخدم معلمات URL الأخرى. راجع واجهة برمجة تطبيقات تصنيف الصور.

استجابة JSON التي تم إرجاعها سوف تعرض كل من العلامات التي طبقها النموذج على صورتك، جنبًا إلى جنب مع حساب الاحتمالات لكل علامة.

{
  "id": "00000000-0000-0000-0000-000000000000",
  "project": "00000000-0000-0000-0000-000000000000",
  "iteration": "00000000-0000-0000-0000-000000000000",
  "created": "string",
  "predictions": [
    {
      "probability": 0.0,
      "tagId": "00000000-0000-0000-0000-000000000000",
      "tagName": "string",
      "boundingBox": {
        "left": 0.0,
        "top": 0.0,
        "width": 0.0,
        "height": 0.0
      },
      "tagType": "Regular"
    }
  ]
}

إذا كنت ترغب في تنفيذ مشروع تصنيف الصور الخاص بك (أو تجربة مشروع الكشف عن الكائنات بدلاً من ذلك)، فقد ترغب في حذف مشروع تعريف الشجرة من هذا المثال. يسمح الاشتراك المجاني بمشروعي Custom Vision.

على موقع ويب Custom Vision، انتقل إلى Projects وحدِّد سلة المهملات ضمن My New Project.

لقطة شاشة للوحة تسمى مشروعي الجديد مع أيقونة سلة المهملات.

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

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