Skip to content

Commit 5cd6fec

Browse files
author
markjrzhang
committed
add RecognizeLogo API
1 parent 8761c93 commit 5cd6fec

File tree

7 files changed

+217
-93
lines changed

7 files changed

+217
-93
lines changed

pom.xml

Lines changed: 13 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<modelVersion>4.0.0</modelVersion>
55
<groupId>com.qcloud</groupId>
66
<artifactId>cos_api</artifactId>
7-
<version>5.6.213</version>
7+
<version>5.6.215</version>
88
<packaging>jar</packaging>
99
<name>cos-java-sdk</name>
1010
<description>java sdk for qcloud cos</description>
@@ -201,13 +201,6 @@
201201
<groupId>org.apache.maven.plugins</groupId>
202202
<artifactId>maven-surefire-plugin</artifactId>
203203
<version>2.22.0</version>
204-
<!-- 覆盖率offline模式新增-&#45;&#45;begin-->
205-
<configuration>
206-
<systemPropertyVariables>
207-
<jacoco-agent.destfile>target/jacoco.exec</jacoco-agent.destfile>
208-
</systemPropertyVariables>
209-
</configuration>
210-
<!-- -&#45;&#45;end-->
211204
</plugin>
212205

213206
<plugin>
@@ -300,72 +293,28 @@
300293
<groupId>org.jacoco</groupId>
301294
<artifactId>jacoco-maven-plugin</artifactId>
302295
<version>0.8.6</version>
303-
<!-- 覆盖率on-the-fly ===begin-->
304-
<!-- <configuration>-->
305-
<!-- <skip>false</skip>-->
306-
<!-- </configuration>-->
307-
<!-- <executions>-->
308-
<!-- <execution>-->
309-
<!-- <id>pre-test</id>-->
310-
<!-- <goals>-->
311-
<!-- <goal>prepare-agent</goal>-->
312-
<!-- </goals>-->
313-
<!-- </execution>-->
314-
<!-- <execution>-->
315-
<!-- <id>post-test</id>-->
316-
<!-- <phase>test</phase>-->
317-
<!-- <goals>-->
318-
<!-- <goal>report</goal>-->
319-
<!-- </goals>-->
320-
<!-- <configuration>-->
321-
<!-- <dataFile>target/jacoco.exec</dataFile>-->
322-
<!-- <outputDirectory>target/site/jacoco</outputDirectory>-->
323-
<!-- </configuration>-->
324-
<!-- </execution>-->
325-
<!-- </executions>-->
326-
<!-- ===end-->
327-
<!-- 覆盖率offline===begin-->
296+
<configuration>
297+
<skip>false</skip>
298+
</configuration>
328299
<executions>
329300
<execution>
330-
<id>default-instrument</id>
331-
<goals>
332-
<goal>instrument</goal>
333-
</goals>
334-
</execution>
335-
<execution>
336-
<id>default-restore-instrumented-classes</id>
301+
<id>pre-test</id>
337302
<goals>
338-
<goal>restore-instrumented-classes</goal>
303+
<goal>prepare-agent</goal>
339304
</goals>
340305
</execution>
341306
<execution>
342-
<id>default-report</id>
307+
<id>post-test</id>
308+
<phase>test</phase>
343309
<goals>
344310
<goal>report</goal>
345311
</goals>
346-
</execution>
347-
<execution>
348-
<id>default-check</id>
349-
<goals>
350-
<goal>check</goal>
351-
</goals>
352-
<!-- <configuration>-->
353-
<!-- <rules>-->
354-
<!-- <rule>-->
355-
<!-- <element>BUNDLE</element>-->
356-
<!-- <limits>-->
357-
<!-- <limit>-->
358-
<!-- <counter>COMPLEXITY</counter>-->
359-
<!-- <value>COVEREDRATIO</value>-->
360-
<!-- <minimum>0.60</minimum>-->
361-
<!-- </limit>-->
362-
<!-- </limits>-->
363-
<!-- </rule>-->
364-
<!-- </rules>-->
365-
<!-- </configuration>-->
312+
<configuration>
313+
<dataFile>target/jacoco.exec</dataFile>
314+
<outputDirectory>target/site/jacoco</outputDirectory>
315+
</configuration>
366316
</execution>
367317
</executions>
368-
<!-- ===end-->
369318
</plugin>
370319
</plugins>
371320
</build>
@@ -390,4 +339,4 @@
390339
</build>
391340
</profile>
392341
</profiles>
393-
</project>
342+
</project>

src/main/java/com/qcloud/cos/COS.java

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,14 +31,7 @@
3131
import com.qcloud.cos.model.bucketcertificate.BucketGetDomainCertificate;
3232
import com.qcloud.cos.model.bucketcertificate.BucketPutDomainCertificate;
3333
import com.qcloud.cos.model.bucketcertificate.SetBucketDomainCertificateRequest;
34-
import com.qcloud.cos.model.ciModel.ai.AddPersonFaceRequest;
35-
import com.qcloud.cos.model.ciModel.ai.AddPersonFaceResponse;
36-
import com.qcloud.cos.model.ciModel.ai.CreatePersonRequest;
37-
import com.qcloud.cos.model.ciModel.ai.CreatePersonResponse;
38-
import com.qcloud.cos.model.ciModel.ai.DeletePersonFaceRequest;
39-
import com.qcloud.cos.model.ciModel.ai.FaceSearchBucketRequest;
40-
import com.qcloud.cos.model.ciModel.ai.SearchPersonFaceRequest;
41-
import com.qcloud.cos.model.ciModel.ai.SearchPersonFaceResponse;
34+
import com.qcloud.cos.model.ciModel.ai.*;
4235
import com.qcloud.cos.model.ciModel.common.CImageProcessRequest;
4336
import com.qcloud.cos.model.ciModel.hls.*;
4437
import com.qcloud.cos.model.ciModel.image.*;
@@ -3261,6 +3254,8 @@ SelectObjectContentResult selectObjectContent(SelectObjectContentRequest selectR
32613254
MediaListTemplateResponse describeMediaTemplatesV2(MediaTemplateRequest request);
32623255

32633256
InputStream getPlayList(GetPlayListRequest request);
3257+
3258+
RecognizeLogoResponse recognizeLogo(RecognizeLogoRequest customRequest);
32643259
}
32653260

32663261

src/main/java/com/qcloud/cos/COSClient.java

Lines changed: 34 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -151,7 +151,6 @@
151151

152152
import org.apache.commons.codec.DecoderException;
153153
import org.apache.http.client.methods.HttpRequestBase;
154-
import org.apache.http.client.utils.URIBuilder;
155154
import org.apache.http.entity.ContentType;
156155
import org.slf4j.Logger;
157156
import org.slf4j.LoggerFactory;
@@ -4329,29 +4328,31 @@ public String reportBadCase(ReportBadCaseRequest reportBadCaseRequest) {
43294328
return invoke(request, new Unmarshallers.ReportBadCaseUnmarshaller());
43304329
}
43314330

4332-
43334331
private String buildDocPreview(CosHttpRequest<DocHtmlRequest> request) throws URISyntaxException {
4334-
String urlStr = request.getProtocol().toString() + "://" + request.getEndpoint() + request.getResourcePath();
4335-
URIBuilder uriBuilder = new URIBuilder(urlStr);
4336-
COSSigner cosSigner = clientConfig.getCosSigner();
43374332
Date expiredTime = new Date(System.currentTimeMillis() + clientConfig.getSignExpired() * 1000);
4338-
String authoriationStr = cosSigner.buildAuthorizationStr(request.getHttpMethod(), request.getResourcePath(),
4339-
request.getHeaders(), request.getParameters(), fetchCredential(), expiredTime, true);
4333+
HashMap<String, String> params = new HashMap<>();
4334+
params.put("ci-process", "doc-preview");
43404335
DocHtmlRequest originalRequest = request.getOriginalRequest();
4341-
uriBuilder.addParameter("ci-process", "doc-preview");
4342-
uriBuilder.addParameter("dstType", originalRequest.getDstType().toString());
4343-
uriBuilder.addParameter("srcType", originalRequest.getSrcType());
4344-
uriBuilder.addParameter("page", originalRequest.getPage());
4345-
uriBuilder.addParameter("ImageParams", originalRequest.getImageParams());
4346-
uriBuilder.addParameter("sheet", originalRequest.getSheet());
4347-
uriBuilder.addParameter("password", originalRequest.getPassword());
4348-
uriBuilder.addParameter("comment", originalRequest.getComment());
4349-
uriBuilder.addParameter("excelPaperDirection", originalRequest.getExcelPaperDirection());
4350-
uriBuilder.addParameter("excelPaperSize", originalRequest.getExcelPaperSize());
4351-
uriBuilder.addParameter("quality", originalRequest.getQuality());
4352-
uriBuilder.addParameter("scale", originalRequest.getScale());
4353-
uriBuilder.addParameter("imageDpi", originalRequest.getImageDpi());
4354-
return uriBuilder.build().toString() + "&" + authoriationStr;
4336+
putIfNotNull(params, "dstType", originalRequest.getDstType().toString());
4337+
putIfNotNull(params, "srcType", originalRequest.getSrcType());
4338+
putIfNotNull(params, "page", originalRequest.getPage());
4339+
putIfNotNull(params, "ImageParams", originalRequest.getImageParams());
4340+
putIfNotNull(params, "sheet", originalRequest.getSheet());
4341+
putIfNotNull(params, "password", originalRequest.getPassword());
4342+
putIfNotNull(params, "comment", originalRequest.getComment());
4343+
putIfNotNull(params, "excelPaperDirection", originalRequest.getExcelPaperDirection());
4344+
putIfNotNull(params, "excelPaperSize", originalRequest.getExcelPaperSize());
4345+
putIfNotNull(params, "quality", originalRequest.getQuality());
4346+
putIfNotNull(params, "scale", originalRequest.getScale());
4347+
putIfNotNull(params, "imageDpi", originalRequest.getImageDpi());
4348+
URL url = generatePresignedUrl(request.getBucketName(), request.getResourcePath(), expiredTime, HttpMethodName.GET, new HashMap<String, String>(), params, false, false);
4349+
return url.toString();
4350+
}
4351+
4352+
private void putIfNotNull(HashMap<String, String> map, String key, String value) {
4353+
if (value != null) {
4354+
map.put(key, value);
4355+
}
43554356
}
43564357

43574358
// private void checkAuditingRequest(ImageAuditingRequest request) {
@@ -5137,5 +5138,17 @@ public InputStream getPlayList(GetPlayListRequest getPlayListRequest) {
51375138
return invoke(request, new CIGetSnapshotResponseHandler());
51385139
}
51395140

5141+
@Override
5142+
public RecognizeLogoResponse recognizeLogo(RecognizeLogoRequest customRequest) {
5143+
5144+
CosHttpRequest<RecognizeLogoRequest> request = createRequest(customRequest.getBucketName(), "/", customRequest , HttpMethodName.GET);
5145+
addParameterIfNotNull(request, "ci-process", customRequest.getCiProcess());
5146+
addParameterIfNotNull(request, "detect-url", customRequest.getDetectUrl());
5147+
5148+
return invoke(request, new Unmarshallers.CICommonUnmarshaller<RecognizeLogoResponse>(RecognizeLogoResponse.class));
5149+
}
5150+
5151+
5152+
51405153
}
51415154

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
package com.qcloud.cos.demo.ci;
2+
3+
import com.qcloud.cos.COSClient;
4+
import com.qcloud.cos.model.ciModel.ai.RecognizeLogoRequest;
5+
import com.qcloud.cos.model.ciModel.ai.RecognizeLogoResponse;
6+
import com.qcloud.cos.utils.Jackson;
7+
8+
/**
9+
* Logo 识别 详情见https://cloud.tencent.com/document/product/460/79736
10+
*/
11+
public class RecognizeLogoDemo {
12+
13+
public static void main(String[] args) {
14+
// 1 初始化用户身份信息(secretId, secretKey)。
15+
COSClient client = ClientUtils.getTestClient();
16+
// 2 调用要使用的方法。
17+
recognizeLogo(client);
18+
}
19+
20+
/**
21+
* recognizeLogo 腾讯云数据万象通过 RecognizeLogo 接口实现对图片内电商 Logo 的识别,返回图片中 Logo 的名称、坐标、置信度分值。
22+
* 返回图片中Logo的名称、坐标、置信度分值。图片Logo识别请求包属于 GET 请求
23+
* 该接口属于 GET 请求。
24+
*/
25+
public static void recognizeLogo(COSClient client) {
26+
RecognizeLogoRequest request = new RecognizeLogoRequest();
27+
request.setBucketName("demo-1234567890");
28+
request.setDetectUrl("https://demo-1234567890.cos.ap-chongqing.myqcloud.com/car.jpg");// 设置待检查图片url,需要进行urlencode
29+
30+
RecognizeLogoResponse response = client.recognizeLogo(request);
31+
System.out.println(Jackson.toJsonString(response));
32+
}
33+
}
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
package com.qcloud.cos.model.ciModel.ai;
2+
3+
import com.qcloud.cos.internal.CosServiceRequest;
4+
import com.thoughtworks.xstream.annotations.XStreamAlias;
5+
import com.thoughtworks.xstream.annotations.XStreamOmitField;
6+
7+
@XStreamAlias("Request")
8+
public class RecognizeLogoRequest extends CosServiceRequest {
9+
10+
/**
11+
*数据万象处理能力,Logo识别固定为RecognizeLogo;是否必传:是
12+
*/
13+
@XStreamOmitField
14+
private String ciProcess = "RecognizeLogo";
15+
16+
/**
17+
*待检查图片url,需要进行urlencode;是否必传:是
18+
*/
19+
@XStreamOmitField
20+
private String detectUrl;
21+
22+
23+
private String bucketName;
24+
25+
public String getBucketName() {
26+
return bucketName;
27+
}
28+
29+
public void setBucketName(String bucketName) {
30+
this.bucketName = bucketName;
31+
}
32+
33+
public String getCiProcess() { return ciProcess; }
34+
35+
public void setCiProcess(String ciProcess) { this.ciProcess = ciProcess; }
36+
37+
public String getDetectUrl() { return detectUrl; }
38+
39+
public void setDetectUrl(String detectUrl) { this.detectUrl = detectUrl; }
40+
41+
42+
43+
}
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package com.qcloud.cos.model.ciModel.ai;
2+
3+
import com.qcloud.cos.model.CosServiceResult;
4+
import com.thoughtworks.xstream.annotations.XStreamAlias;
5+
import com.thoughtworks.xstream.annotations.XStreamImplicit;
6+
7+
import java.util.List;
8+
9+
@XStreamAlias("RecognitionResult")
10+
public class RecognizeLogoResponse extends CosServiceResult {
11+
12+
/**
13+
*Logo识别结果,可能有多个
14+
*/
15+
@XStreamImplicit(itemFieldName = "LogoInfo")
16+
private List<LogoInfo> logoInfo;
17+
18+
/**
19+
*Logo识别结果。0表示未识别到,1表示识别到
20+
*/
21+
@XStreamAlias("Status")
22+
private Integer status;
23+
24+
public List<LogoInfo> getLogoInfo() { return logoInfo; }
25+
26+
public void setLogoInfo(List<LogoInfo> logoInfo) { this.logoInfo = logoInfo; }
27+
28+
public Integer getStatus() { return status; }
29+
30+
public void setStatus(Integer status) { this.status = status; }
31+
32+
33+
@XStreamAlias("LogoInfo")
34+
public class LogoInfo {
35+
/**
36+
*Logo的名称
37+
*/
38+
@XStreamAlias("Name")
39+
private String name;
40+
41+
/**
42+
*Logo的置信度,取值范围为[0-100]。值越高概率越大。
43+
*/
44+
@XStreamAlias("Score")
45+
private Integer score;
46+
47+
/**
48+
*图中识别到Logo的坐标
49+
*/
50+
@XStreamImplicit(itemFieldName = "Location")
51+
private List<Location> location;
52+
53+
public String getName() { return name; }
54+
55+
public void setName(String name) { this.name = name; }
56+
57+
public Integer getScore() { return score; }
58+
59+
public void setScore(Integer score) { this.score = score; }
60+
61+
public List<Location> getLocation() { return location; }
62+
63+
public void setLocation(List<Location> location) { this.location = location; }
64+
65+
}
66+
67+
@XStreamAlias("Location")
68+
public class Location {
69+
/**
70+
*Logo坐标点(X坐标,Y坐标)
71+
*/
72+
@XStreamImplicit(itemFieldName = "Point")
73+
private List<String> point;
74+
75+
public List<String> getPoint() { return point; }
76+
77+
public void setPoint(List<String> point) { this.point = point; }
78+
79+
}
80+
81+
}

src/main/java/com/qcloud/cos/model/ciModel/job/KeyConfig.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,16 @@ public class KeyConfig {
77
private String key;
88
@XStreamAlias("Rename")
99
private String rename;
10+
@XStreamAlias("ImageParams")
11+
private String imageParams;
12+
13+
public String getImageParams() {
14+
return imageParams;
15+
}
16+
17+
public void setImageParams(String imageParams) {
18+
this.imageParams = imageParams;
19+
}
1020

1121
public String getKey() {
1222
return key;

0 commit comments

Comments
 (0)