| 版本 | 变更日期 | 变更内容 |
|---|---|---|
| 1.0.0 | 2026-03-02 | 首稿 |
| 1.0.1 | 2026-03-06 | 新增环境信息、调整SDK结构、新增SDK版本信息 |
| 1.2.0 | 2026-03-13 | 升级SDK,新增签名时间信息,以解决客户端与服务端时间不一致的问题 |
| 2.0.0 | 2026-03-20 | 区分公有服务平台跟私有服务平台,升级图片万物识别V2接口 |
| 2.0.1 | 2026-03-25 | 变更公有域名ai-vision.hisp.cloud 为 ai-vision.livedetect.cn |
主要用于AI视觉管理平台开放接口说明,通过本文档可以明确该平台对外开放的所有接口以及对接规范
本节涉及到的规则、对象等是所有接口共同的属性跟行为规范
| Header Name | Header Value | 是否必填 | Header Value 说明 |
|---|---|---|---|
| Authorization | Bearer $JWT_TOKEN | 是 | Bearer + 空格 + JWT_TOKEN |
| Method | POST | 是 | 请求方式,无特殊情况所有接口都为POST,特殊情况会在接口详细信息中进行说明 |
| Content-Type | application/json | 是 | 请求体类型,无特殊情况所有接口都为application/json,特殊情况会在接口详细信息中进行说明 |
| client-request-id | $UUID | 否 | 标识客户端请求的唯一id |
鉴权指的是Header中的Authorization字段,value 遵循 Http Bearer Token 协议规范,是一个JWT_TOKEN,JWT_TOKEN 由点分割为三个部分,其中Header 部分的kid 为AccessKey,AccessKey 与 SecretKey 由平台统一颁发,iat 为签发时间,exp 为 过期时间,JWT_TOKEN 为标准JWT,需要拥有JWT基础知识后再根据以下信息生成
{
"kid": "0B553EB26124479DA1FB7CB26BBC1E8F",
"alg": "HS256",
"typ": "JWT"
}
{
"iat": 1772432854,
"exp": 1803968854
}
Signature = HMACSHA256(
Base64UrlEncode(header) + "." + Base64UrlEncode(payload),
secret
)
{
"code": 20000,
"success": true,
"clientRequestId":"332996B32A2746E99303DAD731592551",
"serverResponseId": "30817637A95B4D00B1A00E0E4B3C1026",
"name": "Ok",
"message": "success",
"elapsedTime": 492,
"data": null
}
| 字段 | 类型 | 备注 |
|---|---|---|
code |
Integer | 执行结果编码,20000 表示执行成功 |
success |
Boolean | 执行结果,true表示执行成功 |
clientRequestId |
String | 客户端请求唯一编号,由客户端传入 |
serverResponseId |
String | 服务端请求唯一编,由服务端生成号 |
name |
String | 执行结果名称,Ok表示执行成功 |
message |
String | 执行结果消息描述信息 |
elapsedTime |
Long | 服务端执行时长 |
data |
Object | 接口返回的数据,数据类型根据与接口的约定类型一致,没有则不返回 |
鉴于鉴权的复杂性,建议客户端集成SDK以快速对接服务端接口。目前仅提供Java语言的SDK, 以下为内部依赖坐标
<dependency>
<groupId>com.hisign</groupId>
<artifactId>hisign-commons-api-sdk</artifactId>
<version>${VERSION}</version>
</dependency>
<dependency>
<groupId>com.hisign</groupId>
<artifactId>ai-vision-platform-sdk-openapi-model</artifactId>
<version>${VERSION}</version>
</dependency>
<dependency>
<groupId>com.hisign</groupId>
<artifactId>ai-vision-platform-sdk-openapi</artifactId>
<version>${VERSION}</version>
</dependency>
| hisign-commons-api-sdk | ai-vision-platform-sdk-openapi-model | ai-vision-platform-sdk-openapi | 说明 |
|---|---|---|---|
| 1.1.4 | 1.1.2 | 1.1.2 | 区分隐私服务与管理服务、新增万物识别V2 |
| 平台类别 | 平台描述 | 平台协议 | 平台域名 | 平台端口 | SDK类名 | 接口名称 | 接口描述 |
|---|---|---|---|---|---|---|---|
| 公有平台 | 海鑫本部平台 | https | ai-vision.livedetect.cn | 443 | com.hisign...ManageApi | 管理接口 | 访问海鑫本部的管理服务,该服务提供租户访问个人管理相关的信息 |
| 公有平台 | 海鑫本部平台 | https | ai-vision.livedetect.cn | 443 | com.hisign...PrivacyApi | 隐私接口 | 访问海鑫本部的隐私服务,该服务正常一般部署在客户本地,公有平台提供公共的隐私调用,方便快速集成与测试 |
| 私有平台 | 私有部署平台 | https | http | - | 9527 | 9529 | com.hisign...PrivacyApi | 隐私接口 | 访问私有部署的隐私服务,该服务部署在客户本地,做私有化部署调用 |
构建管理服务接口
/**
* 协议基本参数,以下为测试数据,请根据实际情况变更
*/
String protocol = "https";// 协议
String domain = "ai-vision.livedetect.cn";// 域名
int port = 443;// 端口
String accessKey = "0B553EBxx124479DAAFB7CB26Bxx1E8F";//
String secretKey = "0C4B5E2xx2B74C2BAA987977A8xx2E9B";//
// 默认客户端与服务器端的时间是同步的,如果不同步则需要设置偏移量
Duration timeOffsetFromServer = null;
// 假如客户端时间-标准时间=20s,那么需要偏移-20s
// Duration timeOffsetFromServer = Duration.ofSeconds(-20)
// 假如客户端时间-标准时间=-20s,那么需要偏移20s
// Duration timeOffsetFromServer = Duration.ofSeconds(20)
Duration tokenValidityDuration = Duration.ofSeconds(10);// 默认请求的Token过期时长
Boolean disableSslValidation = false;// https协议 是否禁用ssl验证
Duration httpTimeoutDuration = Duration.ofSeconds(10);// 协议请求、连接、读取、回写默认时长
String clientRequestId = LangUtils.getUppercaseUUID();// 客户端请求ID,可以自定义请求ID
/**
* 构建API对象, 该对象建议全局单例, 如果调用不同的接口有不同的超时或其他的参数标准,可全局实例化多个
*/
ManageApi manageApi = new ManageApiImpl(new OpenVisionTokenKeyApi(protocol, domain, port,
new HttpClientParam(disableSslValidation, httpTimeoutDuration, httpTimeoutDuration, httpTimeoutDuration,
httpTimeoutDuration),
new TokenKey(accessKey, secretKey, tokenValidityDuration, timeOffsetFromServer)));
构建隐私服务接口
/**
* 协议基本参数,以下为测试数据,请根据实际情况变更
*/
String protocol = "http";// 协议
String domain = "127.0.0.1";// 域名
int port = 443;// 端口
String accessKey = "0BxxxEB26124479DA1F17CB26BBCxxxF";//
String secretKey = "0CxxxE2482B74C2BA4917977A871xxxB";//
// 默认客户端与服务器端的时间是同步的,如果不同步则需要设置偏移量
Duration timeOffsetFromServer = null;
// 假如客户端时间-标准时间=20s,那么需要偏移-20s
// Duration timeOffsetFromServer = Duration.ofSeconds(-20)
// 假如客户端时间-标准时间=-20s,那么需要偏移20s
// Duration timeOffsetFromServer = Duration.ofSeconds(20)
Duration tokenValidityDuration = Duration.ofSeconds(10);// 默认请求的Token过期时长
Boolean disableSslValidation = false;// https协议 是否禁用ssl验证
Duration httpTimeoutDuration = Duration.ofSeconds(10);// 协议请求、连接、读取、回写默认时长
String clientRequestId = LangUtils.getUppercaseUUID();// 客户端请求ID
/**
* 构建API对象, 该对象建议全局单例, 如果调用不同的接口有不同的超时或其他的参数标准,可全局实例化多个
*/
PrivacyApi privacyApi = new PrivacyApiImpl(new OpenVisionTokenKeyApi(protocol, domain, port,
new HttpClientParam(disableSslValidation, httpTimeoutDuration, httpTimeoutDuration, httpTimeoutDuration,
httpTimeoutDuration),
new TokenKey(accessKey, secretKey, tokenValidityDuration, timeOffsetFromServer)));
| 标签名称 |
|---|
| person |
| vehicle |
| pet |
| package |
| 字段 | 类型 | 是否必填 | 备注 |
|---|---|---|---|
hourOffset |
Integer | 是 | 小时偏移量,取值范围 0-23 |
minuteOffset |
Integer | 是 | 分钟偏移量,取值范围 0-59 |
timeZone |
enum | 是 | 时区,东时区取值:EASTERN_ZONE,西时区取值:WESTERN_ZONE |
| 字段 | 类型 | 是否必填 | 备注 |
|---|---|---|---|
id |
String | 是 | 唯一编号,长度小于等于32个字符 |
type |
enum | 是 | 类型,取值范围:BASE64_STRING、OBJECT_URL |
value |
String | 是 | 附件值,根据type类型设置相应的值 |
| 字段 | 类型 | 备注 |
|---|---|---|
value |
String | 描述的值 |
tags |
List<String> | 提取的标签列表,详见: 2.5.1 当前支持的标签列表 |
| 字段 | 类型 | 备注 |
|---|---|---|
value |
String | 总描述的值 |
scene |
String | 场景描述 |
tags |
List<Tag> | 提取的标签列名称表,详见:2.5.6 Tag对象 |
| 字段 | 类型 | 备注 |
|---|---|---|
describe |
String | 描述的值 |
name |
String | 提取的标签名称,详见: 2.5.1 当前支持的标签列表 |
/vision-privacy-api/statistics/get/daily-summary
| Header Name | Header Value | 是否必填 | Header Value 说明 |
|---|---|---|---|
| Authorization | Bearer $JWT_TOKEN | 是 | Bearer + 空格 + JWT_TOKEN |
| Method | POST | 是 | 请求方式 |
| Content-Type | application/json | 是 | 请求体类型 |
| client-request-id | $UUID | 否 | 标识客户端请求的唯一id |
请求样例
{
"deviceId":"1",
"timestampOfStatisticsDate":1772432854000
}
字段描述
| 字段 | 类型 | 是否必填 | 备注 |
|---|---|---|---|
deviceId |
String | 是 | 设备ID |
timestampOfStatisticsDate |
Long | 是 | 当天的时间戳的开始毫秒 0时0分0秒 |
如果该响应体返回值为null或者没有返回,那表示此数据不存在或者还没有完成日结统计
响应样例
{
"code": 20000,
"data": {
"animalActivitySummary": "{\"person\": \"今天家中充满了温馨的日常互动:有人提着物品归家时小心翼翼,有人手持包裹似在准备惊喜,深夜时分的身影模糊却温暖,仿佛在默默为家人整理生活点滴。这些平凡的瞬间,串联成了家的幸福故事。\",\"pet\":\"猫咪在窝里安睡、静坐凝视前方,更在纸箱上欢快跳跃玩耍,展现着它活泼可爱的天性。,狗狗从早到晚都充满活力:嗅闻地面、在门口徘徊张望、趴着休息、来回走动,甚至玩起了拖拽行李箱的游戏。它时而专注整理物品,时而好奇地探头张望,是家中最活泼的成员。\"}",
"sceneChangeSummary": "傍晚时分(约18点27分),有人从走廊走向电梯,仿佛结束一天的忙碌回到温暖的家。傍晚至晚间时段(19点至21点间),家人陆续从门内走出,或向右移动、或提着物品归家,为家中带来生机与欢笑。深夜21点41分,有人提着包轻声走过走廊,像是在守护家人安眠的静谧时刻。",
"originalTimeline": "=== 2026-02-27 ===\n18:27:37: 人正从走廊走向电梯。\n19:05:08: 人从门内走出,向右移动。\n19:17:43: 人从门内走出\n19:44:07: 人从门内走出,向右移动。\n20:38:14: 人从门后走出,手持物品。\n21:11:38: 人从门内走出,手提物品。\n21:31:13: 人从门内走出,身影模糊。\n21:41:25: 人提着包走过走廊。"
},
"success": true,
"clientRequestId":"332996B32A2746E99303DAD731592551",
"serverResponseId": "7A2996B32A2746E99303DAD731592553",
"name": "Ok",
"message": "success",
"elapsedTime": 280
}
响应对象字段描述
| 字段 | 类型 | 备注 |
|---|---|---|
animalActivitySummary |
String | 动物活动摘要, 是一个JSON,主要包含两个字段person、pet |
sceneChangeSummary |
String | 场景变化摘要 |
originalTimeline |
String | 原始时间线 |
/**
* 构建获取每日摘要请求参数,以下为测试数据,请根据实际情况变更
*/
GetDailySummaryRequest dailySummaryRequest = new GetDailySummaryRequest();
dailySummaryRequest.setDeviceId("001");// 设备id
dailySummaryRequest.setTimestampOfStatisticsDate(1772640000000L);// 当天的时间戳的开始毫秒 0时0分0秒
/**
* 请求并返回消息
*/
Request<GetDailySummaryRequest> request = new Request<GetDailySummaryRequest>(clientRequestId,
dailySummaryRequest);
Response<GetDailySummaryResponse> response = api.getDailySummary(request);
// 响应体
System.out.println(JSON.toJSONString(response));
// 如果该响应体返回值为null,表示发生错误或者还没有完成日结统计
System.out.println(JSON.toJSONString(response.getData()));
/vision-privacy-api/llm/image/rec-everything/v2
| Header Name | Header Value | 是否必填 | Header Value 说明 |
|---|---|---|---|
| Authorization | Bearer $JWT_TOKEN | 是 | Bearer + 空格 + JWT_TOKEN |
| Method | POST | 是 | 请求方式 |
| Content-Type | application/json | 是 | 请求体类型 |
| client-request-id | $UUID | 否 | 标识客户端请求的唯一id |
请求样例
{
"customPrompt": null,
"enableSystemPrompt": true,
"eventTimeZone": {
"hourOffset": 8,
"minuteOffset": 0,
"timeZone": "EASTERN_ZONE"
},
"eventTimestampStart": 1774246676515,
"eventTimestampEnd": 1774246676515,
"fromDeviceId": "001",
"m3u8UrlAttachments": "https://hisign.com/index.m3u8",
"responseLanguage": "zh",
"standardAttachments": [
{
"id": "0CABCE2482B74C2BA4917977A871CDAB",
"type": "OBJECT_URL",
"value": "https://hisign.com/abc.jpg"
}
],
"systemPromptResponseType": "DETAILED_DESCRIBE"
}
请求对象字段描述
| 字段 | 类型 | 是否必填 | 备注 |
|---|---|---|---|
customPrompt |
String | 否 | 自定义提示词,当enableSystemPrompt=false时必填,否则非必填,如果填写了此字段,响应字段中customDescribe才会有值 |
enableSystemPrompt |
Boolean | 是 | 是否启用系统提示词 |
eventTimeZone |
UTCOffset | 是 | 附件事件发生的时区,详见:2.5.2 UTCOffset对象 |
eventTimestampStart |
Long | 是 | 附件事件发生的开始时间戳(毫秒) |
eventTimestampEnd |
Long | 是 | 附件事件发生的结束时间戳(毫秒) |
fromDeviceId |
String | 是 | 来源设备id,长度小于等于32个字符 |
m3u8UrlAttachments |
String | 否 | m3u8 格式 URL,m3u8UrlAttachments 与 standardAttachments任选其中一个必传,最多支持10个片段 |
responseLanguage |
enum | 是 | 响应语言 |
standardAttachments |
List<Attachment> | 否 | 附件列表,m3u8UrlAttachments 与 standardAttachments任选其中一个必传,最多支持10个片段,详见:2.5.3 Attachment对象 |
systemPromptResponseType |
enum | 否 | 系统提示词响应类型,enableSystemPrompt=false,必须为null,否则必填, 取值范围:SIMPLE_DESCRIBE、DETAILED_DESCRIBE |
响应样例
{
"code": "20000",
"data": {
"customDescribe": "一名女性在客厅里看电视很高兴,两个孩子在客厅活动。",
"detailedDescribe": {
"scene": "一个大客厅",
"tags": [
{
"describe": "一名女性在看电视,两个在做游戏",
"name": "person"
}
],
"value": "一名女性和两个孩子在客厅活动。"
},
"simpleDescribe": {
"tags": [
"person"
],
"value": "一名女性和两个孩子在客厅活动。"
}
},
"elapsedTime": 100,
"message": "success",
"name": "Ok",
"clientRequestId": "332996B32A2746E99303DAD731592551",
"serverResponseId": "7A2996B32A2746E99303DAD731592553",
"success": true
}
响应对象字段描述
| 字段 | 类型 | 备注 |
|---|---|---|
customDescribe |
String | 自定义提示词的响应描述,当设置自定义提示词时才返回该字段 |
simpleDescribe |
SimpleDescribe | 系统提示词的简单描述,当enableSystemPrompt=true, systemPromptResponseType=SIMPLE_DESCRIBE 时,则返回该字段,详见:2.5.4 SimpleDescribe对象 |
detailedDescribe |
DetailedDescribe | 系统提示词的详细描述,当enableSystemPrompt=true, systemPromptResponseType=DETAILED_DESCRIBE 时,则返回该字段,详见:2.5.5 DetailedDescribe对象 |
/**
* 构建万物识别请求参数
*/
RecEverythingRequest recEverythingRequest = new RecEverythingRequest();
// 自定义客户端请求ID
String clientRequestId = LangUtils.getUppercaseUUID();
// 来源设备id,必填,长度小于等于32个字符
recEverythingRequest.setFromDeviceId("001");
// 标准附件列表
recEverythingRequest
.setStandardAttachments(Stream.of(new RecEverythingAttachment("0CABCE2482B74C2BA4917977A871CDAB",
AttachmentType.OBJECT_URL, "https://hisign.com/abc.jpg")).collect(Collectors.toList()));
// m3u8附件列表
recEverythingRequest.setM3u8UrlAttachments("https://hisign.com/index.m3u8");
// 自定义提示词
recEverythingRequest.setCustomPrompt(null);
// 启用系统提示词
recEverythingRequest.setEnableSystemPrompt(true);
// 附件事件发生时间:注意实际情况不是当前时间
recEverythingRequest.setEventTimestampStart(System.currentTimeMillis());
recEverythingRequest.setEventTimestampEnd(System.currentTimeMillis());
// 附件事件发生时区:东八区
recEverythingRequest.setEventTimeZone(new UTCOffset(TimeZone.EASTERN_ZONE, 8, 0));
// 响应语言
recEverythingRequest.setResponseLanguage(Language.zh);
// 系统提示词响应的类型
recEverythingRequest.setSystemPromptResponseType(RecEverythingReponseType.DETAILED_DESCRIBE);
/**
* 请求并返回消息
*/
Request<RecEverythingRequest> request = new Request<>(clientRequestId, recEverythingRequest);
Response<RecEverythingResponse> response = privacyApi.imageRecEverythingV2(request);
// 响应体
System.out.println(JSON.toJSONString(response));
// 如果该响应体返回值为null,表示发生错误,或无数据返回
System.out.println(JSON.toJSONString(response.getData()));
/vision-privacy-api/llm/video/rec-everything/v2
| Header Name | Header Value | 是否必填 | Header Value 说明 |
|---|---|---|---|
| Authorization | Bearer $JWT_TOKEN | 是 | Bearer + 空格 + JWT_TOKEN |
| Method | POST | 是 | 请求方式 |
| Content-Type | application/json | 是 | 请求体类型 |
| client-request-id | $UUID | 否 | 标识客户端请求的唯一id |
请求样例
{
"customPrompt": null,
"enableSystemPrompt": true,
"eventTimeZone": {
"hourOffset": 8,
"minuteOffset": 0,
"timeZone": "EASTERN_ZONE"
},
"eventTimestampStart": 1774246676515,
"eventTimestampEnd": 1774246676515,
"fromDeviceId": "001",
"m3u8UrlAttachments": "https://hisign.com/index.m3u8",
"responseLanguage": "zh",
"standardAttachments": [
{
"id": "0CABCE2482B74C2BA4917977A871CDAB",
"type": "OBJECT_URL",
"value": "https://hisign.com/abc.jpg"
}
],
"systemPromptResponseType": "DETAILED_DESCRIBE"
}
请求对象字段描述
| 字段 | 类型 | 是否必填 | 备注 |
|---|---|---|---|
customPrompt |
String | 否 | 自定义提示词,当enableSystemPrompt=false时必填,否则非必填,如果填写了此字段,响应字段中customDescribe才会有值 |
enableSystemPrompt |
Boolean | 是 | 是否启用系统提示词 |
eventTimeZone |
UTCOffset | 是 | 附件事件发生的时区,详见:2.5.2 UTCOffset对象 |
eventTimestampStart |
Long | 是 | 附件事件发生的开始时间戳(毫秒) |
eventTimestampEnd |
Long | 是 | 附件事件发生的结束时间戳(毫秒) |
fromDeviceId |
String | 是 | 来源设备id,长度小于等于32个字符 |
m3u8UrlAttachments |
String | 否 | m3u8 格式 URL,m3u8UrlAttachments 与 standardAttachments任选其中一个必传,最多支持10个片段 |
responseLanguage |
enum | 是 | 响应语言 |
standardAttachments |
List<Attachment> | 否 | 附件列表,m3u8UrlAttachments 与 standardAttachments任选其中一个必传,最多支持10个片段,详见:2.5.3 Attachment对象 |
systemPromptResponseType |
enum | 否 | 系统提示词响应类型,enableSystemPrompt=false,必须为null,否则必填, 取值范围:SIMPLE_DESCRIBE、DETAILED_DESCRIBE |
响应样例
{
"code": "20000",
"data": {
"customDescribe": "一名女性在客厅里看电视很高兴,两个孩子在客厅活动。",
"detailedDescribe": {
"scene": "一个大客厅",
"tags": [
{
"describe": "一名女性在看电视,两个在做游戏",
"name": "person"
}
],
"value": "一名女性和两个孩子在客厅活动。"
},
"simpleDescribe": {
"tags": [
"person"
],
"value": "一名女性和两个孩子在客厅活动。"
}
},
"elapsedTime": 100,
"message": "success",
"name": "Ok",
"clientRequestId": "332996B32A2746E99303DAD731592551",
"serverResponseId": "7A2996B32A2746E99303DAD731592553",
"success": true
}
响应对象字段描述
| 字段 | 类型 | 备注 |
|---|---|---|
customDescribe |
String | 自定义提示词的响应描述,当设置自定义提示词时才返回该字段 |
simpleDescribe |
SimpleDescribe | 系统提示词的简单描述,当enableSystemPrompt=true, systemPromptResponseType=SIMPLE_DESCRIBE 时,则返回该字段,详见:2.5.4 SimpleDescribe对象 |
detailedDescribe |
DetailedDescribe | 系统提示词的详细描述,当enableSystemPrompt=true, systemPromptResponseType=DETAILED_DESCRIBE 时,则返回该字段,详见:2.5.5 DetailedDescribe对象 |
/**
* 构建万物识别请求参数
*/
RecEverythingRequest recEverythingRequest = new RecEverythingRequest();
// 自定义客户端请求ID
String clientRequestId = LangUtils.getUppercaseUUID();
// 来源设备id,必填,长度小于等于32个字符
recEverythingRequest.setFromDeviceId("001");
// 标准附件列表
recEverythingRequest
.setStandardAttachments(Stream.of(new RecEverythingAttachment("0CABCE2482B74C2BA4917977A871CDAB",
AttachmentType.OBJECT_URL, "https://hisign.com/abc.jpg")).collect(Collectors.toList()));
// m3u8附件列表
recEverythingRequest.setM3u8UrlAttachments("https://hisign.com/index.m3u8");
// 自定义提示词
recEverythingRequest.setCustomPrompt(null);
// 启用系统提示词
recEverythingRequest.setEnableSystemPrompt(true);
// 附件事件发生时间:注意实际情况不是当前时间
recEverythingRequest.setEventTimestampStart(System.currentTimeMillis());
recEverythingRequest.setEventTimestampEnd(System.currentTimeMillis());
// 附件事件发生时区:东八区
recEverythingRequest.setEventTimeZone(new UTCOffset(TimeZone.EASTERN_ZONE, 8, 0));
// 响应语言
recEverythingRequest.setResponseLanguage(Language.zh);
// 系统提示词响应的类型
recEverythingRequest.setSystemPromptResponseType(RecEverythingReponseType.DETAILED_DESCRIBE);
/**
* 请求并返回消息
*/
Request<RecEverythingRequest> request = new Request<>(clientRequestId, recEverythingRequest);
Response<RecEverythingResponse> response = privacyApi.videoRecEverythingV2(request);
// 响应体
System.out.println(JSON.toJSONString(response));
// 如果该响应体返回值为null,表示发生错误,或无数据返回
System.out.println(JSON.toJSONString(response.getData()));