Versuchen Sie eine ähnliche Suche in der Bildsuche mit dem Java SDK [Suche]

Zweck dieser Zeit (versuchen Sie es mit Java SDK)

Beim letzten Mal habe ich die Bildsuche eingerichtet und Bilder importiert. Dieses Mal werde ich versuchen, auf die zuletzt programmgesteuert durchgeführte Bildsuche zuzugreifen.

Aufbau einer Implementierungsumgebung

Dieses Mal werden wir ein Projekt in Java erstellen. Wenn Sie keine Java-Entwicklungsumgebung haben, installieren Sie bitte Java und Gradle. (Das Beispiel wird mit Gradle erstellt, aber Maven ist auch akzeptabel.)

Referenz: Für Windows + Scoop

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

Erstellen eines Java-Projekts

Lassen Sie uns ein Java-Projekt erstellen

Projektverzeichnis erstellen

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>

Erstellen eines Java-Projekts

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 der Ordnerpfade:Volumen Windows
Die Seriennummer des Volumes lautet 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>

Abhängigkeit hinzufügen

Fügen Sie das Alibaba Cloud SDK hinzu.

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'
}

Greifen Sie auf die zuvor erstellte Bildsuche zu

Verwenden Sie den zuletzt erstellten Zugriffsschlüssel und den geheimen Schlüssel. Stellen Sie außerdem die Region und den Endpunkt in der folgenden Tabelle ein. Dieses Mal werden wir Japan (Tokio) einstellen.

Region Endpunkt
Singapur imagesearch.ap-southeast-1.aliyuncs.com
China(Hongkong) imagesearch.cn-hongkong.aliyuncs.com
Japan(Tokio) imagesearch.ap-northeast-1.aliyuncs.com
Australien(Sydney) imagesearch.ap-southeast-2.aliyuncs.com

Die zu durchsuchenden Bilder werden in / src / resources abgelegt. Dieses Mal habe ich es mit dem Namen "search01.jpg " erstellt. 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 {
                //Initialisieren(Region Tokio)
                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);
        
                //Stellen Sie eine Anfrage für die Suche
                SearchImageRequest request = new SearchImageRequest();
                //Eingabe erforderlich. Name der Bildsuchinstanz.
                request.setInstanceName("itemsearch");
                //Bild in Base64 konvertieren
                ClassLoader loader = Thread.currentThread().getContextClassLoader();
                InputStream is = loader.getResourceAsStream("search01.jpg ");
                String image = Base64.getEncoder().encodeToString(is.readAllBytes());
                //Suche nach Bild
                request.setPicContent(image);
                SearchImageResponse response = client.getAcsResponse(request);
        
                //Suchergebnisse
                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

Es wurde das gleiche Ergebnis ausgegeben wie das Ergebnis, das beim letzten Mal vom Verwaltungsbildschirm ausgegeben wurde.

Erklärung des Quellcodes

App.java


//Initialisieren(Fall der Region Tokio
DefaultProfile.addEndpoint({regionId}, {product}, {endpoint});
IClientProfile profile = DefaultProfile.getProfile({regionId}, {accessKeyId}, {secret})
IAcsClient client = new DefaultAcsClient(profile);

Geben Sie für regionId "ap-northeast-1" für die Region Tokio an. Stellen Sie "ImageSearch" für das Produkt und die Endpunkt-URL in der obigen Liste für den Endpunkt ein. Produkt ist ein fester Wert. Es ist schwierig, den Wert von regionId für andere Regionen zu überprüfen. .. ..

App.java


//Stellen Sie eine Anfrage für die Suche
SearchImageRequest request = new SearchImageRequest();
//Eingabe erforderlich. Name der Bildsuchinstanz.
request.setInstanceName("itemsearch");

Eine Suchanforderung wird für die Suche vorbereitet, und ein Anforderungsobjekt zum Hinzufügen und Löschen wird zum Hinzufügen bzw. Löschen vorbereitet. Seien Sie vorsichtig mit dem Instanznamen.

01.png

Sie müssen den "Namen" anstelle der "ID" angeben.

App.java


//Suche nach Bild
request.setPicContent({BASE64-codiertes Bild});
SearchImageResponse response = client.getAcsResponse(request);

Diesmal habe ich nach Bild gesucht. Sie können auch nach registrierten Bildern suchen oder nach Parametern eingrenzen. Wir werden diese beim nächsten Mal überprüfen.

Bis hierher für diese Zeit. Sie können einfach mit dem SDK suchen.

Recommended Posts

Versuchen Sie eine ähnliche Suche in der Bildsuche mit dem Java SDK [Suche]
Probieren Sie die ähnliche Suche von Image Search mit Java SDK [Registrierung] aus.
Versuchen Sie es mit dem Java SDK von Hyperledger Iroha
Versuchen Sie die Bildklassifizierung mit TensorFlow Lite unter Android (JAVA).
Versuchen Sie es mit RocksDB mit Java
Versuchen Sie, mit Java zu kratzen [Hinweis]
Versuchen Sie Spark Submit to EMR mit AWS SDK für Java
Versuchen Sie es mit Redis mit Java (jar)
Umgang mit Zeitzonen mit Java
[Java] Versuchen Sie, mithilfe von Generika zu implementieren
Versuchen Sie es mit der IBM Java-Methodenverfolgung
Zusammenfassung der objektorientierten Programmierung mit Java
[Java] Wo haben Sie versucht, Java zu verwenden?
Ich habe versucht, Google HttpClient von Java zu verwenden
Versuchen Sie es mit dem Java Framework Nablarch [Web Application]
Versuchen Sie, || anstelle des ternären Operators zu verwenden
Versuchen Sie es mit der Stream-API in Java
Java lernen Versuchen Sie es mit einem Scanner oder einer Karte
Versuchen Sie es mit der JSON-Format-API in Java
Versuchen Sie, die Microsoft Azure SDK für SQL-API von Azure Cosmos DB Service 4.6 zu verwenden
Statusüberwachung von Java-Apps mit Elasticsearch
Versuchen Sie es mit der REST-API von JobScheduler - Java RestClient-Implementierung -
Erfassung von Eingabeinhalten mit Scanner (Java)
Versuchen Sie es mit der Wii-Fernbedienung in Java
Versuchen Sie, mit Scala mithilfe der Standardbibliothek von Java Text zu einem Bild hinzuzufügen
[Rails] Implementierung der Suchfunktion mit Gem's Ransack
Versuchen Sie es mit der RestClient Test-Klasse der REST-API-Java von JobScheduler.
[Rails] Implementierung der Bildvergrößerungsfunktion mit Lightbox2
Überprüfung der Auswirkungen auf die Leistung bei Verwendung von Java Volatile
Versuchen Sie es mit Sourcetrail (Win-Version) mit Java-Code
Versuchen Sie, die Cloud Vision-API von GCP in Java zu verwenden
Versuchen Sie es mit Sourcetrail (MacOS-Version) mit Java-Code
Versuchen Sie, mit JZOS von Java aus auf das Dataset zuzugreifen
Probieren Sie Progate Free Edition [Java II]
[Java / Kotlin] Ändern Sie die Größe unter Berücksichtigung der Ausrichtung des Bildes
Ein Beispiel, bei dem die Verwendung von Addition schneller ist als die Verwendung von StringBuilder (Java)
[Rails] Implementierung einer Bild-Diashow mit Bootstrap 3
Versuchen Sie die Kommunikation mit gRPC auf einem Android + Java-Server
Versuchen Sie es mit der Syntaxanalyse der COTOHA-API in Java
Geschichte der Testautomatisierung mit Appium [Android / Java]
Probieren Sie Progate Free Edition [Java I]
Versuchen Sie es mit libGDX
Versuchen Sie es mit Maven
Versuchen Sie es mit powermock-mockito2-2.0.2
Versuchen Sie es mit GraalVM
Probieren Sie Java 8 Stream aus
Versuchen Sie es mit jmockit 1.48
Versuchen Sie es mit SwiftLint
Versuchen Sie es mit Log4j 2.0
Versuchen Sie es mit Java 9
[Java] Übersicht über Java
Initialisierung von for Versuchen Sie, das Java-Problem in TypeScript 5-4 zu ändern
Ich habe versucht, SQS mit AWS Java SDK zu betreiben
Rufen wir IBM Watson Assistant 2018-07-10 aus dem Java SDK auf.
Versuchen Sie es mit globalem Hooking in Java mithilfe der JNativeHook-Bibliothek
Versuchen Sie, mit Docker eine Java-Entwicklungsumgebung zu erstellen
[Java10] Achten Sie darauf, var und generics nicht zusammen zu verwenden
Versuchen Sie es mit dem Ruby on Rails-Abfrageattribut