O Vision API Product Search pode detectar e encontrar produtos correspondentes para um único produto em uma imagem de pesquisa. Pode também identificar e listar produtos correspondentes para vários produtos que estiverem presentes em sua imagem.
Imagens e resposta de um único produto
Esta imagem de pesquisa contém um único produto.

gs://cloud-ai-vision-data/product-search-tutorial/images/468f782e70ba11e8941fd20059124800.jpg
A pesquisa de produtos semelhantes com a Pesquisa de produtos da API Vision retorna uma resposta que indica duas caixas delimitadoras na imagem: uma caixa ao redor do produto e outra ao redor da imagem inteira.
Expanda a seção abaixo para ver a resposta inteira.
Resposta completa:
{ "responses": [ { "productSearchResults": { "indexTime": "2018-12-04T22:33:53.673600055Z", "results": [ { "product": { "name": "projects/project-id /locations/location-id /products/product_id16", "displayName": " ", "productCategory": "apparel", "productLabels": [ { "key": "style", "value": "women" }, { "key": "category", "value": "dress" } ] }, "score": 1, "image": "projects/project-id /locations/location-id /products/product_id16/referenceImages/image16" }, { "product": { "name": "projects/project-id /locations/location-id /products/product_id29", "displayName": " ", "productCategory": "apparel", "productLabels": [ { "key": "style", "value": "women" }, { "key": "category", "value": "dress" } ] }, "score": 0.34263745, "image": "projects/project-id /locations/location-id /products/product_id29/referenceImages/image29" }, ... { "product": { "name": "projects/project-id /locations/location-id /products/product_id89", "displayName": " ", "productCategory": "apparel", "productLabels": [ { "key": "style", "value": "women" }, { "key": "category", "value": "dress" } ] }, "score": 0.20485385, "image": "projects/project-id /locations/location-id /products/product_id89/referenceImages/image89" } ], "productGroupedResults": [ { "boundingPoly": { "normalizedVertices": [ { "x": 0.25610325, "y": 0.1357359 }, { "x": 0.77213204, "y": 0.1357359 }, { "x": 0.77213204, "y": 0.9287346 }, { "x": 0.25610325, "y": 0.9287346 } ] }, "results": [ { "product": { "name": "projects/project-id /locations/location-id /products/product_id16", "displayName": " ", "productCategory": "apparel", "productLabels": [ { "key": "style", "value": "women" }, { "key": "category", "value": "dress" } ] }, "score": 1, "image": "projects/project-id /locations/location-id /products/product_id16/referenceImages/image16" }, { "product": { "name": "projects/project-id /locations/location-id /products/product_id29", "displayName": " ", "productCategory": "apparel", "productLabels": [ { "key": "style", "value": "women" }, { "key": "category", "value": "dress" } ] }, "score": 0.3345438, "image": "projects/project-id /locations/location-id /products/product_id29/referenceImages/image29" }, ... { "product": { "name": "projects/project-id /locations/location-id /products/product_id76", "displayName": " ", "productCategory": "apparel", "productLabels": [ { "key": "style", "value": "women" }, { "key": "category", "value": "shoe" } ] }, "score": 0.20218614, "image": "projects/project-id /locations/location-id /products/product_id76/referenceImages/image76" } ] }, { "boundingPoly": { "normalizedVertices": [ {}, { "x": 1 }, { "x": 1, "y": 1 }, { "y": 1 } ] }, "results": [ { "product": { "name": "projects/project-id /locations/location-id /products/product_id16", "displayName": " ", "productCategory": "apparel", "productLabels": [ { "key": "style", "value": "women" }, { "key": "category", "value": "dress" } ] }, "score": 1, "image": "projects/project-id /locations/location-id /products/product_id16/referenceImages/image16" }, { "product": { "name": "projects/project-id /locations/location-id /products/product_id29", "displayName": " ", "productCategory": "apparel", "productLabels": [ { "key": "style", "value": "women" }, { "key": "category", "value": "dress" } ] }, "score": 0.3507311, "image": "projects/project-id /locations/location-id /products/product_id29/referenceImages/image29" }, { "product": { "name": "projects/project-id /locations/location-id /products/product_id8", "displayName": " ", "productCategory": "apparel", "productLabels": [ { "key": "style", "value": "women" }, { "key": "category", "value": "dress" } ] }, "score": 0.26709077, "image": "projects/project-id /locations/location-id /products/product_id8/referenceImages/image8" }, ... { "product": { "name": "projects/project-id /locations/location-id /products/product_id51", "displayName": " ", "productCategory": "apparel", "productLabels": [ { "key": "style", "value": "women" }, { "key": "category", "value": "dress" } ] }, "score": 0.21597815, "image": "projects/project-id /locations/location-id /products/product_id51/referenceImages/image51" } ] } ] } } ] }
Caixas delimitadoras e produtos correspondentes
Os dois produtos a seguir (caixas delimitadoras) na imagem são especificados pelos dois conjuntos de vértices retornados da solicitação.
Os produtos correspondentes são listados para cada caixa identificada pela API Vision Product Search.

gs://cloud-samples-data/product_search/multiple_dresses.jpg
Nas caixas delimitadoras de resposta da API e nos produtos correspondentes, os resultados são
listados no campo productGroupedResults
. Eles são agrupados por produtos
detectados em uma imagem. Em cada entrada boundingPoly
, é listada a região especificada com
vértices normalizados em uma escala de 0 a 1, não correspondendo aos
valores reais de pixels da imagem. Os produtos correspondentes para esta região específica são então
listados.
A seção a seguir da resposta corresponde à caixa delimitadora ao redor do vestido.
Seção de resposta da caixa de produto único
.... "productGroupedResults": [ { "boundingPoly": { "normalizedVertices": [ { "x": 0.25610325, "y": 0.1357359 }, { "x": 0.77213204, "y": 0.1357359 }, { "x": 0.77213204, "y": 0.9287346 }, { "x": 0.25610325, "y": 0.9287346 } ] }, "results": [ { "product": { "name": "projects/project-id /locations/location-id /products/product_id16", "displayName": " ", "productCategory": "apparel", "productLabels":... "score": 1, ...
Os produtos correspondentes são listados após o campo results
e
classificados por pontuação de correspondência em ordem decrescente. As pontuações variam de 0
(sem confiança) a 1 (confiança total).

Several matching products for the dress
O outro boundingPoly
retornado na resposta está ao redor da imagem inteira.
Seus vértices normalizados são listados como:
[{},{"x": 1},{"x": 1,"y": 1},{"y": 1}]
Quando os valores das coordenadas são 0, eles são omitidos. Assim, o polivalente especificado acima corresponde a:
[{"x": 0,"y": 0},{"x": 1, "y": 0},{"x": 1,"y": 1},{"y": 1}]
Os produtos correspondentes são listados da mesma forma para essa caixa delimitadora (a imagem inteira).
Imagens de vários produtos (multi-detecção) e resposta
A imagem de pesquisa a seguir contém vários produtos.

gs://cloud-samples-data/product_search/multiple_dresses.jpg
O uso da Pesquisa de produtos da API Vision para procurar produtos semelhantes retorna uma resposta que identifica várias caixas delimitadoras na imagem: uma para a imagem inteira e também três caixas para cada um dos três vestidos.
Expanda a seção abaixo para ver a resposta inteira.
Resposta completa:
{ "responses": [ { "productSearchResults": { "indexTime": "2018-12-05T18:34:22.231193168Z", "results": [ { "product": { "name": "projects/project-id /locations/location-id /products/product_id89", "displayName": " ", "productCategory": "apparel", "productLabels": [ { "key": "style", "value": "women" }, { "key": "category", "value": "dress" } ] }, "score": 0.40636745, "image": "projects/project-id /locations/location-id /products/product_id89/referenceImages/image89" }, { "product": { "name": "projects/project-id /locations/location-id /products/product_id56", "displayName": " ", "productCategory": "apparel", "productLabels": [ { "key": "style", "value": "women" }, { "key": "category", "value": "dress" } ] }, "score": 0.35433072, "image": "projects/project-id /locations/location-id /products/product_id56/referenceImages/image56" }, ... { "product": { "name": "projects/project-id /locations/location-id /products/product_id92", "displayName": " ", "productCategory": "apparel", "productLabels": [ { "key": "style", "value": "women" }, { "key": "category", "value": "dress" } ] }, "score": 0.30736163, "image": "projects/project-id /locations/location-id /products/product_id92/referenceImages/image92" } ], "productGroupedResults": [ { "boundingPoly": { "normalizedVertices": [ { "x": 0.38727918, "y": 0.10391616 }, { "x": 0.57177967, "y": 0.10391616 }, { "x": 0.57177967, "y": 0.94973093 }, { "x": 0.38727918, "y": 0.94973093 } ] }, "results": [ { "product": { "name": "projects/project-id /locations/location-id /products/product_id39", "displayName": " ", "productCategory": "apparel", "productLabels": [ { "key": "style", "value": "women" }, { "key": "category", "value": "dress" } ] }, "score": 0.36689043, "image": "projects/project-id /locations/location-id /products/product_id39/referenceImages/image39" }, { "boundingPoly": { "normalizedVertices": [ { "x": 0.63010275, "y": 0.08650439 }, { "x": 0.88989735, "y": 0.08650439 }, { "x": 0.88989735, "y": 0.9285545 }, { "x": 0.63010275, "y": 0.9285545 } ] }, "results": [ { "product": { "name": "projects/project-id /locations/location-id /products/product_id89", "displayName": " ", "productCategory": "apparel", "productLabels": [ { "key": "style", "value": "women" }, { "key": "category", "value": "dress" } ] }, "score": 0.4007347, "image": "projects/project-id /locations/location-id /products/product_id89/referenceImages/image89" }, ... { "product": { "name": "projects/project-id /locations/location-id /products/product_id30", "displayName": " ", "productCategory": "apparel", "productLabels": [ { "key": "style", "value": "women" }, { "key": "category", "value": "dress" } ] }, "score": 0.27045864, "image": "projects/project-id /locations/location-id /products/product_id30/referenceImages/image30" }, ... { "product": { "name": "projects/project-id /locations/location-id /products/product_id63", "displayName": " ", "productCategory": "apparel", "productLabels": [ { "key": "style", "value": "women" }, { "key": "category", "value": "dress" } ] }, "score": 0.23139484, "image": "projects/project-id /locations/location-id /products/product_id63/referenceImages/image63" } ] }, ... { "boundingPoly": { "normalizedVertices": [ {}, { "x": 1 }, { "x": 1, "y": 1 }, { "y": 1 } ] }, "results": [ { "product": { "name": "projects/project-id /locations/location-id /products/product_id30", "displayName": " ", "productCategory": "apparel", "productLabels": [ { "key": "style", "value": "women" }, { "key": "category", "value": "dress" } ] }, "score": 0.39522344, "image": "projects/project-id /locations/location-id /products/product_id30/referenceImages/image30" }, ... { "product": { "name": "projects/project-id /locations/location-id /products/product_id4", "displayName": " ", "productCategory": "apparel", "productLabels": [ { "key": "style", "value": "women" }, { "key": "category", "value": "dress" } ] }, "score": 0.34226564, "image": "projects/project-id /locations/location-id /products/product_id4/referenceImages/image4" } ] }, { "boundingPoly": { "normalizedVertices": [ { "x": 0.030102689, "y": 0.067680866 }, { "x": 0.28942674, "y": 0.067680866 }, { "x": 0.28942674, "y": 0.94973093 }, { "x": 0.030102689, "y": 0.94973093 } ] }, "results": [ { "product": { "name": "projects/project-id /locations/location-id /products/product_id89", "displayName": " ", "productCategory": "apparel", "productLabels": [ { "key": "style", "value": "women" }, { "key": "category", "value": "dress" } ] }, "score": 0.42439392, "image": "projects/project-id /locations/location-id /products/product_id89/referenceImages/image89" }, ... { "product": { "name": "projects/project-id /locations/location-id /products/product_id51", "displayName": " ", "productCategory": "apparel", "productLabels": [ { "key": "style", "value": "women" }, { "key": "category", "value": "dress" } ] }, "score": 0.26797917, "image": "projects/project-id /locations/location-id /products/product_id51/referenceImages/image51" } ] } ] } } ] }
Caixas delimitadoras e produtos correspondentes
A imagem a seguir mostra todas as caixas delimitadoras, identificadas pela Pesquisa de produtos da API Vision, nesta imagem de vários produtos.

gs://cloud-samples-data/product_search/multiple_dresses.jpg
Semelhante a uma imagem de produto único, a resposta de uma imagem de vários produtos
lista caixas delimitadoras e resultados de produtos correspondentes no campo
productGroupedResults
. Cada produto é identificado por um polígono delimitador
e as correspondências são agrupadas para cada produto detectado.
A seção seguinte da resposta corresponde à caixa delimitadora ao redor do vestido meio.
Seção de resposta da caixa do produto (vestido do meio)
"productGroupedResults": [ { "boundingPoly": { "normalizedVertices": [ { "x": 0.38727918, "y": 0.10391616 }, { "x": 0.57177967, "y": 0.10391616 }, { "x": 0.57177967, "y": 0.94973093 }, { "x": 0.38727918, "y": 0.94973093 } ] }, "results": [ { "product": { "name":... "score": 0.36689043, ...
Veja na imagem a seguir algumas das correspondências para o vestido do meio retornadas pela Pesquisa de produtos da API Vision.

Several matching products for the middle dress
As outras caixas delimitadoras a seguir são encontradas na imagem, cada uma com a própria lista de produtos correspondentes, não incluída aqui:
- Vestido à esquerda:
{"x":0.03, "y":0.07},{"x":0.29, "y":0.07},{"x":0.29, "y":0.95},{"x":0.03, "y":0.95}
- Vestido à direita:
{"x":0.63, "y":0.09},{"x":0.89, "y":0.09},{"x":0.89, "y":0.93},{"x":0.63, "y":0.93}
- Imagem inteira:
{},{"x": 1},{"x": 1,"y": 1},{"y": 1}
, também expresso como:{"x": 0, "y": 0},{"x": 1,"y:0"},{"x": 1,"y": 1},{"x": 0,"y": 1}