Beim letzten Mal habe ich die Bildsuche eingerichtet und Bilder importiert. Dieses Mal werde ich versuchen, auf die zuletzt programmgesteuert durchgeführte Bildsuche zuzugreifen.
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
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>
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'
}
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.
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.
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.
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