元芒数字 i 识别系统(WmAceKG)
Windows端 DLL 接口说明文档
Version Release v1.0.2.0
更新时间: 2023.08.31
上海元芒数字科技有限公司
Windows端DLL接口文档
一、文档说明
1.1 版本说明
文档版本号 | SDK 版本号 | 发布日期 | 更新内容 |
---|---|---|---|
v1.0.0.1 | v1.0.0.1 | 2021.9.26 | 新版本发布 |
v1.0.0.2 | v1.0.0.2 | 2021.9.30 | 修改了函数名称,增加了数据库映射 |
v1.0.0.3 | v1.0.0.3 | 2021.11.01 | 提升了运算速度 保存了历史训练结果 |
v1.0.0.4 | v1.0.0.4 | 2021.12.03 | 优化了算法 图片自动上传服务器 删除不必要的日志 |
v1.0.0.5 | v1.0.0.5 | 2021.12.30 | 优化算法 |
v1.0.0.6 | v1.0.0.6 | 2022.02.25 | 增加删除学习资料和清空学习资料函数 |
v1.0.0.7 | v1.0.0.7 | 2022.03.29 | 优化算法,新增本地索引文件 |
v1.0.0.8 | v1.0.0.8 | 2022.06.27 | 算法优化 |
v1.0.0.9 | v1.0.0.9 | 2022.07.02 | 优化,新增接口 |
v1.0.0.10 | v1.0.0.10 | 2022.07.04 | 新增学习数据局域网同步功能 |
v1.0.0.11 | v1.0.0.11 | 2022.07.14 | 新增接口 |
v1.0.0.12 | v1.0.0.12 | 2022.07.23 | 新增接口,升级算法 |
v1.0.1.0 | v1.0.1.0 | 新增接口 | |
v1.0.1.1 | v1.0.1.1 | 2022.10.08 | 新增接口 |
v1.0.1.2 | v1.0.1.2 | 2022.10.25 | 新增接口,升级算法模型 |
v1.0.1.3 | v1.0.1.3 | 2022.10.29 | 升级算法模型 |
v1.0.1.4 | v1.0.1.4 | 2022.11.07 | 新增接口 |
v1.0.1.5 | v1.0.1.5 | 2022.11.18 | 升级了饮料和菜签 |
v1.0.1.6 | v1.0.1.6 | 2023.02.02 | 升级了视频流算法 |
v1.0.1.7 | v1.0.1.7 | 2023.03.08 | 识别算法新增商品 |
v1.0.2.0 | v1.0.2.0 | 2023.08.31 | 优化算法模型,修改了WmAutoDetect接口 |
1.2 ⽂档概述
此文档用于说明元芒数字(WM)i 识别(AceKG)系统(简称 WmAceKG) Windows 系统接口开发使用,集成相关软件包,以实现相关功能的接口说明文档
1.3 术语定义及说明
- 术语说明
- ==DLL:集成在 Windows 端的软件包==
- ==商品Id:这里的商品Id,泛指商品识别信息。需要在接口中统一并能唯一识别商品信息==
-
==本文中所有传输内容均使用 ANSI 编码==
-
==本文中的 DLL 适用于操作系统 Windows 7以上的版本,支持32或64位操作系统==
二、 调用方法说明
2.1 集成方法说明
- 将压缩包内所有 DLL 放在程序可执行目录下即可
- 客户端加载libfood.dll
- 加载DLL中的函数即可
- config.ini文件中mode=0 为CPU推理 mode=1为GPU推理
2.2 接口调用流程描述
-
SDK初始化接口init
-
在第一次使用时,请用initpos接口注册设备。
-
秤盘没有裁剪,需进入裁剪秤盘界面,如果data文件中有,则不需要进行裁剪了(每次进入系统会 裁剪图片) 获取裁剪秤盘:getScaleSetting 保存裁剪秤盘:saveScaleSetting
-
裁剪图片后会自动进入识别函数,根据放上来的物品进行识别
-
没有识别的物品用注册函数进行注册
2.3 接口时序图
flowchart TB
subgraph six[结束]
G1[结束<br/>Release]
end
subgraph five[识别商品]
D1[循环获取当前帧的识别结果<br/>WmAutoDetec]
E1[手动识别<br/>Recognize]
F1[回传识别结果<br/>SetFeedBack]
D1-->F1
E1-->F1
end
subgraph four[注册商品]
C1[注册商品<br/>WmNewItemReg]
end
subgraph three[设备初始化以及秤盘裁剪]
B1[1.指定摄像头<br/>setCameraId]
B2[2.开启视频流识别<br/>videoPipeFunc]
B3[3.查询秤盘是否已裁剪<br/>getScaleSetting]
B4[4.裁剪秤盘<br/>SaveScaleSetting]
B5[5.裁剪秤盘标志区<br/>setVideoCoordinate]
B1-->B2-->B3-->B4-->B5
end
subgraph two[初始化动态库]
A1[初始化<br/>Init]
end
two --> three-->four-->five-->six
three-->five
三、 接⼝说明
所有接口皆返回错误码 不为0的情况皆是错误
3.1 Init (初始化WmAceKG)
-
使用场景:此接口用于初始化 WmAceKG 所有属性;
-
函数原型:
Init()
-
请求参数:
请求参数 必填 ==类型== 描述 -
返回值:0代表成功 其他皆为失败
-
调用示例:
#include <iostream> #include "lib_food.h" int main() { int ret = Init(); if (ret != 0) { cout << "init failed:"<<ret << endl; system("pause"); return 0; } system("pause"); return 0; }
3.2 SetCameraId(初始化摄像头-设置开启摄像头id)
-
使用场景:由于设备可能有多个摄像头,提前设定好具体是哪个摄像头,默认是0。
-
函数原型:
SetCameraId (int num)
- 参数说明:
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
num | Y | int | 摄像头序号,==一般从 0 开始== |
-
返回值:0代表成功 其他皆为失败
-
调用示例:
#include <iostream> #include "lib_food.h" int main() { int num = 0;//摄像头序号 int ret = SetCameraId(num); if (ret != 0) { cout << "SetCameraId failed" << endl; system("pause"); return 0; } system("pause"); return 0; }
3.3 SaveScaleSetting(初始化秤盘信息-标定秤盘并保存坐标信息)
-
使用场景:AI识别的是秤盘上的物品,在识别商品时,AI只识别标定内的物品,该接口用来传递秤盘位置信息
宽高比例必须为4:3,默认像素为640*480,所以x+width <=640 y+height <=480
-
函数原型:
SaveScaleSetting (int x,int y,int width,int height);
- 参数说明:
请求参数 | 必填 | ==类型== | 描述 |
---|---|---|---|
x | Y | int | 左上角 x 坐标值 |
y | Y | int | 左上角 y 坐标值 |
width | Y | int | 宽度 |
height | Y | int | 高度 |
-
返回值:0代表成功 其他皆为失败
-
调用示例:
#include <iostream> #include "lib_food.h" int main() { int x =10, y=10, w=100, h=100; //由具体图片获取,此为随意设定值,无参考意义 ret = SaveScaleSetting(x,y,w,h); if (ret != 0) { cout << "SaveScaleSetting failed" << endl; system("pause"); return 0; } system("pause"); return 0; }
3.4 GetScaleSetting(判断秤盘是否已标定)
-
使用场景:AI识别的是秤盘上的物品,在识别商品时,会提前判断本次秤盘是否已被标定,如果没有被标定,请重新初始化秤盘
-
函数原型:
GetScaleSetting(int& x,int& y,int& width,int& height);
- 参数说明:
请求参数 | 必填 | ==类型== | 描述 |
---|---|---|---|
x | Y | int& | 左上角 x 坐标值 该值为引用传递 调用后会修改成最终结果 |
y | Y | int& | 左上角 y 坐标值 该值为引用传递 调用后会修改成最终结果 |
width | Y | int& | 宽度 该值为引用传递 调用后会修改成最终结果 |
height | Y | int& | 高度 该值为引用传递 调用后会修改成最终结果 |
-
返回值:0代表成功 其他皆为失败
-
调用示例:
#include <iostream> #include "lib_food.h" int main() { int x, y, w, h; ret = GetScaleSetting(x,y,w,h); if (!(x && y && w && h)) { cout << "not save scalesetting" << endl; system("pause"); return 0; } system("pause"); return 0; }
3.5 WmNewItemReg(注册单个商品)
-
使用场景:当想要对秤盘上的商品进行注册时,调用此接口进行商品注册
-
函数原型:
typedef struct _WM_AI_RET_STR
{
int ordinal
float prob; // 置信度
int status; // 是否成功标志位 1:成功 -1:失败int x; // 坐标值
int y;
int w;
int h;
char lable_name[128]; //识别类型Str
}WM_AI_RET_STR;
int WmNewItemReg(char* in_label, WM_AI_RET_STR* loc, char* path);
- 请求参数:
请求参数 | ==必填== | ==类型== | 描述 |
---|---|---|---|
label | Y | char* | 该商品的输入类别plu |
loc | Y | WM_AI_RET* | 返回的注册结果 |
path | Y | char* | 返回的图片存放地址 |
-
返回值:0代表成功 其他皆为失败
-
调用示例:
#include <iostream> #include "lib_food.h" typedef struct _WM_AI_RET_STR { float prob; // 置信度 int status; // 是否成功标志位 1:成功 -1:失败int x; // 坐标值 int y; int w; int h; char lable_name[128]; //识别类型Str }WM_AI_RET_STR; int main() { char plu[10] = "plu"; char path[128] = {}; WM_AI_RET_STR demo; ret = WmNewItemReg(plu,&demo,path); if (ret != 0) { cout << "WmNewItemReg failed" << endl; system("pause"); return 0; } system("pause"); return 0; }
3.6 WmAutoDetect(获取当前帧是否有识别结果帧)
-
使用场景:循环调用获取视频流识别的结果
-
函数原型:
int WmAutoDetect(uchar* x, WM_AI_OUTPUT_STR* wm_ai_output,char* sessionId,int &state);
- 请求参数:
请求参数 | ==必填== | ==类型== | 描述 |
---|---|---|---|
x | Y | unsign char* | 一帧图片,转换为数组 |
wm_ai_output | Y | WM_AI_OUTPUT_STR* | 当前帧的识别结果 |
sessionId | Y | char* | 返回此次识别的session,用于回传结果 |
state | Y | int | 该值为引用传递,返回当前视频流检测区域的状态。0为空,1为满。 |
-
返回值:0代表成功 其他皆为失败
-
调用示例:
#include <iostream> #include "lib_food.h" typedef struct WM_AI_RET_STR { int ordinal float prob; // 置信度 int status; // 是否成功标志位 1:成功 -1:失败int x; // 坐标值 int y; int w; int h; char lable_name[128]; //识别类型Str }WM_AI_RET_STR; typedef struct _WM_AI_OUTPUT_STR_ { int value; /*回传的值 0:[空盘] 1:[有物品进来] 99:[此时未发生移动]*/ WM_AI_RET_STR locts[15]; /*回传的识别结果坐标上限15个结果*/ }WM_AI_OUTPUT_STR; int main() { uchar *x = new uchar[640*480*3];//申请空间大写视具体情况而定 char sessionId[100] = {}; WM_AI_RET_STR demo; int state; ret = WmAutoDetect(x,&demo,sessionId,state); if (ret != 0) { cout << "WmAutoDetect failed" << endl; system("pause"); return 0; } if (state == 1) { Sleep(200); Console.WriteLine(demo[0].x); Console.WriteLine(demo[0].y); Console.WriteLine(demo[0].w); Console.WriteLine(demo[0].h); Console.WriteLine(demo[0].status); Console.WriteLine(demo[0].prob); Console.WriteLine(demo[0].lable_name); cv::Mat pic = CV::Mat(640, 480, CV_8UC3,x));//多结果时无需重复执行 } system("pause"); return 0; }
3.7 Recognize(手动获取当前帧别结果)
-
使用场景:循环调用获取视频流识别的结果
-
函数原型:
int Recognize(WM_AI_OUTPUT_STR* wm_ai_output, char* path, char* sessionId);
- 请求参数:
请求参数 | ==必填== | ==类型== | 描述 |
---|---|---|---|
wm_ai_output | Y | WM_AI_OUTPUT_STR* | 当前帧的识别结果 |
path | Y | char* | 返回图片的路径 |
sessionId | Y | char* | 返回此次识别的session,用于回传结果 |
-
返回值:0代表成功 其他皆为失败
-
调用示例:
#include <iostream> #include "lib_food.h" typedef struct WM_AI_RET_STR { int ordinal float prob; // 置信度 int status; // 是否成功标志位 1:成功 -1:失败int x; // 坐标值 int y; int w; int h; char lable_name[128]; //识别类型Str }WM_AI_RET_STR; typedef struct _WM_AI_OUTPUT_STR_ { int value; /*回传的值 0:[空盘] 1:[有物品进来] 99:[此时未发生移动]*/ WM_AI_RET_STR locts[15]; /*回传的识别结果坐标上限15个结果*/ }WM_AI_OUTPUT_STR; int main() { char path[128] = {}; char sessionId[100] = {}; WM_AI_RET_STR demo; ret = Recognize(&demo,path,sessionId); if (ret != 0) { cout << "WmAutoDetect failed" << endl; system("pause"); return 0; } Console.WriteLine(demo[0].x); Console.WriteLine(demo[0].y); Console.WriteLine(demo[0].w); Console.WriteLine(demo[0].h); Console.WriteLine(demo[0].status); Console.WriteLine(demo[0].prob); Console.WriteLine(demo[0].lable_name); cv::Mat pic = CV::imread(path);//多结果时无需重复执行 system("pause"); return 0; }
3.8 SetFeedBack (保存识别结果)
-
使用场景:识别后传入选中结果和是否选中,调用此接口,用于优化算法。
-
关于success字段:
商品代码不是识别函数返回的结果就用false,从AutoDetect结果中选择的就是true
-
函数原型:
SetFeedBack (char* sessionId, bool success)
- 参数说明:
请求参数 | ==必填== | ==类型== | 描述 |
---|---|---|---|
sessionId | Y | char* | 打称记录 Id |
success | Y | bool | 是否命中 |
-
返回值:0代表成功 其他皆为失败
-
调用示例:
#include <iostream> #include "lib_food.h" int main() { WM_AI_OUTPUT_STR deteced; char sessionId[128] = {}; char path[128] = {}; int ret = Recognize(&deteced, path,sessionId); if (ret != 0) { cout << "Recognize error,look for log and solve question" << endl; system("pause"); } bool hit = true; ret = SetFeedBack (sessionId,hit); if (ret != 0) { cout << "SetFeedBack error,look for log and solve question" << endl; } system("pause"); return 0; }
3.9 SetNoRecommend(删除商品学习结果)
-
使用场景:删除商品学习结果
-
函数原型:
SetNoRecommend (const char* code)
- 参数说明:
请求参数 | ==必填== | ==类型== | 描述 |
---|---|---|---|
code | Y | const char* | 商品代码 |
-
返回值:0代表成功 其他皆为失败
-
调用示例:
#include <iostream> #include "lib_food.h" int main() { char plu[20]="01234"; ret = SetNoRecommend(plu); if (ret != 0) { cout << "SetNoRecommend failed" << endl; } system("pause"); return 0; }
3.10 Release(关闭资源)
- 使用场景:程序推出时请使用该函数释放资源
- 函数原型:
Release()
- 参数说明:
请求参数 | ==必填== | ==类型== | 描述 |
---|
-
返回值:0代表成功 其他皆为失败
-
调用示例:
#include <iostream> #include "lib_food.h" int main() { Release(); system("pause"); return 0; }
3.11 SetVideoCoordinate(设定秤盘标志区域)
-
使用场景:采集秤盘上的标识物,是视频流识别更为精准
-
函数原型:
setVideoCoordinate (int x,int y,int width,int height);
- 参数说明:
请求参数 | 必填 | ==类型== | 描述 |
---|---|---|---|
x | Y | int | 左上角 x 坐标值 |
y | Y | int | 左上角 y 坐标值 |
width | Y | int | 宽度 |
height | Y | int | 高度 |
-
返回值:0代表成功 其他皆为失败
-
调用示例:
#include <iostream> #include "lib_food.h" int main() { int x =10, y=10, w=100, h=100; //由具体图片获取,此为随意设定值,无参考意义 ret = SetVideoCoordinate(x,y,w,h); if (ret != 0) { cout << "setVideoCoordinate failed" << endl; system("pause"); return 0; } system("pause"); return 0; }
3.12 InitPos (注册pos)
-
使用场景:此接口用于注册设备;
-
函数原型:
InitPos(char* tenant, char* posCode, char* snNo)
-
请求参数:
请求参数 必填 ==类型== 描述 tenant Y char* 租户代码,线上申请后邮件发送 posCode Y char* pos机的编号,可自己编辑,一旦对应不可更改 snNo Y char* sdk 码必填 -
返回值:0代表成功 其他皆为失败
-
调用示例:
#include <iostream> #include "lib_food.h" int main() { char No[128] = "posCode"; char SN[128] = "snNo"; char Ta[128] = "tenant"; int ret = initPos(Ta, No, SN); if (ret != 0) { cout << "initPos failed:"<<ret << endl; system("pause"); return 0; } system("pause"); return 0; }
3.13 VideoPipeFunc (开启视频流识别)
-
使用场景:开启视频流识别功能;
-
函数原型:
VideoPipeFunc()
-
请求参数:
请求参数 必填 ==类型== 描述 -
返回值:0代表成功 其他皆为失败
-
调用示例:
#include <iostream> #include "lib_food.h" int main() { VideoPipeFunc(); return 0; }
3.14 ChangeBackPicture (改变空称盘图像)
-
使用场景:用于重新裁剪视频流标记区,或是自动获取裁剪区图像时,区域存在商品,导致识别不准确的问题。
-
函数原型:
ChangeBackPicture()
-
请求参数:
请求参数 必填 ==类型== 描述 -
返回值:0代表成功 其他皆为失败
-
调用示例:
#include <iostream> #include "lib_food.h" int main() { int ret = ChangeBackPicture(); if (ret != 0) { cout << "ChangeBackPicture failed:"<<ret << endl; system("pause"); return 0; } system("pause"); return 0; }
3.15 PullOnShelves (上架商品)
-
使用场景:上架商品
-
函数原型:
int PullOnShelves(const char* code)
-
请求参数:
请求参数 必填 ==类型== 描述 code Y char* 上架商品的商品代码 -
返回值:0代表成功 其他皆为失败
-
调用示例:
#include <iostream> #include "lib_food.h" int main() { char plu[10] = "123456789" int ret = PullOnShelves(plu); if (ret != 0) { cout << "PullOnShelves failed:"<<ret << endl; system("pause"); return 0; } system("pause"); return 0; }
3.16 PullOffShelves (下架商品)
-
使用场景:下架商品
-
函数原型:
int PullOffShelves(const char* code)
-
请求参数:
请求参数 必填 ==类型== 描述 code Y char* 上架商品的商品代码 -
返回值:0代表成功 其他皆为失败
-
调用示例:
#include <iostream> #include "lib_food.h" int main() { char plu[10] = "123456789" int ret = PullOffShelves(plu); if (ret != 0) { cout << "PullOffShelves failed:"<<ret << endl; system("pause"); return 0; } system("pause"); return 0; }
3.17 UpdataCommodity (更新目前上架商品)
-
使用场景:在完成上下架商品后调用,更新内存中对商品的学习记录
-
函数原型:
int UpdataCommodity()
- 请求参数:
请求参数 | 必填 | ==类型== | 描述 |
---|
-
返回值:0代表成功 其他皆为失败
-
调用示例:
#include <iostream>
#include "lib_food.h"
int main()
{
int ret = UpdataCommodity();
if (ret != 0)
{
cout << "UpdataCommodity failed:"<<ret << endl;
system("pause");
return 0;
}
system("pause");
return 0;
}
-
4.5 GetCommodityInfo (获取商品上下架信息)
-
使用场景:下架商品
-
函数原型:
int GetCommodityInfo(const char* code)
-
请求参数:
请求参数 必填 ==类型== 描述 code Y char* 上架商品的商品代码 -
返回值:0代表上架状态,1为下架状态,其他皆为失败
-
调用示例:
#include <iostream> #include "lib_food.h" int main() { char plu[10] = "123456789" int ret = PullOffShelves(plu); if (ret == 0) { cout << "GetCommodityInfo put on"<< endl; } else if(ret == 1) { cout << "GetCommodityInfo put off" << endl; } else { cout << "GetCommodityInfo error" << endl; } system("pause"); return 0; }
3.18 TrainTheWrongCommodity (训练识别错误菜品)
-
使用场景:训练识别错误菜品
-
函数原型:
int TrainTheWrongCommodity(char* code, int ord, char* sessionId);
- 请求参数:
请求参数 | 必填 | ==类型== | 描述 |
---|---|---|---|
code | Y | char* | 商品代码 |
ord | Y | int | 错误菜品序号 |
sessionId | Y | char* | 识别返回sessionId |
-
返回值:返回值:0代表正常,其他皆为失败
-
调用示例:
#include <iostream>
#include "lib_food.h"
int main()
{
WM_AI_OUTPUT_STR deteced;
char sessionId[128] = {};
char path[128] = {};
int ret = Recognize(&deteced, path,sessionId);
if (ret != 0)
{
cout << "Recognize error,look for log and solve question" << endl;
system("pause");
}
char code[10] = "123";
int ord = 0;
TrainTheWrongCommodity(code,ord,sessionId);
system("pause");
return 0;
}
3.19 GetAllCommodity (获取所有注册过的商品)
-
使用场景:获取所有注册过的商品
-
返回的结果字符串,会用逗号分割结果。
-
函数原型:
int GetAllCommodity(char* code);
- 请求参数:
请求参数 | 必填 | ==类型== | 描述 |
---|---|---|---|
code | Y | char* | 商品代码 |
-
返回值:返回值:0代表正常,其他皆为失败
-
调用示例:
#include <iostream>
#include "lib_food.h"
int main()
{
char code[128] = {};
int ret = GetAllCommodity(code);
if (ret != 0)
{
cout << "Recognize error,look for log and solve question" << endl;
system("pause");
}
printf("commodity:%s",code);
return 0;
}
3.20 GetRegisterRecording (获取最后5次注册过的商品记录)
- 使用场景:获取最后5次注册过的商品记录,将商品条码与图片做对应,用于删除错误的注册记录
- 函数原型:
typedef struct _WM_AI_REC_
{
int id;
char code[20];
char path[128];
}WM_AI_REC;
typedef struct _WM_AI_REG_REC_
{
WM_AI_REC records[5];
}WM_AI_REG_REC;
int GetRegisterRecording(WM_AI_REG_REC *record);
- 请求参数:
请求参数 | 必填 | ==类型== | 描述 |
---|---|---|---|
record | Y | WM_AI_REG_REC* | 商品注册记录 |
-
返回值:返回值:0代表正常,其他皆为失败
-
调用示例:
#include <iostream>
#include "lib_food.h"
int main()
{
WM_AI_REG_REC records;
ret = GetRegisterRecording(&records);
if (ret != 0)
{
cout << "GetRegisterRecording error,look for log and solve question" << endl;
system("pause");
return 0;
}
for (int i = 0; i < 5; i++)
{
printf("i:%d, id:%d ,code:%s ,path:%s\n",i , records.records[i].id , records.records[i].code, records.records[i].path);
}
return 0;
}
3.21 DeleteRegisterRecording (删除错误注册记录)
- 使用场景:获取最后5次注册过的商品记录后,将错误的注册记录对应的id传入,用于删除错误的注册记录
- 函数原型:
int DeleteRegisterRecording(int id)
- 请求参数:
请求参数 | 必填 | ==类型== | 描述 |
---|---|---|---|
id | Y | int | 商品注册记录对应的id |
-
返回值:0代表正常,其他皆为失败
-
调用示例:
#include <iostream>
#include "lib_food.h"
int main()
{
int id = 0;
cout<<"输入需要删除的商品资料id:\n";
cin >> id;
int ret = DeleteRegisterRecording(id);
if (ret != 0)
{
cout << "DeleteRegisterRecording error,look for log and solve question" << endl;
system("pause");
return 0;
}
return 0;
}
3.22 GetAllCommodity (获取所有已注册商品)
- 使用场景:获取所有已注册商品
- 注:会把所有已注册商品的条码用逗号隔开的形式写入本地文件,返回值为文件路径
- 函数原型:
int GetAllCommodity(char* path)
- 请求参数:
请求参数 | 必填 | ==类型== | 描述 |
---|---|---|---|
path | Y | char * | 文件路径 |
-
返回值:0代表正常,其他皆为失败
-
调用示例:
#include <iostream>
#include "lib_food.h"
int main()
{
char path[128];
int ret = GetAllCommodity(path);
if (ret != 0)
{
cout << "GetAllCommodity error,look for log and solve question" << endl;
system("pause");
return 0;
}
return 0;
}
3.23 CountCurrentCommodity (获取当前餐盘商品数量)
- 使用场景:获取当前餐盘商品数量
- 函数原型:
int CountCurrentCommodity(int &count)
- 请求参数:
请求参数 | 必填 | ==类型== | 描述 |
---|---|---|---|
count | Y | int& | 商品数量 |
-
返回值:0代表正常,其他皆为失败
-
调用示例:
#include <iostream>
#include "lib_food.h"
int main()
{
int count= 0;
int ret = CountCurrentCommodity(count);
if (ret != 0)
{
cout << "CountCurrentCommodity error,look for log and solve question" << endl;
system("pause");
return 0;
}
cout << "当前餐盘商品数量名为:" << count << endl;
return 0;
}
附录 1:商品识别返回错误码
错误码 | 描述 | 解决方案 |
---|---|---|
0 | 成功 | |
-1002 | 未开启视频流检测 | |
-1003 | 配置文件缺失 | 检测config.ini文件是否存在 |
-2001 | 验证失败 | 调用initpos接口注册设备 |
-2002 | 读取图片失败 | 检查摄像头连接是否正常, |
-2003 | 摄像头打开失败 | 检查摄像头是否能打开 |
-2004 | 未检出商品 | |
-2005 | 未检出多个商品 | |
-2006 | 推理失败 | 检查初始化接口是否调用成功 |
-2007 | 没有设置摄像头剪辑坐标 | |
-2008 | 超出设定范围 | 图片默认像素为640*480 |
-3001 | 商品代码为空 | 请查看传输的参数 |
-3002 | 商品已上架 | |
-3003 | 商品已下架 | |
-3004 | sessionId错误 | |
-3005 | 数据库异常 | |
-4001 | snCode没有找到 | 确认输入是否正确 |
-4002 | sn已经绑定过 | 联系运维人员 |
-4003 | mac已经绑定过 | 联系运维人员 |
-4004 | snCode没有找到 | 请确认sn跟租户的对应关系 |
-4006 | url请求失败 | 联系运维人员 |
附录 2:用例说明
1.有摄像头变化即识别
摄像头下物品产生移动即开始进行识别 重设置裁剪摄像头时,注意裁剪不要出秤盘
附录 2:配置文件参数说明
1.局域网同步
修改算法库的配置文件config.ini中的参数openSyn即可选择开启或关闭,openSyn=1为开启,openSyn=0为关闭
2.识别延迟
配置文件config.ini中的参数delay,为视频流检查到菜品进入后,触发识别的延迟。例:delay =200 ,即WmAutoDetect接口中的state参数由0变1后200ms后进行识别。可根据需求进行调整,保证识别时菜品完全进入识别区域。