眼神ABIS平台API:虹膜1:1比对
传入两张含有虹膜特征的图像数据,服务对两张虹膜图像中的生物特征进行比对,返回比对分数,分数越高表示越相似。
·
功能描述
传入两张含有虹膜特征的图像数据,服务对两张虹膜图像中的生物特征进行比对,返回比对分数,分数越高表示越相似。
接口调用
本节将对虹膜信息比对服务进行阐述。由于实际所使用到的编程语言较多,此文档不会一一涉及。本章中将只就 Java 语言如何调用识别服务接口进行代码示例讲解。其它语言如何进行调用,用户可参照接口调用例程。
- 请求方法
http://${IP}:${Port}/v1/comparison/image?code=PERSON_IRIS_MATCH
- Header参数
Key | Value | 请求或响应 |
---|---|---|
Content-type | application/json | 存在于请求和响应中,不可为空 |
Abis-Request-Sequence | 请求流水号 | 存在于请求和响应中,请求中可以为空,如为空则由服务自动生成一个流水号 |
Authorization | 接口鉴权标识 | 若使用ABIS云平台的接口API,则需要去 ABIS门户控制台-基本资料-鉴权密钥 中获取 立即获取 |
- Body参数
Json Path | 类型 | 必填 | 含义 | 注意事项 |
---|---|---|---|---|
$.left.content | String | 是 | 图像1的Base64编码内容 | |
$.right.content | String | 是 | 图像2的Base64编码内容 |
对应示例:
{
"left": {
"content": "SU1BR0U6IEhlbGxvIFdvcmxkCg=="
},
"right": {
"content": "SU1BR0U6IEhlbGxvIFdvcmxkCg=="
}
}
- 返回参数
Json Path | 类型 | 含义 | 注意事项 |
---|---|---|---|
response.status | String | 状态码 | 2000:正常,非2000请查看返回message |
score | double | 比对分数 | 数值范围0-100 |
对应示例:
{
"reply": {
"score": 100
},
"response": {
"status": "2000",
"content": "OK"
}
}
错误码
错误码 | 说明 | 解决方案 |
---|---|---|
2000 | 成功 | |
-2001 | 未知的异常 | 请查看返回的content中内容 |
-2020 | 传入图片内容为空 | 请确定是否传入了图片 |
-2021 | 加载图片失败 | 传入的不是有效图片或不支持的图片格式,支持的图片格式包括:BMP/JPG/TIF/PNG/WSQ/JP2/JPC/J2K/TFF |
-2207 | 传入图片总量至少2个 | |
-2209 | 提取特征失败 | 请确保传入图片比较清晰,并且是灰度图 |
-2213 | 传入的数据集合中第i是图片,但是图片内容为空 | 请确定是否传入了图片 |
-2214 | 传入的数据集合中第i是图片,但是图片加载失败 | 传入的不是有效图片或不支持的图片格式,支持的图片格式包括:BMP/JPG/TIF/PNG/WSQ/JP2/JPC/J2K/TFF |
注意事项
1)支持的图片格式
BMP/JPG/TIF/PNG/WSQ/JP2/JPC/J2K/TFF
2)服务调用约束
在调用图像比对服务前,请确保客户端程序或设备与比对服务器网络连接畅通;传入图像数据要求为Base64编码;
3)若接口涉及到数据需要进行base64编码,请引用commons-codec-1.13.jar对图片进行base64编码:base64.encodeBase64String(byteData)。
示例代码(Java)
package cn.eyecool;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.net.MalformedURLException;
import javax.imageio.ImageIO;
import org.apache.commons.codec.binary.Base64;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import com.alibaba.fastjson.JSON;
import lombok.AllArgsConstructor;
import lombok.Data;
/**
* 虹膜1:1原子能力调用Demo
*
* @author mawj
* @date 2023/03/09
*/
public class MatchIrisCompareDemo {
// 连接超时时间
private static int connTimeOut = 60 * 1000;
// 请求原子能力的URL(实际开发调试中,可以换成自己部署的abis服务)
private static final String url = "https://www.abis.cn/v1/comparison/image";
// 待检测图片的本地路径
private static String imgPath = System.getProperty("user.dir") + File.separator + "image";
public static void main(String[] args) {
// 读取本地图片
File leftImageFile = new File(imgPath + File.separator + "iris1.bmp");
File rightImageFile = new File(imgPath + File.separator + "iris2.bmp");
// 组装数据结构
MatchIrisCompareDemo demo = new MatchIrisCompareDemo();
MatchParam param = demo.new MatchParam();
param.setLeft(demo.new MatchContent(encodeImgageToBase64(leftImageFile)));
param.setRight(demo.new MatchContent(encodeImgageToBase64(rightImageFile)));
// 发送Http请求
String response = doPostJson(url, JSON.toJSONString(param));
System.out.println("响应数据:");
System.out.println(response);
}
/**
* 比对参数
*
* @date 2022/05/25
*/
@Data
class MatchParam {
/**
* 图片1信息
*/
private MatchContent left;
/**
* 图片2信息
*/
private MatchContent right;
}
/**
* 比对内容信息
*
* @date 2022/05/25
*/
@Data
@AllArgsConstructor
class MatchContent {
/**
* 图像Base64
*/
private String content;
}
/**
* File文件转base64格式
*
* @param imageFile
* @return string
*/
public static String encodeImgageToBase64(File imageFile) {
ByteArrayOutputStream outputStream = null;
try {
BufferedImage bufferedImage = ImageIO.read(imageFile);
outputStream = new ByteArrayOutputStream();
ImageIO.write(bufferedImage, "jpg", outputStream);
} catch (MalformedURLException e1) {
e1.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// 返回Base64编码过的字节数组字符串
return Base64.encodeBase64String(outputStream.toByteArray());
}
/**
* PostJson请求
*
* @param url
* @param json
* @return
*/
public static String doPostJson(String url, String json) {
// 创建Httpclient对象
CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse response = null;
String resultString = "";
// TODO 此处token的值需要修改,从网页端获取,格式为:Bearer token
String token = "Bearer eyJhbGciOiJIUzUxMiJ9.eyJsb2dpbl91c2VyX2tleSI6ImYxYzU4MGZhLTUyZjctNDE4OS04MGE4LWQ4ZjYyYWFiMmEwMCJ9.ZhWKCU0Xr7O8-cTv34FkkZUrb28WoBzPmOAnbvIrjB65kW6DUso-KB8WgAagSvYHF5McWS8Bl2_NsrikYFDxpw";
try {
// 创建Http Post请求
HttpPost httpPost = new HttpPost(url);
httpPost.setHeader("Authorization",token);
/** 设置超时时间 */
RequestConfig requestConfig = RequestConfig.custom().setConnectionRequestTimeout(connTimeOut)
.setSocketTimeout(connTimeOut).setConnectTimeout(connTimeOut).build();
// 创建请求内容
StringEntity entity = new StringEntity(json, ContentType.APPLICATION_JSON);
httpPost.setEntity(entity);
httpPost.setConfig(requestConfig);
// 执行http请求
response = httpClient.execute(httpPost);
resultString = EntityUtils.toString(response.getEntity(), "utf-8");
} catch (Exception e) {
e.printStackTrace();
} finally {
finallyClose(httpClient, response);
}
return resultString;
}
/**
* 关闭和释放
*
* @param httpClient
* @param response
*/
private static void finallyClose(CloseableHttpClient httpClient, CloseableHttpResponse response) {
try {
if (response != null) {
response.close();
}
httpClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
更多推荐
已为社区贡献24条内容
所有评论(0)