V1版本

Last updated: ... / Reads: 45 Edit

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

Windows端 DLL 接口说明文档

image-20210604131103047

Version Release v1.0.13.4

更新时间: 2023.07.19

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

[TOC]

Windows端DLL接口文档

一、文档说明

1.1 版本说明

文档版本号SDK 版本号发布日期更新内容
v1.0.0v1.0.02021.3.15新版本发布
v1.0.1v1.0.12021.5.19支持商品代码模型代码自动匹配
v1.0.2v1.0.22021.6.031.增加拍照功能
2.增加自主注册功能
v1.0.3v1.0.32021.6.08接口优化
v1.0.4v1.0.42021.6.181.支持导入导出已学习的数据
2.增加释放的函数
3.AutoDetect 函数不再返回置信度
v1.0.5v1.0.52021.7.081.不再使用dev.txt 改成 dev.ini
2.AutoDetect函数不再返回0 如果没有结果直接忽略
v1.0.6v1.0.62021.08.171.SetFeedBack函数增加商品名称字段
v1.0.7v1.0.72021.10.22
v1.0.8v1.0.82021.11.121.解决启动不了程序的问题
2.增加了解绑接口
v1.0.9v1.0.92021.12.101.日志按天分割
2.修正版本号
v1.0.10v1.0.102021.12.281.修正错误索引无法加载的问题
2.增加函数清空学习记录
v1.0.10.1v1.0.10.12022.01.05修正了关闭程序之后进程无法关闭的问题
v1.0.10.2v1.0.10.22022.01.13修正了开启局域网同步后会出现未响应的问题
v1.0.11v1.0.112022.03.041.升级了算法
2.解决了导入问题和配置文件的问题
v1.0.11.2v1.0.11.22022.04.071.移除了识别图片储存和同步到云端
2.不再生成索引文件
v1.0.11.3v1.0.11.32022.04.201.修改了学习的部分逻辑
2.日志只保留7日
v1.0.11.4v1.0.11.42022.05.231.修复了数据库异常数据的问题
2.增加了重新打开摄像头接口
v.1.0.11.5v1.0.11.52022.10.201.新增接口:ClearEmptyData
2.修复了问题
v1.0.11.6v1.0.11.62022.11.111.新增接口:SelectByName
2.放开局域网同步功能,放开储存打称图
3.修改数据库时间为当地时间,修改日志乱码情况
v1.0.11.7v1.0.11.72022.11.291.新增接口:FreshChangeError
v1.0.11.8v1.0.11.82023.1.311.新增上传商品数据的接口:UploadTrainedData
2.新增下载商品数据的接口:DownloadTrainedData
v1.0.11.9v1.0.11.92023.2.161.修改了从摄像头获取图片的编码格式
2.新增检验sn码状态接口
v1.0.12.0v1.0.12.02023.3.31.新增试用接口Probation
2.新增预学习接口PreLearning
v1.0.12.1v1.0.12.12023.4.61.校验snCode接口(SnCodeVerification)新增非必填参数timeOut(默认15s),用于控制请求超时时间
2.新增不规则裁剪接口LrregularScaleSetting
v1.0.13.0v1.0.13.02023.4.101.新增初始化接口Init
2.新增上传单条数据接口:UploadSingleData
3.新增上传数据库接口:UploadDatabase
4.新增根据plul列表下载数据接口:DownloadDatabase
5.新增根据时间下载最新数据接口:DownloadDatabaseAuto
v1.0.13.1v1.0.13.12023.5.241.新增接口:SetFeedBackMixed,用于区分混称或非混称商品
v1.0.13.2v1.0.13.22023.5.261.新增接口:GetDownloadDatabaseSize获取当前需要自动同步数据的数量
v1.0.13.3v1.0.13.32023.6.11.新增接口:AutoDetectWithPic 识别商品并返回识别图片
v1.0.13.4v1.0.13.42023.07.191.新增网络请求超时错误码:-4028
2.优化上传单条商品数据接口 UploadSingleData,并新增错误码:-4012

1.2 ⽂档概述

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

1.3 术语定义及说明

  1. 术语说明
  • DLL:集成在 Windows 端的软件包;
  • 商品Id:这里的商品Id,泛指商品识别信息。需要在接口中统一并能唯一识别商品信息;
  • 本文中所有传输内容无特殊说明均使用 ANSI 编码;
  • 本文中的 DLL 适用于操作系统 Windows 7以上的版本,支持32或64位操作系统

二、 调用方法说明

2.1 集成方法说明

  1. 将压缩包内所有 DLL 放在程序可执行目录下即可
  2. 客户端加载WmAceKG-x86.dll(32位)
  3. 加载DLL中的函数即可
  4. 我方提供 C#调用 demo ,下载链接:https://ai-wmdigit.oss-cn-shanghai.aliyuncs.com/windows%E7%89%88%E6%9C%ACdll%E5%AF%B9%E6%8E%A5%E7%A4%BA%E4%BE%8B%E4%BB%A3%E7%A0%81/%E5%85%83%E8%8A%92windows%E7%89%88dll%E5%90%84%E8%AF%AD%E8%A8%80%E5%AF%B9%E6%8E%A5%E7%A4%BA%E4%BE%8B%E4%BB%A3%E7%A0%81.zip

2.2 接口调用流程描述

  1. 设备初次使用,注册 pos 机 :initpos
  2. 设置摄像头 序号 SetCameraId
  3. 获取秤盘裁剪坐标 GetScaleSetting 如果为空 进入第4 ,否则进入第6
  4. 首先调用 GetScaleBitmap 获得一张原图 根据原图裁剪左上角 xy 坐标 和 长宽
  5. 设置秤盘裁剪坐标 SaveScaleSetting
  6. 调用AutoDetect 接口(其他说明放到对应的接口中了)
  7. 用户做出选择后,调用setFeedBack 接口,优化算法

2.3 接口时序图

三、 接⼝说明

所有接口皆返回错误码 不为0的情况皆是错误

具体业务返回值都在参数里面 作为引用传递 最后修改传入参数为最终结果

设备初始化

3.1 Init (初始化)

  • 使用场景:初始化识别所需要的内容

  • 函数原型:

    Init() 
    
  • 请求参数:

    请求参数必填类型描述
  • 返回值:0代表成功 其他皆为失败

  • 调用示例:

    [DllImport(NativeLibrary, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
    private unsafe extern static int Init();
    

3.2 InitPos (注册 POS 接口 )

  • 使用场景:初始化识别所需要的内容,以及验证sncode是否正确,该接口需要连接互联网。注册成功后则无需再次调用。

  • 函数原型:

    InitPos(char* tenant,char* posCode,char* snNo) 
    
  • 请求参数:

    请求参数必填类型描述
    tenantYchar*租户代码,线上申请后邮件发送
    posCodeYchar*pos机的编号,可自己编辑,一旦对应不可更改
    snNoYchar*sdk 码必填
  • 返回值:0代表成功 其他皆为失败

  • 调用示例:

    [DllImport(NativeLibrary, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
    private unsafe extern static int InitPos(StringBuilder tenant, StringBuilder posCode, StringBuilder snNo);
    
    // 关于这几个参数 请咨询运维人员
    StringBuilder tenant = new StringBuilder("demo");
    StringBuilder posCode = new StringBuilder("zyx");
    StringBuilder snNo = new StringBuilder("123");
    InitPos(tenant, posCode, snNo);
    

3.3 SetCameraId(初始化摄像头-设置开启摄像头id)

  • 使用场景:由于设备可能有多个摄像头,提前设定好具体是哪个摄像头,默认是0。
  • (注):当close()之后,都必须再次调用此接口。
  • 函数原型:
SetCameraId (int num) 
  • 参数说明:
请求参数必填类型描述
numYint摄像头序号,一般从 0 开始
  • 返回值:0代表成功 其他皆为失败

  • 调用示例:

    [DllImport(NativeLibrary, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
    private unsafe extern static int SetCameraId(int num);
    
    SetCameraId(0);
    

3.4 GetScaleBitmap(初始化秤盘信息-获取全景照片)

  • 使用场景:AI识别的是秤盘上的物品,需要提前标定好秤盘的位置,在标定秤盘位置前,获取全景照片准备开始标定(裁剪)秤盘。

    • !!注意:调用之前,请设置摄像头序号。

      如果未设置裁剪坐标 ,不会返回裁剪后的cropPath,只会返回原图路径。

      如果设置了裁剪坐标,原图和裁剪后的图都会返回

  • 函数原型:

GetScaleBitmap (char* rawPath,char* cropPath);
  • 参数说明:
请求参数必填类型描述
rawPathYchar*原图路径 该值为引用传递 调用后会修改成最终结果
cropPathYchar*裁剪后的图片路径 该值为引用传递 调用后会修改成最终结果
  • 返回值:0代表成功 其他皆为失败

  • 调用示例:

    [DllImport(NativeLibrary, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
    private unsafe extern static int GetScaleBitmap(StringBuilder path1, StringBuilder path2);
    
    // 原图路径
    StringBuilder path1 = new StringBuilder(128);
    // 裁剪后的图片路径
    StringBuilder path2 = new StringBuilder(128);
    int code = GetScaleBitmap(path1, path2);
    

3.5 SaveScaleSetting(初始化秤盘信息-标定秤盘并保存坐标信息)

  • 使用场景:AI识别的是秤盘上的物品,在识别商品时,AI只识别标定内的物品,该接口用来传递秤盘位置信息

    秤盘必须为矩形,推荐宽高比例为4:3,比例为4:3的时识别的精度最高,识别最准。默认像素为640*480,所以x+width <640 y+height <480并且 x!=0,y!=0。

  • 函数原型:

SaveScaleSetting (int x,int y,int width,int height);
  • 参数说明:
请求参数必填类型描述
xYint左上角 x 坐标值
yYint左上角 y 坐标值
widthYint宽度
heightYint高度
  • 返回值:0代表成功 其他皆为失败

  • 调用示例:

    [DllImport(NativeLibrary, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
    private unsafe extern static int SaveScaleSetting(int x, int y, int width, int height);
    
    SaveScaleSetting(1, 1, 512, 384);
    

3.6 GetScaleSetting(判断秤盘是否已标定)

  • 使用场景:AI识别的是秤盘上的物品,在识别商品时,会提前判断本次秤盘是否已被标定,如果没有被标定,请重新初始化秤盘

  • 函数原型:

GetScaleSetting(int& x,int& y,int& width,int& height);
  • 参数说明:
请求参数必填类型描述
xYint&左上角 x 坐标值 该值为引用传递 调用后会修改成最终结果
yYint&左上角 y 坐标值 该值为引用传递 调用后会修改成最终结果
widthYint&宽度 该值为引用传递 调用后会修改成最终结果
heightYint&高度 该值为引用传递 调用后会修改成最终结果
  • 返回值:0代表成功 其他皆为失败

  • 调用示例:

    [DllImport(NativeLibrary, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
    private unsafe extern static int GetScaleSetting(ref int x, ref int y, ref int width, ref int height);
    
    int x = 0;
    int y = 0;
    int width = 0;
    int height = 0;
    int code = GetScaleSetting(ref x, ref y, ref width, ref height);
    

设备初始化

3.7_1 AutoDetect (商品识别)

  • 使用场景:开始识别商品,调用此接口;建议在重量触发时,秤盘稳定读数且读数>30g后调用
  • 函数原型:
AutoDetect(char* productcode, char* sessionId)  
  • 请求参数:
请求参数必填类型描述
ProductcodeYchar*最匹配的商品代码 用逗号分割 该值为引用传递 调用后会修改成最终结果
sessionIdYchar*打称记录的 id 该 id 随机生成 该值为引用传递 调用后会修改成最终结果
  • 返回值:0代表成功 其他皆为失败

  • 调用示例:

    [DllImport(NativeLibrary, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
    private unsafe extern static int AutoDetect(StringBuilder productcode, StringBuilder sessionId);
    
    // 商品代码
    StringBuilder productCodes = new StringBuilder(500);
    StringBuilder sessionId = new StringBuilder(20);
    AutoDetect(productCodes, sessionId);
    

3.7_2 AutoDetectWithPic(商品识别并返回识别的图像)

  • 使用场景:开始识别商品,调用此接口;建议在重量触发时,秤盘稳定读数且读数>30g后调用;

  • 注:与AutoDetect接口相比较,除是否有识别图片返回之外,无其他区别,依据需求对接即可。

  • 函数原型:

AutoDetectWithPic(char* productcodes, char* sessionId,char *path);
  • 请求参数:
请求参数必填类型描述
ProductcodeYchar*最匹配的商品代码 用逗号分割 该值为引用传递 调用后会修改成最终结果
sessionIdYchar*打称记录的 id 该 id 随机生成 该值为引用传递 调用后会修改成最终结果
pathYchar *识别的商品图像 该值为引用传递 调用后会修改成最终结果
  • 返回值:0代表成功 其他皆为失败

  • 调用示例:

    [DllImport(NativeLibrary, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
    private unsafe extern static int AutoDetectWithPic(StringBuilder productcode, StringBuilder sessionId,StringBuilder path);
    
    // 商品代码
    StringBuilder productCodes = new StringBuilder(500);
    StringBuilder sessionId = new StringBuilder(20);
    StringBuilder path = new StringBuilder(128);
    AutoDetectWithPic(productCodes, sessionId,path);
    

3.8_1 SetFeedBack (保存识别结果)

  • 使用场景:识别后传入选中结果(正确商品的code)和是否选中(hit),调用此接口,用于优化算法。

  • 关于hit字段详解:

    第一次使用dll 里面是没有任何商品信息的 这个时候你调用AutoDetect会返回你一个空字符串 你需要自己搜索一个商品 然后使用保存函数 hit=false

    再次使用AutoDetect这个时候 会把你上次保存的商品代码返回 因为本次识别 已经将商品对应的代码返回 所以使用保存函数的时候 hit=true

    总结: 商品代码AutoDetect只返回一个正确结果就是true,其他都为false

  • 函数原型:

SetFeedBack (const char* code, char* sessionId, bool hit,char* productName)
  • 参数说明:
请求参数必填类型描述
codeYconst char*选择的商品代码
sessionIdYchar*打称记录 Id
hitYbool是否命中
productNameYchar*商品名称
  • 返回值:0代表成功 其他皆为失败

  • 调用示例:

    [DllImport(NativeLibrary, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
    private unsafe extern static int SetFeedBack(byte[] code, StringBuilder sessionId,bool hit,byte[] productName);
    
    SetFeedBack(System.Text.Encoding.UTF8.GetBytes("00174"), sessionId, false,System.Text.Encoding.UTF8.GetBytes("FF散称商品"));
    

3.8_2 SetFeedBackMixed(保存识别结果)

  • 使用场景:使用方式与setfeedback相同,接口新增了mixed参数,用于在使用混称方案时,区分混称和非混称商品,来做识别优化。
  • 函数原型:
SetFeedBackMixed (const char* code, char* sessionId, bool hit,char* productName,bool mixed)
  • 参数说明:
请求参数必填类型描述
codeYconst char*选择的商品代码
sessionIdYchar*打称记录 Id
hitYbool是否命中
productNameYchar*商品名称
mixedNbool是否为混称商品
  • 返回值:0代表成功 其他皆为失败

  • 调用示例:

    [DllImport(NativeLibrary, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
    private unsafe extern static int SetFeedBack(byte[] code, StringBuilder sessionId,bool hit,byte[] productName,bool mixed);
    
    SetFeedBack(System.Text.Encoding.UTF8.GetBytes("00174"), sessionId, false,System.Text.Encoding.UTF8.GetBytes("FF散称商品"),false);
    

3.9 SetNoRecommend(删除商品学习结果)

  • 使用场景:删除商品学习结果

  • 函数原型:

SetNoRecommend (const char* code)
  • 参数说明:
请求参数必填类型描述
codeYconst char*商品代码
  • 返回值:0代表成功 其他皆为失败

  • 调用示例:

    [DllImport(NativeLibrary, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
    private unsafe extern static int SetNoRecommend(byte[] code);
    
    SetNoRecommend(System.Text.Encoding.UTF8.GetBytes("00174"));
    

3.10 ImportData(导入学习数据)

  • 使用场景:如果拥有另一台机器已经学习完毕 可以使用该函数将学习数据导入

    导入之后必须重启程序 导入的文件名不能带有中文字符

  • 函数原型:

ImportData(char* path);
  • 参数说明:
请求参数必填类型描述
pathYconst char*导入的文件路径
  • 返回值:0代表成功 其他皆为失败

  • 调用示例:

    [DllImport(NativeLibrary, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
    private unsafe extern static int ImportData(StringBuilder path);
    
    StringBuilder path = new StringBuilder(20);
    path = "/xxxx";
    ImportData(path);
    

3.11 ExportData(导出学习数据)

  • 使用场景:如果该机器已经学习完毕 可以使用该函数将学习数据导出

  • 函数原型:

ExportData(char* path);
  • 参数说明:
请求参数必填类型描述
pathYconst char*导出的文件路径 该值为引用传递 调用后会修改成最终结果
  • 返回值:0代表成功 其他皆为失败

  • 调用示例:

    [DllImport(NativeLibrary, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
    private unsafe extern static int ExportData(StringBuilder path);
    
    StringBuilder path = new StringBuilder(20);
    ExportData(path);
    

3.12 Close(关闭资源)

  • 使用场景:程序退出时请使用该函数释放资源
  • 调用此函数后,进程没有退出,若需要再次使用dll的接口,需重新进行初始化流程
  • 备用函数 : 为了防止部分语言自带函数Close() 提供一个备选函数WMrelease() 供使用
  • 函数原型:
Close()
  • 参数说明:
请求参数必填类型描述
  • 返回值:0代表成功 其他皆为失败

  • 调用示例:

    [DllImport(NativeLibrary, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
    private unsafe extern static int Close();
    
    Close();
    

3.13 UnBindPos(解绑POS)

  • 使用场景:解绑SN码
  • 函数原型:
UnBindPos(char* tenant, char* snNo);
  • 参数说明:
请求参数必填类型描述
tenantychar*租户
snNoychar*注册码
  • 返回值:0代表成功 其他皆为失败

  • 调用示例:

    [DllImport(NativeLibrary, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
    private unsafe extern static int UnBindPos(StringBuilder tenant, StringBuilder snNo);
    
    UnBindPos(new StringBuilder("demo"),new StringBuilder("123"));
    

3.14 ClearTrainedData(清空学习记录)

  • 使用场景:清空学习记录
  • 使用此函数后,需要重启程序
  • 函数原型:
ClearTrainedData();
  • 返回值:0代表成功 其他皆为失败

  • 调用示例:

    [DllImport(NativeLibrary, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
    private unsafe extern static int ClearTrainedData();
    
    ClearTrainedData();
    

3.15 ReopenCamera(重新打开摄像头)

  • 使用场景:针对反馈的摄像头设备问题,提供重新打开接口。

  • 函数原型:

ReopenCamera (int num) 
  • 参数说明:
请求参数必填类型描述
numYint摄像头序号,一般从 0 开始
  • 返回值:0代表成功 其他皆为失败

  • 调用示例:

    [DllImport(NativeLibrary, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
    private unsafe extern static int ReopenCamera(int num);
    
    ReopenCamera(0);
    

3.16 ClearEmptyData(清理学习资料中的空值)

  • 使用场景:用于清理数据库中存在因错误操作或设备原因储存了空的学习数据。

  • 注:接口调用所需时间较长。

  • 注:接口会把feature_code表中特征值为空的数据删除,且会生成一个新的featurexYz.db文件,原来的featurexYz.db会备份生成一个old_featurexYz.db

  • 注:old_featurexYz.db只会生成一个,多次调用删除空值的接口,会覆盖已有的old_featurexYz.db文件

  • 函数原型:

ClearEmptyData () 
  • 参数说明:(无)

  • 返回值:0代表成功 其他皆为失败

  • 调用示例:

    [DllImport(NativeLibrary, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
    private unsafe extern static int ClearEmptyData();
    ClearEmptyData();
    
    

3.17 SelectByName(自动配图)

  • 使用场景:匹配商品图片

  • 注: 网络不好会导致配图时间过长,断网无法匹配

  • 函数原型:

SelectByName(char* name, char* code, char* image)
  • 参数说明:
请求参数必填类型描述
nameYchar*商品名字(类型为UTF-8)
codeYchar*商品对应的plu
imageYchar*返回商品图片对应的URL,调用无需传值
  • 返回值: 0代表成功,其他代表失败

  • 调用示例

    [DllImport(NativeLibrary, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
    private unsafe extern static int SelectByName(byte[] name, byte[] code, byte[] image);
    

3.18 FreshChangeError(图片纠错)

  • 使用场景:识别的时候出现多个结果,想要识别的更精确使用此功能
  • 注: 谨慎使用,可能会导致其他商品识别不准
  • 函数原型:

FreshChangeError(const char* code)
  • 参数说明:
请求参数必填类型描述
codeYchar*商品plu

返回值: 0代表成功,其他代表失败

调用示例

[DllImport(NativeLibrary, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
private unsafe extern static int FreshChangeError(byte[] name);

3.19 UploadTrainedData(上传数据至云端)

  • 使用场景:将商品的学习数据上传至云端储存
  • 函数原型:

int UploadTrainedData(char* productCode,char* productName,char *sessionId)
  • 参数说明:
请求参数必填类型描述
productCodeYchar*商品国标码
productNameYchar*商品名称
sessionIdYchar*识别接口返回的sessionId

返回值: 0代表成功,其他代表失败

调用示例

[DllImport(NativeLibrary, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
private unsafe extern static int UploadTrainedData(byte[] productCode,byte[] productName,byte[] sessionId);

3.20 DownloadTrainedData(下载云端数据至本地)

  • 使用场景:依据需求从云端下载数据到本地
  • 函数原型:

int DownloadTrainedData(char* filePath)
  • 参数说明:
请求参数必填类型描述
filePathYchar*json文件路径

返回值: 0代表成功,其他代表失败

注:文件示例:products.json

[
  {
    "standardCode": "GB001",#国标码
    "pluCode": "001"#商品条码
  },
  {
    "standardCode": "GB002",
    "pluCode": "002"
  },
  {
    "standardCode": "GB003",
    "pluCode": "003"
  },
  {
    "standardCode": "GB004",
    "pluCode": "004"
  }
]

调用示例

[DllImport(NativeLibrary, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
private unsafe extern static int DownloadTrainedData(byte[] filePath);

3.21 SnCodeVerification(校验sn码)

  • 使用场景:后台解绑后,前台需要校验sn状态时使用
  • 函数原型:

int SnCodeVerification(char* snCode,int timeOut = 15)
  • 参数说明:
请求参数必填类型描述
snCodeYchar*snCode
timeOutNint网络请求超时时间(秒)

返回值: 0代表成功,其他代表失败

调用示例

[DllImport(NativeLibrary, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
private unsafe extern static int SnCodeVerification(byte[] snCode,int timeOut = 15);

3.22 Probation(试用接口)

  • 使用场景:在未注册的情况下试用sdk,试用期为15天
  • 函数原型:
Probation()
  • 参数说明:
请求参数必填类型描述

返回值: 0代表成功,其他代表失败

调用示例

[DllImport(NativeLibrary, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
private unsafe extern static int Probation();

3.23 PreLearning(预学习)

  • 使用场景:对指定文件中的商品进行预学习,实现不学习即可识别商品。
  • 说明:此功能只是作为方便上手操作使用,由于秤盘不同,预学习的结果并不一定保证100%准确。
  • 函数原型:
PreLearning(char* path)
  • 参数说明:
请求参数必填类型描述
pathYchar*商品列表文件路径

返回值: 0代表成功,其他代表失败

注:文件格式

{"productList":[{"productName":"苹果","productNumber":"123"},{"productName":"香蕉","productNumber":"456"}]}

调用示例

[DllImport(NativeLibrary, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
private unsafe extern static int PreLearning(byte[] path);

3.24 LrregularScaleSetting(标定秤盘位置信息,支持不规则裁剪秤盘)

  • 使用场景:AI识别的是秤盘上的物品,在识别商品时,AI只识别标定内的物品,该接口用来传递秤盘位置信息,需要传入4个坐标点的位置信息。

  • 注:相较于SaveScaleSetting接口,不再强制要求识别区域为规则矩形

  • 函数原型:

int LrregularScaleSetting(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4);
  • 参数说明:
请求参数必填类型描述
x1Yint点位1 x 坐标值
y1Yint点位1 y 坐标值
x2Yint点位2 x 坐标值
y2Yint点位2 y 坐标值
x3Yint点位3 x 坐标值
y3Yint点位3 y 坐标值
x4Yint点位4 x 坐标值
y4Yint点位4 y 坐标值
  • 返回值:0代表成功 其他皆为失败

  • 调用示例:

    [DllImport(NativeLibrary, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
    private unsafe extern static int LrregularScaleSetting(int x1, int y1, int x2, int y2, int x3, int y3, int x4, int y4);
    
    SaveScaleSetting(1, 1, 10, 200,400,50,300,400);
    

3.25 UploadSingleData(上传单条数据)

  • 使用场景:识别完成后,本次识别结果需要上传时,调用该接口
  • 函数原型:

int UploadSingleData(char* code, char* client, char* sessionId)
  • 参数说明:
请求参数必填类型描述
codeYchar*商品code
clientYchar*客户名称
sessionIdYchar*识别返回sessionId

返回值: 0代表成功,其他代表失败

调用示例

[DllImport(NativeLibrary, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
private unsafe extern static int UploadSingleData(byte[] code,byte[] client,byte[] sessionId);

3.26 UploadDatabase(上传数据库)

  • 使用场景:将本地数据库文件上传到云端
  • 函数原型:

int UploadDatabase(char* client)
  • 参数说明:
请求参数必填类型描述
clientYchar*客户名称

返回值: 0代表成功,其他代表失败

调用示例

[DllImport(NativeLibrary, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
private unsafe extern static int UploadDatabase(byte[] client);

3.27 DownloadDatabase(指定plu下载云端学习数据)

  • 使用场景:从指定的plu列表中,下载云端学习数据
  • 函数原型:

int DownloadDatabase(char* client, char* path)
  • 参数说明:
请求参数必填类型描述
clientYchar*客户名称
pathYchar*plu列表文件路径

返回值: 0代表成功,其他代表失败

注:plu列表文件,使用txt格式即可,plu之间用逗号分割即可(不能用中文字符),例:1001,1002,

调用示例

[DllImport(NativeLibrary, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
private unsafe extern static int DownloadDatabase(char* client, char* path);

3.28 DownloadDatabaseAuto(根据时间戳下载最新学习数据)

  • 使用场景:云端根据上次下载时间判断,本次自动下载最新的学习数据
  • 函数原型:

int DownloadDatabaseAuto(char* client)
  • 参数说明:
请求参数必填类型描述
clientYchar*客户名称

返回值: 0代表成功,其他代表失败

调用示例

[DllImport(NativeLibrary, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
private unsafe extern static int DownloadDatabaseAuto(byte[] client);

3.29 GetDownloadDatabaseSize(获取从云端下载数据的数量)

  • 使用场景:根据时间戳下载最新学习数据前调用此接口,获取本次从云端下载数据的数量
  • 函数原型:

int GetDownloadDatabaseSize(char* client,int &size)
  • 参数说明:
请求参数必填类型描述
clientYchar*客户名称
sizeYint&数据大小,该值为引用传递,会在接口内部修改参数的值

返回值: 0代表成功,其他代表失败

调用示例

[DllImport(NativeLibrary, CallingConvention = CallingConvention.StdCall, CharSet = CharSet.Ansi)]
private unsafe extern static int GetDownloadDatabaseSize(byte[] client,ref int size);

附录 1:商品识别返回错误码

错误码描述解决方案
0成功
-1002正在导入学习资料导入学习资料时请要使用识别和学习功能,并在导入完成后重新启动程序
-1003初始化未完成检查是否成功调用Init函数
-1004学习资料为空请检查识别是否成功
-2001验证失败检查是否成功调用InitPos函数
-2002读取图片失败检查摄像头设备是否正常
-2003摄像头打开失败检查摄像头连接是否正常,系统自带相机是否能打开
-2004商品记录未找到检查是否成功调用AutoDetect函数
-2005sessionId未找到检查是否成功调用AutoDetect函数
-2006初始化pos失败检查执行目录是否有dev.ini
-2007打开文件失败检查传入传入路径是否正确
-2008保存坐标,像素长宽失败默认像素为640*480 请确认x+w <640 y+h<480
-2009没有设置摄像头剪辑坐标请使用SaveScaleSetting函数保存下坐标
-2010摄像头尚未加载完毕摄像头加载根据硬件不同速度也不同,请在SetCameraId后 等待1秒再调用该函数
-3001该名称没有匹配到照片请检查名称是否合理
-3002请求照片失败请检查传入的名字是否合法
-3003读取文件失败检查传入参事的文件路径是否正确
-4001snCode没有找到snCode没有找到
-4002绑定pos机失败该posCode已经绑定过,并且绑定的mac地址和传入的mac地址不一致
-4003绑定pos机失败此POS的MAC地址 绑定过其它POS机,请联系管理员确认POS机编号!
-4004租户没找到tenantCode没有找到
-4005snCode没有绑定snCode并未绑定无需解绑
-4006解绑失败该pos现在的mac地址和服务器记录的mac地址不一致 无法解绑
-4012任务繁忙该客户上传的向量数据正在处理,请稍后重试
-4028网络请求超时检测一下设备网络状态
-5001需求下载商品的json文件未找到检查传输的文件路径
-5002下载商品数据失败确认网络连接是否存在问题

附录 2:用例说明

1.有重量变化即识别

定义个布尔变量,当重量小于 10g 的时候,该变量为 false,

当重量有变化大于 30g 的时候且同时该变量为 false,进行识别,并把该变量设置为 true

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

配置文件dev.ini(无特殊解释的不用去修改)

openSync

此参数位局域网同步控制参数,0为关闭局域网同步,1为开启局域网同步,如果两台机器都开启了局域网同步,A机器再次学习后的数据会同步到B机器上。


Comments

Make a comment