Yapay zeka zenginleştirmesindeki görüntülerden metin ve bilgi ayıklama

Azure AI Search, yapay zeka zenginleştirmesi sayesinde görüntülerden aranabilir metin oluşturmak ve ayıklamak için aşağıdakiler gibi çeşitli seçenekler sunar:

OCR aracılığıyla, dur işaretindeki "DURDUR" sözcüğü gibi alfasayısal metin içeren fotoğraflardan veya resimlerden metin ayıklayabilirsiniz. Görüntü analizi aracılığıyla, bir karahindiba fotoğrafı için "karahindiba" veya "sarı" rengi gibi bir resmin metin gösterimini oluşturabilirsiniz. Görüntüyle ilgili boyutu gibi meta verileri de ayıklayabilirsiniz.

Bu makalede görüntülerle çalışmanın temelleri ele alınır ve ekli görüntülerle çalışma, özel beceriler ve özgün görüntüler üzerinde görselleştirmeleri katmanlama gibi birçok yaygın senaryo açıklanmaktadır.

Beceri kümesindeki görüntü içeriğiyle çalışmak için şunları yapmanız gerekir:

  • Görüntü içeren kaynak dosyalar
  • Görüntü eylemleri için yapılandırılmış bir arama dizin oluşturucu
  • OCR veya görüntü analizini çağıran yerleşik veya özel becerilere sahip bir beceri kümesi
  • Analiz edilen metin çıkışını almak için alanları olan bir arama dizini ve ilişkilendirme oluşturan dizin oluşturucuda çıkış alanı eşlemeleri.

İsteğe bağlı olarak, veri madenciliği senaryoları için görüntü analizi çıktısını bir bilgi deposuna kabul etmek için projeksiyonlar tanımlayabilirsiniz.

Kaynak dosyaları ayarlama

Görüntü işleme dizin oluşturucu temellidir; bu da ham girişlerin desteklenen bir veri kaynağında olması gerektiği anlamına gelir.

  • Görüntü analizi JPEG, PNG, GIF ve BMP'yi destekler
  • OCR JPEG, PNG, BMP ve TIF'yi destekler

Görüntüler tek başına ikili dosyalardır veya belgelere (PDF, RTF ve Microsoft uygulama dosyaları) eklenir. Belirli bir belgeden en fazla 1000 resim ayıklanabilir. Belgede 1000'den fazla resim varsa, ilk 1000 ayıklanır ve ardından bir uyarı oluşturulur.

Azure Blob Depolama, Azure AI Search'te görüntü işleme için en sık kullanılan depolama alanıdır. Blob kapsayıcısından görüntü almayla ilgili üç ana görev vardır:

Görüntü işleme için dizin oluşturucuları yapılandırma

Kaynak dosyalar ayarlandıktan sonra dizin oluşturucu yapılandırmasında parametresini ayarlayarak görüntü normalleştirmesini imageAction etkinleştirin. Görüntü normalleştirme, aşağı akış işleme için görüntülerin daha düzgün hale getirilmesine yardımcı olur. Görüntü normalleştirme aşağıdaki işlemleri içerir:

  • Büyük görüntüler, tekdüzen hale getirmek için maksimum yükseklik ve genişlikte yeniden boyutlandırılır.
  • Yönlendirmede meta verileri olan görüntülerde, görüntü döndürme dikey yükleme için ayarlanır.

Meta veri ayarlamaları, her görüntü için oluşturulan karmaşık bir türde yakalanır. Görüntü normalleştirme gereksinimini geri çeviremezsiniz. OCR ve görüntü analizi gibi görüntüler üzerinde yineleyen beceriler normalleştirilmiş görüntüler bekler.

  1. Yapılandırma özelliklerini ayarlamak için dizin oluşturucu oluşturma veya güncelleştirme:

    {
      "parameters":
      {
        "configuration": 
        {
           "dataToExtract": "contentAndMetadata",
           "parsingMode": "default",
           "imageAction": "generateNormalizedImages"
        }
      }
    }
    
  2. olarak contentAndMetadata ayarlayın dataToExtract (gerekli).

  3. öğesinin parsingMode varsayılan (gerekli) olarak ayarlandığını doğrulayın.

    Bu parametre, dizinde oluşturulan arama belgelerinin ayrıntı düzeyini belirler. Varsayılan mod, bir blob tek bir arama belgesiyle sonuçlanabilecek şekilde bire bir yazışma ayarlar. Belgeler büyükse veya beceriler daha küçük metin öbekleri gerektiriyorsa, işleme amacıyla bir belgeyi sayfalandırmaya alt bölümlere ayıran Metin Bölme becerisi ekleyebilirsiniz. Ancak arama senaryoları için zenginleştirme görüntü işleme içeriyorsa belge başına bir blob gerekir.

  4. Bir zenginleştirme ağacında normalized_images düğümünü etkinleştirmek için ayarlayın imageAction (gerekli):

    • generateNormalizedImages belgenin kırılmasının bir parçası olarak normalleştirilmiş görüntüler dizisi oluşturmak için.

    • generateNormalizedImagePerPage (yalnızca PDF için geçerlidir), PDF'deki her sayfanın bir çıkış görüntüsüne işlendiği normalleştirilmiş görüntüler dizisi oluşturmak için. PDF olmayan dosyalar için, bu parametrenin davranışı "generateNormalizedImages" ayarlamış gibi benzerdir. Ancak, "generateNormalizedImagePerPage" ayarının, birkaç görüntünün oluşturulması gerekeceğinden dizin oluşturma işlemini tasarım gereği daha az performansa sahip hale getirebileceğini (özellikle büyük belgeler için) unutmayın.

  5. İsteğe bağlı olarak, oluşturulan normalleştirilmiş görüntülerin genişliğini veya yüksekliğini ayarlayın:

    • normalizedImageMaxWidth (piksel cinsinden). Varsayılan değer 2000'dir. En yüksek değer 10000'dir.

    • normalizedImageMaxHeight (piksel cinsinden). Varsayılan değer 2000'dir. En yüksek değer 10000'dir.

    Normalleştirilmiş görüntüler için maksimum genişlik ve yükseklik için varsayılan 2000 piksel, OCR becerisi ve görüntü analizi becerisi tarafından desteklenen maksimum boyutlara bağlıdır. OCR becerisi, İngilizce olmayan diller için maksimum genişlik ve yükseklik 4200'i, İngilizce için 10000'i destekler. Maksimum sınırları artırırsanız, beceri kümesi tanımınıza ve belgelerin diline bağlı olarak daha büyük görüntülerde işleme başarısız olabilir.

Normalleştirilmiş görüntüler hakkında

imageAction"Yok" dışında bir değere ayarlandığında, yeni normalized_images alanı bir görüntü dizisi içerir. Her görüntü, aşağıdaki üyelere sahip karmaşık bir türdür:

Görüntü üyesi Açıklama
veriler JPEG biçiminde normalleştirilmiş görüntünün BASE64 kodlanmış dizesi.
genişlik Normalleştirilmiş görüntünün piksel cinsinden genişliği.
yükseklik Normalleştirilmiş görüntünün piksel cinsinden yüksekliği.
originalWidth Normalleştirmeden önce görüntünün özgün genişliği.
originalHeight Normalleştirmeden önce görüntünün özgün yüksekliği.
rotationFromOriginal Normalleştirilmiş görüntüyü oluşturmak için oluşan derecelerde saat yönünün tersine döndürme. 0 derece ile 360 derece arasında bir değer. Bu adım, kamera veya tarayıcı tarafından oluşturulan görüntüdeki meta verileri okur. Genellikle 90 derecenin katı.
contentOffset Görüntünün ayıklandığı içerik alanı içindeki karakter uzaklığı. Bu alan yalnızca eklenmiş görüntüleri olan dosyalar için geçerlidir. PDF belgelerinden ayıklanan resimler için contentOffset her zaman belgede ayıklandığı sayfadaki metnin sonundadır. Bu, resmin sayfadaki özgün konumundan bağımsız olarak, resimlerin o sayfadaki tüm metinlerden sonra görüneceği anlamına gelir.
Pagenumber Resim PDF'den ayıklandıysa veya işlendiyse, bu alan ayıklandığı veya işlendiği PDF'deki sayfa numarasını 1'den başlayarak içerir. Resim PDF'den değilse, bu alan 0'dır.

normalized_images örnek değeri:

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

Görüntü işleme için beceri kümelerini tanımlama

Bu bölüm, görüntü işlemeyle ilgili olarak beceri girişleriyle , çıkışlarla ve desenlerle çalışmaya yönelik bağlam sağlayarak beceri başvuru makalelerini tamamlar.

  1. Beceri eklemek için beceri kümesi oluşturun veya güncelleştirin.

  2. Portaldan OCR ve Görüntü Analizi için şablonlar ekleyin veya beceri başvurusu belgelerindeki tanımları kopyalayın. Bunları beceri kümesi tanımınızın beceri dizisine ekleyin.

  3. Gerekirse beceri kümesinin Azure AI hizmetleri özelliğine çok hizmetli anahtar ekleyin. Azure AI Search, ücretsiz sınırı (dizin oluşturucu başına günde 20) aşan işlemler için OCR için faturalanabilir bir Azure AI hizmetleri kaynağına ve görüntü analizine yönelik çağrılar yapar. Azure yapay zeka hizmetlerinin arama hizmetinizle aynı bölgede olması gerekir.

  4. Özgün görüntüler PDF'ye veya PPTX veya DOCX gibi uygulama dosyalarına eklenmişse, resim çıkışıyla metin çıkışını birlikte kullanmak istiyorsanız Metin Birleştirme becerisi eklemeniz gerekir. Ekli görüntülerle çalışma konusu bu makalede daha ayrıntılı olarak ele alınılmaktadır.

Beceri kümenizin temel çerçevesi oluşturulduktan ve Azure AI hizmetleri yapılandırıldıktan sonra her bir görüntü becerisine odaklanabilir, girişleri ve kaynak bağlamı tanımlayabilir ve çıkışları bir dizin veya bilgi deposundaki alanlarla eşleyebilirsiniz.

Dekont

Görüntü işlemeyi aşağı akış doğal dil işleme ile birleştiren örnek bir beceri kümesi için bkz . REST Öğreticisi: Azure bloblarından aranabilir içerik oluşturmak için REST ve AI kullanma. Beceri görüntüleme çıkışının varlık tanıma ve anahtar ifade ayıklamaya nasıl besleneceği gösterilir.

Görüntü işlemeye yönelik girişler hakkında

Belirtildiği gibi, görüntüler belgenin kırılması sırasında ayıklanır ve bir ön adım olarak normalleştirilir. Normalleştirilmiş görüntüler, herhangi bir görüntü işleme becerisinin girişleridir ve her zaman iki yoldan biriyle zenginleştirilmiş bir belge ağacında temsil edilir:

  • /document/normalized_images/* , bütün olarak işlenen belgeler içindir.

  • /document/normalized_images/*/pages öbekler (sayfalar) halinde işlenen belgeler içindir.

İster OCR'yi hem de görüntü analizini aynı şekilde kullanıyor olun, girişler neredeyse aynı yapıya sahiptir:

    {
      "@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": [ ]
    }

Çıkışları arama alanlarına eşleme

Beceri kümesinde Görüntü Analizi ve OCR beceri çıkışı her zaman metindir. Çıktı metni, iç zenginleştirilmiş belge ağacında düğümler olarak gösterilir ve her düğümün, içeriği uygulamanızda kullanılabilir hale getirmek için arama dizinindeki alanlara veya bilgi deposundaki projeksiyonlara eşlenmesi gerekir.

  1. Beceri kümesinde, zenginleştirilmiş belgede hangi düğümlerin mevcut olduğunu belirlemek için her becerinin bölümünü gözden geçirin outputs :

    {
      "@odata.type": "#Microsoft.Skills.Vision.OcrSkill",
      "context": "/document/normalized_images/*",
      "detectOrientation": true,
      "inputs": [ ],
      "outputs": [
        {
          "name": "text",
          "targetName": "text"
        },
        {
          "name": "layoutText",
          "targetName": "layoutText"
        }
      ]
    }
    
  2. Beceri çıkışlarını kabul eden alanlar eklemek için bir arama dizini oluşturun veya güncelleştirin.

    Aşağıdaki alan koleksiyonu örneğinde "içerik" blob içeriğidir. "Metadata_storage_name", dosyanın adını içerir ("alınabilir" olduğundan emin olun). "Metadata_storage_path", blobun benzersiz yoludur ve varsayılan belge anahtarıdır. "Merged_content", Metin Birleştirme'den çıkarılır (resimler eklendiğinde kullanışlıdır).

    "Text" ve "layoutText" OCR beceri çıkışlarıdır ve belgenin tamamı için OCR tarafından oluşturulan çıkışın tümünü yakalamak için bir dize koleksiyonu olmalıdır.

      "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. Beceri kümesi çıkışını (zenginleştirme ağacındaki düğümler) dizin alanlarıyla eşlemek için dizin oluşturucuyu güncelleştirin.

    Zenginleştirilmiş belgeler dahilidir. Zenginleştirilmiş belge ağacındaki düğümleri dışlaştırmak için, düğüm içeriğini hangi dizin alanının alacağını belirten bir çıkış alanı eşlemesi ayarlayın. Zenginleştirilmiş verilere uygulamanız tarafından bir dizin alanı üzerinden erişilir. Aşağıdaki örnekte, arama dizinindeki bir "metin" alanına eşlenmiş zenginleştirilmiş bir belgede "metin" düğümü (OCR çıktısı) gösterilmektedir.

      "outputFieldMappings": [
        {
          "sourceFieldName": "/document/normalized_images/*/text",
          "targetFieldName": "text"
        },
        {
          "sourceFieldName": "/document/normalized_images/*/layoutText",
          "targetFieldName": "layoutText"
        }
      ]
    
  4. Kaynak belge alma, görüntü işleme ve dizin oluşturmayı çağırmak için dizin oluşturucuyu çalıştırın.

Sonuçları doğrulama

Görüntü işlemenin sonuçlarını denetlemek için dizinde bir sorgu çalıştırın. Arama Gezgini'ni bir arama istemcisi veya HTTP istekleri gönderen herhangi bir araç olarak kullanın. Aşağıdaki sorgu, görüntü işlemenin çıkışını içeren alanları seçer.

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

OCR, görüntü dosyalarındaki metni tanır. Bu, kaynak belgeler saf metin veya saf görüntüyse OCR alanlarının ("metin" ve "layoutText") boş olduğu anlamına gelir. Benzer şekilde, kaynak belge girişleri tamamen metinse görüntü çözümleme alanları ("imageCaption" ve "imageTags") boş olur. Dizin oluşturucu yürütmesi, görüntüleme girişleri boşsa uyarılar gösterir. Zenginleştirilmiş belgede düğümler doldurulmadığında bu tür uyarılar beklenir. Blob dizin oluşturmanın, içerik türleriyle yalıtarak çalışmak istiyorsanız dosya türlerini dahil etmenizi veya hariç tutmanızı sağlar. Dizin oluşturucu çalıştırmaları sırasında gürültüyü azaltmak için bu ayarı kullanabilirsiniz.

Sonuçları denetlemek için alternatif bir sorgu "içerik" ve "merged_content" alanlarını içerebilir. Bu alanların herhangi bir blob dosyası için içerik içerdiğine, hatta görüntü işlemenin yapılmadığı alanlara dikkat edin.

Beceri çıkışları hakkında

Beceri çıkışları şunlardır: "text" (OCR), "layoutText" (OCR), "merged_content", "başlık s" (görüntü analizi), "etiketler" (görüntü analizi):

  • "text" OCR tarafından oluşturulan çıkışı depolar. Bu düğüm türünde Collection(Edm.String)bir alana eşlenmelidir. Arama belgesi başına birden çok resim içeren belgeler için virgülle ayrılmış dizelerden oluşan bir "metin" alanı vardır. Aşağıdaki çizimde üç belge için OCR çıkışı gösterilmektedir. İlk olarak, resim içermeyen bir dosya içeren belgedir. İkincisi, "Microsoft" sözcüğünü içeren bir belgedir (görüntü dosyası). Üçüncüsü, birden çok resim içeren, bazıları metin içermeyen ("", ) bir belgedir.

    "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", sayfada metin konumu hakkında OCR tarafından oluşturulan ve normalleştirilmiş görüntünün sınırlayıcı kutuları ve koordinatları bakımından açıklanan bilgileri depolar. Bu düğüm türünde Collection(Edm.String)bir alana eşlenmelidir. Arama belgesi başına virgülle ayrılmış dizelerden oluşan bir "layoutText" alanı vardır.

  • "merged_content", Metin Birleştirme becerisinin çıkışını depolar ve kaynak belgeden ham metin içeren ve resmin yerine eklenmiş "metin" içeren büyük bir alan Edm.String olmalıdır. Dosyalar salt metin ise, OCR ve görüntü analizinin hiçbir ilgisi yoktur ve "merged_content" "içerik" ile aynıdır (blobun içeriğini içeren bir blob özelliği).

  • "imageCaption", bir görüntünün açıklamasını bireysel etiketler olarak ve daha uzun bir metin açıklaması olarak yakalar.

  • "imageTags", kaynak belgedeki tüm görüntüler için bir koleksiyon olan bir anahtar sözcük koleksiyonu olarak bir resimle ilgili etiketleri depolar.

Aşağıdaki ekran görüntüsü, metin ve eklenmiş görüntüler içeren bir PDF'nin çizimidir. Belge çatlama üç gömülü görüntü algıladı: martılar, harita, kartal sürü. Örnekteki diğer metinler (başlıklar, başlıklar ve gövde metni dahil) metin olarak ayıklandı ve görüntü işlemenin dışında tutuldu.

Screenshot of three images in a PDF

Görüntü analizi çıktısı aşağıdaki JSON'da gösterilmiştir (arama sonucu). Beceri tanımı, hangi görsel özelliklerin ilgi çekici olduğunu belirtmenize olanak tanır. Bu örnekte etiketler ve açıklamalar üretildi, ancak aralarından seçim yapabileceğiniz daha fazla çıkış var.

  • "imageCaption" çıkışı, tek sözcüklerden ve görüntüyü açıklayan daha uzun tümceciklerden oluşan "etiketler" ile belirtilen, görüntü başına bir açıklama dizisidir. "Bir martı sürüleri suda yüzer" veya "bir kuşun yakını" etiketlerini dikkate alın.

  • "imageTags" çıkışı, oluşturma sırasına göre listelenen tek etiketli bir dizidir. Etiketlerin yinelendiğini fark edin. Toplama veya gruplandırma yoktur.

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

Senaryo: PDF'lere eklenmiş görüntüler

İşlemek istediğiniz görüntüler PDF veya DOCX gibi başka dosyalara eklendiğinde zenginleştirme işlem hattı yalnızca görüntüleri ayıklar ve sonra bunları işlemek üzere OCR'ye veya görüntü analizine geçirir. Görüntü ayıklama, belgenin kırılma aşamasında gerçekleşir ve görüntüler ayrıldıktan sonra, işlenen çıkışı kaynak metinle açıkça birleştirmediğiniz sürece bunlar ayrı kalır.

Metin Birleştirme , görüntü işleme çıktısını belgeye geri yerleştirmek için kullanılır. Metin Birleştirme zor bir gereksinim olmasa da, resim çıkışının (OCR metni, OCR layoutText, görüntü etiketleri, görüntü başlık) belgeye yeniden giriş olabilmesi için sık sık çağrılır. Beceriye bağlı olarak, görüntü çıkışı ekli ikili görüntüyü yerinde metin eşdeğeriyle değiştirir. Görüntü Analizi çıkışı, görüntü konumunda birleştirilebilir. OCR çıkışı her zaman her sayfanın sonunda görünür.

Aşağıdaki iş akışı görüntü ayıklama, analiz, birleştirme ve görüntü işlemeli çıkışı Varlık Tanıma veya Metin Çevirisi gibi diğer metin tabanlı becerilere göndermek için işlem hattını genişletme işlemini özetler.

  1. Dizin oluşturucu, veri kaynağına bağlandıktan sonra kaynak belgeleri yükleyip kırıp görüntüleri ve metinleri ayıklar ve her içerik türünü işlenmek üzere kuyruğa alır. Yalnızca kök düğümden ("document") oluşan zenginleştirilmiş bir belge oluşturulur.

  2. Kuyruktaki görüntüler normalleştirilir ve zenginleştirilmiş belgelere düğüm "document/normalized_images" olarak geçirilir.

  3. Görüntü zenginleştirmeleri giriş olarak kullanılarak "/document/normalized_images" yürütülür.

  4. Görüntü çıkışları zenginleştirilmiş belge ağacına geçirilir ve her çıkış ayrı bir düğüm olarak gösterilir. Çıkışlar beceriye göre değişiklik gösterir (OCR için metin ve layoutText, Resim Analizi için etiketler ve başlık).

  5. İsteğe bağlı olarak, ancak arama belgelerinde hem metin hem de görüntü kaynağı metninin birlikte eklenmesini istiyorsanız, Metin Birleştirme çalışır ve bu görüntülerin metin gösterimini dosyadan ayıklanan ham metinle birleştirir. Metin öbekleri tek bir büyük dizede birleştirilir; burada metin önce dizeye, sonra OCR metin çıkışına veya resim etiketlerine ve başlık eklenir.

    Metin Birleştirme'nin çıktısı artık metin işleme gerçekleştiren aşağı akış becerileri için analize yönelik kesin metindir. Örneğin, beceri kümesiniz hem OCR hem de Varlık Tanıma içeriyorsa, Varlık Tanıma girişi (Metin Birleştirme beceri çıkışının targetName değeri) olmalıdır "document/merged_text" .

  6. Tüm beceriler yürütüldükten sonra zenginleştirilmiş belge tamamlanır. Son adımda dizin oluşturucular, arama dizinindeki tek tek alanlara zenginleştirilmiş içerik göndermek için çıkış alanı eşlemelerine başvurur.

Aşağıdaki örnek beceri kümesi, eklenmiş görüntüler yerine eklenmiş OCRed metin içeren belgenizin özgün metnini içeren bir "merged_text" alan oluşturur. Giriş olarak kullanan "merged_text" bir Varlık Tanıma becerisi de içerir.

İstek gövdesi söz dizimi

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

Artık bir merged_text alanınız olduğuna göre, bunu dizin oluşturucu tanımınızda aranabilir bir alan olarak eşleyebilirsiniz. Resimlerin metni de dahil olmak üzere dosyalarınızın tüm içeriği aranabilir.

Senaryo: Sınırlayıcı kutuları görselleştirme

Diğer bir yaygın senaryo da arama sonuçları düzen bilgilerini görselleştirmektir. Örneğin, arama sonuçlarınızın bir parçası olarak görüntüde bir metin parçasının bulunduğu yeri vurgulamak isteyebilirsiniz.

OCR adımı normalleştirilmiş görüntülerde gerçekleştirildiğinden, düzen koordinatları normalleştirilmiş görüntü alanındadır, ancak özgün görüntüyü görüntülemeniz gerekiyorsa, düzendeki koordinat noktalarını özgün görüntü koordinat sistemine dönüştürün.

Aşağıdaki algoritmada desen gösterilmektedir:

/// <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;
}

Senaryo: Özel görüntü becerileri

Görüntüler özel becerilere de geçirilebilir ve bu becerilerden döndürülebilir. Base64 beceri kümesi, özel beceriye geçirilen görüntüyü kodlar. Görüntüyü özel beceri içinde kullanmak için, özel becerinin girişi olarak ayarlayın "/document/normalized_images/*/data" . Özel beceri kodunuzun içinde, base64 dizesini görüntüye dönüştürmeden önce kodunu çözebilirsiniz. Bir görüntüyü beceri kümesine döndürmek için, görüntüyü beceri kümesine döndürmeden önce base64 ile kodlayın.

Görüntü aşağıdaki özelliklere sahip bir nesne olarak döndürülür.

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

Azure Search Python örnekleri deposu, Python'da görüntüleri zenginleştiren özel bir beceriye sahip eksiksiz bir örneğe sahiptir.

Görüntüleri özel becerilere geçirme

Görüntüler üzerinde çalışmak için özel beceriye ihtiyacınız olan senaryolarda, görüntüleri özel beceriye geçirebilir ve metin veya görüntü döndürmesini sağlayabilirsiniz. Aşağıdaki beceri kümesi bir örnekten alınmalıdır.

Aşağıdaki beceri kümesi normalleştirilmiş görüntüyü alır (belgenin kırılması sırasında elde edilir) ve görüntünün dilimlerini çıkarır.

Örnek beceri kümesi

{
  "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": {}
        }
  ]
}

Özel beceri örneği

Özel becerinin kendisi beceri kümesinin dışındadır. Bu durumda, ilk olarak özel beceri biçimindeki istek kayıtları toplu işleminde döngüler oluşturan ve ardından base64 ile kodlanmış dizeyi bir görüntüye dönüştüren Python kodu olur.

# 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

Benzer şekilde bir görüntü döndürmek için, özelliğine sahip bir JSON nesnesi içinde base64 ile kodlanmış bir $type dize döndürebilirsiniz 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 
}

Ayrıca bkz.