华为云API图像搜索ImageSearch的快捷性—AI帮助您快速归类图片

云服务、API、SDK,调试,查看,我都行

阅读短文您可以学习到:人工智能AI图像识别的图像识别、名人识别

1IntelliJ IDEA之API插件介绍

API插件支持 VS Code IDE、IntelliJ IDEA等平台、以及华为云自研 CodeArts IDE,基于华为云服务提供的能力,帮助开发者更高效、便捷的搭建应用。API插件关联华为云服务下的 API Explorer、DevStar、CodeLabs、SDK 中心和 CLI 中心产品,致力于为开发者提供更稳定、快速、安全的编程体验。

在本插件中,我们提供了但不局限于如下的功能:

对接华为云API开放平台,支持用户检索API、查看API文档、调试API、以及提供SDK示例代码供用户学习如何使用API。

提供华为云SDK代码片段补全功能,SDK依赖包自动引入,加速用户集成华为云API。

对接华为云开发体验馆Codelabs,提供500+云服务代码示例,向导式教程帮助用户快速学习。

说明:

在IntelliJ IDEA等系列平台和VS Code IDE,华为云API插件的名称是Huawei Cloud API。而在CodeArts IDE,API插件是IDE原生内置的,名称是华为云API开发套件。

API插件在IntelliJ IDEA等系列平台和VS Code IDE的使用依赖底座插件,请提前安装底座插件。

2API插件安装--IntelliJ IDEA

2.1IntelliJ IDEA等平台

安装准备:下载并安装JDK1.8或更高版本。下载并安装IntelliJ IDEA 2020.2或更高版本。

须知:IntellIj平台同时支撑包括Goland、Pycharm等在内的IDE,若在其它相关IDE上开发,请下载配置好对应语言的编译器或者解释器。这里以IDEA为例介绍IntelliJ平台插件的安装流程,其他IntelliJ系列的IDE请参考IDEA。https://developer.huaweicloud.com/develop/toolkit.html

开始安装:

您可以在直接在IDE插件市场或者直接在JetBrains插件市场下载离线包安装。

IDE安装

1.在IntelliJ IDEA顶部菜单栏中选择File > Settings,在Settings对话框的左侧导航栏中单击Plugins。

2.Plugins区域单击Marketplace,在搜索栏中输入Huawei Cloud API。

3.Search Results区域会出现Huawei Cloud API,单击Install,完成后重启IDE。

8eef7925b42c1b33c17141e916dbdf85.jpeg

离线包安装:

1.进入插件市场搜索Huawei Cloud API,进入插件详情页,在Versions页签下选择想要版本的API插件,点击Download下载离线的插件压缩包保存到本地。。

2.在IntelliJ IDEA顶部菜单栏中选择File > Settings,在Settings对话框的左侧导航栏中单击Plugins。

3.在Plugins区域单击,再单击Install Plugin from Disk...。

4.在Choose Plugin File对话框中选择离线安装包(不用解压),并按照IntelliJ IDEA安装页面的提示,完成后续安装步骤。

15cb6b0163d0c7816dfa23d62311fc1a.jpeg

说明:若当前您想要安装插件的IntelliJ IDE已经在桌面打开,则进入插件市场搜索Huawei Cloud API,进入插件详情页,在右上角会识别到本地已经打开的IDE,点击相应按钮,在弹出的IDE窗口中点击ok,则IDE后台会开始安装相应版本的API插件。

安装验证:在IntelliJ系列平台上安装插件成功后在左侧的导航栏中可以看到Huawei Cloud Toolkit图标,点击后面板会出现Huawei Cloud API的字样,则说明安装成功。

2.2API列表

e271458f4f76076ab90d31075e7093be.jpeg

左侧展示API列表,可以查询所有API,目前云服务206,APIs9213

https://developer.huaweicloud.com/develop/toolkit.html

版本说明

本示例基于华为云SDK V3.0版本开发

功能介绍

创建实例,实例中会生成图片索引库,用来存放图片特征。

该示例展示了如何通过java版SDK实现创建实例。

前置条件

获取AK/SK

开发者在使用前需先获取账号的ak、sk、endpoint。

您需要拥有华为云账号以及该账号对应的 Access Key(AK)和 Secret Access Key(SK)。请在华为云控制台“我的凭证-访问密钥”页面上创建和查看您的 AK/SK。更多信息请查看访问密钥。

endpoint 华为云各服务应用区域和各服务的终端节点,详情请查看地区和终端节点。

运行环境

Java JDK 1.8 及其以上版本,推荐通过Maven 安装依赖的方式使用JAVA版本SDK。

SDK获取和安装

在Maven 项目的 pom.xml 文件加入相应版本的依赖项即可。

以引入3.0.67版本的内容审核SDK为例:

<groupId>com.huaweicloud.sdkgroupId>

<artifactId>huaweicloud-sdk-imagesearchartifactId>

3.0.67

3创建图像搜索实例

图像内容审核示例代码只需将AK/SK信息替换为实际AK/SK,代码中可以使用CreateInstanceReq类的setName或setModel方法配置实例名称和模型名称,配置完成后运行即可。

import com.huaweicloud.sdk.core.auth.ICredential;

import com.huaweicloud.sdk.core.auth.BasicCredentials;

import com.huaweicloud.sdk.core.exception.ConnectionException;

import com.huaweicloud.sdk.core.exception.RequestTimeoutException;

import com.huaweicloud.sdk.core.exception.ServiceResponseException;

import com.huaweicloud.sdk.imagesearch.v1.ImageSearchClient;

import com.huaweicloud.sdk.imagesearch.v1.model.RunCreateInstanceRequest;

import com.huaweicloud.sdk.imagesearch.v1.model.CreateInstanceReq;

import com.huaweicloud.sdk.imagesearch.v1.model.RunCreateInstanceResponse;

import com.huaweicloud.sdk.imagesearch.v1.region.ImageSearchRegion;

public class ImageSearchCreateInstanceDemo&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;public static void main(String[] args) {

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String ak&nbsp;= "";

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String sk&nbsp;= "";

ICredential&nbsp;auth = new BasicCredentials()

.withAk(ak)

.withSk(sk);

ImageSearchClient&nbsp;client = ImageSearchClient.newBuilder()

.withCredential(auth)

.withRegion(ImageSearchRegion.valueOf("cn-north-4"))

.build();

RunCreateInstanceRequest&nbsp;request = new RunCreateInstanceRequest();

CreateInstanceReq&nbsp;body = new CreateInstanceReq();

body.setName("instance-name");

body.setModel("common-search");

request.setBody(body);

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try {

RunCreateInstanceResponse&nbsp;response = client.runCreateInstance(request);

System.out.println(response.toString());

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} catch (ConnectionException&nbsp;e) {

System.out.println(e.getMessage());

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} catch (RequestTimeoutException&nbsp;e) {

System.out.println(e.getMessage());

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} catch (ServiceResponseException&nbsp;e) {

System.out.println(e.getHttpStatusCode());

System.out.println(e.getErrorCode());

System.out.println(e.getErrorMsg());

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;}

}

4删除图像搜索实例

删除实例示例代码只需将AK/SK信息替换为实际AK/SK,代码中可以使用RunDeleteInstanceRequest类的setInstanceName方法配置实例名称,配置完成后运行即可。

import com.huaweicloud.sdk.core.auth.ICredential;

import com.huaweicloud.sdk.core.auth.BasicCredentials;

import com.huaweicloud.sdk.core.exception.ConnectionException;

import com.huaweicloud.sdk.core.exception.RequestTimeoutException;

import com.huaweicloud.sdk.core.exception.ServiceResponseException;

import com.huaweicloud.sdk.imagesearch.v1.ImageSearchClient;

import com.huaweicloud.sdk.imagesearch.v1.model.RunDeleteInstanceRequest;

import com.huaweicloud.sdk.imagesearch.v1.model.RunDeleteInstanceResponse;

import com.huaweicloud.sdk.imagesearch.v1.region.ImageSearchRegion;

public class ImageSearchDeleteInstanceDemo&nbsp;{

&nbsp;&nbsp;&nbsp;&nbsp;public static void main(String[] args) {

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String ak&nbsp;= "";

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String sk&nbsp;= "";

ICredential&nbsp;auth = new BasicCredentials()

.withAk(ak)

.withSk(sk);

ImageSearchClient&nbsp;client = ImageSearchClient.newBuilder()

.withCredential(auth)

.withRegion(ImageSearchRegion.valueOf("cn-north-4"))

.build();

RunDeleteInstanceRequest&nbsp;request = new RunDeleteInstanceRequest();

request.setInstanceName("instance-name");

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try {

RunDeleteInstanceResponse&nbsp;response = client.runDeleteInstance(request);

System.out.println(response.toString());

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} catch (ConnectionException&nbsp;e) {

System.out.println(e.getMessage());

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} catch (RequestTimeoutException&nbsp;e) {

System.out.println(e.getMessage());

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} catch (ServiceResponseException&nbsp;e) {

System.out.println(e.getHttpStatusCode());

System.out.println(e.getErrorCode());

System.out.println(e.getErrorMsg());

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

&nbsp;&nbsp;&nbsp;&nbsp;}

}

5相册中筛选同类型的相片合并归类

示例代码

使用如下代码(来自ImageSearchService.py)同步查询特定&nbsp;Region 下的图像搜索服务(IS),调用前请根据实际情况替换如下变量&nbsp;{your ak&nbsp;string}、{your sk&nbsp;string}、{your region string}、{your endpoint string} 、{your projectId&nbsp;string} 以及&nbsp;{your file path string}

class ImageSearchService(object):

&nbsp;&nbsp;&nbsp;&nbsp;def __init__(self, service_name, region, ak, sk, end_point_url, project_id):

self.end_point_url&nbsp;= end_point_url

self.project_id&nbsp;= project_id

self.sig&nbsp;= signer.Signer()

self.sig.Key&nbsp;= ak

self.sig.Secret&nbsp;= sk

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;self.name = service_name

self.region&nbsp;= region

&nbsp;&nbsp;&nbsp;&nbsp;def create_instance(self, project_id, model, name, description="", tags=["test-tags"]):

uri&nbsp;= "https://imagesearch.cn-north-4.myhuaweicloud.com/v1/%s/service"%project_id

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data = {"project_id": project_id,

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"model": model,

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"name": name,

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"description": description,

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"tags": tags

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}

json_data&nbsp;= json.dumps(data)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r = signer.HttpRequest("POST", uri)

r.body&nbsp;= json_data

r.headers&nbsp;= {"content-type": "application/json"}

self.sig.Sign(r)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resp = requests.request(r.method,

r.scheme+"://"+r.host+r.uri,

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;headers=r.headers,

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data=r.body)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# print(resp.status_code, resp.reason)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# print(resp.content)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return resp

&nbsp;&nbsp;&nbsp;&nbsp;def delete_instance(self, project_id, instance_name):

uri&nbsp;= "https://imagesearch.cn-north-4.myhuaweicloud.com/v1/%s/service/%s"%(project_id, instance_name)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data = {}

json_data&nbsp;= json.dumps(data)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r = signer.HttpRequest("DELETE", uri)

r.body&nbsp;= json_data

r.headers&nbsp;= {"content-type": "application/json"}

self.sig.Sign(r)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resp = requests.request(r.method,

r.scheme+"://"+r.host+r.uri,

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;headers=r.headers,

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data=r.body)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# print(resp.status_code, resp.reason)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# print(resp.content)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return resp

&nbsp;&nbsp;&nbsp;&nbsp;def check_user_instance(self, end_point_url, project_id, instance_name):

uri&nbsp;= "%s/v1/%s/service/%s"%(end_point_url, project_id, instance_name)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print(uri)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data = {}

json_data&nbsp;= json.dumps(data)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r = signer.HttpRequest("GET", uri)

r.body&nbsp;= json_data

r.headers&nbsp;= {"content-type": "application/json"}

self.sig.Sign(r)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resp = requests.request(r.method,

r.scheme+"://"+r.host+r.uri,

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;headers=r.headers,

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data=r.body)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# print(resp.status_code, resp.reason)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# print(resp.content)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return resp

&nbsp;&nbsp;&nbsp;&nbsp;def add_picture(self, project_id, instance_name, path, file="", is_crop=False, tags={"test-tags": "test-default"}):

print("call add_picture: %s, length of file path %d"%(path, len(path)))

uri&nbsp;= "https://imagesearch.cn-north-4.myhuaweicloud.com/v1/%s/%s/image"%(project_id, instance_name)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# print(uri)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data = {}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data["path"] = path

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data["file"] = file

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data["tags"] = tags

json_data&nbsp;= json.dumps(data)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r = signer.HttpRequest("POST", uri)

r.body&nbsp;= json_data

r.headers&nbsp;= {"content-type": "application/json"}

self.sig.Sign(r)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resp = requests.request(r.method,

r.scheme+"://"+r.host+r.uri,

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;headers=r.headers,

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data=r.body)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# print(resp.status_code, resp.reason)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# print(resp.content)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return resp

&nbsp;&nbsp;&nbsp;&nbsp;def search_picture(self, project_id, instance_name,

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;path="", box={"height": 0, "width": 0, "x": 0, "y": 0},

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;file="", is_crop=False, limit=0, offset=0):

uri&nbsp;= "https://imagesearch.cn-north-4.myhuaweicloud.com/v1/%s/%s/image/search"%(project_id, instance_name)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data = {}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data["path"] = path

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data["file"] = file

json_data&nbsp;= json.dumps(data)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r = signer.HttpRequest("POST", uri)

r.body&nbsp;= json_data

r.headers&nbsp;= {"content-type": "application/json"}

self.sig.Sign(r)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resp = requests.request(r.method,

r.scheme+"://"+r.host+r.uri,

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;headers=r.headers,

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data=r.body)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# print(resp.status_code, resp.reason)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# print(resp.content)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return resp

&nbsp;&nbsp;&nbsp;&nbsp;def delete_picture(self, project_id, instance_name, path):

uri&nbsp;= "https://imagesearch.cn-north-4.myhuaweicloud.com/v1/%s/%s/image"%(project_id, instance_name)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data = {}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data["path"] = path

json_data&nbsp;= json.dumps(data)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r = signer.HttpRequest("DELETE", uri)

r.body&nbsp;= json_data

r.headers&nbsp;= {"content-type": "application/json"}

self.sig.Sign(r)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resp = requests.request(r.method,

r.scheme+"://"+r.host+r.uri,

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;headers=r.headers,

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data=r.body)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# print(resp.status_code, resp.reason)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# print(resp.content)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return resp

&nbsp;&nbsp;&nbsp;&nbsp;def check_picture(self, project_id, instance_name, path):

uri&nbsp;= "https://imagesearch.cn-north-4.myhuaweicloud.com/v1/%s/%s/image/check"%(project_id, instance_name)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data = {}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data["path"] = path

json_data&nbsp;= json.dumps(data)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r = signer.HttpRequest("POST", uri)

r.body&nbsp;= json_data

r.headers&nbsp;= {"content-type": "application/json"}

self.sig.Sign(r)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resp = requests.request(r.method,

r.scheme+"://"+r.host+r.uri,

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;headers=r.headers,

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data=r.body)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# print(resp.status_code, resp.reason)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# print(resp.content)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return resp

&nbsp;&nbsp;&nbsp;&nbsp;def update_picture(self, project_id, instance_name, path, tags={}):

uri&nbsp;= "https://imagesearch.cn-north-4.myhuaweicloud.com/v1/%s/%s/image"%(project_id, instance_name)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data = {}

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data["path"] = path

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data["tags"] = tags

json_data&nbsp;= json.dumps(data)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;r = signer.HttpRequest("PUT", uri)

r.body&nbsp;= json_data

r.headers&nbsp;= {"content-type": "application/json"}

self.sig.Sign(r)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;resp = requests.request(r.method,

r.scheme+"://"+r.host+r.uri,

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;headers=r.headers,

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data=r.body)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# print(resp.status_code, resp.reason)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# print(resp.content)

&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return resp

运行示例

执行bash config.bash,脚本会自动python环境相关的依赖,然后根据系统提示输入AK,SK,Project ID。

配置成功后会自动生成cfg.ini,内容类似,其中hwc部分的配置和配置的结果保持一致。当然,你也可以手动配置cfg.ini文件。

[hwc]

ak=******

sk=******

project_id=63kkdjkd******9dkst3tskdgi53

&nbsp;&nbsp;&nbsp;&nbsp;[endpoint]

&nbsp;&nbsp;&nbsp;&nbsp;cn-north-1=https://imagesearch.cn-north-1.myhuaweicloud.com

&nbsp;&nbsp;&nbsp;&nbsp;cn-north-4=https://imagesearch.cn-north-4.myhuaweicloud.com

&nbsp;&nbsp;&nbsp;&nbsp;ap-southeast-1=https://imagesearch.ap-southeast-1.myhuaweicloud.com

输入python3 unit_test.py执行单元测试

输入python3 run.py执行演示程序

运行结果

单元测试输出

create_instance

.

check_user_instance&nbsp;is_788802

https://imagesearch.cn-north-4.myhuaweicloud.com/v1/your_project_id/service/is_788802

.

add_picture_by_local&nbsp;is_788802

call add_picture: ./test_picture/43474673_7bb4465a86.jpg, length of file path 38

.

add_picture_by_url&nbsp;is_788802

call add_picture: https://is-smirk.obs.cn-north-4.myhuaweicloud.com:443/flowers_recognition/train/11405573_24a8a838cc_n.jpg, length of file path 105

.

search_picture_by_local&nbsp;is_788802

.

search_picture_by_url&nbsp;is_788802

.

update_picture&nbsp;is_788802

.

check_picture&nbsp;is_788802

.

delete_picture&nbsp;is_788802

.

delete_instance&nbsp;is_788802

.

----------------------------------------------------------------------

Ran 10 tests in 18.108s

OK

演示程序输出

['hwc', 'endpoint']

[('cn-north-1', 'https://imagesearch.cn-north-1.myhuaweicloud.com'), ('cn-north-4', 'https://imagesearch.cn-north-4.myhuaweicloud.com'), ('ap-southeast-1', 'https://imagesearch.ap-southeast-1.myhuaweicloud.com')]

https://imagesearch.cn-north-1.myhuaweicloud.com

your_AK

https://imagesearch.cn-north-4.myhuaweicloud.com/v1/your_project_id/service/hwc_demo

call add_picture: 151385301_153eacf6b5_n.jpg, length of file path 26

add picture success: ./test_picture/train/151385301_153eacf6b5_n.jpg

call add_picture: 200557977_bf24d9550b.jpg, length of file path 24

add picture success: ./test_picture/train/200557977_bf24d9550b.jpg

call add_picture: 6953297_8576bf4ea3.jpg, length of file path 22

add picture success: ./test_picture/train/6953297_8576bf4ea3.jpg

call add_picture: 134409839_71069a95d1_m.jpg, length of file path 26

add picture success: ./test_picture/train/134409839_71069a95d1_m.jpg

call add_picture: 510874382_f7e3435043.jpg, length of file path 24

add picture success: ./test_picture/train/510874382_f7e3435043.jpg

call add_picture: 15987457_49dc11bf4b.jpg, length of file path 23

add picture success: ./test_picture/train/15987457_49dc11bf4b.jpg

call add_picture: 164670176_9f5b9c7965.jpg, length of file path 24

add picture success: ./test_picture/train/164670176_9f5b9c7965.jpg

call add_picture: 2059172936_032ffc12aa.jpg, length of file path 25

add picture success: ./test_picture/train/2059172936_032ffc12aa.jpg

call add_picture: 2093263381_afd51358a3.jpg, length of file path 25

add picture success: ./test_picture/train/2093263381_afd51358a3.jpg

call add_picture: 3203779656_3580151ea4_m.jpg, length of file path 27

add picture success: ./test_picture/train/3203779656_3580151ea4_m.jpg

call add_picture: 13920113_f03e867ea7_m.jpg, length of file path 25

add picture success: ./test_picture/train/13920113_f03e867ea7_m.jpg

call add_picture: 5794835_d15905c7c8_n.jpg, length of file path 24

add picture success: ./test_picture/train/5794835_d15905c7c8_n.jpg

call add_picture: 146023167_f905574d97_m.jpg, length of file path 26

add picture success: ./test_picture/train/146023167_f905574d97_m.jpg

call add_picture: 486234138_688e0_n.jpg, length of file path 21

add failed

call add_picture: 486234138_688e0_n.jpg, length of file path 21

call add_picture: 184682652_c927a49226_m.jpg, length of file path 26

add picture success: ./test_picture/train/184682652_c927a49226_m.jpg

call add_picture: 40410814_fba3837226_n.jpg, length of file path 25

add picture success: ./test_picture/train/40410814_fba3837226_n.jpg

call add_picture: 80846315_d997645bea_n.jpg, length of file path 25

add picture success: ./test_picture/train/80846315_d997645bea_n.jpg

call add_picture: 413815348_764ae83088.jpg, length of file path 24

add picture success: ./test_picture/train/413815348_764ae83088.jpg

call add_picture: 200557979_a16112aac1_n.jpg, length of file path 26

add picture success: ./test_picture/train/200557979_a16112aac1_n.jpg

call add_picture: 163978992_8128b49d3e_n.jpg, length of file path 26

add picture success: ./test_picture/train/163978992_8128b49d3e_n.jpg

call add_picture: 43474673_7bb4465a86.jpg, length of file path 23

add picture success: ./test_picture/train/43474673_7bb4465a86.jpg

call add_picture: 21652746_cc379e0eea_m.jpg, length of file path 25

add picture success: ./test_picture/train/21652746_cc379e0eea_m.jpg

call add_picture: 118974357_0faa23cce9_n.jpg, length of file path 26

add failed

call add_picture: 118974357_0faa23cce9_n.jpg, length of file path 26

call add_picture: 154332674_453cea64f4.jpg, length of file path 24

add picture success: ./test_picture/train/154332674_453cea64f4.jpg

call add_picture: 162362896_99c7d851c8_n.jpg, length of file path 26

add picture success: ./test_picture/train/162362896_99c7d851c8_n.jpg

call add_picture: 160456948_38c3817c6a_m.jpg, length of file path 26

add picture success: ./test_picture/train/160456948_38c3817c6a_m.jpg

call add_picture: 5794839_200acd910c_n.jpg, length of file path 24

add picture success: ./test_picture/train/5794839_200acd910c_n.jpg

call add_picture: 3179751458_9646d839f6_n.jpg, length of file path 27

add picture success: ./test_picture/train/3179751458_9646d839f6_n.jpg

call add_picture: 2183357362_4b4da4b6b5.jpg, length of file path 25

add picture success: ./test_picture/train/2183357362_4b4da4b6b5.jpg

call add_picture: 141652526_2be95f21c3_n.jpg, length of file path 26

add failed

call add_picture: 141652526_2be95f21c3_n.jpg, length of file path 26

call add_picture: 169371301_d9b91a2a42.jpg, length of file path 24

add picture success: ./test_picture/train/169371301_d9b91a2a42.jpg

call add_picture: 200288046_0032f322ff_n.jpg, length of file path 26

add picture success: ./test_picture/train/200288046_0032f322ff_n.jpg

call add_picture: 3450344423_63ba3190e3.jpg, length of file path 25

add failed

call add_picture: 3450344423_63ba3190e3.jpg, length of file path 25

call add_picture: 11405573_24a8a838cc_n.jpg, length of file path 25

add picture success: ./test_picture/train/11405573_24a8a838cc_n.jpg

call add_picture: 2141413229_3f0425f972_n.jpg, length of file path 27

add picture success: ./test_picture/train/2141413229_3f0425f972_n.jpg

call add_picture: 3554620445_082dd0bec4_n.jpg, length of file path 27

add failed

call add_picture: 3554620445_082dd0bec4_n.jpg, length of file path 27

call add_picture: 44079668_34dfee3da1_n.jpg, length of file path 25

add picture success: ./test_picture/train/44079668_34dfee3da1_n.jpg

call add_picture: 40411019_526f3fc8d9_m.jpg, length of file path 25

add picture success: ./test_picture/train/40411019_526f3fc8d9_m.jpg

call add_picture: 2609353769_dc3654f12f.jpg, length of file path 25

add picture success: ./test_picture/train/2609353769_dc3654f12f.jpg

call add_picture: 40410963_3ac280f23a_n.jpg, length of file path 25

add picture success: ./test_picture/train/40410963_3ac280f23a_n.jpg

[('40410814_fba3837226_n.jpg', 0.8202), ('40411019_526f3fc8d9_m.jpg', 0.7959), ('44079668_34dfee3da1_n.jpg', 0.7957), ('40410963_3ac280f23a_n.jpg', 0.7948), ('200288046_0032f322ff_n.jpg', 0.7419), ('184682652_c927a49226_m.jpg', 0.7291), ('5794839_200acd910c_n.jpg', 0.6738), ('163978992_8128b49d3e_n.jpg', 0.6732), ('200557977_bf24d9550b.jpg', 0.6675), ('134409839_71069a95d1_m.jpg', 0.6608)]

[('162362896_99c7d851c8_n.jpg', 0.9541), ('163978992_8128b49d3e_n.jpg', 0.9534), ('21652746_cc379e0eea_m.jpg', 0.93), ('413815348_764ae83088.jpg', 0.8996), ('5794835_d15905c7c8_n.jpg', 0.8991), ('5794839_200acd910c_n.jpg', 0.8933), ('134409839_71069a95d1_m.jpg', 0.8806), ('169371301_d9b91a2a42.jpg', 0.8272), ('43474673_7bb4465a86.jpg', 0.78), ('44079668_34dfee3da1_n.jpg', 0.7677)]

[('15987457_49dc11bf4b.jpg', 0.7605), ('151385301_153eacf6b5_n.jpg', 0.7571), ('80846315_d997645bea_n.jpg', 0.7416), ('11405573_24a8a838cc_n.jpg', 0.6828), ('146023167_f905574d97_m.jpg', 0.6674), ('13920113_f03e867ea7_m.jpg', 0.6639), ('160456948_38c3817c6a_m.jpg', 0.6396), ('510874382_f7e3435043.jpg', 0.6251)]

[('2141413229_3f0425f972_n.jpg', 1.0), ('2093263381_afd51358a3.jpg', 0.6334)]

演示程序会在华北-北京4自动创建名字为hwc_id_demo的图像搜索服务实例,将test_picture/train下的图片添加到实例中。

然后测试test_picture/test下图片作为搜索图片的搜索结果,在该Demo中过滤了相似度小于0.6的返回结果。

体验插件更多插件参考插件超市


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值