IVS智能分析通用接口API.
更多...
IVS智能分析通用接口API.
1 相关概念
IMP IVS 通过IVS通用接口API调用实例化的IMPIVSInterface以将智能分析算法嵌入到SDK中来分析SDK中的frame图像。
1.1 IMPIVSInterface
IMPIVSInterface 为通用算法接口,具体算法通过实现此接口并将其传给IMP IVS达到在SDK中运行具体算法的目的。
一个channel有且仅为单个算法实例的载体,必须将具体实现的通用算法接口传给具体的channel才能在SDK中运行算法。
IMPIVSInterface 成员param为成员函数init的参数。
IMP_IVS会在传给成员函数ProcessAsync参数的frame时对其进行外部加锁,ProcessAsync必须在使用完frame后调用IMP_IVS_ReleaseData释放frame,以免死锁。
2 使用方法
以移动侦测算法为例,函数的具体实现见sample-move_c.c文件
step.1 初始化系统,可以直接调用范例中的sample_system_init()函数。
整个应用程序只能初始化系统一次,若之前初始化了,这儿不需要再初始化。
step.2 初始化framesource
若算法所使用的framesource通道已创建,直接使用已经创建好的通道即可。
若算法所使用的framesource通道未创建,可以调用范列中的sample_framesource_init(IVS_FS_CHN, &fs_chn_attr)进行创建。
step.3 创建ivs具体算法通道组。
多个算法可以共用一个通道组,也可以分别使用通道组,具体件sample_ivs_move_init()
int sample_ivs_move_init(int grp_num)
{
int ret = 0;
if (ret < 0) {
IMP_LOG_ERR(TAG, "IMP_IVS_CreateGroup(%d) failed\n", grp_num);
return -1;
}
return 0;
}
step.4 绑定算法通道组和framesource通道组
if (ret < 0) {
IMP_LOG_ERR(TAG, "Bind FrameSource channel%d and ivs0 failed\n", IVS_FS_CHN);
return -1;
}
step.5 启动framesource和算法。建议算法通道号和算法编号一致,以便可以直接对应当前操作哪一个算法。
ret = sample_framesource_streamon(IVS_FS_CHN);
if (ret < 0) {
IMP_LOG_ERR(TAG, "ImpStreamOn failed\n");
return -1;
}
ret = sample_ivs_move_start(0, 0, &inteface);
if (ret < 0) {
IMP_LOG_ERR(TAG, "sample_ivs_move_start(0, 0) failed\n");
return -1;
}
step.6 获取算法结果
Polling结果、获取结果和释放结果必须严格对应,不能中间有中断; 只有Polling结果正确返回,获取到的结果才会被更新,否则获取到的结果无法预知。
for (i = 0; i < NR_FRAMES_TO_IVS; i++) {
if (ret < 0) {
IMP_LOG_ERR(TAG, "IMP_IVS_PollingResult(%d, %d) failed\n", 0, IMP_IVS_DEFAULT_TIMEOUTMS);
return -1;
}
if (ret < 0) {
IMP_LOG_ERR(TAG, "IMP_IVS_GetResult(%d) failed\n", 0);
return -1;
}
IMP_LOG_INFO(TAG, "frame[%d], result->ret=%d\n", i, result->ret);
if (ret < 0) {
IMP_LOG_ERR(TAG, "IMP_IVS_ReleaseResult(%d) failed\n", 0);
return -1;
}
}
step.7 释放资源
sample_ivs_move_stop(0, inteface);
sample_framesource_streamoff(1);
sample_ivs_move_exit(0);
sample_framesource_exit(IVS_FS_CHN);
sample_system_exit();
创建IVS功能对应的通道
- 参数
-
[in] | ChnNum | 通道号 |
[in] | handler | IVS功能句柄 |
- 返回值
-
- 注意
- 无
int IMP_IVS_CreateGroup |
( |
int |
GrpNum | ) |
|
int IMP_IVS_DestroyChn |
( |
int |
ChnNum | ) |
|
销毁IVS功能句柄对应的通道
- 参数
-
- 返回值
-
- 注意
- 无
int IMP_IVS_DestroyGroup |
( |
int |
GrpNum | ) |
|
int IMP_IVS_GetParam |
( |
int |
chnNum, |
|
|
void * |
param |
|
) |
| |
获取通道算法参数
- 参数
-
[in] | ChnNum | IVS功能对应的通道号 |
[in] | param | 算法参数虚拟地址指针 |
- 返回值
-
- 注意
- 无
int IMP_IVS_GetResult |
( |
int |
ChnNum, |
|
|
void ** |
result |
|
) |
| |
获得IVS功能计算出的智能分析结果
- 参数
-
[in] | ChnNum | IVS功能对应的通道号 |
[in] | result | IVS功能对应的通道号输出的结果,返回此通道对应的智能分析算法的结果指针,外部客户无需分配空间。 |
- 返回值
-
- 注意
- 无
int IMP_IVS_PollingResult |
( |
int |
ChnNum, |
|
|
int |
timeoutMs |
|
) |
| |
阻塞判断是否可以获得IVS功能已计算出的智能分析结果
- 参数
-
[in] | ChnNum | IVS功能对应的通道号 |
[in] | timeout | 最大等待时间,单位ms; IMP_IVS_DEFAULT_TIMEOUTMS:库内部默认的等待时间,0:不等待,>0:用户设定的等待时间 |
- 返回值
-
- 注意
- 无
int IMP_IVS_RegisterChn |
( |
int |
GrpNum, |
|
|
int |
ChnNum |
|
) |
| |
注册通道到通道组
- 参数
-
[in] | GrpNum | IVS功能对应的通道组号 |
[in] | ChnNum | IVS功能对应的通道号 |
- 返回值
-
- 注意
- 无
int IMP_IVS_ReleaseData |
( |
void * |
vaddr | ) |
|
释放传给Datacallback的参数frame
- 参数
-
- 返回值
-
- 注意
- 无
int IMP_IVS_ReleaseResult |
( |
int |
ChnNum, |
|
|
void * |
result |
|
) |
| |
释放IVS功能计算出的结果资源
- 参数
-
[in] | GrpNum | 通道组号 |
[in] | ChnNum | IVS功能对应的通道号 |
[in] | result | IVS功能对应的通道号输出的结果 |
- 返回值
-
- 注意
- 无
int IMP_IVS_SetParam |
( |
int |
chnNum, |
|
|
void * |
param |
|
) |
| |
设置通道算法参数
- 参数
-
[in] | ChnNum | IVS功能对应的通道号 |
[in] | param | 算法参数虚拟地址指针 |
- 返回值
-
- 注意
- 无
int IMP_IVS_StartRecvPic |
( |
int |
ChnNum | ) |
|
int IMP_IVS_StopRecvPic |
( |
int |
ChnNum | ) |
|
int IMP_IVS_UnRegisterChn |
( |
int |
ChnNum | ) |
|