Kemampuan kognitif Analisis Gambar

Kemampuan Analisis Gambar mengekstrak serangkaian fitur visual yang kaya berdasarkan konten gambar. Contohnya, Anda dapat membuat keterangan dari gambar, menghasilkan tag, atau mengidentifikasi selebritas dan landmark. Artikel ini adalah dokumentasi referensi untuk keterampilan Analisis Gambar. Lihat Mengekstrak teks dan informasi dari gambar untuk instruksi penggunaan.

Keterampilan ini menggunakan model pembelajaran mesin yang disediakan oleh Azure AI Vision di layanan Azure AI. Image Analysis berfungsi pada gambar yang memenuhi persyaratan berikut:

  • Gambar harus disajikan dalam format JPEG, PNG, GIF, atau BMP
  • Ukuran file gambar harus kurang dari 4 megabyte (MB)
  • Dimensi gambar harus lebih besar dari 50 x 50 piksel

Keterampilan ini diimplementasikan menggunakan API Analisis Gambar AI versi 3.2. Jika solusi Anda memerlukan panggilan versi API layanan yang lebih baru (seperti versi 4.0), pertimbangkan untuk menerapkan melalui keterampilan kustom Api Web.

Catatan

Keterampilan ini terikat ke layanan Azure AI dan memerlukan sumber daya yang dapat ditagih untuk transaksi yang melebihi 20 dokumen per pengindeks per hari. Eksekusi keterampilan bawaan dibebankan pada harga prabayar layanan Azure AI yang ada.

Selain itu, ekstraksi gambar dapat ditagih oleh Azure AI Search.

@odata.type

Microsoft.Skills.Vision.ImageAnalysisSkill

Parameter keterampilan

Parameternya peka huruf besar/kecil.

Nama Parameter Deskripsi
defaultLanguageCode String yang menunjukkan bahasa untuk dikembalikan. Layanan mengembalikan hasil pengenalan dalam bahasa tertentu. Jika parameter ini tidak ditentukan, nilai defaultnya adalah "en".

Bahasa yang didukung mencakup subset bahasa yang tersedia secara umum dari Azure AI Vision. Ketika bahasa baru diperkenalkan dengan status ketersediaan umum ke dalam layanan Visi AI, diharapkan ada penundaan sebelum mereka sepenuhnya terintegrasi dalam keterampilan ini.
visualFeatures Larik string yang menunjukkan tipe fitur visual untuk yang akan ditampilkan. Jenis fitur visual yang valid meliputi:
  • dewasa - mendeteksi apakah gambar itu pornografi (menggambarkan ketelanjangan atau tindakan seks), gory (menggambarkan kekerasan ekstrem atau darah) atau sugestif (juga dikenal sebagai konten cabul).
  • merek - mendeteksi beragam merek dalam gambar, termasuk perkiraan lokasi.
  • kategori - mengategorikan konten gambar sesuai dengan taksonomi yang ditentukan oleh layanan Azure AI.
  • deskripsi - mendeskripsikan konten gambar dengan kalimat lengkap dalam bahasa yang didukung.
  • wajah - mendeteksi ada/tidaknya wajah. Jika ada akan menghasilkan koordinat, jenis kelamin, dan usia.
  • objek - mendeteksi beragam objek dalam gambar, termasuk perkiraan lokasi.
  • tag - menandai gambar dengan daftar kata-kata terperinci yang terkait dengan konten gambar.
Nama fitur visual peka huruf besar/kecil. Fitur visual warna dan imageType tidak digunakan lagi, tetapi Anda dapat mengakses fungsionalitas ini melalui keterampilan kustom. Lihat dokumentasi Analisis Gambar Azure AI Vision di mana fitur visual didukung dengan masing-masing defaultLanguageCode.
details Larik string yang menunjukkan detail spesifik domain mana yang akan dikembalikan. Jenis fitur visual yang valid meliputi:
  • selebritas - mengidentifikasi selebritas jika terdeteksi dalam gambar.
  • landmark - mengidentifikasi landmark jika terdeteksi dalam gambar.

Input keterampilan

Masukkan nama Deskripsi
image Jenis Kompleks. Saat ini hanya berfungsi dengan bidang "/document/normalized_images", yang dihasilkan oleh pengindeks blob Azure saat imageAction diatur ke nilai selain none.

Output keterampilan

Nama output Deskripsi
adult Output adalah objek dewasa tunggal dari jenis kompleks, yang terdiri dari bidang boolean (isAdultContent, , isRacyContentisGoryContent) dan skor jenis ganda (adultScore, goreScore, racyScore).
brands Output adalah array objek merek , di mana objek adalah jenis kompleks yang terdiri name dari (string) dan confidence skor (ganda). Ini juga mengembalikan dengan empat koordinat kotak pembatas rectangle (x, , y, hw, dalam piksel) yang menunjukkan penempatan di dalam gambar. Untuk persegi panjang, x dan y adalah kiri atas. Kiri bawah adalah x, y+h. Kanan atas adalah x+w, y. Kanan bawah adalah x+w, y+h.
categories Output adalah array objek kategori , di mana setiap objek kategori adalah jenis kompleks yang name terdiri dari (string), score (ganda), dan opsional detail yang berisi detail selebriti atau landmark. Lihat taksonomi kategori untuk daftar lengkap nama kategori. Detail adalah jenis kompleks berlapis. Detail selebriti terdiri dari nama, skor keyakinan, dan kotak pembatas wajah. Detail landmark terdiri dari skor nama dan keyakinan.
description Output adalah objek deskripsi tunggal dari jenis kompleks, yang terdiri dari daftar tags dan caption (array yang terdiri dari Text (string) dan confidence (ganda)).
faces Jenis kompleks yang terdiri agedari , gender, dan faceBoundingBox memiliki empat koordinat kotak pembatas (dalam piksel) yang menunjukkan penempatan di dalam gambar. Koordinat adalah top, left, width, height.
objects Output adalah array objek fitur visual. Setiap objek adalah jenis kompleks, terdiri object dari (string), confidence (ganda), rectangle (dengan empat koordinat kotak pembatas yang menunjukkan penempatan di dalam gambar), dan parent yang berisi nama objek dan keyakinan .
tags Output adalah array objek imageTag , di mana objek tag adalah jenis kompleks yang terdiri name dari (string), hint (string), dan confidence (ganda). Penambahan petunjuk jarang terjadi. Ini hanya dihasilkan jika tag ambigu. Misalnya, gambar yang ditandai sebagai "curling" mungkin memiliki petunjuk "olahraga" untuk menunjukkan kontennya dengan lebih baik.

Sampel definisi keterampilan

{
    "description": "Extract image analysis.",
    "@odata.type": "#Microsoft.Skills.Vision.ImageAnalysisSkill",
    "context": "/document/normalized_images/*",
    "defaultLanguageCode": "en",
    "visualFeatures": [
        "adult",
        "brands",
        "categories",
        "description",
        "faces",
        "objects",
        "tags"
    ],
    "inputs": [
        {
            "name": "image",
            "source": "/document/normalized_images/*"
        }
    ],
    "outputs": [
        {
            "name": "adult"
        },
        {
            "name": "brands"
        },
        {
            "name": "categories"
        },
        {
            "name": "description"
        },
        {
            "name": "faces"
        },
        {
            "name": "objects"
        },
        {
            "name": "tags"
        }
    ]
}

Indeks sampel CLI

Untuk objek tunggal (seperti adult dan description), Anda dapat menyusunnya dalam indeks sebagai Collection(Edm.ComplexType) untuk mengembalikan adult dan description menghasilkan untuk semuanya. Untuk informasi selengkapnya tentang pemetaan output ke bidang indeks, lihat Meratakan informasi dari jenis kompleks.

{
    "fields": [
        {
            "name": "metadata_storage_name",
            "type": "Edm.String",
            "key": true,
            "searchable": true,
            "filterable": false,
            "facetable": false,
            "sortable": true
        },
        {
            "name": "metadata_storage_path",
            "type": "Edm.String",
            "searchable": true,
            "filterable": false,
            "facetable": false,
            "sortable": true
        },
        {
            "name": "content",
            "type": "Edm.String",
            "sortable": false,
            "searchable": true,
            "filterable": false,
            "facetable": false
        },
        {
            "name": "adult",
            "type": "Edm.ComplexType",
            "fields": [
                {
                    "name": "isAdultContent",
                    "type": "Edm.Boolean",
                    "searchable": false,
                    "filterable": true,
                    "facetable": true
                },
                {
                    "name": "isGoryContent",
                    "type": "Edm.Boolean",
                    "searchable": false,
                    "filterable": true,
                    "facetable": true
                },
                {
                    "name": "isRacyContent",
                    "type": "Edm.Boolean",
                    "searchable": false,
                    "filterable": true,
                    "facetable": true
                },
                {
                    "name": "adultScore",
                    "type": "Edm.Double",
                    "searchable": false,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "goreScore",
                    "type": "Edm.Double",
                    "searchable": false,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "racyScore",
                    "type": "Edm.Double",
                    "searchable": false,
                    "filterable": false,
                    "facetable": false
                }
            ]
        },
        {
            "name": "brands",
            "type": "Collection(Edm.ComplexType)",
            "fields": [
                {
                    "name": "name",
                    "type": "Edm.String",
                    "searchable": true,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "confidence",
                    "type": "Edm.Double",
                    "searchable": false,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "rectangle",
                    "type": "Edm.ComplexType",
                    "fields": [
                        {
                            "name": "x",
                            "type": "Edm.Int32",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        },
                        {
                            "name": "y",
                            "type": "Edm.Int32",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        },
                        {
                            "name": "w",
                            "type": "Edm.Int32",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        },
                        {
                            "name": "h",
                            "type": "Edm.Int32",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        }
                    ]
                }
            ]
        },
        {
            "name": "categories",
            "type": "Collection(Edm.ComplexType)",
            "fields": [
                {
                    "name": "name",
                    "type": "Edm.String",
                    "searchable": true,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "score",
                    "type": "Edm.Double",
                    "searchable": false,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "detail",
                    "type": "Edm.ComplexType",
                    "fields": [
                        {
                            "name": "celebrities",
                            "type": "Collection(Edm.ComplexType)",
                            "fields": [
                                {
                                    "name": "name",
                                    "type": "Edm.String",
                                    "searchable": true,
                                    "filterable": false,
                                    "facetable": false
                                },
                                {
                                    "name": "faceBoundingBox",
                                    "type": "Collection(Edm.ComplexType)",
                                    "fields": [
                                        {
                                            "name": "x",
                                            "type": "Edm.Int32",
                                            "searchable": false,
                                            "filterable": false,
                                            "facetable": false
                                        },
                                        {
                                            "name": "y",
                                            "type": "Edm.Int32",
                                            "searchable": false,
                                            "filterable": false,
                                            "facetable": false
                                        }
                                    ]
                                },
                                {
                                    "name": "confidence",
                                    "type": "Edm.Double",
                                    "searchable": false,
                                    "filterable": false,
                                    "facetable": false
                                }
                            ]
                        },
                        {
                            "name": "landmarks",
                            "type": "Collection(Edm.ComplexType)",
                            "fields": [
                                {
                                    "name": "name",
                                    "type": "Edm.String",
                                    "searchable": true,
                                    "filterable": false,
                                    "facetable": false
                                },
                                {
                                    "name": "confidence",
                                    "type": "Edm.Double",
                                    "searchable": false,
                                    "filterable": false,
                                    "facetable": false
                                }
                            ]
                        }
                    ]
                }
            ]
        },
        {
            "name": "description",
            "type": "Collection(Edm.ComplexType)",
            "fields": [
                {
                    "name": "tags",
                    "type": "Collection(Edm.String)",
                    "searchable": true,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "captions",
                    "type": "Collection(Edm.ComplexType)",
                    "fields": [
                        {
                            "name": "text",
                            "type": "Edm.String",
                            "searchable": true,
                            "filterable": false,
                            "facetable": false
                        },
                        {
                            "name": "confidence",
                            "type": "Edm.Double",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        }
                    ]
                }
            ]
        },
        {
            "name": "faces",
            "type": "Collection(Edm.ComplexType)",
            "fields": [
                {
                    "name": "age",
                    "type": "Edm.Int32",
                    "searchable": false,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "gender",
                    "type": "Edm.String",
                    "searchable": false,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "faceBoundingBox",
                    "type": "Collection(Edm.ComplexType)",
                    "fields": [
                        {
                            "name": "top",
                            "type": "Edm.Int32",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        },
                        {
                            "name": "left",
                            "type": "Edm.Int32",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        },
                        {
                            "name": "width",
                            "type": "Edm.Int32",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        },
                        {
                            "name": "height",
                            "type": "Edm.Int32",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        }
                    ]
                }
            ]
        },
        {
            "name": "objects",
            "type": "Collection(Edm.ComplexType)",
            "fields": [
                {
                    "name": "object",
                    "type": "Edm.String",
                    "searchable": true,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "confidence",
                    "type": "Edm.Double",
                    "searchable": false,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "rectangle",
                    "type": "Edm.ComplexType",
                    "fields": [
                        {
                            "name": "x",
                            "type": "Edm.Int32",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        },
                        {
                            "name": "y",
                            "type": "Edm.Int32",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        },
                        {
                            "name": "w",
                            "type": "Edm.Int32",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        },
                        {
                            "name": "h",
                            "type": "Edm.Int32",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        }
                    ]
                },
                {
                    "name": "parent",
                    "type": "Edm.ComplexType",
                    "fields": [
                        {
                            "name": "object",
                            "type": "Edm.String",
                            "searchable": true,
                            "filterable": false,
                            "facetable": false
                        },
                        {
                            "name": "confidence",
                            "type": "Edm.Double",
                            "searchable": false,
                            "filterable": false,
                            "facetable": false
                        }
                    ]
                }
            ]
        },
        {
            "name": "tags",
            "type": "Collection(Edm.ComplexType)",
            "fields": [
                {
                    "name": "name",
                    "type": "Edm.String",
                    "searchable": true,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "hint",
                    "type": "Edm.String",
                    "searchable": true,
                    "filterable": false,
                    "facetable": false
                },
                {
                    "name": "confidence",
                    "type": "Edm.Double",
                    "searchable": false,
                    "filterable": false,
                    "facetable": false
                }
            ]
        }
    ]
}

Contoh pemetaan bidang output

Bidang target dapat berupa bidang atau koleksi yang kompleks. Definisi indeks menentukan subbidang apa pun.

"outputFieldMappings": [
    {
        "sourceFieldName": "/document/normalized_images/*/adult",
        "targetFieldName": "adult"
    },
    {
        "sourceFieldName": "/document/normalized_images/*/brands/*",
        "targetFieldName": "brands"
    },
    {
        "sourceFieldName": "/document/normalized_images/*/categories/*",
        "targetFieldName": "categories"
    },
    {
        "sourceFieldName": "/document/normalized_images/*/description",
        "targetFieldName": "description"
    },
    {
        "sourceFieldName": "/document/normalized_images/*/faces/*",
        "targetFieldName": "faces"
    },
    {
        "sourceFieldName": "/document/normalized_images/*/objects/*",
        "targetFieldName": "objects"
    },
    {
        "sourceFieldName": "/document/normalized_images/*/tags/*",
        "targetFieldName": "tags"
    }

Variasi pemetaan bidang output (properti berlapis)

Anda dapat menentukan pemetaan bidang output ke properti tingkat bawah, seperti hanya selebriti atau landmark. Dalam hal ini, pastikan skema indeks Anda memiliki bidang untuk berisi setiap detail secara khusus.

"outputFieldMappings": [
    {
        "sourceFieldName": "/document/normalized_images/*/categories/detail/celebrities/*",
        "targetFieldName": "celebrities"
    },
    {
        "sourceFieldName": "/document/normalized_images/*/categories/detail/landmarks/*",
        "targetFieldName": "landmarks"
    }

Input sampel

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

Sampel output

{
  "values": [
    {
      "recordId": "1",
      "data": {
        "categories": [
          {
            "name": "abstract_",
            "score": 0.00390625
          },
          {
            "name": "people_",
            "score": 0.83984375,
            "detail": {
              "celebrities": [
                {
                  "name": "Satya Nadella",
                  "faceBoundingBox": [
                        {
                            "x": 273,
                            "y": 309
                        },
                        {
                            "x": 395,
                            "y": 309
                        },
                        {
                            "x": 395,
                            "y": 431
                        },
                        {
                            "x": 273,
                            "y": 431
                        }
                    ],
                  "confidence": 0.999028444
                }
              ],
              "landmarks": [ ]
            }
          }
        ],
        "adult": {
          "isAdultContent": false,
          "isRacyContent": false,
          "isGoryContent": false,
          "adultScore": 0.0934349000453949,
          "racyScore": 0.068613491952419281,
          "goreScore": 0.08928389008070282
        },
        "tags": [
          {
            "name": "person",
            "confidence": 0.98979085683822632
          },
          {
            "name": "man",
            "confidence": 0.94493889808654785
          },
          {
            "name": "outdoor",
            "confidence": 0.938492476940155
          },
          {
            "name": "window",
            "confidence": 0.89513939619064331
          }
        ],
        "description": {
          "tags": [
            "person",
            "man",
            "outdoor",
            "window",
            "glasses"
          ],
          "captions": [
            {
              "text": "Satya Nadella sitting on a bench",
              "confidence": 0.48293603002174407
            }
          ]
        },
        "faces": [
          {
            "age": 44,
            "gender": "Male",
            "faceBoundingBox": [
                {
                    "x": 1601,
                    "y": 395
                },
                {
                    "x": 1653,
                    "y": 395
                },
                {
                    "x": 1653,
                    "y": 447
                },
                {
                    "x": 1601,
                    "y": 447
                }
            ]
          }
        ],
        "objects": [
          {
            "rectangle": {
              "x": 25,
              "y": 43,
              "w": 172,
              "h": 140
            },
            "object": "person",
            "confidence": 0.931
          }
        ],
        "brands":[  
           {  
              "name":"Microsoft",
              "confidence": 0.903,
              "rectangle":{  
                 "x":20,
                 "y":97,
                 "w":62,
                 "h":52
              }
           }
        ]
      }
    }
  ]
}

Kasus kesalahan

Dalam kasus kesalahan berikut, tidak ada elemen yang diekstrak.

Kode Kesalahan Deskripsi
NotSupportedLanguage Bahasa yang disediakan tidak didukung.
InvalidImageUrl URL gambar terformat dengan buruk atau tidak dapat diakses.
InvalidImageFormat Data input bukan gambar yang valid.
InvalidImageSize Gambar input terlalu besar.
NotSupportedVisualFeature Jenis fitur yang ditentukan tidak valid.
NotSupportedImage Gambar tidak didukung, contohnya, pornografi anak.
InvalidDetails Model khusus domain tidak didukung.

Jika Anda mendapatkan kesalahan yang mirip dengan "One or more skills are invalid. Details: Error in skill #<num>: Outputs are not supported by skill: Landmarks", periksa jalurnya. Baik selebritas maupun landmark adalah properti dari detail.

"categories":[  
      {  
         "name":"building_",
         "score":0.97265625,
         "detail":{  
            "landmarks":[  
               {  
                  "name":"Forbidden City",
                  "confidence":0.92013400793075562
               }
            ]

Lihat juga