استخراج النص والمعلومات من الصور في الذكاء الاصطناعي الإثراء

من خلال الإثراء الذكاء الاصطناعي، يوفر لك Azure الذكاء الاصطناعي Search العديد من الخيارات لإنشاء نص قابل للبحث واستخراجه من الصور، بما في ذلك:

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

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

للعمل مع محتوى الصورة في مجموعة مهارات، ستحتاج إلى:

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

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

إعداد الملفات المصدر

معالجة الصور تعتمد على المفهرس، ما يعني أن المدخلات الأولية يجب أن تكون في مصدر بيانات مدعوم.

  • يدعم تحليل الصور JPEG وPNG وGIF وBMP
  • يدعم التعرف البصري على الحروف JPEG وPNG وBMP وTIF

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

Azure Blob Storage هو التخزين الأكثر استخداما لمعالجة الصور في Azure الذكاء الاصطناعي Search. هناك ثلاث مهام رئيسية تتعلق باسترداد الصور من حاوية كائن ثنائي كبير الحجم:

  • تمكين الوصول إلى المحتوى في الحاوية. إذا كنت تستخدم سلسلة الاتصال وصول كامل يتضمن مفتاحا، فسيمنحك المفتاح الإذن للمحتوى. بدلا من ذلك، يمكنك المصادقة باستخدام معرف Microsoft Entra أو الاتصال كخدمة موثوق بها.

  • إنشاء مصدر بيانات من نوع "azureblob" يتصل بحاوية blob التي تخزن ملفاتك.

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

تكوين المفهرسات لمعالجة الصور

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

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

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

  1. إنشاء مفهرس أو تحديثه لتعيين خصائص التكوين:

    {
      "parameters":
      {
        "configuration": 
        {
           "dataToExtract": "contentAndMetadata",
           "parsingMode": "default",
           "imageAction": "generateNormalizedImages"
        }
      }
    }
    
  2. تعيين dataToExtract إلى contentAndMetadata (مطلوب).

  3. تحقق من تعيين parsingMode إلى الافتراضي (مطلوب).

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

  4. تعيين imageAction لتمكين عقدة normalized_images في شجرة إثراء (مطلوب):

    • generateNormalizedImages لإنشاء صفيف من الصور التي تمت تسويتها كجزء من تكسير المستند.

    • generateNormalizedImagePerPage (ينطبق على PDF فقط) لإنشاء صفيف من الصور التي تمت تسويتها حيث يتم عرض كل صفحة في PDF على صورة إخراج واحدة. بالنسبة إلى الملفات غير بتنسيق PDF، يكون سلوك هذه المعلمة مشابها كما لو قمت بتعيين "generateNormalizedImages". ومع ذلك، لاحظ أن الإعداد "generateNormalizedImagePerPage" يمكن أن يجعل عملية الفهرسة أقل أداء حسب التصميم (خاصة للمستندات الكبيرة) حيث يجب إنشاء العديد من الصور.

  5. بشكل اختياري، اضبط عرض الصور التي تم إنشاؤها أو ارتفاعها:

    • normalizedImageMaxWidth (بالبكسل). الافتراضي هو 2000. القيمة القصوى هي 10000.

    • normalizedImageMaxHeight (بالبكسل). الافتراضي هو 2000. القيمة القصوى هي 10000.

    يعتمد الافتراضي 2000 بكسل للصور التي تمت تسويتها على الحد الأقصى للعرض والارتفاع على الحد الأقصى للأحجام التي تدعمها مهارة التعرف البصري على الحروف ومهارة تحليل الصور. تدعم مهارة التعرف البصري على الحروف (OCR) أقصى عرض وارتفاع يبلغ 4200 للغات غير الإنجليزية، و10000 للغة الإنجليزية. إذا قمت بزيادة الحد الأقصى، فقد تفشل المعالجة على الصور الأكبر اعتمادا على تعريف مجموعة المهارات ولغة المستندات.

  • اختياريا، قم بتعيين معايير نوع الملف إذا كان حمل العمل يستهدف نوع ملف معين. يتضمن تكوين مفهرس Blob تضمين الملفات وإعدادات الاستبعاد. يمكنك تصفية الملفات التي لا تريدها.

    {
      "parameters" : { 
          "configuration" : { 
              "indexedFileNameExtensions" : ".pdf, .docx",
              "excludedFileNameExtensions" : ".png, .jpeg" 
          } 
      }
    }
    

حول الصور التي تمت تسويتها

عندما imageAction يتم تعيين إلى قيمة أخرى غير "none"، يحتوي حقل normalized_images الجديد على صفيف من الصور. كل صورة هي نوع معقد يحتوي على الأعضاء التالين:

عضو الصورة ‏‏الوصف
البيانات سلسلة ترميز BASE64 للصورة التي تمت تسويتها بتنسيق JPEG.
العرض عرض الصورة التي تمت تسويتها بالبكسل.
الارتفاع ارتفاع الصورة التي تمت تسويتها بالبكسل.
originalWidth العرض الأصلي للصورة قبل التسوية.
صلصلة أصلية الارتفاع الأصلي للصورة قبل التطبيع.
استدارة من المورجينال استدارة عكس اتجاه عقارب الساعة بالدرجات التي حدثت لإنشاء الصورة التي تمت تسويتها. قيمة بين 0 درجة و360 درجة. تقرأ هذه الخطوة بيانات التعريف من الصورة التي يتم إنشاؤها بواسطة كاميرا أو ماسح ضوئي. عادة مضاعف 90 درجة.
contentOffset إزاحة الحرف داخل حقل المحتوى الذي تم استخراج الصورة منه. ينطبق هذا الحقل فقط على الملفات التي تحتوي على صور مضمنة. تكون contentOffset للصور المستخرجة من مستندات PDF دائما في نهاية النص على الصفحة التي تم استخراجها منه في المستند. وهذا يعني أن الصور تظهر بعد كل النص على تلك الصفحة، بغض النظر عن الموقع الأصلي للصورة في الصفحة.
pageNumber إذا تم استخراج الصورة أو عرضها من ملف PDF، فسيحتوي هذا الحقل على رقم الصفحة في ملف PDF الذي تم استخراجه أو عرضه منه، بدءا من 1. إذا لم تكن الصورة من ملف PDF، فهذا الحقل هو 0.

نموذج قيمة normalized_images:

[
  {
    "data": "BASE64 ENCODED STRING OF A JPEG IMAGE",
    "width": 500,
    "height": 300,
    "originalWidth": 5000,  
    "originalHeight": 3000,
    "rotationFromOriginal": 90,
    "contentOffset": 500,
    "pageNumber": 2
  }
]

تحديد مجموعات المهارات لمعالجة الصور

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

  1. إنشاء مجموعة مهارات أو تحديثها لإضافة المهارات.

  2. أضف قوالب ل OCR وتحليل الصور من المدخل، أو انسخ التعريفات من وثائق مرجع المهارة. أدخلها في مجموعة المهارات الخاصة بتعريف مجموعة المهارات الخاصة بك.

  3. إذا لزم الأمر، قم بتضمين مفتاح متعدد الخدمات في خاصية خدمات Azure الذكاء الاصطناعي مجموعةة المهارات. يقوم Azure الذكاء الاصطناعي Search بإجراء مكالمات إلى مورد خدمات Azure الذكاء الاصطناعي القابل للفوترة ل OCR وتحليل الصور للمعاملات التي تتجاوز الحد المجاني (20 لكل مفهرس يوميا). يجب أن تكون خدمات Azure الذكاء الاصطناعي في نفس منطقة خدمة البحث الخاصة بك.

  4. إذا كانت الصور الأصلية مضمنة في ملفات PDF أو التطبيقات مثل PPTX أو DOCX، فستحتاج إلى إضافة مهارة دمج النصوص إذا كنت تريد إخراج الصورة وإخراج النص معا. تتم مناقشة العمل مع الصور المضمنة بشكل أكبر في هذه المقالة.

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

إشعار

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

حول المدخلات لمعالجة الصور

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

  • /document/normalized_images/* هو للمستندات التي تتم معالجتها بالكامل.

  • /document/normalized_images/*/pages هو للمستندات التي تتم معالجتها في مجموعات (صفحات).

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

    {
      "@odata.type": "#Microsoft.Skills.Vision.OcrSkill",
      "context": "/document/normalized_images/*",
      "detectOrientation": true,
      "inputs": [
        {
          "name": "image",
          "source": "/document/normalized_images/*"
        }
      ],
      "outputs": [ ]
    },
    {
      "@odata.type": "#Microsoft.Skills.Vision.ImageAnalysisSkill",
      "context": "/document/normalized_images/*",
      "visualFeatures": [ "tags", "description" ],
      "inputs": [
        {
          "name": "image",
          "source": "/document/normalized_images/*"
        }
      ],
      "outputs": [ ]
    }

تعيين المخرجات للبحث في الحقول

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

  1. في مجموعة المهارات، راجع outputs قسم كل مهارة لتحديد العقد الموجودة في المستند الذي تم إثرائه:

    {
      "@odata.type": "#Microsoft.Skills.Vision.OcrSkill",
      "context": "/document/normalized_images/*",
      "detectOrientation": true,
      "inputs": [ ],
      "outputs": [
        {
          "name": "text",
          "targetName": "text"
        },
        {
          "name": "layoutText",
          "targetName": "layoutText"
        }
      ]
    }
    
  2. إنشاء فهرس بحث أو تحديثه لإضافة حقول لقبول مخرجات المهارة.

    في مثال مجموعة الحقول التالية، "المحتوى" هو محتوى كائن ثنائي كبير الحجم. يحتوي "Metadata_storage_name" على اسم الملف (تأكد من أنه "قابل للاسترداد"). "Metadata_storage_path" هو المسار الفريد للكائن الثنائي كبير الحجم وهو مفتاح المستند الافتراضي. "Merged_content" هو إخراج من "دمج النصوص" (مفيد عند تضمين الصور).

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

      "fields": [
        {
          "name": "content",
          "type": "Edm.String",
          "filterable": false,
          "retrievable": true,
          "searchable": true,
          "sortable": false
        },
        {
          "name": "metadata_storage_name",
          "type": "Edm.String",
          "filterable": true,
          "retrievable": true,
          "searchable": true,
          "sortable": false
        },
        {
          "name": "metadata_storage_path",
          "type": "Edm.String",
          "filterable": false,
          "key": true,
          "retrievable": true,
          "searchable": false,
          "sortable": false
        },
        {
          "name": "merged_content",
          "type": "Edm.String",
          "filterable": false,
          "retrievable": true,
          "searchable": true,
          "sortable": false
        },
        {
          "name": "text",
          "type": "Collection(Edm.String)",
          "filterable": false,
          "retrievable": true,
          "searchable": true
        },
        {
          "name": "layoutText",
          "type": "Collection(Edm.String)",
          "filterable": false,
          "retrievable": true,
          "searchable": true
        }
      ],
    
  3. تحديث المفهرس لتعيين إخراج مجموعة المهارات (العقد في شجرة الإثراء) إلى حقول الفهرسة.

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

      "outputFieldMappings": [
        {
          "sourceFieldName": "/document/normalized_images/*/text",
          "targetFieldName": "text"
        },
        {
          "sourceFieldName": "/document/normalized_images/*/layoutText",
          "targetFieldName": "layoutText"
        }
      ]
    
  4. قم بتشغيل المفهرس لاستدعاء استرداد المستند المصدر ومعالجة الصور والفهرسة.

التحقق من النتائج

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

POST /indexes/[index name]/docs/search?api-version=[api-version]
{
    "search": "*",
    "select": "metadata_storage_name, text, layoutText, imageCaption, imageTags"
}

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

قد يتضمن استعلام بديل للتحقق من النتائج حقلي "المحتوى" و"merged_content". لاحظ أن هذه الحقول تتضمن محتوى لأي ملف كائن ثنائي كبير الحجم، حتى تلك التي لم يتم فيها تنفيذ معالجة الصور.

حول مخرجات المهارات

تتضمن مخرجات المهارة "text" (OCR) و"layoutText" (OCR) و"merged_content" و"التسميات التوضيحية" (تحليل الصور) و"العلامات" (تحليل الصور):

  • يخزن "النص" الإخراج الذي تم إنشاؤه بواسطة OCR. يجب تعيين هذه العقدة إلى حقل من النوع Collection(Edm.String). يوجد حقل "نص" واحد لكل مستند بحث يتكون من سلاسل محددة بفاصلة للمستندات التي تحتوي على صور متعددة. يبين الرسم التوضيحي التالي إخراج التعرف البصري على الحروف (OCR) لثلاث مستندات. أولا، مستند يحتوي على ملف بدون صور. ثانيا، مستند (ملف صورة) يحتوي على كلمة واحدة، "Microsoft". الثالث هو مستند يحتوي على صور متعددة، بعضها بدون أي نص ("",).

    "value": [
        {
            "@search.score": 1,
            "metadata_storage_name": "facts-about-microsoft.html",
            "text": []
        },
        {
            "@search.score": 1,
            "metadata_storage_name": "guthrie.jpg",
            "text": [ "Microsoft" ]
        },
        {
            "@search.score": 1,
            "metadata_storage_name": "Azure AI services and Content Intelligence.pptx",
            "text": [
                "",
                "Microsoft",
                "",
                "",
                "",
                "Azure AI Search and Augmentation Combining Microsoft Azure AI services and Azure Search"
            ]
        }
    ]
    
  • يخزن "layoutText" معلومات تم إنشاؤها بواسطة التعرف البصري على الحروف (OCR) حول موقع النص على الصفحة، الموضحة من حيث مربعات الإحاطة وإحداثيات الصورة التي تمت تسويتها. يجب تعيين هذه العقدة إلى حقل من النوع Collection(Edm.String). يوجد حقل "layoutText" واحد لكل مستند بحث يتكون من سلاسل محددة بفاصلة.

  • يخزن "merged_content" إخراج مهارة دمج النصوص، ويجب أن يكون حقلا كبيرا واحدا من النوع Edm.String يحتوي على نص أولي من المستند المصدر، مع "نص" مضمن بدلا من صورة. إذا كانت الملفات نصية فقط، فلن يكون ل OCR وتحليل الصور أي شيء للقيام به، و"merged_content" هو نفسه "المحتوى" (خاصية كائن ثنائي كبير الحجم تحتوي على محتوى الكائن الثنائي كبير الحجم).

  • يلتقط "imageCaption" وصفا لصورة كعلامات أفراد ووصف نصي أطول.

  • تخزن "imageTags" علامات حول صورة كمجموعة من الكلمات الأساسية، وهي مجموعة واحدة لجميع الصور في المستند المصدر.

لقطة الشاشة التالية هي رسم توضيحي لملف PDF يتضمن نصا وصورا مضمنة. كشف تكسير المستند عن ثلاث صور مضمنة: قطيع من النورس، الخريطة، النسر. تم استخراج نص آخر في المثال (بما في ذلك العناوين والعناوين والنص الأساسي) كنص واستبعاده من معالجة الصور.

Screenshot of three images in a PDF

يتم توضيح إخراج تحليل الصور في JSON أدناه (نتيجة البحث). يسمح لك تعريف المهارة بتحديد الميزات المرئية التي تهمك. على سبيل المثال، تم إنتاج العلامات والأوصاف، ولكن هناك المزيد من المخرجات للاختيار من بينها.

  • إخراج "imageCaption" عبارة عن صفيف من الأوصاف، واحد لكل صورة، ويدل عليه ب "علامات" تتكون من كلمات مفردة وعبارات أطول تصف الصورة. لاحظ أن العلامات التي تتكون من "قطيع من النورس تسبح في الماء"، أو "صورة مقربة من طائر".

  • إخراج "imageTags" هو صفيف من العلامات الفردية، المدرجة بترتيب الإنشاء. لاحظ أن العلامات تتكرر. لا يوجد تجميع أو تجميع.

 "imageCaption": [
      "{\"tags\":[\"bird\",\"outdoor\",\"water\",\"flock\",\"many\",\"lot\",\"bunch\",\"group\",\"several\",\"gathered\",\"pond\",\"lake\",\"different\",\"family\",\"flying\",\"standing\",\"little\",\"air\",\"beach\",\"swimming\",\"large\",\"dog\",\"landing\",\"jumping\",\"playing\"],\"captions\":[{\"text\":\"a flock of seagulls are swimming in the water\",\"confidence\":0.70419257326275686}]}",
      "{\"tags\":[\"map\"],\"captions\":[{\"text\":\"map\",\"confidence\":0.99942880868911743}]}",
      "{\"tags\":[\"animal\",\"bird\",\"raptor\",\"eagle\",\"sitting\",\"table\"],\"captions\":[{\"text\":\"a close up of a bird\",\"confidence\":0.89643581933539462}]}",
    . . .

 "imageTags": [
    "bird",
    "outdoor",
    "water",
    "flock",
    "animal",
    "bunch",
    "group",
    "several",
    "drink",
    "gathered",
    "pond",
    "different",
    "family",
    "same",
    "map",
    "text",
    "animal",
    "bird",
    "bird of prey",
    "eagle"
    . . .

السيناريو: الصور المضمنة في ملفات PDF

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

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

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

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

  2. تتم تسوية الصور في قائمة الانتظار وتم تمريرها إلى مستندات ثرية كعقدة "document/normalized_images" .

  3. يتم تنفيذ عمليات إثراء الصور، باستخدام "/document/normalized_images" كإدخل.

  4. يتم تمرير مخرجات الصور إلى شجرة المستندات التي تم إثراؤها، مع كل إخراج كعقدة منفصلة. تختلف المخرجات حسب المهارة (نص وتخطيط ل OCR والعلامات والتسميات التوضيحية لتحليل الصور).

  5. اختياري ولكن يوصى به إذا كنت تريد تضمين كل من النص والنص الأصلي للصورة معا، يتم تشغيل "دمج النصوص"، مع دمج التمثيل النصي لتلك الصور مع النص الخام المستخرج من الملف. يتم دمج مجموعات النص في سلسلة كبيرة واحدة، حيث يتم إدراج النص أولا في السلسلة ثم إخراج النص OCR أو علامات الصورة والتسميات التوضيحية.

    إخراج دمج النصوص هو الآن النص النهائي الذي يجب تحليله لأي مهارات انتقال البيانات من الخادم التي تقوم بمعالجة النص. على سبيل المثال، إذا كانت مجموعة المهارات الخاصة بك تتضمن كلا من التعرف البصري على الحروف والتعرف على الكيان، يجب أن يكون "document/merged_text" الإدخال إلى التعرف على الكيان (الاسم الهدف لإخراج مهارة دمج النصوص).

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

تنشئ مجموعة مهارات المثال التالي حقلا "merged_text" يحتوي على النص الأصلي لمستندك مع نص OCRed مضمن بدلا من الصور المضمنة. كما يتضمن مهارة التعرف على الكيان التي تستخدم "merged_text" كمدخل.

طلب بناء جملة النص الأساسي

{
  "description": "Extract text from images and merge with content text to produce merged_text",
  "skills":
  [
    {
        "description": "Extract text (plain and structured) from image.",
        "@odata.type": "#Microsoft.Skills.Vision.OcrSkill",
        "context": "/document/normalized_images/*",
        "defaultLanguageCode": "en",
        "detectOrientation": true,
        "inputs": [
          {
            "name": "image",
            "source": "/document/normalized_images/*"
          }
        ],
        "outputs": [
          {
            "name": "text"
          }
        ]
    },
    {
      "@odata.type": "#Microsoft.Skills.Text.MergeSkill",
      "description": "Create merged_text, which includes all the textual representation of each image inserted at the right location in the content field.",
      "context": "/document",
      "insertPreTag": " ",
      "insertPostTag": " ",
      "inputs": [
        {
          "name":"text", "source": "/document/content"
        },
        {
          "name": "itemsToInsert", "source": "/document/normalized_images/*/text"
        },
        {
          "name":"offsets", "source": "/document/normalized_images/*/contentOffset" 
        }
      ],
      "outputs": [
        {
          "name": "mergedText", "targetName" : "merged_text"
        }
      ]
    },
    {
      "@odata.type": "#Microsoft.Skills.Text.V3.EntityRecognitionSkill",
      "context": "/document",
      "categories": [ "Person"],
      "defaultLanguageCode": "en", 
      "minimumPrecision": 0.5, 
      "inputs": [
        {
            "name": "text", "source": "/document/merged_text"
        }
      ],
      "outputs": [
        {
            "name": "persons", "targetName": "people"
        }
      ]
    }
  ]
}

الآن بعد أن أصبح لديك حقل merged_text، يمكنك تعيينه ك حقل قابل للبحث في تعريف المفهرس. سيكون كل محتوى ملفاتك، بما في ذلك نص الصور، قابلا للبحث.

السيناريو: تصور مربعات الإحاطة

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

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

توضح الخوارزمية التالية النمط:

/// <summary>
///  Converts a point in the normalized coordinate space to the original coordinate space.
///  This method assumes the rotation angles are multiples of 90 degrees.
/// </summary>
public static Point GetOriginalCoordinates(Point normalized,
                            int originalWidth,
                            int originalHeight,
                            int width,
                            int height,
                            double rotationFromOriginal)
{
    Point original = new Point();
    double angle = rotationFromOriginal % 360;

    if (angle == 0 )
    {
        original.X = normalized.X;
        original.Y = normalized.Y;
    } else if (angle == 90)
    {
        original.X = normalized.Y;
        original.Y = (width - normalized.X);
    } else if (angle == 180)
    {
        original.X = (width -  normalized.X);
        original.Y = (height - normalized.Y);
    } else if (angle == 270)
    {
        original.X = height - normalized.Y;
        original.Y = normalized.X;
    }

    double scalingFactor = (angle % 180 == 0) ? originalHeight / height : originalHeight / width;
    original.X = (int) (original.X * scalingFactor);
    original.Y = (int)(original.Y * scalingFactor);

    return original;
}

السيناريو: مهارات الصورة المخصصة

يمكن أيضا تمرير الصور وإعادتها من المهارات المخصصة. تقوم مجموعة المهارات base64 بترميز الصورة التي يتم تمريرها إلى المهارة المخصصة. لاستخدام الصورة داخل المهارة المخصصة، قم بتعيين "/document/normalized_images/*/data" كمدخل إلى المهارة المخصصة. ضمن التعليمة البرمجية للمهارة المخصصة، قم بفك ترميز السلسلة base64 قبل تحويلها إلى صورة. لإرجاع صورة إلى مجموعة المهارات، قم بترميز الصورة base64 قبل إعادتها إلى مجموعة المهارات.

يتم إرجاع الصورة ككائن بالخصائص التالية.

 { 
  "$type": "file", 
  "data": "base64String" 
 }

يحتوي مستودع نماذج Azure Search Python على عينة كاملة تم تنفيذها في Python لمهارة مخصصة تثري الصور.

تمرير الصور إلى المهارات المخصصة

بالنسبة للسيناريوهات التي تحتاج فيها إلى مهارة مخصصة للعمل على الصور، يمكنك تمرير الصور إلى المهارة المخصصة، وإرجاع النص أو الصور. مجموعة المهارات التالية من عينة.

تأخذ مجموعة المهارات التالية الصورة التي تمت تسويتها (التي تم الحصول عليها أثناء تكسير المستند)، وتخرج شرائح من الصورة.

عينة مجموعة المهارات

{
  "description": "Extract text from images and merge with content text to produce merged_text",
  "skills":
  [
    {
          "@odata.type": "#Microsoft.Skills.Custom.WebApiSkill",
          "name": "ImageSkill",
          "description": "Segment Images",
          "context": "/document/normalized_images/*",
          "uri": "https://your.custom.skill.url",
          "httpMethod": "POST",
          "timeout": "PT30S",
          "batchSize": 100,
          "degreeOfParallelism": 1,
          "inputs": [
            {
              "name": "image",
              "source": "/document/normalized_images/*"
            }
          ],
          "outputs": [
            {
              "name": "slices",
              "targetName": "slices"
            }
          ],
          "httpHeaders": {}
        }
  ]
}

مثال على المهارة المخصصة

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

# deserialize the request, for each item in the batch
for value in values:
  data = value['data']
  base64String = data["image"]["data"]
  base64Bytes = base64String.encode('utf-8')
  inputBytes = base64.b64decode(base64Bytes)
  # Use numpy to convert the string to an image
  jpg_as_np = np.frombuffer(inputBytes, dtype=np.uint8)
  # you now have an image to work with

وبالمثل لإرجاع صورة، قم بإرجاع سلسلة مشفرة base64 داخل كائن JSON بخاصية $type .file

def base64EncodeImage(image):
    is_success, im_buf_arr = cv2.imencode(".jpg", image)
    byte_im = im_buf_arr.tobytes()
    base64Bytes = base64.b64encode(byte_im)
    base64String = base64Bytes.decode('utf-8')
    return base64String

 base64String = base64EncodeImage(jpg_as_np)
 result = { 
  "$type": "file", 
  "data": base64String 
}

(راجع أيضًا )