Panduan Pengenal Produk

Model Pengenal Produk membantu Anda mengenali dan memahami produk yang ada dalam gambar yang diberikan. Gambar hanya boleh berisi satu item produk yang ingin Anda kenali.

Model ini dapat berfungsi sebagai elemen dasar AI utama untuk menganalisis dan menafsirkan data gambar produk, yang dapat Anda ambil dari toko retail.

Kasus penggunaan Pengenal Tag dan Pengenal Produk

Model Product Recognizer dan Tag Recognizer dapat berfungsi sebagai elemen penyusun AI utama untuk menganalisis dan menafsirkan data gambar di sekitar data gambar produk dan tag, yang mungkin telah Anda ambil dari toko retail.

Model Pengenal produk dan Pengenal tag menggabungkan beberapa kemampuan pemodelan dan data AI inti Google untuk membantu retailer dan/atau partner teknis memecahkan masalah utama dalam memahami data gambar produk dan label harga, termasuk:

  • Mengenali, sehingga memahami produk apa yang ada dalam gambar.
  • Mengenali dan mengurai tag (misalnya, tag harga, atau tag label teks lainnya) sesuai dengan skema ekstraksi entitas key-value pair yang ditentukan pengguna.

Secara khusus, beberapa model AI Google yang berbeda disertakan untuk mendukung pemecahan masalah kasus penggunaan ini, seperti

  • Model penyematan visual thumbnail produk, yang mengubah gambar thumbnail produk menjadi representasi ruang fitur numerik.
  • Model OCR Google, yang mengekstrak semua teks yang terlihat dalam gambar.
  • Model ekstraksi entitas Google (yang dapat Anda sesuaikan), yang mengubah teks mentah menjadi entitas bernama pasangan nilai kunci yang ditentukan pengguna.

Selain model AI Google ini, pengenal produk juga memanfaatkan database besar informasi produk Google. Data produk dalam database Produk ini mencakup identitas GTIN / UPC produk, merek produk, judul, dan deskripsi lintas bahasa, logo produk, serta gambar dengan berbagai variasi kemasan. Model embedding visual thumbnail produk dengan database Produk yang disebutkan sebelumnya memungkinkan model Pengenal produk dapat mengenali banyak produk secara langsung.

Dua fitur AI utama adalah model Product Recognizer dan Tag Recognizer.

Fungsi Product Recognizer

Model ini mengenali identitas produk individual di tingkat Nomor Barang Perdagangan Global (GTIN) atau tingkat Kode Produk Universal (UPC). Beberapa model AI Google yang berbeda disertakan dalam Pengenal Produk untuk mendukung pemecahan masalah kasus penggunaan ini, seperti:

  • Model penyematan visual produk, yang mengubah gambar produk menjadi representasi ruang fitur numerik.
  • Teknologi OCR Google, yang mengekstrak semua teks yang terlihat dalam gambar.
  • Database produk Google yang digunakan bersama dengan model embedding visual thumbnail produk memungkinkan model Pengenal Produk mengenali banyak produk secara langsung.

Contoh Objek JSON Output

{
  "imageUri": "gs://test_bucket/test_image.jpg",
  "productRecognitionAnnotations": [
    {
      "detectedText": "Bolthouse Farms Perfectly Protein Tea & Soy Beverage",
      "recognitionResults": [
        {
          "confidence": 0.9420832,
          "productMetadata": {
            "brand": "Bolthouse Farms",
            "gtins": [
              "00071464260804"
              ],
            "locale": "en-US",
            "title": "Bolthouse Farms Perfectly Protein Tea & Soy Beverage, Vanilla Chai Tea - 52 fl oz"
          },
        }
      ]
    }
  ]
}

Konsep API

Ada enam resource API yang ditawarkan untuk membantu membangun katalog produk, pengelolaan set data produk, pembuatan indeks, dan deployment untuk layanan Pengenalan Produk. Berikut penjelasannya:

Diagram konsep API

Katalog: Resource root yang merepresentasikan penampung untuk semua produk yang ditawarkan oleh retailer.

Produk: Mewakili produk yang ditawarkan oleh penjual. Product adalah resource turunan dari Catalog.

ProductImage: Gambar yang menampilkan tampilan satu produk. ProductImage adalah resource turunan dari Product.

ProductSet: Container dengan perincian yang lebih baik untuk mengatur dan mengelompokkan produk dalam Catalog yang sama. Satu ProductSet dapat berisi satu atau banyak Product, tetapi ProductSet tersebut tidak "memiliki" Product yang ada di dalamnya, melainkan mempertahankan "link" ke Product tersebut.

ProductRecognitionIndex: Berisi daftar penyematan gambar yang digunakan untuk algoritma pengenalan produk. ProductRecognitionIndex dapat dibuat dari seluruh Catalog atau dari ProductSet (subset Product dari Catalog).

Endpoint: Penempatan yang memuat semua konfigurasi yang diperlukan untuk melakukan inferensi Pengenalan Produk atau Pengenalan Tag. Untuk Pengenalan Produk, ProductRecognitionIndex harus di-deploy. Untuk Pengenalan Tag, model penguraian entity tag harus ditentukan.

Penyiapan lingkungan

Bagian ini menjelaskan cara berinteraksi dengan Store Vision AI RESTful API.

API_ENDPOINT=visionai.googleapis.com
PROJECT_ID=your project ID

Semua metode create memerlukan penentuan nama/ID resource yang akan dibuat secara eksplisit. Anda dapat menggunakan ID string yang bermakna, misalnya, "product-ABC" atau ID yang dibuat secara acak, misalnya, UUID.

Untuk memberikan akses editor peran kepada seseorang agar dapat menggunakan Store Vision API, jalankan perintah pengikatan IAM berikut:

gcloud projects add-iam-policy-binding PROJECT_ID --member='user:USER_ACCOUNT' --role='roles/visionai.editor'

Untuk memberikan akses editor ke akun layanan, gunakan perintah di bawah:

gcloud projects add-iam-policy-binding PROJECT_ID --member='serviceAccount:SERVICE_ACCOUNT' --role='roles/visionai.editor'

Pelajari lebih lanjut pengikatan IAM.

Perjalanan pengguna Product Recognizer

  1. Buat Katalog.
  2. Impor Produk dan (opsional) ProductImages ke Catalog.
  3. Lihat dan ubah Product dan ProductImages, dan secara opsional buat ProductSet untuk mengatur daftar produk dengan perincian yang lebih baik.
  4. Buat Index, baik dari seluruh Catalog atau dari ProductSet.
  5. Membuat Endpoint dengan konfigurasi pengenalan produk yang diinginkan dan men-deploy Index ke dalamnya.
  6. Lakukan BatchAnalyze dengan fitur ProductRecognition. Di backend, sistem akan mengidentifikasi produk dari setiap gambar input dan mengambil K produk serupa teratas dari indeks yang ditentukan menggunakan sinyal visual dan teks OCR.

Pengelolaan resource API (Katalog dan Indexset)

Katalog

Buat Katalog
  • CATALOG_ID=ID katalog Anda.
curl -sS -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" -d '{}' https://visionai.googleapis.com/v1alpha1/projects/PROJECT_ID/locations/us-central1/retailCatalogs?retail_catalog_id=CATALOG_ID

Contoh output

{
  "name": "projects/cloud-store-vision-test/locations/us-central1/operations/operation-1655157982362-5e15b7f95fa6f-d30364c6-dc3a3714",
  "done": false
}
Tarik Operasi hingga selesai
  • OPERATION_ID=Operasi output Anda, misalnya, operation-1655157982362-5e15b7f95fa6f-d30364c6-dc3a3714
curl -sS -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://visionai.googleapis.com/v1alpha1/projects/PROJECT_ID/locations/us-central1/operations/OPERATION_ID

Contoh output

{
  "name": "projects/cloud-store-vision-test/locations/us-central1/operations/operation-1655157982362-5e15b7f95fa6f-d30364c6-dc3a3714",
  "done": true
}
ImportProduct

Ada dua format impor yang didukung:

  • TXT: setiap baris adalah gtin Produk yang akan diimpor
  • JSONL: setiap baris adalah format JSON RetailProductIoFormat, misalnya,
{"retailProduct":{"name":"00040094314034","gtins":["00040094314034"]},"retailProductImages":[{"name":"1","gcsUri":"gs://shelfchecking-integration-test-data/products-data/00040094314034/1.jpg"}]}
{"retailProduct": {"name":"00123", "thirdPartyIds": {"id": "test-id", "owner": "test-owner"}}}

Lihat referensi API untuk mengetahui detail selengkapnya tentang RetailProductIoFormat. Saat ini,kami mendukung impor maksimum 10.000 produk per operasi ImportProduct.

Perhatikan juga bahwa "name" dalam "retailProductImages" hanya perlu bersifat unik dalam cakupan resource "retailProduct" induk, yang berarti dapat ada 2 "retailProductImages" dengan "name" yang sama selama keduanya termasuk dalam resource "retailProduct" yang berbeda.

  • IMPORT_FILE_URI=URI Cloud Storage file impor Anda, misalnya, gs://mybucket/my_import_file.jsonl
  • IMPORT_FORMAT=Format file impor Anda, FORMAT_JSONL atau FORMAT_TXT
curl -sS -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://visionai.googleapis.com/v1alpha1/projects/PROJECT_ID/locations/us-central1/retailCatalogs/CATALOG_ID:importRetailProducts \
  -d '{
    "gcs_source": {
      "uris": "IMPORT_FILE_URI"
    },
    "format": "IMPORT_FORMAT"
  }'
Mencantumkan Katalog
curl -sS -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://visionai.googleapis.com/v1alpha1/projects/PROJECT_ID/locations/us-central1/retailCatalogs
GetCatalog
curl -sS -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://visionai.googleapis.com/v1alpha1/projects/PROJECT_ID/locations/us-central1/retailCatalogs/CATALOG_ID
DeleteCatalog
curl -sS -X DELETE -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://visionai.googleapis.com/v1alpha1/projects/PROJECT_ID/locations/us-central1/retailCatalogs/CATALOG_ID

Produk

CreateProduct dengan GTIN

Kami mendukung format GTIN-8, GTIN-13, GTIN-14, dan UPC(juga dikenal sebagai GTIN-12). Pelajari format GTIN lebih lanjut di sini.

  • PRODUCT_ID=ID produk Anda
  • GTIN=GTIN produk Anda, misalnya, 50735854797459, 00040094314034
curl -sS -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://visionai.googleapis.com/v1alpha1/projects/PROJECT_ID/locations/us-central1/retailCatalogs/CATALOG_ID/retailProducts?retail_product_id=PRODUCT_ID \
  -d '{"gtins": "GTIN"}'
CreateProduct dengan ID Pihak Ketiga
  • PRODUCT_ID=ID produk Anda
  • THIRD_PARTY_ID=ID pihak ketiga
  • OWNER=Entitas yang memiliki ID pihak ketiga
curl -sS -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://visionai.googleapis.com/v1alpha1/projects/PROJECT_ID/locations/us-central1/retailCatalogs/CATALOG_ID/retailProducts?retail_product_id=PRODUCT_ID \
-d '
  {
    "third_party_ids": {
      "id": "THIRD_PARTY_ID",
      "owner": "OWNER",
    }
  }'
ListProducts
curl -sS -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://visionai.googleapis.com/v1alpha1/projects/PROJECT_ID/locations/us-central1/retailCatalogs/CATALOG_ID/retailProducts
GetProducts
curl -sS -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://visionai.googleapis.com/v1alpha1/projects/PROJECT_ID/locations/us-central1/retailCatalogs/CATALOG_ID/retailProducts/PRODUCT_ID
DeleteProduct
curl -sS -X DELETE -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://visionai.googleapis.com/v1alpha1/projects/PROJECT_ID/locations/us-central1/retailCatalogs/CATALOG_ID/retailProducts/PRODUCT_ID

ProductImage

CreateProductImage
  • PRODUCT_IMAGE_ID=ID gambar produk Anda
  • IMAGE_GCS_URI=URI Cloud Storage gambar Anda, misalnya, gs://mybucket/my_img.jpg
curl -sS -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://visionai.googleapis.com/v1alpha1/projects/PROJECT_ID/locations/us-central1/retailCatalogs/CATALOG_ID/retailProducts/PRODUCT_ID/retailProductImages?retail_product_image_id=PRODUCT_IMAGE_ID \
  -d '{
    "source_type": "SOURCE_TYPE_HAND_HELD_CAMERA",
    "gcs_uri": "IMAGE_GCS_URI"
  }'
ListProductImages
curl -sS -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://visionai.googleapis.com/v1alpha1/projects/PROJECT_ID/locations/us-central1/retailCatalogs/CATALOG_ID/retailProducts/PRODUCT_ID/retailProductImages
GetProductImages
curl -sS -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://visionai.googleapis.com/v1alpha1/projects/PROJECT_ID/locations/us-central1/retailCatalogs/CATALOG_ID/retailProducts/PRODUCT_ID/retailProductImages/PRODUCT_IMAGE_ID
DeleteProductImage
curl -sS -X DELETE -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://visionai.googleapis.com/v1alpha1/projects/PROJECT_ID/locations/us-central1/retailCatalogs/CATALOG_ID/retailProducts/PRODUCT_ID/retailProductImages/PRODUCT_IMAGE_ID

ProductSet

CreateProductSet
  • PRODUCT_SET_ID=ID set produk Anda
curl -sS -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" -d '{}' https://visionai.googleapis.com/v1alpha1/projects/PROJECT_ID/locations/us-central1/retailCatalogs/CATALOG_ID/retailProductSets?retail_product_set_id=PRODUCT_SET_ID
ListProductSet
curl -sS -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://visionai.googleapis.com/v1alpha1/projects/PROJECT_ID/locations/us-central1/retailCatalogs/CATALOG_ID/retailProductSets
GetProductSet
curl -sS -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://visionai.googleapis.com/v1alpha1/projects/PROJECT_ID/locations/us-central1/retailCatalogs/CATALOG_ID/retailProductSets/PRODUCT_SET_ID
AddProductsToProductSet
curl -sS -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://visionai.googleapis.com/v1alpha1/projects/PROJECT_ID/locations/us-central1/retailCatalogs/CATALOG_ID/retailProductSets/PRODUCT_SET_ID:add \
  -d '{"product_ids": "PRODUCT_ID"}'
RemoveProductsFromProductSet
curl -sS -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://visionai.googleapis.com/v1alpha1/projects/PROJECT_ID/locations/us-central1/retailCatalogs/CATALOG_ID/retailProductSets/PRODUCT_SET_ID:remove \
  -d '{"product_ids": "PRODUCT_ID"}'
DeleteProductSet
curl -sS -X DELETE -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://visionai.googleapis.com/v1alpha1/projects/PROJECT_ID/locations/us-central1/retailCatalogs/CATALOG_ID/retailProductSets/PRODUCT_SET_ID

ProductRecognitionIndex

Create ProductRecognitionIndex

Ada dua cara untuk membuat ProductRecognitionIndex, baik dari Katalog yang akan menggunakan semua yang ada dalam Katalog ini, atau dari ProductSet yang hanya akan menggunakan produk dan gambar produk terkait.

  • INDEX_ID=ID indeks Anda
  • COVERAGE_CSV_OUTPUT_DIRECTORY=<Lokasi Cloud Storage dari direktori tempat file cakupan indeks akan ditulis
# Create from Catalog
curl -sS -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://visionai.googleapis.com/v1alpha1/projects/PROJECT_ID/locations/us-central1/retailCatalogs/CATALOG_ID/retailProductRecognitionIndexes?retail_product_recognition_index_id=INDEX_ID
# Create from Catalog and output index coverage CSV file to a Cloud Storage directory.
# This API method is especially useful when you want to understand the
# actual number of images used to construct the index per imported GTIN, and
# the image can be sourced from the Google Product database, your own importing,
# and other means (such as with the Google Data Labeling service.
curl -sS -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" "https://visionai.googleapis.com/v1alpha1/projects/PROJECT_ID/locations/us-central1/retailCatalogs/CATALOG_ID/retailProductRecognitionIndexes?retail_product_recognition_index_id=INDEX_ID&coverage_output.output_uri_prefix=COVERAGE_CSV_OUTPUT_DIRECTORY"
# Create from ProductSet, by adding the following to the previous Curl command
-d '{"retail_product_set": "projects/PROJECT_ID/locations/us-central1/retailCatalogs/'CATALOG_ID'/retailProductSets/PRODUCT_SET_ID"}'
Get ProductRecognitionIndex
curl -sS -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://visionai.googleapis.com/v1alpha1/projects/PROJECT_ID/locations/us-central1/retailCatalogs/CATALOG_ID/retailProductRecognitionIndexes/INDEX_ID
Mencantumkan ProductRecognitionIndex
curl -sS -X GET -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://visionai.googleapis.com/v1alpha1/projects/PROJECT_ID/locations/us-central1/retailCatalogs/CATALOG_ID/retailProductRecognitionIndexes
Delete ProductRecognitionIndex
curl -sS -X DELETE -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://visionai.googleapis.com/v1alpha1/projects/PROJECT_ID/locations/us-central1/retailCatalogs/CATALOG_ID/retailProductRecognitionIndexes/INDEX_ID

Endpoint

Membuat Endpoint
  • ENDPOINT_ID=ID endpoint Anda
curl -sS -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://visionai.googleapis.com/v1alpha1/projects/PROJECT_ID/locations/us-central1/retailEndpoints?retail_endpoint_id=ENDPOINT_ID -d '{
  "productRecognitionConfig": {
    "recognitionConfidenceThreshold": 0.4
  }
}'
DeployProductRecognitionIndex

Endpoint hanya dapat di-deploy dengan satu ProductRecognitionIndex, tetapi satu ProductRecognitionIndex dapat di-deploy ke beberapa Endpoint.

curl -sS -X POST -H "Authorization: Bearer $(gcloud auth print-access-token)" -H "Content-Type: application/json" https://visionai.googleapis.com/v1alpha1/projects/PROJECT_ID/locations/us-central1/retailEndpoints/ENDPOINT_ID:deployRetailProductRecognitionIndex \
  -d '{