البرنامج التعليمي: تحميل ملف وتحليله باستخدام Azure Functions وBlob Storage

في هذا البرنامج التعليمي، ستتعرف على كيفية تحميل صورة إلى Azure Blob Storage ومعالجتها باستخدام Azure Functions وComputer Vision. ستتعرف أيضاً على كيفية تنفيذ مشغِّلات Azure Function وعمليات ربطها كجزء من هذه العملية. ستحلل هذه الخدمات معاً صورة مُحمَّلة تحتوي على نص، وتستخرج النص منها، ثم تخزن النص في صف قاعدة بيانات لتحليله لاحقاً أو لأغراض أخرى.

Azure Blob Storage هو حل تخزين الكائنات القابل للتطوير جداً من Microsoft للسحابة. تم تصميم Blob Storage لتخزين الصور والمستندات، ودفق ملفات الوسائط، وإدارة بيانات النسخ الاحتياطي والأرشفة، وغير ذلك الكثير. يمكنك قراءة المزيد عن Blob Storage في صفحة النظرة العامة.

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

ستتعلم في هذا البرنامج التعليمي:

  • تحميل الصور والملفات إلى Blob Storage
  • استخدام مشغِّل أحداث Azure Function لمعالجة البيانات المُحمَّلة إلى Blob Storage
  • استخدام خدمات Azure الذكاء الاصطناعي لتحليل صورة
  • كتابة البيانات في Table Storage باستخدام عمليات ربط مخرجات Azure Function

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

إنشاء حساب تخزين وحاوية

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

تسجيل الدخول إلى ⁧⁩مدخل Microsoft Azure⁧⁩.

  1. في شريط البحث الموجود في أعلى المدخل، ابحث عن Storage وحدد النتيجة التي تحمل التسمية Storage accounts.

  2. في صفحة Storage accounts، حدد + Create في أعلى اليسار.

  3. في صفحة Create a storage account، أدخل القيم التالية:

    • Subscription: اختر الاشتراك الذي تريده.
    • Resource Group: حدد Create new وأدخل اسم msdocs-storage-function، ثم اختر OK.
    • Storage account name: أدخل قيمة msdocsstoragefunction. يجب أن يكون اسم حساب التخزين فريداً في Azure كله، لذلك قد تحتاج إلى إضافة أرقام بعد الاسم، مثل msdocsstoragefunction123.
    • Region: حدد المنطقة الأقرب إليك.
    • Performance: اختر Standard.
    • Redundancy: اترك القيمة الافتراضية محددة.

    توضح لقطة الشاشة كيفية إنشاء حساب تخزين في Azure.

  4. حدد Review + Create في الأسفل وسيتحقق Azure من صحة المعلومات التي أدخلتها. بمجرد التحقق من صحة الإعدادات، اختر Create وسيبدأ Azure في تزويد حساب التخزين، وقد يستغرق ذلك لحظات.

قم بإنشاء الحاوية

  1. بعد تزويد حساب التخزين، حدد Go to Resource. الخطوة التالية هي إنشاء حاوية تخزين داخل الحساب للاحتفاظ بالصور المُحمَّلة لتحليلها.

  2. في جزء التنقّل، اختر Containers.

  3. في صفحة Containers حدد + Container في الأعلى. في لوحة الخروج، أدخل اسمتحليل الصور، وتأكد من تعيين مستوى الوصول العام إلى Blob (وصول قراءة مجهول للكائنات الثنائية كبيرة الحجم فقط). ثم حدد "Create".

    لقطة شاشة توضح كيفية إنشاء حاوية تخزين جديدة.

يجب أن ترى الحاوية الجديدة ظاهرة في قائمة الحاويات.

استرداد سلسلة الاتصال

الخطوة الأخيرة هي استرداد سلسلة الاتصال لحساب التخزين.

  1. في جزء التنقّل الأيسر، حدد Access Keys.

  2. في Access Keys page، حدد Show keys. انسخ قيمة Connection String ضمن قسم key1 والصقها في مكان ما لاستخدامها لاحقاً. ستحتاج أيضاً إلى تدوين اسم حساب التخزين msdocsstoragefunction لوقت لاحق أيضاً.

    لقطة شاشة توضح كيفية الوصول إلى حاوية التخزين.

ستكون هذه القيم ضرورية عندما نحتاج إلى توصيل Azure Function بحساب التخزين هذا.

إنشاء خدمة Computer Vision

بعد ذلك، أنشئ حساب خدمة Computer Vision الذي سيعالج ملفاتنا المُحمَّلة. تعد Computer Vision جزءا من خدمات Azure الذكاء الاصطناعي وتقدم مجموعة متنوعة من الميزات لاستخراج البيانات من الصور. يمكنك معرفة المزيد عن Computer Vision في صفحة النظرة العامة.

  1. في شريط البحث الموجود في أعلى المدخل، ابحث عن Computer وحدد النتيجة التي تحمل التسمية Computer vision.

  2. في صفحة Computer vision، حدد + Create.

  3. في صفحة Create Computer Vision، أدخل القيم التالية:

    • Subscription: اختر الاشتراك الذي تريده.
    • Resource Group: استخدم مجموعة الموارد msdocs-storage-function التي أنشأتها سابقاً.
    • Region: حدد المنطقة الأقرب إليك.
    • Name: أدخل اسم msdocscomputervision.
    • Pricing Tier: اختر Free إذا كانت متوفرة، وإلا فاختر Standard S1.
    • حدد مربع Responsible AI Notice إذا كنت توافق على الشروط

    لقطة شاشة توضح كيفية إنشاء خدمة Computer Vision جديدة.

  4. حدد Review + Create في الأسفل. سيستغرق Azure لحظات للتحقق من صحة المعلومات التي أدخلتها. بمجرد التحقق من صحة الإعدادات، اختر Create وسيبدأ Azure في تزويد خدمة Computer Vision، وقد يستغرق ذلك لحظات.

  5. عند اكتمال العملية، حدد Go to Resource.

استرداد المفاتيح

بعد ذلك، سنحتاج إلى العثور على المفتاح السري وعنوان URL لنقطة النهاية لخدمة Computer Vision لاستخدامها في تطبيق Azure Function.

  1. في صفحة النظرة العامة على Computer Vision، حدد Keys and Endpoint.

  2. في صفحة Keys and EndPoint، انسخ قيمة Key 1 وقيم EndPoint والصقها في مكان ما لاستخدامها لاحقاً.

    لقطة شاشة توضح كيفية استرداد المفاتيح ونقطة نهاية URL لخدمة Computer Vision.

تنزيل عينة المشروع وتكوينها

يمكن العثور على التعليمات البرمجية لتطبيق Azure Function المستخدم في هذا البرنامج التعليمي في مستودع GitHub هذا. يمكنك أيضاً استنساخ المشروع باستخدام الأمر أدناه.

git clone https://github.com/Azure-Samples/msdocs-storage-bind-function-service.git \
cd msdocs-storage-bind-function-service/dotnet

تنجز عينة التعليمات البرمجية للمشروع المهام التالية:

  • استرداد متغيرات البيئة للتوصيل بحساب التخزين وخدمة Computer Vision
  • قبول الملف المُحمَّل كمعلمة كائن ثنائي كبير الحجم
  • تحليل الكائن الثنائي كبير الحجم باستخدام خدمة Computer Vision
  • إرسال نص الصورة الذي تم تحليله إلى صف جدول جديد باستخدام عمليات ربط المخرجات

بمجرد تنزيل المشروع وفتحه، توجد بعض المفاهيم الأساسية التي يجب فهمها في أسلوب Run الرئيسي الموضح أدناه. تستخدم دالة Azure عمليات ربط المشغِّلات والمخرجات، والتي يتم تطبيقها باستخدام السمات الموجودة في توقيع أسلوب Run.

تستخدم سمة Table معلمتين. تحدد المعلمة الأولى اسم الجدول لكتابة قيمة نص الصورة الموزّعة التي تُرجِعها الدالة. تحسب معلمة Connection الثانية سلسلة اتصال Table Storage من متغيرات البيئة بحيث تتمكن دالة Azure من الوصول إليها.

يتم استخدام سمة BlobTrigger لربط الدالة بحدث التحميل في Blob Storage، وتزوِّد دالة Run بذلك الكائن الثنائي كبير الحجم المُحمَّل. يحتوي مشغل الكائنات الثنائية كبيرة الحجم على معلمتين خاصتين به - الأولى لاسم حاوية الكائنات الثنائية كبيرة الحجم لمراقبة عمليات التحميل، والأخرى لسلسلة اتصال حساب التخزين مرة أخرى.

// Azure Function name and output Binding to Table Storage
[FunctionName("ProcessImageUpload")]
[return: Table("ImageText", Connection = "StorageConnection")]
// Trigger binding runs when an image is uploaded to the blob container below
public async Task<ImageContent> Run([BlobTrigger("imageanalysis/{name}", 
        Connection = "StorageConnection")]Stream myBlob, string name, ILogger log)
{
    // Get connection configurations
    string subscriptionKey = Environment.GetEnvironmentVariable("ComputerVisionKey");
    string endpoint = Environment.GetEnvironmentVariable("ComputerVisionEndpoint");
    string imgUrl = $"https://{ Environment.GetEnvironmentVariable("StorageAccountName")}
                        .blob.core.windows.net/imageanalysis/{name}";

    ComputerVisionClient client = new ComputerVisionClient(
        new ApiKeyServiceClientCredentials(subscriptionKey)) { Endpoint = endpoint };

    // Get the analyzed image contents
    var textContext = await AnalyzeImageContent(client, imgUrl);

    return new ImageContent { 
        PartitionKey = "Images",
        RowKey = Guid.NewGuid().ToString(), Text = textContext 
    };
}

public class ImageContent
{
    public string PartitionKey { get; set; }
    public string RowKey { get; set; }
    public string Text { get; set; }
}

تسترد هذه التعليمة البرمجية أيضاً قيم التكوين الأساسية من متغيرات البيئة، مثل سلسلة اتصال حساب التخزين ومفتاح Computer Vision. سنضيف متغيرات البيئة هذه إلى بيئة Azure Function بعد توزيعها.

تستخدم دالة ProcessImage أيضاً أسلوباً ثانياً يسمى AnalyzeImage، كما هو موضح أدناه. تستخدم هذه التعليمة البرمجية نقطة نهاية عنوان URL ومفتاح حساب Computer Vision لتقديم طلب إلى هذا الخادم لمعالجة الصورة. سيُرجِع الطلب كل النص المكتشف في الصورة، والذي سيتم كتابته بعد ذلك في Table Storage باستخدام ربط المخرجات في أسلوب Run.

static async Task<string> ReadFileUrl(ComputerVisionClient client, string urlFile)
{
    // Analyze the file using Computer Vision Client
    var textHeaders = await client.ReadAsync(urlFile);
    string operationLocation = textHeaders.OperationLocation;
    Thread.Sleep(2000);
    
    // Complete code omitted for brevity, view in sample project
    
    return text.ToString();
}

التشغيل محلياً

إذا كنت ترغب في تشغيل المشروع محلياً، يمكنك ملء متغيرات البيئة باستخدام ملف local.settings.json. داخل هذا الملف، املأ قيم العنصر النائب بالقيم التي حفظتها سابقاً عند إنشاء موارد Azure.

على الرغم من أن تعليمة Azure Function البرمجية سيتم تشغيلها محلياً، ستظل مربوطة بالخدمات المباشرة على Azure، بدلاً من استخدام أي محاكيات محلية.

{
    "IsEncrypted": false,
    "Values": {
      "AzureWebJobsStorage": "UseDevelopmentStorage=true",
      "FUNCTIONS_WORKER_RUNTIME": "dotnet",
      "StorageConnection": "your-storage-account-connection-string",
      "StorageAccountName": "your-storage-account-name",
      "ComputerVisionKey": "your-computer-vision-key",
      "ComputerVisionEndPoint":  "your-computer-vision-endpoint"
    }
}

توزيع التعليمة البرمجية على Azure Functions

أنت الآن جاهز لتوزيع التطبيق على Azure باستخدام Visual Studio. يمكنك أيضاً إنشاء تطبيق Azure Functions في Azure في الوقت نفسه كجزء من عملية التوزيع.

  1. للبدء، حدد عقدة مشروع ProcessImage وحدد Publish.

  2. في شاشة الحوار Publish، حدد Azure واختر Next.

    لقطة شاشة توضح كيفية تحديد Azure كهدف للنشر.

  3. حدد Azure Function App (Windows) أو Azure Function App (Linux) على الشاشة التالية، ثم اختر Next مرة أخرى.

    لقطة شاشة توضح كيفية اختيار Azure Functions كهدف نشر محدد.

  4. في خطوة Functions instance، تأكد من اختيار الاشتراك الذي تريد التوزيع عليه. بعد ذلك، حدد رمز + الأخضر على الجانب الأيمن من مربع الحوار.

  5. سيتم فتح مربع حوار جديد. أدخل القيم التالية لتطبيق الوظائف الجديد.

    • Name: أدخل msdocsprocessimage أو ما شابه.
    • Subscription Name: اختر الاشتراك الذي تريد استخدامه.
    • Resource Group: اختر مجموعة الموارد msdocs-storage-function التي أنشأتها سابقاً.
    • Plan Type: حدد Consumption.
    • Location: اختر المنطقة الأقرب إليك.
    • Azure Storage: حدد حساب التخزين الذي أنشأته سابقاً.

    لقطة شاشة توضح كيفية إنشاء Function App جديد في Azure.

  6. بمجرد ملء كل هذه القيم، حدد Create. سيبدأ Visual Studio وAzure في تزويد الموارد المطلوبة، وسيستغرق ذلك بضع لحظات حتى يكتمل.

  7. بمجرد انتهاء العملية، حدد Finish لإغلاق سير عمل الحوار.

  8. الخطوة الأخيرة لتوزيع Azure Function هي تحديد Publish في الجزء العلوي الأيمن من الشاشة. قد يستغرق نشر الدالة أيضاً بضع لحظات حتى يكتمل. بمجرد انتهائه، سيتم تشغيل التطبيق على Azure.

اتصال الخدمات

تم توزيع Azure Function بنجاح، ولكن لا يمكن اتصاله بحساب التخزين وخدمات Computer Vision بعد. يجب أولاً إضافة المفاتيح وسلاسل الاتصال الصحيحة إلى إعدادات تكوين تطبيق Azure Functions.

  1. في الجزء العلوي من مدخل Microsoft Azure، ابحث عن function وحدد Function App من النتائج.

  2. في شاشة Function App، حدد Function App الذي أنشأته في Visual Studio.

  3. في صفحة النظرة العامة على Function App، حدد Configuration في شريط التنقل الأيسر. سيؤدي ذلك إلى فتح صفحة حيث يمكننا إدارة أنواع مختلفة من إعدادات التكوين للتطبيق. في الوقت الحالي، نحن مهتمون بقسم Application Settings.

  4. الخطوة التالية هي إضافة إعدادات لاسم حساب التخزين وسلسلة الاتصال، والمفتاح السري لخدمة Computer Vision، ونقطة نهاية Computer Vision.

  5. في علامة التبويب Application settings، حدد + New application setting. في القائمة المنبثقة التي تظهر، أدخل المعلومات التالية:

    • Name: أدخل قيمة ComputerVisionKey.
    • Value: الصق مفتاح Computer Vision الذي حفظته سابقاً.
  6. انقر على OK لإضافة هذا الإعداد إلى تطبيقك.

    لقطة شاشة توضح كيفية إضافة إعدادات تطبيق جديد إلى Azure Function.

  7. بعد ذلك، دعنا نكرر هذه العملية لنقطة نهاية خدمة Computer Vision، باستخدام القيم التالية:

    • Name: أدخل قيمة ComputerVisionEndpoint.
    • Value: الصق عنوان URL لنقطة النهاية الذي حفظته سابقاً.
  8. كرر هذه الخطوة مرة أخرى لاتصال حساب التخزين، باستخدام القيم التالية:

    • Name: أدخل قيمة StorageConnection.
    • Value: الصق سلسلة الاتصال التي حفظتها سابقاً.
  9. وأخيراً، كرر هذه العملية مرة أخرى لاسم حساب التخزين، باستخدام القيم التالية:

    • Name: أدخل قيمة StorageAccountName.
    • Value: أدخل اسم حساب التخزين الذي أنشأته.
  10. بعد إضافة إعدادات التطبيق هذه، تأكد من تحديد Save في أعلى صفحة التكوين. عند اكتمال الحفظ، يمكنك الضغط على Refresh أيضاً للتأكد من التقاط الإعدادات.

جميع متغيرات البيئة المطلوبة لتوصيل دالة Azure بخدمات مختلفة موجودة الآن.

تحميل صورة إلى Blob Storage

أنت الآن جاهز لاختبار طلبنا! يمكنك تحميل كائن ثنائي كبير الحجم إلى الحاوية، ثم التحقق من حفظ النص الموجود في الصورة في Table Storage.

  1. أولاً، في الجزء العلوي من مدخل Microsoft Azure، ابحث عن Storage وحدد storage account. في صفحة storage account، حدد الحساب الذي أنشأته سابقاً.

  2. بعد ذلك، حدد Containers على شريط التنقل الأيسر، ثم انتقل إلى حاوية ImageAnalysis التي أنشأتها سابقاً. من هنا، يمكنك تحميل صورة اختبارية مباشرة داخل المستعرض.

    لقطة شاشة توضح كيفية الوصول إلى حاوية التخزين.

  3. يمكنك العثور على بعض نماذج الصور المضمنة في مجلد images في جذر عينة المشروع القابلة للتنزيل، أو يمكنك استخدام صورة خاصة بك.

  4. في أعلى صفحة ImageAnalysis، حدد Upload. في القائمة المنبثقة التي يتم فتحها، حدد أيقونة المجلد الموجودة على اليمين لفتح مستعرض ملفات. اختر الصورة التي تريد تحميلها، ثم حدد Upload.

    لقطة شاشة توضح كيفية تحميل كائن ثنائي كبير الحجم إلى حاوية تخزين.

  5. يجب أن يظهر الملف داخل حاوية الكائنات الثنائية كبيرة الحجم. بعد ذلك، يمكنك التحقق من أن التحميل أدى إلى تشغيل Azure Function، وأن النص الموجود في الصورة قد تم تحليله وحفظه في Table Storage بشكل صحيح.

  6. باستخدام العناوين في أعلى الصفحة، انتقل لأعلى مستوى واحد في حساب التخزين. حدد موقع Storage browser وحدده على شريط التنقل الأيسر، ثم حدد Tables.

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

    لقطة شاشة تعرض إدخال نص في Azure Table Storage.

تهانينا! لقد نجحتَ في معالجة صورة مُحمَّلة إلى Blob Storage باستخدام Azure Functions وComputer Vision.

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

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

  1. حدد Resource groups من التنقل الرئيسي
  2. حدد مجموعة الموارد msdocs-storage-function من القائمة.
  3. حدد زر Delete resource group أعلى صفحة النظرة العامة على مجموعة الموارد.
  4. أدخل اسم مجموعة الموارد msdocs-storage-function في مربع حوار التأكيد.
  5. حدد «Delete»⁧⁩. قد تستغرق عملية حذف مجموعة الموارد بضع دقائق حتى تكتمل.