Essayez la recherche similaire de Recherche d'images à l'aide du SDK Java [Inscription]

introduction

La dernière fois, j'ai enregistré une image à l'aide de la fonction d'importation de Recherche d'images. Avec la fonction d'importation, seuls les paramètres pour V1 peuvent être enregistrés et les paramètres nouvellement ajoutés pour V2 ne peuvent pas être enregistrés ~~. ** C'est fait. Je suis désolé. ** **

Donc, je pense qu'il est préférable de s'enregistrer en utilisant l'API pour saisir des données dans la recherche d'images. Il y a certains points à prendre en compte lors de l'enregistrement des données, je voudrais donc les décrire.

Comment enregistrer des données

Cette fois, nous nous enregistrerons à l'aide du SDK Java. Veuillez vous référer à [Rechercher] pour la construction de l'environnement.

SimpleAdd.java


package imagesearch.sample;

import java.io.InputStream;
import java.util.Base64;

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.imagesearch.model.v20190325.AddImageRequest;
import com.aliyuncs.imagesearch.model.v20190325.AddImageResponse;
import com.aliyuncs.imagesearch.model.v20190325.AddImageResponse.PicInfo;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;

public class SimpleAdd {
    /** AccessKey */
    private static final String ACCESS_KEY = "XXXXXXXXXXXXXxxx";
    /** SeacretKey */
    private static final String KEY_SEACRET = "YYYYYYYYYYYYYYY";

    public static void main(String[] args) throws Exception {
        //Initialisation(Cas de la région de Tokyo
        DefaultProfile.addEndpoint("ap-northeast-1", "ImageSearch", "imagesearch.ap-northeast-1.aliyuncs.com");
        IClientProfile profile = DefaultProfile.getProfile("ap-northeast-1", ACCESS_KEY, KEY_SEACRET);
        IAcsClient client = new DefaultAcsClient(profile);

        AddImageRequest request = new AddImageRequest();
        request.setInstanceName("itemsearch");
        request.setProductId("id-0001");
        request.setPicName("item0001");
        request.setCategoryId(9);
        request.setCrop(true);
        request.setIntAttr(1000);
        request.setStrAttr("Meubles: chaise");
        request.setCustomContent("{'sample': 'échantillon'}");
        ClassLoader loader = Thread.currentThread().getContextClassLoader();
        InputStream is = loader.getResourceAsStream("item01.jpg ");
        String image = Base64.getEncoder().encodeToString(is.readAllBytes());
        request.setPicContent(image);

        AddImageResponse response = client.getAcsResponse(request);

        // Debug
        boolean checkShowJsonItemName = response.checkShowJsonItemName();
        Integer code = response.getCode();
        String message = response.getMessage();
        String requestId = response.getRequestId();
        Boolean success = response.getSuccess();
        PicInfo picInfo = response.getPicInfo();
        Integer categoryId = picInfo.getCategoryId();
        String region = picInfo.getRegion();

        System.out.printf("requestId:%s%nmessage:%s%ncheckShowJsonItemName:%s%ncode:%s%nsuccess:%s%n", requestId, message, checkShowJsonItemName, code, success);
        System.out.println("PicInfo");
        System.out.printf("\tcategoryId:%s%n\tregion:%s%n", categoryId, region);
    }
}
requestId:F009FFA3-D94C-4C95-A8D1-957F7EE06591
message:success
checkShowJsonItemName:false
code:0
success:true
PicInfo
        categoryId:9
        region:140,474,36,578

Description des paramètres

ProductId

request.setProductId(productId);

Entrée requise. Prend en charge les identifiants de produit jusqu'à 512 caractères. Vous pouvez inclure plusieurs images dans un seul produit.

PicName

request.setPicName(picName);

Entrée requise. Prend en charge les noms d'image jusqu'à 512 caractères.

  1. Identifiez l'image avec ProductId + PicName.
  2. Si l'image ajoutée plusieurs fois a le même ProductId + PicName, la dernière image ajoutée sera écrasée.

En enregistrant plusieurs images pour un produit, vous pouvez améliorer la précision de la recherche. Je pense qu'il est bon d'enregistrer certaines images de motifs telles que l'image avant et l'image diagonale.

CategoryId

request.setCategoryId(9);

L'entrée est facultative. Catégorie d'image.

  1. Pour la recherche de produits: si une catégorie est définie, ce paramètre est prioritaire, sinon le système effectuera une prédiction de catégorie et vous pourrez obtenir les résultats de la catégorie prédite dans Response.
  2. Pour la recherche universelle: le système définit la catégorie sur 88888888, que la catégorie soit définie ou non.

Catégories configurables

Identifiant de catégorie La description
0 hauts
1 robe
2 Bas
3 sac
4 chaussures
5 Accessoires
6 goûter
7 Maquillage
8 Boisson en bouteille
9 meubles
20 jouet
21 sous-vêtements
22 Équipement numérique
88888888 Autre

PicContent

request.setPicContent(encodePicContent);

Entrée requise. Contenu d'image encodé en base64. Prend en charge des images jusqu'à 2 Mo et une latence d'envoi de 5 secondes. Actuellement, seuls les formats d'image jpg et png sont pris en charge. Les pixels verticaux et horizontaux doivent être compris entre 200 et 1024 et l'image ne peut pas contenir d'informations de rotation.

En production, il peut être préférable d'inclure une logique de conversion avant l'enregistrement. De plus, je ne sais pas ce que signifie «prendre en charge un temps d'attente de transmission de 5 secondes» ici. .. .. Qu'est-ce que vous voulez. Si quelqu'un sait, faites-le moi savoir. (Je vais le vérifier dans la source bientôt ...)

Crop

request.setCrop(true);

L'entrée est facultative. Si la reconnaissance du sujet est nécessaire, la valeur par défaut est true.

  1. Si cela est vrai, le système reconnaîtra le sujet et effectuera une recherche par sujet reconnu. Vous pouvez obtenir le résultat de la reconnaissance du sujet avec Response.
  2. Si faux, le sujet ne sera pas reconnu et sera recherché comme une image entière.

Dans le cas de la recherche de produits, je pense que c'est vrai. Par exemple, si vous souhaitez rechercher quelque chose comme l'atmosphère d'une pièce, vous pouvez vous inscrire avec false.

Region

request.setRegion("280,486,232,351");

L'entrée est facultative. La plage de sujets de l'image exprimée au format x1, x2, y1, y2, x1, y1 est le point supérieur gauche, x2, y2 est le point inférieur droit. Si l'utilisateur définit une région, la recherche est effectuée dans cette région quelle que soit la valeur du paramètre Crop.

Lorsqu'il y a plusieurs objets dans l'image à enregistrer (par exemple, lorsque vous essayez d'enregistrer une chaise et qu'un rideau ou une table est également affiché), en définissant les informations de position de l'objet cible afin d'améliorer la précision de la recherche, Vous pouvez améliorer la précision de la recherche.

IntAttr

request.setIntAttr(intAttr);

L'entrée est facultative. Attribut entier qui peut être utilisé pour le filtrage lors de la recherche, ce champ est renvoyé lors de la recherche. Par exemple, vous pouvez définir IntAttr pour chaque image de site / image d'utilisateur et les filtrer lors de la recherche.

Paramètres pouvant être utilisés pour les filtres ajoutés à partir de V2. Il est maintenant possible de filtrer en combinaison avec StrAttr, qui sera décrit plus loin. En utilisant un filtre, vous pouvez obtenir des données qui correspondent aux conditions de filtre de la recherche d'images. C'est pratique parce que je devais filtrer après avoir obtenu les données. Si vous le demandez, il serait utile que vous puissiez définir plusieurs valeurs. .. .. Les conditions du filtre sont ">,> =, <, <=, =". Si vous fixez le prix du produit, je pense que vous pouvez vous limiter aux produits de 10 000 yens à 30 000 yens qui sont courants sur les sites européens.

StrAttr

request.setStrAttr(strAttr);

L'entrée est facultative. Prend en charge les attributs de type chaîne, jusqu'à 128 caractères. Il peut être utilisé pour filtrer lors de la recherche. Ce champ est renvoyé lors de la recherche.

Ici, vous pouvez définir une chaîne et la filtrer. La condition de filtre qui peut être utilisée est "=,! =". De plus, c'est un filtre avec une correspondance exacte. C'est assez gênant. .. .. Une manière réaliste de l'utiliser est de convertir les paramètres en bits et de les définir. .. .. C'est encore difficile à utiliser. Ce serait très utile si vous pouviez définir plusieurs paramètres et utiliser des expressions régulières.

CustomContent

request.setCustomContent("Douane");

L'entrée est facultative. Prend en charge le contenu personnalisé par l'utilisateur, jusqu'à 4096 caractères. Ce champ est renvoyé lors de la recherche. Par exemple, vous pouvez ajouter du texte tel qu'une description d'image.

Vous pouvez le rendre plus facile à utiliser en définissant JSON, etc.

Limite du système

Limites du système - Guide de l'utilisateur | Alibaba Cloud Document Center https://jp.alibabacloud.com/help/doc-detail/74408.htm

Voici quelques points à garder à l'esprit lors de l'inscription.

  1. La taille de l'image est inférieure ou égale à 2 Mo, les pixels de longueur et de largeur sont de 200 ou plus et de 1024 ou moins
  2. Prend en charge deux types d'images, JPG et PNG, les images ne peuvent pas contenir d'informations de rotation
  3. Restrictions à l'utilisation du traitement parallèle
  4. Vous pouvez vérifier le nombre de recherches et de processus parallèles supplémentaires (requête / seconde (QPS) sélectionné lors de la création de l'instance) sur la console. Actuellement, vous pouvez sélectionner 5 requêtes / seconde ou 10 requêtes / seconde. Cela signifie que vous pouvez traiter jusqu'à 5 ou 10 demandes de recherche en parallèle par seconde. (Maximum 1 demande par seconde pour la version gratuite)
  5. La requête / seconde par défaut (QPS) pour les opérations de suppression est 20. Cela signifie que vous pouvez traiter jusqu'à 20 demandes de suppression en parallèle par seconde.

Résumé

Les points à prendre en compte sont les suivants

  1. Type d'image
  2. Taille de l'image
  3. En cas d'enregistrement continu, des restrictions d'appel API sont appliquées
  4. Il est difficile de concevoir des IntAttr et StrAttr pouvant être utilisés pour des conditions de filtre.
  5. Si vous vous inscrivez avec la même clé, elle sera écrasée (notez qu'il n'y a aucune restriction de clé primaire)

Recommended Posts

Essayez la recherche similaire de Recherche d'images à l'aide du SDK Java [Inscription]
Essayez une recherche similaire de recherche d'images à l'aide du SDK Java [Recherche]
Essayez d'utiliser le SDK Java d'Hyperledger Iroha
Essayez la classification d'image à l'aide de TensorFlow Lite sur Android (JAVA)
Essayez de gratter en utilisant Java [Note]
Essayez Spark Submit to EMR à l'aide du kit AWS SDK pour Java
Essayez d'utiliser Redis avec Java (jar)
[Java] Essayez de mettre en œuvre à l'aide de génériques
Essayez d'utiliser le traçage de méthode IBM Java
[Java] Où avez-vous essayé d'utiliser java
Essayez d'utiliser le framework Java Nablarch [Application Web]
Essayez d'utiliser l'API Stream en Java
Étude de Java Essayez d'utiliser un scanner ou une carte
Essayez d'utiliser l'API au format JSON en Java
Essayez d'utiliser l'API REST de JobScheduler - implémentation Java RestClient--
Essayez d'utiliser la télécommande Wii en Java
Essayez d'ajouter du texte à une image avec Scala en utilisant la bibliothèque standard de Java
Essayez d'utiliser Firebase Cloud Functions sur Android (Java)
Essayez d'utiliser la classe de test RestClient de JobScheduler REST-API-Java-
Essayez d'utiliser Sourcetrail (version win) avec du code Java
Essayez d'utiliser l'API Cloud Vision de GCP en Java
Essayez d'utiliser Sourcetrail (version macOS) avec du code Java
Essayez d'accéder à l'ensemble de données depuis Java en utilisant JZOS
Essayez la communication en utilisant gRPC sur un serveur Android + Java
Essayez d'utiliser l'analyse syntaxique de l'API COTOHA en Java