近期平臺上線了30餘個算法,其中就包括大家比較關心的人臉比對1:N算法,為了更方便大家調用此算法,接下來給大家分享一份代碼樣例,其中包含了如何對接並調用人臉比對1:N,對此算法感興趣的小夥伴千萬不要錯過喲~
步驟
1、服務開通,參考鏈接:阿里雲視覺智能開放平臺使用簡明教程
2、目前主要提供三個方面的能力:人臉識別、人體識別、人臉對比,能力介紹
3、其中人臉識別、人體識別 目前主要是單個API的調用,不涉及多個API的協同調用,使用相對簡單(實例僅選擇一個API演示)。人臉對比涉及到人臉庫、樣本、圖片等的操作,需要多個API的協同操作:
4、代碼樣例
- 4.1 pom.xml
<dependencies>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.4.8</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.52</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.aliyun/aliyun-java-sdk-facebody -->
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-facebody</artifactId>
<version>1.0.8</version>
</dependency>
</dependencies>
- 4.2 Java Code
import com.aliyuncs.IAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.exceptions.ServerException;
import com.aliyuncs.profile.DefaultProfile;
import com.google.gson.Gson;
import com.aliyuncs.facebody.model.v20191230.*;
public class Demo1 {
// 阿里雲常見參數獲取位置 https://yq.aliyun.com/articles/693979
private static DefaultProfile profile = DefaultProfile.getProfile("cn-shanghai", "<access key>", "<access secret>");
private static IAcsClient client = new DefaultAcsClient(profile);
public static void main(String[] args) {
// 人臉識別 -- 人臉屬性識別
String recognizeFaceURL = "http://vigen-invi.oss-cn-shanghai.aliyuncs.com/demo/test.jpg";
recognizeFace(recognizeFaceURL);
// 人體識別 -- 人體計算
String detectBodyCountURL = "https://viapi-test.oss-cn-shanghai.aliyuncs.com/test/facebody/RecognizeBodyCount/ddd2512910b84bc3ffeba5ac44b30d81.jpg";
detectBodyCount(detectBodyCountURL);
// 人臉對比
String dbName = "tarogroup";
Integer Offset = 0;
String wangfei1 = "https://taroshanghai.oss-cn-shanghai.aliyuncs.com/viapipictest/face1.jpg";
String wangfei2 = "https://taroshanghai.oss-cn-shanghai.aliyuncs.com/viapipictest/face2.jpg";
String jingtian1 = "https://taroshanghai.oss-cn-shanghai.aliyuncs.com/viapipictest/jingtian1.jpeg";
String jingtian2 = "https://taroshanghai.oss-cn-shanghai.aliyuncs.com/viapipictest/jingtian2.jpeg";
compareFace(wangfei1,jingtian1);// 人臉對比
// 1:N 人臉查找
// deleteFaceDb(dbName);
// listFaceEntities(dbName, Offset);
// deleteFaceEntity(dbName,"2");
// listFaceDbs();
// createFaceDbRequest(dbName);
// listFaceDbs();
String entityId1 = "wangfei";
String entityId2 = "jingtian";
// 創建人臉樣本
// addFaceEntity(dbName, entityId1);
// addFaceEntity(dbName, entityId2);
// 想人臉樣本中加入人臉,每個樣本人臉上限為5
// addFace(dbName,entityId1,wangfei1);
// addFace(dbName,entityId1,wangfei2);
//
// addFace(dbName,entityId2,jingtian1);
// addFace(dbName,entityId2,jingtian2);
//
// listFaceEntities(dbName, 0);
// 到人臉庫中查找
searchFace(dbName,wangfei1,1);
}
/**
* 人臉屬性識別
* @param imageURL 圖片URL地址
*/
private static void recognizeFace(String imageURL)
{
RecognizeFaceRequest recognizeFaceRequest = new RecognizeFaceRequest();
recognizeFaceRequest.setImageURL(imageURL);
try {
RecognizeFaceResponse recognizeFaceResponse = client.getAcsResponse(recognizeFaceRequest);
System.out.println("人臉屬性識別:");
System.out.println(new Gson().toJson(recognizeFaceResponse));
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
}
}
/**
* 人體計數
* @param imageURL 圖片URL地址
*/
private static void detectBodyCount(String imageURL)
{
DetectBodyCountRequest detectBodyCountRequest = new DetectBodyCountRequest();
detectBodyCountRequest.setImageURL(imageURL);
try {
DetectBodyCountResponse detectBodyCountResponse = client.getAcsResponse(detectBodyCountRequest);
System.out.println("人體計數:");
System.out.println(new Gson().toJson(detectBodyCountResponse));
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
}
}
/**
* 創建人臉數據庫
* @param dbName 數據庫名稱
*/
private static void createFaceDbRequest(String dbName)
{
CreateFaceDbRequest createFaceDbRequest = new CreateFaceDbRequest();
createFaceDbRequest.setName(dbName);
try {
CreateFaceDbResponse response = client.getAcsResponse(createFaceDbRequest);
System.out.println("創建人臉數據庫:");
System.out.println(new Gson().toJson(response));
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
}
}
/**
* 查看數據庫列表
*/
private static void listFaceDbs()
{
ListFaceDbsRequest listFaceDbsRequest = new ListFaceDbsRequest();
try {
ListFaceDbsResponse response = client.getAcsResponse(listFaceDbsRequest);
System.out.println("查看數據庫列表: ");
System.out.println(new Gson().toJson(response));
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
}
}
/**
* 添加人臉樣本
* @param dbName 數據庫名稱
* @param entityId 實體ID
*/
private static void addFaceEntity(String dbName, String entityId)
{
AddFaceEntityRequest addFaceEntityRequest = new AddFaceEntityRequest();
addFaceEntityRequest.setDbName(dbName);
addFaceEntityRequest.setEntityId(entityId);
try{
AddFaceEntityResponse addFaceEntityResponse = client.getAcsResponse(addFaceEntityRequest);
System.out.println("添加人臉樣本:");
System.out.println(new Gson().toJson(addFaceEntityResponse));
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
}
}
/**
* 查詢人臉樣本
* @param dbName 數據庫名稱
* @param entityId 實體ID
*/
private static void getFaceEntity(String dbName, String entityId)
{
GetFaceEntityRequest getFaceEntityRequest = new GetFaceEntityRequest();
getFaceEntityRequest.setDbName(dbName);
getFaceEntityRequest.setEntityId(entityId);
try{
GetFaceEntityResponse getFaceEntityResponse = client.getAcsResponse(getFaceEntityRequest);
System.out.println("查詢人臉樣本:");
System.out.println(new Gson().toJson(getFaceEntityResponse));
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
}
}
/**
* 查詢人臉樣本列表
* @param dbName 數據庫名稱
* @param Offset 起始記錄
*/
private static void listFaceEntities(String dbName, Integer Offset)
{
ListFaceEntitiesRequest listFaceEntitiesRequest = new ListFaceEntitiesRequest();
listFaceEntitiesRequest.setDbName(dbName);
listFaceEntitiesRequest.setOffset(Offset);
try{
ListFaceEntitiesResponse listFaceEntitiesResponse = client.getAcsResponse(listFaceEntitiesRequest);
System.out.println("查詢人臉樣本列表:");
System.out.println(new Gson().toJson(listFaceEntitiesResponse));
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
}
}
/**
* 更新人臉樣本
* @param dbName 數據庫名稱
* @param entityId 實體ID
* @param labels 標籤名稱
*/
private static void updateFaceEntity(String dbName, String entityId, String labels)
{
UpdateFaceEntityRequest updateFaceEntityRequest = new UpdateFaceEntityRequest();
updateFaceEntityRequest.setDbName(dbName);
updateFaceEntityRequest.setEntityId(entityId);
updateFaceEntityRequest.setLabels(labels);
try{
UpdateFaceEntityResponse updateFaceEntityResponse = client.getAcsResponse(updateFaceEntityRequest);
System.out.println("更新人臉樣本:");
System.out.println(new Gson().toJson(updateFaceEntityResponse));
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
}
}
/**
* 刪除人臉樣本
* @param dbName 數據庫名稱
* @param entityId 實體ID
*/
private static void deleteFaceEntity(String dbName, String entityId)
{
DeleteFaceEntityRequest deleteFaceEntityRequest = new DeleteFaceEntityRequest();
deleteFaceEntityRequest.setDbName(dbName);
deleteFaceEntityRequest.setEntityId(entityId);
try{
DeleteFaceEntityResponse deleteFaceEntityResponse = client.getAcsResponse(deleteFaceEntityRequest);
System.out.println("刪除人臉樣本:");
System.out.println(new Gson().toJson(deleteFaceEntityResponse));
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
}
}
/**
* 添加人臉數據
* @param dbName 數據庫名稱
* @param entityId 實體ID
* @param imageUrl 人臉圖片地址,必須是同Region的OSS的圖片地址。人臉必須是正面無遮擋單人人臉。
*/
private static void addFace(String dbName, String entityId, String imageUrl)
{
AddFaceRequest addFaceRequest = new AddFaceRequest();
addFaceRequest.setDbName(dbName);
addFaceRequest.setEntityId(entityId);
addFaceRequest.setImageUrl(imageUrl);
try{
AddFaceResponse addFaceResponse = client.getAcsResponse(addFaceRequest);
System.out.println("添加人臉數據:");
System.out.println(new Gson().toJson(addFaceResponse));
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
}
}
/**
* 搜索人臉
* @param dbName 數據庫名稱
* @param imageUrl 圖片URL地址。必須是同Region的OSS地址。
*/
private static void searchFace(String dbName, String imageUrl, Integer limit)
{
SearchFaceRequest searchFaceRequest = new SearchFaceRequest();
searchFaceRequest.setDbName(dbName);
searchFaceRequest.setImageUrl(imageUrl);
searchFaceRequest.setLimit(limit);
try{
SearchFaceResponse searchFaceResponse = client.getAcsResponse(searchFaceRequest);
System.out.println("搜索人臉:");
System.out.println(new Gson().toJson(searchFaceResponse));
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
}
}
/**
* 刪除數據庫
* @param dbName 數據庫名稱
*/
private static void deleteFace(String dbName, String faceId)
{
DeleteFaceRequest deleteFaceRequest = new DeleteFaceRequest();
deleteFaceRequest.setDbName(dbName);
deleteFaceRequest.setFaceId(faceId);
try{
DeleteFaceResponse deleteFaceResponse = client.getAcsResponse(deleteFaceRequest);
System.out.println("刪除人臉:");
System.out.println(new Gson().toJson(deleteFaceResponse));
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
}
}
/**
* 刪除數據庫
* @param dbName 數據庫名稱
*/
private static void deleteFaceDb(String dbName)
{
DeleteFaceDbRequest deleteFaceDbRequest = new DeleteFaceDbRequest();
deleteFaceDbRequest.setName(dbName);
try{
DeleteFaceDbResponse deleteFaceDbResponse = client.getAcsResponse(deleteFaceDbRequest);
System.out.println("刪除數據庫:");
System.out.println(new Gson().toJson(deleteFaceDbResponse));
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
}
}
/**
* 人臉對比
* @param imageURLA 待對比圖片URL地址A
* @param imageURLB 待對比圖片URL地址B
*/
private static void compareFace(String imageURLA, String imageURLB)
{
CompareFaceRequest compareFaceRequest = new CompareFaceRequest();
compareFaceRequest.setImageURLA(imageURLA);
compareFaceRequest.setImageURLB(imageURLB);
try{
CompareFaceResponse compareFaceResponse = client.getAcsResponse(compareFaceRequest);
System.out.println("人臉對比:");
System.out.println(new Gson().toJson(compareFaceResponse));
} catch (ServerException e) {
e.printStackTrace();
} catch (ClientException e) {
System.out.println("ErrCode:" + e.getErrCode());
System.out.println("ErrMsg:" + e.getErrMsg());
System.out.println("RequestId:" + e.getRequestId());
}
}
}
> 以上內容轉載自taro_秋刀魚
  <span style="font-size:16px">為了更好的幫助中小企業和獨立開發者快速對接視覺AI算法,[阿里雲視覺智能開放平臺(vision.aliyun.com)](https://vision.aliyun.com/)免費開放平臺上現有的100餘種視覺AI算法服務的使用權限,沒有中間商賺差價,服務調用不收取任何費用!感興趣的同學可點擊下方鏈接訪問我們的官網進行體驗,也可搜索釘釘群23109592或是掃描文章結尾的釘群二維碼,進群和我們溝通!
  <span style="font-size:16px">官網地址:https://vision.aliyun.com/
<div style="text-align: center"><img width="400" height="500" src="https://ucc.alicdn.com/pic/developer-ecology/d0157244b0e2427f9f91e38b758ed6dd.jpg" /></div>