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

Objectif de cette fois (essayez d'effectuer une recherche à l'aide du SDK Java)

La dernière fois, j'ai fini de configurer la recherche d'images et d'importer des images. Cette fois, je vais essayer d'accéder à la recherche d'images que j'ai effectuée la dernière fois par programmation.

Construction de l'environnement de mise en œuvre

Cette fois, nous allons créer un projet en Java. Si vous ne disposez pas d'un environnement de développement Java, veuillez installer Java et Gradle. (L'échantillon est créé avec Gradle, mais Maven est également acceptable)

Référence: pour Windows + Scoop

PS C:\Users\user> scoop install oraclejdk14
PS C:\Users\user> scoop install gradle

Créer un projet Java

Créons un projet Java

Créer un répertoire de projet

PS C:\Users\user\Documents\temp> mkdir imagesearch-sample


    Directory: C:\Users\user\Documents\temp

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d----          2020/05/19    15:59                imagesearch-sample

PS C:\Users\user\Documents\temp> cd .\imagesearch-sample\
PS C:\Users\user\Documents\temp\imagesearch-sample>

Créer un projet Java

PS C:\Users\user\Documents\temp\imagesearch-sample> gradle init

Select type of project to generate:
  1: basic
  2: application
  3: library
  4: Gradle plugin
Enter selection (default: basic) [1..4] 2

Select implementation language:
  1: C++
  2: Groovy
  3: Java
  4: Kotlin
  5: Swift
Enter selection (default: Java) [1..5] 3

Select build script DSL:
  1: Groovy
  2: Kotlin
Enter selection (default: Groovy) [1..2] 1

Select test framework:
  1: JUnit 4
  2: TestNG
  3: Spock
  4: JUnit Jupiter
Enter selection (default: JUnit 4) [1..4] 1

Project name (default: imagesearch-sample):
Source package (default: imagesearch.sample):

> Task :init
Get more help with your project: https://docs.gradle.org/6.4.1/userguide/tutorial_java_projects.html

BUILD SUCCESSFUL in 29s
2 actionable tasks: 2 executed
PS C:\Users\user\Documents\temp\imagesearch-sample>
PS C:\Users\user\Documents\temp\imagesearch-sample> tree /F
Liste des chemins de dossier:Volume Windows
Le numéro de série du volume est 9411-0B65
C:.
│  .gitattributes
│  .gitignore
│  build.gradle
│  gradlew
│  gradlew.bat
│  settings.gradle
│
├─.gradle
│  ├─6.4.1
│  │  │  gc.properties
│  │  │
│  │  ├─executionHistory
│  │  │      executionHistory.bin
│  │  │      executionHistory.lock
│  │  │
│  │  ├─fileChanges
│  │  │      last-build.bin
│  │  │
│  │  ├─fileHashes
│  │  │      fileHashes.bin
│  │  │      fileHashes.lock
│  │  │
│  │  └─vcsMetadata-1
│  ├─buildOutputCleanup
│  │      buildOutputCleanup.lock
│  │      cache.properties
│  │      outputFiles.bin
│  │
│  ├─checksums
│  │      checksums.lock
│  │
│  └─vcs-1
│          gc.properties
│
├─gradle
│  └─wrapper
│          gradle-wrapper.jar
│          gradle-wrapper.properties
│
└─src
    ├─main
    │  ├─java
    │  │  └─imagesearch
    │  │      └─sample
    │  │              App.java
    │  │
    │  └─resources
    └─test
        ├─java
        │  └─imagesearch
        │      └─sample
        │              AppTest.java
        │
        └─resources
PS C:\Users\user\Documents\temp\imagesearch-sample>

Ajouter une dépendance

Ajoutez le SDK Alibaba Cloud.

build.gradle


/*
 * This file was generated by the Gradle 'init' task.
 *
 * This generated file contains a sample Java project to get you started.
 * For more details take a look at the Java Quickstart chapter in the Gradle
 * User Manual available at https://docs.gradle.org/6.4.1/userguide/tutorial_java_projects.html
 */

plugins {
    // Apply the java plugin to add support for Java
    id 'java'

    // Apply the application plugin to add support for building a CLI application.
    id 'application'
}

repositories {
    // Use jcenter for resolving dependencies.
    // You can declare any Maven/Ivy/file repository here.
    jcenter()
}

dependencies {
    // This dependency is used by the application.
    implementation 'com.google.guava:guava:28.2-jre'
    
    // Alibaba Cloud
    compile 'com.aliyun:aliyun-java-sdk-imagesearch:2.0.0'
    compile 'com.aliyun:aliyun-java-sdk-core:[4.3.2,5.0.0)'

    // Use JUnit test framework
    testImplementation 'junit:junit:4.12'
}

application {
    // Define the main class for the application.
    mainClassName = 'imagesearch.sample.App'
}

Accéder à la recherche d'images précédemment créée

Utilisez la clé d'accès et la clé secrète créées la dernière fois. Définissez également la région et le point de terminaison dans le tableau ci-dessous. Cette fois, nous définirons le Japon (Tokyo).

Région point final
Singapour imagesearch.ap-southeast-1.aliyuncs.com
Chine(Hong Kong) imagesearch.cn-hongkong.aliyuncs.com
Japon(Tokyo) imagesearch.ap-northeast-1.aliyuncs.com
Australie(Sydney) imagesearch.ap-southeast-2.aliyuncs.com

Les images à rechercher sont placées dans / src / resources. Cette fois, je l'ai créé avec le nom "search01.jpg ". 2020-05-19.png

App.java


/*
 * This Java source file was generated by the Gradle 'init' task.
 */
package imagesearch.sample;

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

import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.imagesearch.model.v20190325.SearchImageRequest;
import com.aliyuncs.imagesearch.model.v20190325.SearchImageResponse;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.profile.IClientProfile;

public class App {
    /** AccessKey */
    private static final String ACCESS_KEY = "XXXXXXXXXXXXXXXXXXX";
    /** SeacretKey */
    private static final String KEY_SEACRET = "YYYYYYYYYYYYYYYYYY";

    public static void main(String[] args) throws Exception {
                //Initialisation(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);
        
                //Faire une demande de recherche
                SearchImageRequest request = new SearchImageRequest();
                //Entrée requise. Nom de l'instance de recherche d'images.
                request.setInstanceName("itemsearch");
                //Convertir l'image en Base64
                ClassLoader loader = Thread.currentThread().getContextClassLoader();
                InputStream is = loader.getResourceAsStream("search01.jpg ");
                String image = Base64.getEncoder().encodeToString(is.readAllBytes());
                //Recherche par image
                request.setPicContent(image);
                SearchImageResponse response = client.getAcsResponse(request);
        
                //Résultats de recherche
                Boolean checkShowJsonItemName = response.checkShowJsonItemName();
                Integer code = response.getCode();
                SearchImageResponse.Head head = response.getHead();
                Integer docsFound = head.getDocsFound();
                Integer docsReturn = head.getDocsReturn();
                Integer searchTime = head.getSearchTime();
                String msg = response.getMsg();
                String requestId = response.getRequestId();
                Boolean success = response.getSuccess();
                SearchImageResponse.PicInfo picInfo = response.getPicInfo();
                List<SearchImageResponse.PicInfo.Category> categories = picInfo.getAllCategories();
                Integer categoryId = picInfo.getCategoryId();
                String region = picInfo.getRegion();
        
                System.out.printf("checkShowJsonItemName: %s%ncode: %s%ndocsFound: %s%nsearchTime:%s %nmsg: %s%nrequestId: %s%nsucess: %s%ncategoryId: %s%nregion: %s%n", checkShowJsonItemName, code, docsFound, docsReturn, searchTime, msg, requestId, success, categoryId, region);
                categories.forEach(s -> {
                    Integer id = s.getId();
                    String name = s.getName();
                    System.out.printf("Categories %n\tid: %s, name: %s%n", id, name);
                });
                List<SearchImageResponse.Auction> list = response.getAuctions();
                list.forEach(s -> {
                    System.out.println("-----------");
                    String productid = s.getProductId();
                    Integer categoryid = s.getCategoryId();
                    String customCountent = s.getCustomContent();
                    Integer intAttr = s.getIntAttr();
                    String picName = s.getPicName();
                    String sortExpValues = s.getSortExprValues();
                    String strAttr = s.getStrAttr();
                    System.out.printf("productId: %s %nCategoryId: %s %ncustomContent: %s %nintAttr: %s %npicName: %s %nsortExpValues: %s %nStrAttr: %s%n", productid, categoryid, customCountent, intAttr, picName, sortExpValues, strAttr);
                });
    }
}

checkShowJsonItemName: false
code: 0
docsFound: 11
searchTime:10
msg: 99
requestId: success
sucess: 85B66F6E-9932-4BF6-A05F-4AA0AF4D7CD5
categoryId: true
region: 9
Categories
        id: 0, name: Tops
Categories
        id: 1, name: Dress
Categories 
        id: 2, name: Bottoms
Categories
        id: 3, name: Bag
Categories
        id: 4, name: Shoes
Categories 
        id: 5, name: Accessories
Categories
        id: 6, name: Snack
Categories
        id: 7, name: Makeup
Categories
        id: 8, name: Bottle
Categories
        id: 9, name: Furniture
Categories
        id: 20, name: Toy
Categories
        id: 21, name: Underwear
Categories
        id: 22, name: Digital device
Categories
        id: 88888888, name: Other
-----------
productId: 1011
CategoryId: 9
customContent: k1:v12,k2:v211,k3:v311
intAttr: null 
picName: 12.jpg
sortExpValues: 3.07306838035583;217
StrAttr: null
-----------
productId: 1010
CategoryId: 9
customContent: k1:v11,k2:v210,k3:v310
intAttr: null
picName: 11.jpg
sortExpValues: 2.97270393371582;222
StrAttr: null
-----------
productId: 1008
CategoryId: 9
customContent: k1:v09,k2:v208,k3:v308
intAttr: null
picName: 09.jpg
sortExpValues: 2.87724995613098;238
StrAttr: null
-----------
productId: 1009
CategoryId: 9
customContent: k1:v10,k2:v209,k3:v309
intAttr: null
picName: 10.jpg 
sortExpValues: 2.79507827758789;235
StrAttr: null
-----------
productId: 1001
CategoryId: 9
customContent: k1:v02,k2:v201,k3:v301
intAttr: null
picName: 02.jpg
sortExpValues: 2.67687916755676;251
StrAttr: null
-----------
productId: 1004
CategoryId: 9
customContent: k1:v05,k2:v204,k3:v304 
intAttr: null
picName: 05.jpg
sortExpValues: 2.67470407485962;249
StrAttr: null
-----------
productId: 1005
CategoryId: 9
customContent: k1:v06,k2:v205,k3:v305
intAttr: null
picName: 06.jpg
sortExpValues: 2.66586232185364;254
StrAttr: null
-----------
productId: 1003
CategoryId: 9
customContent: k1:v04,k2:v203,k3:v303
intAttr: null
picName: 04.jpg
sortExpValues: 2.63756942749023;255
StrAttr: null
-----------
productId: 1000
CategoryId: 9
customContent: k1:v01,k2:v200,k3:v300 
intAttr: null 
picName: 01.jpg
sortExpValues: 2.57631182670593;270
StrAttr: null
-----------
productId: 1006
CategoryId: 9
customContent: k1:v07,k2:v206,k3:v306
intAttr: null
picName: 07.jpg
sortExpValues: 2.52564144134521;253
StrAttr: null

Le même résultat que le résultat jeté de l'écran de gestion la dernière fois a été produit.

Explication du code source

App.java


//Initialisation(Cas de la région de Tokyo
DefaultProfile.addEndpoint({regionId}, {product}, {endpoint});
IClientProfile profile = DefaultProfile.getProfile({regionId}, {accessKeyId}, {secret})
IAcsClient client = new DefaultAcsClient(profile);

Pour regionId, spécifiez "ap-Nord-Est-1" pour la région de Tokyo. Définissez "ImageSearch" pour le produit et l'URL du point de terminaison dans la liste ci-dessus pour le point de terminaison. le produit est une valeur fixe. Il est difficile de vérifier la valeur de regionId pour d'autres régions. .. ..

App.java


//Faire une demande de recherche
SearchImageRequest request = new SearchImageRequest();
//Entrée requise. Nom de l'instance de recherche d'images.
request.setInstanceName("itemsearch");

Une demande de recherche est préparée pour la recherche et un objet de demande d'ajout et de suppression est préparé pour l'ajout et la suppression, respectivement. Soyez prudent avec le nom de l'instance.

01.png

Vous devez spécifier le "nom" au lieu de l '"ID".

App.java


//Recherche par image
request.setPicContent({Image encodée BASE64});
SearchImageResponse response = client.getAcsResponse(request);

Cette fois j'ai cherché par image. Vous pouvez également rechercher par images enregistrées ou affiner par paramètres. Nous les vérifierons la prochaine fois.

Jusqu'à ici pour cette fois. Vous pouvez facilement effectuer une recherche à l'aide du SDK.

Recommended Posts

Essayez une recherche similaire de recherche d'images à l'aide du SDK Java [Recherche]
Essayez la recherche similaire de Recherche d'images à l'aide du SDK Java [Inscription]
Essayez d'utiliser le SDK Java d'Hyperledger Iroha
Essayez la classification d'image à l'aide de TensorFlow Lite sur Android (JAVA)
Essayez d'utiliser RocksDB avec 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)
Gestion des fuseaux horaires avec Java
[Java] Essayez de mettre en œuvre à l'aide de génériques
Essayez d'utiliser le traçage de méthode IBM Java
Résumé de la programmation orientée objet utilisant Java
[Java] Où avez-vous essayé d'utiliser java
J'ai essayé d'utiliser Google HttpClient de Java
Essayez d'utiliser le framework Java Nablarch [Application Web]
Essayez d'utiliser || au lieu de l'opérateur ternaire
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 Microsoft Azure SDK pour SQL d'Azure Cosmos DB Service 4.6
Surveillance de l'état des applications Java à l'aide d'Elasticsearch
Essayez d'utiliser l'API REST de JobScheduler - implémentation Java RestClient--
Acquisition du contenu d'entrée à l'aide de Scanner (Java)
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
[Rails] Implémentation de la fonction de recherche en utilisant le ransack de gem
Essayez d'utiliser la classe de test RestClient de JobScheduler REST-API-Java-
[Rails] Implémentation de la fonction d'agrandissement d'image à l'aide de lightbox2
Vérification de l'impact sur les performances lors de l'utilisation de Java volatile
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 Progate Free Edition [Java II]
[Java / Kotlin] Redimensionner en tenant compte de l'orientation de l'image
Un exemple où il est plus rapide d'utiliser l'addition que d'utiliser StringBuilder (Java)
[Rails] Implémentation du diaporama d'images à l'aide de Bootstrap 3
Essayez la communication en utilisant gRPC sur un serveur Android + Java
Essayez d'utiliser l'analyse syntaxique de l'API COTOHA en Java
Histoire de l'automatisation des tests avec Appium [Android / java]
Essayez Progate Free Edition [Java I]
Essayez d'utiliser libGDX
Essayez d'utiliser Maven
Essayez d'utiliser powermock-mockito2-2.0.2
Essayez d'utiliser GraalVM
Essayez Java 8 Stream
Essayez d'utiliser jmockit 1.48
Essayez d'utiliser SwiftLint
Essayez d'utiliser Log4j 2.0
Essayez grossièrement Java 9
[Java] Présentation de Java
Initialisation de for Essayez de changer le problème Java en TypeScript 5-4
J'ai essayé de faire fonctionner SQS en utilisant AWS Java SDK
Appelons IBM Watson Assistant 2018-07-10 à partir du SDK Java.
Essayez de mettre en œuvre à l'aide de l'API de recherche de produits Rakuten (facile)
Essayez le hooking global en Java à l'aide de la bibliothèque JNativeHook
Essayez de créer un environnement de développement Java à l'aide de Docker
[Java10] Veillez à utiliser ensemble var et génériques
Essayez d'utiliser l'attribut de requête Ruby on Rails