快速入門(mén)
安裝ImageSearch Java SDK
ImageSearch Java SDK目錄結(jié)構(gòu)
com.baidu.aip
├── auth //簽名相關(guān)類
├── http //Http通信相關(guān)類
├── client //公用類
├── exception //exception類
├── imagesearch
│ └── AipImageSearch //AipImageSearch類
└── util //工具類
支持 JAVA版本:1.7+
查看源碼
Java SDK代碼現(xiàn)已公開(kāi)格带,您可以查看代碼、或者在License范圍內(nèi)修改和編譯SDK以適配您的環(huán)境。 github鏈接:https://github.com/Baidu-AIP/java-sdk
使用maven依賴:
添加以下依賴即可亮蛔。其中版本號(hào)可在maven官網(wǎng)查詢
<dependency>
<groupId>com.baidu.aip</groupId>
<artifactId>java-sdk</artifactId>
<version>${version}</version>
</dependency>
直接使用JAR包步驟如下:
1.在官方網(wǎng)站下載Java SDK壓縮工具包。
2.將下載的aip-java-sdk-version.zip
解壓后冯键,復(fù)制到工程文件夾中瓷叫。
3.在Eclipse右鍵“工程 -> Properties -> Java Build Path -> Add JARs”。
4.添加SDK工具包aip-java-sdk-version.jar
和第三方依賴工具包json-20160810.jar
log4j-1.2.17.jar
逢倍。
其中,version
為版本號(hào)景图,添加完成后较雕,用戶就可以在工程中使用ImageSearch Java SDK。
新建AipImageSearch
AipImageSearch是圖像搜索的Java客戶端挚币,為使用圖像搜索的開(kāi)發(fā)人員提供了一系列的交互方法亮蒋。
用戶可以參考如下代碼新建一個(gè)AipImageSearch,初始化完成后建議單例使用,避免重復(fù)獲取access_token:
public class Sample {
//設(shè)置APPID/AK/SK
public static final String APP_ID = "你的 App ID";
public static final String API_KEY = "你的 Api Key";
public static final String SECRET_KEY = "你的 Secret Key";
public static void main(String[] args) {
// 初始化一個(gè)AipImageSearch
AipImageSearch client = new AipImageSearch(APP_ID, API_KEY, SECRET_KEY);
// 可選:設(shè)置網(wǎng)絡(luò)連接參數(shù)
client.setConnectionTimeoutInMillis(2000);
client.setSocketTimeoutInMillis(60000);
// 可選:設(shè)置代理服務(wù)器地址, http和socket二選一,或者均不設(shè)置
client.setHttpProxy("proxy_host", proxy_port); // 設(shè)置http代理
client.setSocketProxy("proxy_host", proxy_port); // 設(shè)置socket代理
// 可選:設(shè)置log4j日志輸出格式妆毕,若不設(shè)置慎玖,則使用默認(rèn)配置
// 也可以直接通過(guò)jvm啟動(dòng)參數(shù)設(shè)置此環(huán)境變量
System.setProperty("aip.log4j.conf", "path/to/your/log4j.properties");
// 調(diào)用接口
String path = "test.jpg";
JSONObject res = client.sameHqSearch(path, new HashMap<String, String>());
System.out.println(res.toString(2));
}
}
其中示例的log4j.properties文件內(nèi)容如下:
#可以設(shè)置級(jí)別:debug>info>error
#debug:顯示debug、info笛粘、error
#info:顯示info趁怔、error
#error:只error
log4j.rootLogger=debug,appender1
#log4j.rootLogger=info,appender1
#log4j.rootLogger=error,appender1
#輸出到控制臺(tái)
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
#樣式為T(mén)TCCLayout
log4j.appender.appender1.layout=org.apache.log4j.PatternLayout
#自定義樣式
# %r 時(shí)間 0
# %t 方法名 main
# %p 優(yōu)先級(jí) DEBUG/INFO/ERROR
# %c 所屬類的全名(包括包名)
# %l 發(fā)生的位置湿硝,在某個(gè)類的某行
# %m 輸出代碼中指定的訊息,如log(message)中的message
# %n 輸出一個(gè)換行
log4j.appender.appender1.layout.ConversionPattern=[%d{yy/MM/dd HH:mm:ss:SSS}][%t][%p] -%l %m%n
在上面代碼中润努,常量APP_ID在百度云控制臺(tái)中創(chuàng)建关斜,常量API_KEY與SECRET_KEY是在創(chuàng)建完畢應(yīng)用后,系統(tǒng)分配給用戶的任连,均為字符串蚤吹,用于標(biāo)識(shí)用戶,為訪問(wèn)做簽名驗(yàn)證随抠,可在AI服務(wù)控制臺(tái)中的應(yīng)用列表中查看裁着。
注意:如您以前是百度云的老用戶,其中API_KEY對(duì)應(yīng)百度云的“Access Key ID”拱她,SECRET_KEY對(duì)應(yīng)百度云的“Access Key Secret”二驰。
配置AipImageSearch
如果用戶需要配置AipImageSearch的一些細(xì)節(jié)參數(shù),可以在構(gòu)造AipImageSearch之后調(diào)用接口設(shè)置參數(shù)秉沼,目前只支持以下參數(shù):
接口 說(shuō)明
setConnectionTimeoutInMillis 建立連接的超時(shí)時(shí)間(單位:毫秒)
setSocketTimeoutInMillis 通過(guò)打開(kāi)的連接傳輸數(shù)據(jù)的超時(shí)時(shí)間(單位:毫秒)
setHttpProxy 設(shè)置http代理服務(wù)器
setSocketProxy 設(shè)置socket代理服務(wù)器 (http和socket類型代理服務(wù)器只能二選一)
----------------------------------------------------分割線----------------------------------------------
以上都來(lái)源于百度sdk文檔https://ai.baidu.com/docs#/ImageSearch-Java-SDK/top
桶雀,細(xì)節(jié)可以自己慢慢研究,我這里就類似圖試別定義一些返回參數(shù)的規(guī)則唬复。
相似圖檢索—入庫(kù)
該接口實(shí)現(xiàn)單張圖片入庫(kù)矗积,入庫(kù)時(shí)需要同步提交圖片及可關(guān)聯(lián)至本地圖庫(kù)的摘要信息(具體變量為brief,具體可傳入圖片在本地標(biāo)記id敞咧、圖片url棘捣、圖片名稱等);同時(shí)可提交分類維度信息(具體變量為tags休建,最多可傳入2個(gè)tag)乍恐,方便對(duì)圖庫(kù)中的圖片進(jìn)行管理、分類檢索测砂。**注:重復(fù)添加完全相同的圖片會(huì)返回錯(cuò)誤茵烈。
HashMap<String, String> options = new HashMap<String, String>();
options.put("brief", "{\"name\":\"周杰倫\", \"id\":\"666\"}");
options.put("tags", "100,11");
// 參數(shù)為本地路徑(圖片不能大于4M,要寫(xiě)個(gè)方法判斷一下)
String image = "test.jpg";
JSONObject res = client.similarAdd(image, options);
System.out.println(res.toString(2));
值得注意的就hashmap的參數(shù)設(shè)置,是查找的返回json砌些,別的都沒(méi)啥難度呜投。
這里相關(guān)參數(shù)暫時(shí)定個(gè)規(guī)則表,
類別 | tag | brief(最長(zhǎng)256B,處理成json對(duì)象) |
---|---|---|
失物:動(dòng)物 | 2存璃,7 | {"name:物品名稱宙彪,限定10個(gè)字, "describe:詳細(xì)描述有巧,限定40字","fileName:圖片資源名稱"} |
失物:證件 | 2,14 | {"name:校園卡悲没, "describe:xx學(xué)院xx班小明同學(xué)丟失的校園卡篮迎,拾取于xxx"男图,"fileName:201909011234_fanka.jpg"} |
失物:日用品 | 2,21 | {"name:水杯甜橱, "describe:藍(lán)色不銹鋼水杯逊笆,拾取于階梯教室"} |
失物:急用 | 2,28 | etc. |
失物:貴重物品 | 2岂傲,35 | etc. |
失物:文件 | 2难裆,42 | etc. |
其他 | 2,47 | etc. |
相似圖檢索—入庫(kù) 返回?cái)?shù)據(jù)參數(shù)詳情
字段 | 是否必選 | 類型 | 說(shuō)明 |
---|---|---|---|
log_id | 是 | uint64 | 唯一的log id镊掖,用于問(wèn)題定位 |
cont_sign | 是 | string | 輸入圖片簽名乃戈,可用于刪除 |
相似圖檢索—入庫(kù) 返回示例
{
"log_id": 2263663554,
"cont_sign": "4261577168,501945506"
}
相似圖檢索—檢索
// 傳入可選參數(shù)調(diào)用接口
HashMap<String, String> options = new HashMap<String, String>();
options.put("tags", "100,11");
options.put("tag_logic", "0");
options.put("pn", "100");
options.put("rn", "250");
相似圖檢索—檢索 請(qǐng)求參數(shù)詳情
參數(shù)名稱 | 是否必選 | 類型 | 說(shuō)明 |
---|---|---|---|
tags | 否 | String | 1 - 65535范圍內(nèi)的整數(shù),tag間以逗號(hào)分隔亩进,最多2個(gè)tag症虑。樣例:"100,11" ;檢索時(shí)可圈定分類維度進(jìn)行檢索 |
tag_logic | 否 | String | 檢索時(shí)tag之間的邏輯归薛, 0:邏輯and谍憔,1:邏輯or |
pn | 否 | String | 分頁(yè)功能,起始位置主籍,例:0习贫。未指定分頁(yè)時(shí),默認(rèn)返回前300個(gè)結(jié)果千元;接口返回?cái)?shù)量最大限制1000條苫昌,例如:起始位置為900,截取條數(shù)500條诅炉,接口也只返回第900 - 1000條的結(jié)果蜡歹,共計(jì)100條 |
rn | 否 | String | 分頁(yè)功能,截取條數(shù)涕烧,例:250 |
分頁(yè)一般獲得個(gè)前十條就夠了月而,數(shù)據(jù)太多,傳輸也慢议纯。
相似圖檢索—檢索 返回?cái)?shù)據(jù)參數(shù)詳情
字段 | 是否必選 | 類型 | 說(shuō)明 |
---|---|---|---|
log_id | 是 | uint64 | 唯一的log id父款,用于問(wèn)題定位 |
result_num | 是 | uint32 | 檢索結(jié)果數(shù) |
result | 是 | object[] | 結(jié)果數(shù)組 |
+cont_sign | 是 | string | 圖片簽名,可以用來(lái)刪除圖片或定位問(wèn)題 |
+score | 是 | float | 圖片相關(guān)性瞻凤,0-1 |
+brief | 是 | string | add是添加的brief信息 |
has_more | 是 | bool | 是否還有下一頁(yè)憨攒,返回值:true、false阀参; 如果不分頁(yè)肝集,不用關(guān)注該字段 |
{
"result_num": 1,
"result": [
{
"score": 0.97976700290421,
"brief": "./data/jay1.jpg",//這里可以傳文件信息,方便資源定位和查找蛛壳,不論是在數(shù)據(jù)庫(kù)還是本地
"cont_sign": "475124309,1080176642"
}
],
"log_id": 1968648150
}
相似圖檢索—更新杏瞻,刪除(大部分代碼類似所刀,羅列核心代碼)
// 更新
String image = "test.jpg";
JSONObject res = client.similarUpdate(image, options);
// 刪除
String image = "test.jpg";
JSONObject res = client.similarDeleteByImage(image, options);
還有個(gè)商品查找的功能,大致思想也是找同類的產(chǎn)品捞挥,在商鋪類app里可以試著接入使用浮创。
還有個(gè)商品查找的功能