溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

干貨 | AI人臉識(shí)別之人臉?biāo)阉?/h1>
發(fā)布時(shí)間:2020-08-08 07:06:14 來源:ITPUB博客 閱讀:153 作者:京東云技術(shù)新知 欄目:互聯(lián)網(wǎng)科技

本文檔將利用京東云AI SDK來實(shí)踐人臉識(shí)別中的人臉?biāo)阉鞴δ?,主要涉及到分組創(chuàng)建/刪除、分組列表獲取、人臉創(chuàng)建/刪除、人臉?biāo)阉?,本次?shí)操的最終效果是: 創(chuàng)建一個(gè)人臉庫,拿一張圖片在人臉庫中搜索出相似度最高的一張,實(shí)現(xiàn)1:N的人臉識(shí)別,操作示意圖如下:

一、準(zhǔn)備工作

1. 創(chuàng)建AK/SK

登陸京東云控制臺(tái):https://console.jdcloud.com,點(diǎn)擊右上角賬戶 AccessKey 管理,接著如圖點(diǎn)擊 創(chuàng)建Access Key
2. 購買人臉?biāo)阉鞣?wù)
人臉?biāo)阉魍ㄟ^ API 調(diào)用次數(shù)計(jì)費(fèi),目前人臉?biāo)阉鞴δ苡?0元免費(fèi)試用,調(diào)用量限制為 13
我們登陸到京東云控制臺(tái),依次點(diǎn)擊左側(cè)導(dǎo)航 人工智能- 人臉識(shí)別- 人臉?biāo)阉?/span>,點(diǎn)擊 立即購買完成購買操作。
3.下載SDK
購買完成后,返回人臉?biāo)阉鞯目刂婆_(tái),如圖點(diǎn)擊 下載SDK完成京東云AI SDK的下載操作
4.下載Eclipse并安裝
Eclipse下載地址:https://www.eclipse.org/downloads/,Eclipse安裝方法請(qǐng)自行百度。

二、實(shí)操開始

1.新建JAVA項(xiàng)目

打開Eclipse,依次點(diǎn)擊 File- New- Java Project,輸入 Project name如下圖設(shè)置后,點(diǎn)擊 Finish- Don't Create

右擊JAVA項(xiàng)目中的 src目錄,依次點(diǎn)擊 new- Package

接下來我們分別創(chuàng)建分組創(chuàng)建( faceGroupCreate)/刪除( faceGroupDelete)、分組列表獲?。?getFaceGroupList)、人臉創(chuàng)建( faceCreate)/刪除( faceDelete)、人臉?biāo)阉鳎?faceSearch)相關(guān)的 (類)Class,新建 Class的方法如下:

全部Class創(chuàng)建完成后如下圖:

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

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

重新構(gòu)建路徑完成后,我們?cè)贓clipse的 Package Explorer中可看到 Referenced Libraries,里面包含我們重構(gòu)路徑的所有jar包

3.調(diào)試接口

創(chuàng)建分組(faceGroupCreate)

faceGroupCreate類中輸入如下內(nèi)容作為調(diào)試代碼
 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//創(chuàng)建分組
13public class faceGroupCreate {
14    public static void main(String[] args) {
15        String accessKey = "請(qǐng)輸入您的AK";
16        String secretKey = "請(qǐng)輸入您的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", "請(qǐng)輸入分組名稱");
24        queryMap.put("groupInfo", "請(qǐng)輸入分組描述");
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}

右擊代碼依次點(diǎn)擊 Run as- 1 Java Application運(yùn)行代碼

運(yùn)行后發(fā)現(xiàn)報(bào)錯(cuò)信息如下( 這里雖然有報(bào)錯(cuò),但我們定義的名稱為 請(qǐng)輸入分組名稱 的組已成功創(chuàng)建):

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.

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

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

接下來依次創(chuàng)建其他類文件

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

刪除分組(`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 = "請(qǐng)輸入您的AK";
16        String secretKey = "請(qǐng)輸入您的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", "請(qǐng)輸入分組名稱");
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 = "請(qǐng)輸入您的AK";
16        String secretKey = "請(qǐng)輸入您的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}

人臉創(chuàng)建(`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//創(chuàng)建人臉
13public class faceCreate {
14    public static void main(String[] args) {
15        String accessKey = "請(qǐng)輸入您的AK";
16        String secretKey = "請(qǐng)輸入您的SK";
17        String endPoint = "aiapi.jdcloud.com";
18        String path = "/jdai/faceCreate";
19        String method = "POST";
20        //創(chuàng)建
21        Map<String, String> dataMap = new HashMap<>();
22        //在線圖片轉(zhuǎn)base64:http://imgbase64.duoshitong.com/
23        dataMap.put("marin1", "imageBase64=圖片轉(zhuǎn)換為Base64后的代碼(去掉前面的data:image/jpeg;base64,)");
24        dataMap.put("marin2", "imageBase64=圖片轉(zhuǎn)換為Base64后的代碼(去掉前面的data:image/jpeg;base64,)");
25        dataMap.put("corona", "imageBase64=圖片轉(zhuǎn)換為Base64后的代碼(去掉前面的data:image/jpeg;base64,)");
26        dataMap.put("dog", "imageBase64=圖片轉(zhuǎn)換為Base64后的代碼(去掉前面的data:image/jpeg;base64,)");
27        Map<String, String> headers = new HashMap<>();
28        Map<String, Object> queryMap = new HashMap<>();
29        queryMap.put("groupName", "請(qǐng)輸入分組名稱");
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 = "請(qǐng)輸入您的AK";
16        String secretKey = "請(qǐng)輸入您的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", "請(qǐng)輸入分組名稱");
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}

人臉?biāo)阉鳎╜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//人臉?biāo)阉?
13public class faceSearch {
14    public static void main(String[] args) {
15        String accessKey = "請(qǐng)輸入您的AK";
16        String secretKey = "請(qǐng)輸入您的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", "請(qǐng)輸入分組名稱");
23        //如下填寫同一人的第三張人臉Base64代碼進(jìn)行人臉?biāo)阉?這里用人臉marin.jpg
24        String body = "imageBase64=圖片轉(zhuǎn)換為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.進(jìn)行演示

如下演示都通過右擊對(duì)應(yīng)的代碼執(zhí)行 Run as- 1 Java Application來運(yùn)行代碼查看結(jié)果

創(chuàng)建分組

運(yùn)行 faceGroupCreate.java,結(jié)果如下:
獲取分組列表
運(yùn)行 getFaceGroupList.java,結(jié)果如下:
創(chuàng)建人臉庫
運(yùn)行 faceCreate.java,結(jié)果如下:
人臉?biāo)阉?/span>
運(yùn)行 faceSearch.java,結(jié)果如下:
刪除人臉
運(yùn)行 faceDelete.java,結(jié)果如下:
刪除分組
運(yùn)行 faceGroupDelete.java,結(jié)果如下:

如上,我們通過 marin1.jpg、 marin2.jpg、 corona.jpg、 dog.jpg創(chuàng)建了人臉庫,最后通過 marin.jpg將相似度最高的 marin1.jpg搜索了出來,至此,操作演示完畢~~


點(diǎn)擊“ 京東云 ”了解京東云人臉對(duì)比

歡迎點(diǎn)擊“ 京東云 ”了解更多精彩內(nèi)容

干貨 | AI人臉識(shí)別之人臉?biāo)阉?></p></div></div>
<div   id=

干貨 | AI人臉識(shí)別之人臉?biāo)阉?></div></div></div></div>            </div>
            <div   id=向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI