车牌识别算法说明
REVISION HISTORY¶
Revision No. | Description |
Date |
---|---|---|
1.0 | 03/05/2025 |
1. 概述¶
1.1. 算法说明¶
车牌识别算法(License Plate Recognize, LPR)包括以下功能:车牌检测、车牌号识别、车牌颜色识别、车牌种类识别。所用模型及其功能如下:
-
车牌检测模型(lpr_det48y.img)用于检测车牌,输出的类别共2类,分别单层车牌(class_id=0),双层车牌(class_id=1);
-
车牌号识别模型(lpr_rec_s.img/lpr_rec_l.img)用于识别车牌号码;
-
车牌颜色识别模型(lpr_cls.img)用于识别车牌颜色,蓝色(class_id=0),绿色(class_id=1),黄色(class_id=2),白色(class_id=3),黑色(class_id=4);
2. API参考¶
该功能模块提供以下API:
API名称 | 功能 |
---|---|
ALGO_LPR_CreateHandle | 创建句柄 |
ALGO_LPR_InitHandle | 初始化句柄 |
ALGO_LPR_GetInputAttr | 获取模型的属性信息 |
ALGO_LPR_SetParams | 设置算法运行参数 |
ALGO_LPR_Detect | 车牌检测 |
ALGO_LPR_Recognize | 在检测数据上进行车牌信息识别 |
ALGO_LPR_DeInitHandle | 反初始化句柄 |
ALGO_LPR_ReleaseHandle | 删除句柄 |
2.1. ALGO_LPR_CreateHandle¶
-
功能
创建句柄
-
语法
MI_S32 ALGO_LPR_CreateHandle(void **handle);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 -
返回值
返回值 描述 0 成功 其他 失败(详见错误码) -
依赖
-
头文件:sgs_lpr_api.h
-
库文件:libsgsalgo_lpr.a/libsgsalgo_lpr.so
-
2.2. ALGO_LPR_InitHandle¶
-
功能
初始化句柄
-
语法
MI_S32 ALGO_LPR_InitHandle(void *handle, LprInitInfo_t *lpr_init_info);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 lpr_init_info 配置ipu_firmware_path路径、模型文件夹路径、阈值 输入 -
返回值
返回值 描述 0 成功 其他 失败(详见错误码) -
依赖
-
头文件:sgs_lpr_api.h
-
库文件:libsgsalgo_lpr.a/libsgsalgo_lpr.so
-
2.3. ALGO_LPR_GetInputAttr¶
-
功能
获取模型的属性信息,包括模型输入分辨率以及输入数据的类型
-
语法
MI_S32 ALGO_LPR_GetInputAttr(void *handle, LprInputAttr_t *input_attr);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 input_attr 输入属性 输出 -
返回值
返回值 描述 0 成功 其他 失败(详见错误码) -
依赖
-
头文件:sgs_lpr_api.h
-
库文件:libsgsalgo_lpr.a/libsgsalgo_lpr.so
-
2.4. ALGO_LPR_SetParams¶
-
功能
设置算法的可配置参数
-
语法
MI_S32 ALGO_LPR_SetParams(void *handle, const LprParams_t *params);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 params 可配置参数 输入 -
返回值
返回值 描述 0 成功 其他 失败(详见错误码) -
依赖
-
头文件:sgs_lpr_api.h
-
库文件:libsgsalgo_lpr.a/libsgsalgo_lpr.so
-
2.5. ALGO_LPR_Detect¶
-
功能
运行车牌检测算法
-
语法
MI_S32 ALGO_LPR_Detect(void *handle, const LprInput_t *algo_input, LprResult_t lp_result[MAX_LPR_OBJECT], MI_S32 *lp_num);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 algo_input 输入buffer 输入 lp_result 车牌信息 输出 lp_num 车牌数目 输出 -
返回值
返回值 描述 0 成功 其他 失败(详见错误码) -
依赖
-
头文件:sgs_lpr_api.h
-
库文件:libsgsalgo_lpr.a/libsgsalgo_lpr.so
-
2.6. ALGO_LPR_Recognize¶
-
功能
运行车牌信息识别算法
-
语法
MI_S32 ALGO_LPR_Recognize(void *handle, const LprInput_t *algo_input, LprInputAttr_t *input_attr, LprResult_t lp_result[MAX_LPR_OBJECT], MI_S32 *lp_num);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 algo_input 原图输入buffer 输入 input_attr 原图输入属性 输入 lp_result 模型输出结构体 输出 lp_num 车牌数目 输入 -
返回值
返回值 描述 0 成功 其他 失败(详见错误码) -
依赖
-
头文件:sgs_lpr_api.h
-
库文件:libsgsalgo_lpr.a/libsgsalgo_lpr.so
-
2.7. ALGO_LPR_DeInitHandle¶
-
功能
反初始化句柄
-
语法
MI_S32 ALGO_LPR_DeinitHandle(void *handle);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 -
返回值
返回值 描述 0 成功 -
依赖
-
头文件:sgs_lpr_api.h
-
库文件:libsgsalgo_lpr.a/libsgsalgo_lpr.so
-
2.8. ALGO_LPR_ReleaseHandle¶
-
功能
删除句柄
-
语法
MI_S32 ALGO_LPR_ReleaseHandle(void *handle);
-
形参
参数名称 描述 输入/输出 handle 句柄 输入 -
返回值
返回值 描述 0 成功 -
依赖
-
头文件:sgs_lpr_api.h
-
库文件:libsgsalgo_lpr.a/libsgsalgo_lpr.so
-
3. 结构体说明¶
LPR相关数据类型定义如下:
数据类型 | 定义 |
---|---|
LprInitInfo_t | 算法初始化结构体 |
LprInputAttr_t | 算法输入属性结构体 |
LprParams_t | 算法运行参数结构体 |
LprInput_t | 算法输入结构体 |
LprBox_t | 算法检测框结构体 |
LprQuality_t | 算法车牌质量结构体 |
LpColor_e | 车牌颜色枚举变量 |
LpType_e | 车牌类别枚举变量 |
LprInfo_t | 车牌信息结构体 |
LprResult_t | 车牌识别结果结构体 |
3.1 LprInitInfo_t¶
-
说明
算法初始化结构体
-
定义
typedef struct { char ipu_firmware_path[MAX_LPR_STRLEN]; char det_model[MAX_LPR_STRLEN]; char rec_model[MAX_LPR_STRLEN]; char cls_model[MAX_LPR_STRLEN]; MI_BOOL create_device; MI_BOOL destroy_device; } LprInitInfo_t;
-
成员
成员名称 描述 ipu_firmware_path ipu_firmware_path路径 det_model 车牌检测模型路径 rec_model 车牌号识别模型路径 cls_model 车牌颜色模型路径 create_device 是否在算法库内进行IPU device的创建,默认为true,即在库内创建,在需同时调用算法库时可设置为false并在外部手动创建IPU device destroy_device 是否在算法库内进行IPU device的销毁,默认为true,即在库内销毁,在需同时调用算法库时可设置为false并在外部手动销毁IPU device -
相关数据类型及接口
3.2 LprInputAttr_t¶
-
说明
算法输入属性结构体
-
定义
typedef struct { MI_U32 width; MI_U32 height; MI_IPU_ELEMENT_FORMAT format; }LprInputAttr_t;
-
成员
成员名称 描述 width 模型输入数据的宽 height 模型输入数据的高 format 模型输入数据的类型 -
相关数据类型及接口
3.3 LprParams_t¶
-
说明
算法运行参数结构体
-
定义
typedef struct { MI_S32 disp_width; MI_S32 disp_height; MI_FLOAT det_threshold; MI_FLOAT rec_threshold; MI_FLOAT cls_threshold; MI_FLOAT quality_threshold; MI_FLOAT horizon_angle_threshold; MI_FLOAT vertical_angle_threshold; MI_FLOAT plate_area_threshold; MI_FLOAT keypoints_distance_threshold; }LprParams_t;
-
成员
成员名称 描述 disp_width 显示码流的分辨率宽度(用于映射检测框位置) disp_height 显示码流的分辨率高度(用于映射检测框位置) det_threshold 车牌检测阈值 rec_threshold 车牌号识别阈值 color_threshold 车牌颜色识别阈值 quality_threshold 车牌质量阈值 horizon_angle_threshold 车牌水平倾角阈值 vertical_angle_threshold 车牌垂直倾角阈值 plate_area_threshold 车牌面积阈值 keypoints_distance_threshold 车牌关键点偏移阈值 -
相关数据类型及接口
3.4 LprInput_t¶
-
说明
算法输入结构体
-
定义
typedef struct { void *p_vir_addr; MI_PHY phy_addr; MI_U32 buf_size; MI_U64 pts; MI_U16 width; MI_U16 height; MI_BOOL filter; } LprInput_t;
-
成员
成员名称 描述 p_vir_addr 输入buffer的虚拟地址 phy_addr 输入buffer的物理地址 buf_size 输入buffer的长度 pts 输入buffer时间戳 width 输入宽度 height 输入高度 filter 是否启用车牌质量过滤 -
相关数据类型及接口
3.5 LprBox_t¶
-
说明
算法检测框结构体
-
定义
typedef struct { MI_U32 x; MI_U32 y; MI_U32 width; MI_U32 height; MI_S32 cls; MI_FLOAT det_score; MI_U64 pts; MI_FLOAT keypts[NUM_LPR_KEYPOINTS][2]; MI_U64 track_id; } LprBox_t;
-
成员
成员名称 描述 x,y, width, height 检测结果框的位置 cls 检测结果框的类别ID det_score 检测结果框的分值 pts 送入检测帧的时间戳 keypts 车牌关键点 track_id 车牌id -
相关数据类型及接口
3.6 LprQuality_t¶
-
说明
算法车牌质量结构体
-
定义
typedef struct { MI_FLOAT quality_score; MI_FLOAT horizon_angle; MI_FLOAT vertical_angle; MI_FLOAT plate_area; MI_FLOAT keypoints_distance; } LprQuality_t;
-
成员
成员名称 描述 quality_score 车牌质量得分 horizon_angle 车牌水平倾角 vertical_angle 车牌垂直倾角 plate_area 车牌面积 keypoints_distance 车牌关键点位移 -
相关数据类型及接口
3.7 LpColor_e¶
-
说明
车牌颜色枚举变量
-
定义
typedef enum { LP_COLOR_BLUE=0, LP_COLOR_GREEN, LP_COLOR_YELLOW, LP_COLOR_WHITE, LP_COLOR_BLACK }LpColor_e;
-
成员
成员名称 描述 LP_COLOR_BLUE 蓝色车牌 LP_COLOR_GREEN 绿色车牌 LP_COLOR_YELLOW 黄色车牌 LP_COLOR_WHITE 白色车牌 LP_COLOR_BLACK 黑色车牌 -
相关数据类型及接口
3.8 LpType_e¶
-
说明
车牌类型枚举变量
-
定义
typedef enum { LP_TYPE_NORM=0, LP_TYPE_POLICE, LP_TYPE_ARMY, LP_TYPE_HONGKONG, LP_TYPE_MACAO, LP_TYPE_EMBASSY }LpType_e;
-
成员
成员名称 描述 LP_TYPE_NORM 普通车牌 LP_TYPE_POLICE 警用车牌 LP_TYPE_ARMY 军用车牌 LP_TYPE_HONGKONG 香港车牌 LP_TYPE_MACAO 澳门车牌 LP_TYPE_EMBASSY 大使馆车牌 -
相关数据类型及接口
3.9 LprInfo_t¶
-
说明
车牌信息结构体
-
定义
typedef struct { MI_FLOAT rec_score; char lp_number[MAX_LP_RESULT_LEN]; MI_FLOAT cls_score; LpColor_e lp_color; LpType_e lp_type; } LprInfo_t;
-
成员
成员名称 描述 rec_score 车牌号识别得分 lp_number 车牌号码 cls_score 车牌颜色识别得分 lp_color 车牌颜色 lp_type 车牌类别 -
相关数据类型及接口
3.10 LprResult_t¶
-
说明
车牌识别结果结构体
-
定义
typedef struct { LprBox_t box; LprQuality_t quality; LprInfo_t info; }LprResult_t;
-
成员
成员名称 描述 LprBox_t 车牌检测结构体 LprQuality_t 车牌质量结构体 LprInfo_t 车牌信息结构体 -
相关数据类型及接口
4. 错误码¶
错误码 | 数值 | 描述 |
---|---|---|
E_ALGO_SUCCESS | 0 | 操作成功 |
E_ALGO_HANDLE_NULL | 1 | 算法句柄为空 |
E_ALGO_INVALID_PARAM | 2 | 无效的输入参数 |
E_ALGO_DEVICE_FAULT | 3 | 硬件错误 |
E_ALGO_LOADMODEL_FAIL | 4 | 加载模型失败 |
E_ALGO_INIT_FAIL | 5 | 算法初始化失败 |
E_ALGO_NOT_INIT | 6 | 算法尚未初始化 |
E_ALGO_INPUT_DATA_NULL | 7 | 算法输入数据为空 |
E_ALGO_INVALID_INPUT_SIZE | 8 | 无效的算法输入数据维度 |
E_ALGO_INVALID_LICENSE | 9 | 无效的license许可 |
E_ALGO_MEMORY_OUT | 10 | 内存不足 |
E_ALGO_FILEIO_ERROR | 11 | 文件读写操作错误 |
E_ALGO_INVALID_OUTPUT_SIZE | 12 | 无效的算法输出数据维度 |
E_ALGO_INVALID_DECODE_MODE | 13 | 无效解码模式 |
E_ALGO_MODEL_INVOKE_ERROR | 14 | Invoke失败 |