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.
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é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>
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'
}
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 ".

 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.
 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.

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