餐饮SDK对接文档

Last updated: ... / Reads: 64 Edit

元芒数字 i 识别系统(WmAceKG)

Windows端 DLL 接口说明文档

image-20210604131103047

Version Release v1.0.2.0
更新时间: 2023.08.31

上海元芒数字科技有限公司

Windows端DLL接口文档

一、文档说明

1.1 版本说明

文档版本号SDK 版本号发布日期更新内容
v1.0.0.1v1.0.0.12021.9.26新版本发布
v1.0.0.2v1.0.0.22021.9.30修改了函数名称,增加了数据库映射
v1.0.0.3v1.0.0.32021.11.01提升了运算速度 保存了历史训练结果
v1.0.0.4v1.0.0.42021.12.03优化了算法 图片自动上传服务器 删除不必要的日志
v1.0.0.5v1.0.0.52021.12.30优化算法
v1.0.0.6v1.0.0.62022.02.25增加删除学习资料和清空学习资料函数
v1.0.0.7v1.0.0.72022.03.29优化算法,新增本地索引文件
v1.0.0.8v1.0.0.82022.06.27算法优化
v1.0.0.9v1.0.0.92022.07.02优化,新增接口
v1.0.0.10v1.0.0.102022.07.04新增学习数据局域网同步功能
v1.0.0.11v1.0.0.112022.07.14新增接口
v1.0.0.12v1.0.0.122022.07.23新增接口,升级算法
v1.0.1.0v1.0.1.0新增接口
v1.0.1.1v1.0.1.12022.10.08新增接口
v1.0.1.2v1.0.1.22022.10.25新增接口,升级算法模型
v1.0.1.3v1.0.1.32022.10.29升级算法模型
v1.0.1.4v1.0.1.42022.11.07新增接口
v1.0.1.5v1.0.1.52022.11.18升级了饮料和菜签
v1.0.1.6v1.0.1.62023.02.02升级了视频流算法
v1.0.1.7v1.0.1.72023.03.08识别算法新增商品
v1.0.2.0v1.0.2.02023.08.31优化算法模型,修改了WmAutoDetect接口

1.2 ⽂档概述

此文档用于说明元芒数字(WM)i 识别(AceKG)系统(简称 WmAceKG) Windows 系统接口开发使用,集成相关软件包,以实现相关功能的接口说明文档

1.3 术语定义及说明

  1. 术语说明
  • ==DLL:集成在 Windows 端的软件包==
  • ==商品Id:这里的商品Id,泛指商品识别信息。需要在接口中统一并能唯一识别商品信息==
  1. ==本文中所有传输内容均使用 ANSI 编码==

  2. ==本文中的 DLL 适用于操作系统 Windows 7以上的版本,支持32或64位操作系统==

二、 调用方法说明

2.1 集成方法说明

  1. 将压缩包内所有 DLL 放在程序可执行目录下即可
  2. 客户端加载libfood.dll
  3. 加载DLL中的函数即可
  4. config.ini文件中mode=0 为CPU推理 mode=1为GPU推理

2.2 接口调用流程描述

  1. SDK初始化接口init

  2. 在第一次使用时,请用initpos接口注册设备。

  3. 秤盘没有裁剪,需进入裁剪秤盘界面,如果data文件中有,则不需要进行裁剪了(每次进入系统会 裁剪图片) 获取裁剪秤盘:getScaleSetting 保存裁剪秤盘:saveScaleSetting

  4. 裁剪图片后会自动进入识别函数,根据放上来的物品进行识别

  5. 没有识别的物品用注册函数进行注册

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) 
  • 参数说明:
请求参数必填类型描述
numYint摄像头序号,==一般从 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);
  • 参数说明:
请求参数必填==类型==描述
xYint左上角 x 坐标值
yYint左上角 y 坐标值
widthYint宽度
heightYint高度
  • 返回值: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);
  • 参数说明:
请求参数必填==类型==描述
xYint&左上角 x 坐标值 该值为引用传递 调用后会修改成最终结果
yYint&左上角 y 坐标值 该值为引用传递 调用后会修改成最终结果
widthYint&宽度 该值为引用传递 调用后会修改成最终结果
heightYint&高度 该值为引用传递 调用后会修改成最终结果
  • 返回值: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);
  • 请求参数:
请求参数==必填====类型==描述
labelYchar*该商品的输入类别plu
locYWM_AI_RET*返回的注册结果
pathYchar*返回的图片存放地址
  • 返回值: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);
  • 请求参数:
请求参数==必填====类型==描述
xYunsign char*一帧图片,转换为数组
wm_ai_outputYWM_AI_OUTPUT_STR*当前帧的识别结果
sessionIdYchar*返回此次识别的session,用于回传结果
stateYint该值为引用传递,返回当前视频流检测区域的状态。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_outputYWM_AI_OUTPUT_STR*当前帧的识别结果
pathYchar*返回图片的路径
sessionIdYchar*返回此次识别的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)
  • 参数说明:
请求参数==必填====类型==描述
sessionIdYchar*打称记录 Id
successYbool是否命中
  • 返回值: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)
  • 参数说明:
请求参数==必填====类型==描述
codeYconst 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);
  • 参数说明:
请求参数必填==类型==描述
xYint左上角 x 坐标值
yYint左上角 y 坐标值
widthYint宽度
heightYint高度
  • 返回值: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)
    
  • 请求参数:

    请求参数必填==类型==描述
    tenantYchar*租户代码,线上申请后邮件发送
    posCodeYchar*pos机的编号,可自己编辑,一旦对应不可更改
    snNoYchar*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)
    
  • 请求参数:

    请求参数必填==类型==描述
    codeYchar*上架商品的商品代码
  • 返回值: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)
    
  • 请求参数:

    请求参数必填==类型==描述
    codeYchar*上架商品的商品代码
  • 返回值: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)
    
  • 请求参数:

    请求参数必填==类型==描述
    codeYchar*上架商品的商品代码
  • 返回值: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);
  • 请求参数:
请求参数必填==类型==描述
codeYchar*商品代码
ordYint错误菜品序号
sessionIdYchar*识别返回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);
  • 请求参数:
请求参数必填==类型==描述
codeYchar*商品代码
  • 返回值:返回值: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);
  • 请求参数:
请求参数必填==类型==描述
recordYWM_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)
  • 请求参数:
请求参数必填==类型==描述
idYint商品注册记录对应的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)
  • 请求参数:
请求参数必填==类型==描述
pathYchar *文件路径
  • 返回值: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)
  • 请求参数:
请求参数必填==类型==描述
countYint&商品数量
  • 返回值: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商品已下架
-3004sessionId错误
-3005数据库异常
-4001snCode没有找到确认输入是否正确
-4002sn已经绑定过联系运维人员
-4003mac已经绑定过联系运维人员
-4004snCode没有找到请确认sn跟租户的对应关系
-4006url请求失败联系运维人员

附录 2:用例说明

1.有摄像头变化即识别

摄像头下物品产生移动即开始进行识别 重设置裁剪摄像头时,注意裁剪不要出秤盘

附录 2:配置文件参数说明

1.局域网同步

​ 修改算法库的配置文件config.ini中的参数openSyn即可选择开启或关闭,openSyn=1为开启,openSyn=0为关闭

2.识别延迟

​ 配置文件config.ini中的参数delay,为视频流检查到菜品进入后,触发识别的延迟。例:delay =200 ,即WmAutoDetect接口中的state参数由0变1后200ms后进行识别。可根据需求进行调整,保证识别时菜品完全进入识别区域。


Comments

Make a comment