You need to enable JavaScript to run this app.
导航
物体检测算法
最近更新时间:2025.03.17 14:06:01首次发布时间:2025.03.17 14:06:01
我的收藏
有用
有用
无用
无用
简介
  1. 算法在一组连续的序列帧(比如视频流或拍摄好的视频)中跟踪某个特定物体。在第一帧中给定需跟踪物体的边框之后,算法会在后面的序列帧中依次跟踪物体,给出物体的边框。
  2. 该算法支持物体的位移,缩放和旋转。在跟踪丢失时,算法会根据丢失前物体的大小和旋转角度进行重检测。
    该算法为V4.5.0新增算法。
算法限制
  1. 输入算法的图像分辨率不小于480p,否则可能因图像太小导致跟丢;
  2. 跟踪物体占图像比例过小时(框长/宽小于视频短边的1/4),跟丢概率会增大
  3. 算法假设,序列帧的相邻帧之间物体移动不大。所以在帧率过低(比如由抽帧导致)的情况下可能会跟丢。目前在20fps以下时跟丢概率会增大。
  4. 该算法为只处理二维跟踪,不能进行三维跟踪。
技术规格
支持平台Android、iOS
支持输入格式RGBA8888, BGRA8888
内存占用<42M (测试设备OPPO R11)
检测速度<5ms(测试设备OPPO R11)
C接口说明

详细接口说明查看头文件:bef_effect_ai_object_tracking.h

1.创建物体检测算法句柄

BEF_SDK_API bef_effect_result_t
bef_ai_object_tracking_create(bef_ai_object_tracking_handle *handle);

参数说明

参数名参数类型参数说明
handlebef_ai_object_tracking_handle*创建的物体检测算法句柄

返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h

2.获取算法默认输入参数

BEF_SDK_API void
bef_ai_object_tracking_get_default_param(bef_ai_object_tracking_handle handle, bef_ai_object_tracking_param* param);

参数说明

参数名参数类型参数说明
handlebef_ai_object_tracking_handle物体检测算法句柄
parambef_ai_object_tracking_param*待返回的默认算法参数

3.物体检测算法初始化

BEF_SDK_API bef_effect_result_t
bef_ai_object_tracking_init(bef_ai_object_tracking_handle handle, const char* modelPath, bef_ai_object_tracking_param *param);

参数说明

参数名参数类型参数说明
handlebef_ai_object_tracking_handle*物体检测算法句柄
modelPathconst char*算法模型路径
parambef_ai_object_tracking_param*物体检测算法输入参数

返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h

4.设置待跟踪物体的初始包围盒

需要在应用层框选出待跟踪物体,且开始跟踪后单次调用

BEF_SDK_API bef_ai_object_tracking_init_bbox_status
bef_ai_object_tracking_set_initial_bbox(bef_ai_object_tracking_handle handle, const unsigned char* image, bef_ai_pixel_format format, int width, int height, int channels, int imageStride, bef_ai_object_tracking_bbox* initialBox);

参数说明

参数名参数类型参数说明
handlebef_ai_object_tracking_handle物体检测算法句柄
imageconst unsigned char*输入图像
formatbef_ai_pixel_format输入图像格式
widthint输入图像宽度
heightint输入图像高度
channelsint输入图像通道数
imageStrideint输入图像stride
initialBoxbef_ai_object_tracking_bbox*输入的跟踪物体包围框

返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h

5.开始物体检测跟踪

BEF_SDK_API bef_effect_result_t
bef_ai_object_tracking_track_frame(bef_ai_object_tracking_handle handle, const unsigned char* image, bef_ai_pixel_format format, int width, int height, int channels, int imageStride, float timeStamp, bef_ai_object_tracking_bbox* result);

参数说明

参数名参数类型参数说明
handlebef_ai_object_tracking_handle物体检测算法句柄
imageconst unsigned char*输入图像
formatbef_ai_pixel_format输入图像格式
widthint输入图像宽度
heightint输入图像高度
channelsint输入图像通道数
imageStrideint输入图像stride
timeStampfloat传入时间戳
initialBoxbef_ai_object_tracking_bbox*返回的跟踪物体包围框

返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h

6.物体检测算法授权

/// check license offline
/// @param bef_ai_object_tracking_handle handle
/// @param licensePath license path
BEF_SDK_API bef_effect_result_t
bef_ai_object_tracking_check_license(bef_ai_object_tracking_handle handle, const char* licensePath);
#endif

/// check license online
/// @param bef_ai_object_tracking_handle handle
/// @param licensePath license path
BEF_SDK_API bef_effect_result_t
bef_ai_object_tracking_check_online_license(bef_ai_object_tracking_handle handle, const char *licensePath);

参数说明

参数名参数类型参数说明
handlebef_ai_object_tracking_handle物体检测算法句柄
licensePathconst char *授权文件路径

返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h

7.物体检测算法销毁

BEF_SDK_API bef_effect_result_t
bef_ai_object_tracking_destroy(bef_ai_object_tracking_handle handle);

参数说明

参数名参数类型参数说明
handlebef_ai_object_tracking_handle物体检测算法句柄

返回值
成功返回 BEF_RESULT_SUC, 失败返回相应错误码, 具体请参考 bef_effect_ai_public_define.h

Java 接口说明

接口说明
详细接口说明查看文件:com.effectsar.labcv.effectsdk.ObjectTracking.java

1.物体检测句柄

public int init(
    Context context, 
    TaintDetectParam param,
    String licensePath, 
    boolean onlineLicense);
public int init(
    Context context, 
    String modelPath, 
    String licensePath, 
    boolean onlineLicense)

参数说明

参数名参数类型参数说明
contextContext安卓context
modelPathString算法模型路径
licensePathString授权文件路径
onlineLicenseboolean配置在线授权或离线授权

返回值
成功返回BEF_RESULT_SUC,否则返回对应的错误码

2.传入待跟踪物体包围框

public int setInitBox(ByteBuffer buffer, int image_width,
                          int image_height,
                          int image_stride,
                          int image_channels,
                          int pixel_format, ObjectTrackingBoundBox boundBox)

参数说明

参数名参数类型参数说明
bufferByteBuffer输入buffer
image_widthint输入图像宽度
image_heightint输入图像高度
image_strideint输入图像步长
image_channelsint输入图像通道数
pixel_formatint输入图像格式
boundBoxObjectTrackingBoundBox输入buffer

备注
关于ObjectTrackingBoundBox可参考com.effectsar.labcv.effectsdk.ObjectTracking.java,并且其定义与C接口bef_ai_object_tracking_bounding_box保持一致。

3.物体检测算法执行跟踪

public int trackFrame(ByteBuffer buffer, int image_width,
                          int image_height,
                          int image_stride,
                          int image_channels,
                          int pixel_format,
                          double time_stamp, ObjectTrackingBoundBox result)

参数说明

参数名参数类型参数说明
bufferByteBuffer输入buffer
image_widthint输入图像宽度
image_heightint输入图像高度
image_strideint输入图像步长
image_channelsint输入图像通道数
pixel_formatint输入图像格式
time_stampdouble传入时间戳
boundBoxObjectTrackingBoundBox输入buffer

备注
关于ObjectTrackingBoundBox可参考com.effectsar.labcv.effectsdk.ObjectTracking.java,并且其定义与C接口bef_ai_object_tracking_bounding_box保持一致。

4.释放物体检测算法句柄

public int destroy()

FAQ

1.如果出现任何异常,请查看是否有以下类型日志

答:建议首先查看以下tag输出Error类型的日志:
bef_effect_ai 和SMASH_E_LOG 以及 EffectSDK

错误码

错误码请参考错误码表