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

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

  • التعرف الضوئي على الحروف للتعرف الضوئي على الحروف للنص والأرقام
  • تحليل الصور الذي يصف الصور من خلال الميزات المرئية
  • مهارات مخصصة لاستدعاء أي معالجة صور خارجية تريد توفيرها

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

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

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

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

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

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

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

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

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

Azure Blob Storage هو التخزين الأكثر استخداما لمعالجة الصور في البحث المعرفي.

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

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

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

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

يتضمن تطبيع الصورة العمليات التالية:

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

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

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

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

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

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

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

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

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

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

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

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

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

حول الصور العادية

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

صورة عضو الوصف
البيانات سلسلة BASE64 المشفرة للصورة العادية بتنسيق JPEG.
عرض عرض الصورة العادية بالبكسل.
ارتفاع ارتفاع الصورة العادية بالبكسل.
الأصلالعرض العرض الأصلي للصورة قبل التطبيع.
الأصلالارتفاع الارتفاع الأصلي للصورة قبل التطبيع.
التناوبمنالأصلي الدوران عكس اتجاه عقارب الساعة بالدرجات التي حدثت لإنشاء الصورة العادية. قيمة بين 0 درجة و 360 درجة. تقرأ هذه الخطوة بيانات التعريف من الصورة التي تم إنشاؤها بواسطة كاميرا أو ماسح ضوئي. عادة ما يكون مضاعف 90 درجة.
contentOffset إزاحة الحرف داخل حقل المحتوى الذي تم استخراج الصورة منه. ينطبق هذا الحقل فقط على الملفات التي تحتوي على صور مضمنة.
رقم الصفحة إذا تم استخراج الصورة أو عرضها من 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. أضف قوالب للتعرف الضوئي على الحروف وتحليل الصور من البوابة الإلكترونية، أو انسخ التعريفات من الوثائق المرجعية للمهارات .

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

ملاحظة

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

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

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

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

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

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

    {
      "@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. في مجموعة المهارات، راجع قسم "المخرجات" لكل مهارة لتحديد العقد الموجودة في المستند المثري:

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

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

      "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. قم بتحديث المفهرس لتعيين مخرجات مجموعة المهارات (العقد في شجرة الإثراء) لفهرسة الحقول.

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

      "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"
}

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

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

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

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

  • يخزن "النص" المخرجات التي تم إنشاؤها بواسطة OCR. يجب تعيين هذه العقدة إلى حقل النوع Collection(Edm.String). هناك حقل "نصي" واحد لكل مستند بحث يتكون من سلاسل محددة بفواصل للمستندات التي تحتوي على صور متعددة. يوضح الرسم التوضيحي التالي مخرجات التعرف الضوئي على الحروف لثلاث مستندات. الأول هو مستند يحتوي على ملف بدون صور. والثاني هو مستند (ملف صورة) يحتوي على كلمة واحدة ، "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": "Cognitive Services and Content Intelligence.pptx",
            "text": [
                "",
                "Microsoft",
                "",
                "",
                "",
                "Cognitive Search and Augmentation Combining Microsoft Cognitive Services and Azure Search"
            ]
        }
    ]
    
  • يخزن "layoutText" المعلومات التي تم إنشاؤها بواسطة OCR حول موقع النص على الصفحة ، والتي تم وصفها من حيث المربعات المحيطة وإحداثيات الصورة العادية. يجب تعيين هذه العقدة إلى حقل النوع Collection(Edm.String). هناك حقل "layoutText" واحد لكل مستند بحث يتكون من سلاسل محددة بفواصل.

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

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

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

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

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 ، سيقوم خط أنابيب الإثراء باستخراج الصور فقط ثم تمريرها إلى OCR أو تحليل الصور للمعالجة. يحدث فصل الصورة عن محتوى النص أثناء مرحلة تكسير الوثيقة، وبمجرد فصل الصور، تظل منفصلة ما لم تقم صراحة بدمج المخرجات المعالجة مرة أخرى في النص المصدر.

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

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

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

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

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

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

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

    أصبح إخراج Text Merge الآن النص النهائي الذي يجب تحليله لأي مهارات نهائية تؤدي معالجة النصوص. على سبيل المثال، إذا كانت مجموعة المهارات الخاصة بك تتضمن كلا من التعرف الضوئي على الحروف والتعرف على الكيانات، فيجب أن يكون الإدخال إلى "التعرف على الكيان" "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 لمهارة مخصصة تثري الصور.

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

بالنسبة للسيناريوهات التي تحتاج فيها إلى مهارة مخصصة للعمل على الصور، يمكنك تمرير الصور إلى المهارة المخصصة، وجعلها ترجع نصا أو صورا. توضح معالجة صور عينة 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 بخاصية $typefile.

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 
}

راجع أيضًا