中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

干貨 | AI人臉識別之人臉搜索

發布時間:2020-08-08 07:06:14 來源:ITPUB博客 閱讀:153 作者:京東云技術新知 欄目:互聯網科技

本文檔將利用京東云AI SDK來實踐人臉識別中的人臉搜索功能,主要涉及到分組創建/刪除、分組列表獲取、人臉創建/刪除、人臉搜索,本次實操的最終效果是: 創建一個人臉庫,拿一張圖片在人臉庫中搜索出相似度最高的一張,實現1:N的人臉識別,操作示意圖如下:

一、準備工作

1. 創建AK/SK

登陸京東云控制臺:https://console.jdcloud.com,點擊右上角賬戶 AccessKey 管理,接著如圖點擊 創建Access Key
2. 購買人臉搜索服務
人臉搜索通過 API 調用次數計費,目前人臉搜索功能有 0元免費試用,調用量限制為 13
我們登陸到京東云控制臺,依次點擊左側導航 人工智能- 人臉識別- 人臉搜索,點擊 立即購買完成購買操作。
3.下載SDK
購買完成后,返回人臉搜索的控制臺,如圖點擊 下載SDK完成京東云AI SDK的下載操作
4.下載Eclipse并安裝
Eclipse下載地址:https://www.eclipse.org/downloads/,Eclipse安裝方法請自行百度。

二、實操開始

1.新建JAVA項目

打開Eclipse,依次點擊 File- New- Java Project,輸入 Project name如下圖設置后,點擊 Finish- Don't Create

右擊JAVA項目中的 src目錄,依次點擊 new- Package

接下來我們分別創建分組創建( faceGroupCreate)/刪除( faceGroupDelete)、分組列表獲取( getFaceGroupList)、人臉創建( faceCreate)/刪除( faceDelete)、人臉搜索( faceSearch)相關的 (類)Class,新建 Class的方法如下:

全部Class創建完成后如下圖:

2.裝載京東云AI SDK
將我們下載好的京東云AI SDK解壓,然后復制到我們新建的JAVA項目的根目錄里

刷新Eclipse中的 Package Explorer便可看到我們復制進來的京東云AI SDK文件,選中全部jar包文件,右擊,依次點擊 Build Path- Add to Build Path來重新構建路徑(Build Path)

重新構建路徑完成后,我們在Eclipse的 Package Explorer中可看到 Referenced Libraries,里面包含我們重構路徑的所有jar包

3.調試接口

創建分組(faceGroupCreate)

faceGroupCreate類中輸入如下內容作為調試代碼
 1package facesearch;

2
3import com.jdcloud.apigateway.signature.JdcloudSDKClient;
4import com.jdcloud.sdk.utils.BinaryUtils;
5import com.google.api.client.http.HttpResponse;
6import java.io.IOException;
7import java.util.HashMap;
8import java.util.Map;
9
10import static com.jdcloud.sdk.http.Protocol.HTTP;
11
12//創建分組
13public class faceGroupCreate {
14    public static void main(String[] args) {
15        String accessKey = "請輸入您的AK";
16        String secretKey = "請輸入您的SK";
17        String endPoint = "aiapi.jdcloud.com";
18        String path = "/jdai/faceGroupCreate";
19        String method = "POST";
20        Map<String, String> headers = new HashMap<>();
21        Map<String, Object> queryMap = new HashMap<>();
22        //queryMap.put("groupId", "10");
23        queryMap.put("groupName", "請輸入分組名稱");
24        queryMap.put("groupInfo", "請輸入分組描述");
25        String body = "\"\"";
26        try {
27            HttpResponse response = JdcloudSDKClient.execute(accessKey, secretKey, HTTP,
28                endPoint, path, method, headers, queryMap, body);
29            System.out.println(new String(BinaryUtils.toByteArray(response.getContent())));
30        } catch (IOException e) {
31            System.out.println(e.getMessage());
32        }
33    }
34}

右擊代碼依次點擊 Run as- 1 Java Application運行代碼

運行后發現報錯信息如下( 這里雖然有報錯,但我們定義的名稱為 請輸入分組名稱 的組已成功創建):

SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".SLF4J: Defaulting to no-operation (NOP) logger implementationSLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.

由此我們可以看出,報出錯誤的地方主要是slf4j的jar包,而故障碼中 Failed to load class "org.slf4j.impl.StaticLoggerBinder"的意思則是 加載類文件org.slf4j.impl.StaticLoggerBinder時失敗

我們下載 slf4j-nop.jar,然后像添加AI SDK jar包一樣添加到build path中即可解決問題, slf4j-nop.jarjar包我已打包上傳到京東云對象存儲,下載地址為:https://pocenv-hcc.s3.cn-north-1.jdcloud-oss.com/slf4j-nop-1.7.28.jar
將slf4j包下載后復制到京東云AI SDK文件夾里,然后在Eclipse內添加到構建路徑里即可

接下來依次創建其他類文件

注意:如下代碼中涉及到 String body = "imageBase64=";的部分 需要先將圖片轉換為Base64,轉換地址為:http://imgbase64.duoshitong.com/; 然后將轉換后的代碼復制到 imageBase64=之后(轉換后的代碼需去除掉“ data:image/jpeg;base64,”后再復制)。

刪除分組(`faceGroupDelete`)

 1package facesearch;

2
3import com.jdcloud.apigateway.signature.JdcloudSDKClient;
4import com.jdcloud.sdk.utils.BinaryUtils;
5import com.google.api.client.http.HttpResponse;
6import java.io.IOException;
7import java.util.HashMap;
8import java.util.Map;
9
10import static com.jdcloud.sdk.http.Protocol.HTTP;
11
12//刪除分組
13public class faceGroupDelete {
14    public static void main(String[] args) {
15        String accessKey = "請輸入您的AK";
16        String secretKey = "請輸入您的SK";
17        String endPoint = "aiapi.jdcloud.com";
18        String path = "/jdai/faceGroupDelete";
19        String method = "POST";
20        Map<String, String> headers = new HashMap<>();
21        Map<String, Object> queryMap = new HashMap<>();
22        //queryMap.put("groupId", "10");
23        queryMap.put("groupName", "請輸入分組名稱");
24        String body = "{}";
25        try {
26            HttpResponse response = JdcloudSDKClient.execute(accessKey, secretKey, HTTP,
27                endPoint, path, method, headers, queryMap, body);
28            System.out.println(new String(BinaryUtils.toByteArray(response.getContent())));
29        } catch (IOException e) {
30            System.out.println(e.getMessage());
31        }
32    }
33}

分組列表獲取(`getFaceGroupList`)

 1package facesearch;

2
3import com.jdcloud.apigateway.signature.JdcloudSDKClient;
4import com.jdcloud.sdk.utils.BinaryUtils;
5import com.google.api.client.http.HttpResponse;
6import java.io.IOException;
7import java.util.HashMap;
8import java.util.Map;
9
10import static com.jdcloud.sdk.http.Protocol.HTTP;
11
12//獲取分組列表
13public class getFaceGroupList {
14    public static void main(String[] args) {
15        String accessKey = "請輸入您的AK";
16        String secretKey = "請輸入您的SK";
17        String endPoint = "aiapi.jdcloud.com";
18        String path = "/jdai/getFaceGroupList";
19        String method = "POST";
20        Map<String, String> headers = new HashMap<>();
21        Map<String, Object> queryMap = new HashMap<>();
22        queryMap.put("start", "0");
23        queryMap.put("length", "5");
24        String body = "aaa";
25        try {
26            HttpResponse response = JdcloudSDKClient.execute(accessKey, secretKey, HTTP,
27                endPoint, path, method, headers, queryMap, body);
28            System.out.println(new String(BinaryUtils.toByteArray(response.getContent())));
29        } catch (IOException e) {
30            System.out.println(e.getMessage());
31        }
32    }
33}

人臉創建(`faceCreate`)

 1package facesearch;

2
3import com.jdcloud.apigateway.signature.JdcloudSDKClient;
4import com.jdcloud.sdk.utils.BinaryUtils;
5import com.google.api.client.http.HttpResponse;
6import java.io.IOException;
7import java.util.HashMap;
8import java.util.Map;
9
10import static com.jdcloud.sdk.http.Protocol.HTTP;
11
12//創建人臉
13public class faceCreate {
14    public static void main(String[] args) {
15        String accessKey = "請輸入您的AK";
16        String secretKey = "請輸入您的SK";
17        String endPoint = "aiapi.jdcloud.com";
18        String path = "/jdai/faceCreate";
19        String method = "POST";
20        //創建
21        Map<String, String> dataMap = new HashMap<>();
22        //在線圖片轉base64:http://imgbase64.duoshitong.com/
23        dataMap.put("marin1", "imageBase64=圖片轉換為Base64后的代碼(去掉前面的data:image/jpeg;base64,)");
24        dataMap.put("marin2", "imageBase64=圖片轉換為Base64后的代碼(去掉前面的data:image/jpeg;base64,)");
25        dataMap.put("corona", "imageBase64=圖片轉換為Base64后的代碼(去掉前面的data:image/jpeg;base64,)");
26        dataMap.put("dog", "imageBase64=圖片轉換為Base64后的代碼(去掉前面的data:image/jpeg;base64,)");
27        Map<String, String> headers = new HashMap<>();
28        Map<String, Object> queryMap = new HashMap<>();
29        queryMap.put("groupName", "請輸入分組名稱");
30        String body;
31        for (Map.Entry<String, String> entry: dataMap.entrySet()){
32            queryMap.put("outerId", entry.getKey());
33            body = entry.getValue();
34            try {
35                HttpResponse response = JdcloudSDKClient.execute(accessKey, secretKey, HTTP,
36                    endPoint, path, method, headers, queryMap, body);
37                System.out.println(new String(BinaryUtils.toByteArray(response.getContent())));
38            } catch (IOException e) {
39                System.out.println(e.getMessage());
40            }
41            queryMap.remove("outerId");
42        }
43    }
44}

人臉刪除(`faceDelete`)

 1package facesearch;

2
3import com.jdcloud.apigateway.signature.JdcloudSDKClient;
4import com.jdcloud.sdk.utils.BinaryUtils;
5import com.google.api.client.http.HttpResponse;
6import java.io.IOException;
7import java.util.HashMap;
8import java.util.Map;
9
10import static com.jdcloud.sdk.http.Protocol.HTTP;
11
12//刪除人臉
13public class faceDelete {
14    public static void main(String[] args) {
15        String accessKey = "請輸入您的AK";
16        String secretKey = "請輸入您的SK";
17        String endPoint = "aiapi.jdcloud.com";
18        String path = "/jdai/faceDelete";
19        String method = "POST";
20        Map<String, String> headers = new HashMap<>();
21        Map<String, Object> queryMap = new HashMap<>();
22        queryMap.put("groupName", "請輸入分組名稱");
23        queryMap.put("outerId", "marin1");
24        queryMap.put("outerId", "marin2");
25        queryMap.put("outerId", "corona");
26        queryMap.put("outerId", "dog");
27        String body = "{}";
28        try {
29            HttpResponse response = JdcloudSDKClient.execute(accessKey, secretKey, HTTP,
30                endPoint, path, method, headers, queryMap, body);
31            System.out.println(new String(BinaryUtils.toByteArray(response.getContent())));
32        } catch (IOException e) {
33            System.out.println(e.getMessage());
34        }
35    }
36}

人臉搜索(`faceSearch`)

 1package facesearch;

2
3import com.jdcloud.apigateway.signature.JdcloudSDKClient;
4import com.jdcloud.sdk.utils.BinaryUtils;
5import com.google.api.client.http.HttpResponse;
6import java.io.IOException;
7import java.util.HashMap;
8import java.util.Map;
9
10import static com.jdcloud.sdk.http.Protocol.HTTP;
11
12//人臉搜索
13public class faceSearch {
14    public static void main(String[] args) {
15        String accessKey = "請輸入您的AK";
16        String secretKey = "請輸入您的SK";
17        String endPoint = "aiapi.jdcloud.com";
18        String path = "/jdai/faceSearch";
19        String method = "POST";
20        Map<String, String> headers = new HashMap<>();
21        Map<String, Object> queryMap = new HashMap<>();
22        queryMap.put("groupName", "請輸入分組名稱");
23        //如下填寫同一人的第三張人臉Base64代碼進行人臉搜索,這里用人臉marin.jpg
24        String body = "imageBase64=圖片轉換為Base64后的代碼(去掉前面的data:image/jpeg;base64,)";
25        try {
26            HttpResponse response = JdcloudSDKClient.execute(accessKey, secretKey, HTTP,
27                endPoint, path, method, headers, queryMap, body);
28            System.out.println(new String(BinaryUtils.toByteArray(response.getContent())));
29        } catch (IOException e) {
30            System.out.println(e.getMessage());
31        }
32    }
33}

4.進行演示

如下演示都通過右擊對應的代碼執行 Run as- 1 Java Application來運行代碼查看結果

創建分組

運行 faceGroupCreate.java,結果如下:
獲取分組列表
運行 getFaceGroupList.java,結果如下:
創建人臉庫
運行 faceCreate.java,結果如下:
人臉搜索
運行 faceSearch.java,結果如下:
刪除人臉
運行 faceDelete.java,結果如下:
刪除分組
運行 faceGroupDelete.java,結果如下:

如上,我們通過 marin1.jpgmarin2.jpgcorona.jpgdog.jpg創建了人臉庫,最后通過 marin.jpg將相似度最高的 marin1.jpg搜索了出來,至此,操作演示完畢~~


點擊“ 京東云 ”了解京東云人臉對比

歡迎點擊“ 京東云 ”了解更多精彩內容

干貨 | AI人臉識別之人臉搜索

干貨 | AI人臉識別之人臉搜索
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

隆林| 周口市| 天全县| 彝良县| 襄汾县| 铜梁县| 通江县| 堆龙德庆县| 光山县| 崇阳县| 京山县| 色达县| 田东县| 塔城市| 甘孜县| 杭州市| 精河县| 儋州市| 苏尼特左旗| 金坛市| 山丹县| 安徽省| 安国市| 余干县| 凤冈县| 杂多县| 磐石市| 梧州市| 卓尼县| 肃宁县| 龙山县| 南涧| 临西县| 集贤县| 上杭县| 康定县| 金川县| 色达县| 海南省| 太康县| 闸北区|