元芒数字 i 识别系统(WmAceKG)
Windows端 DLL 接口说明文档
Version Release v1.0.13.4
更新时间: 2023.07.19
上海元芒数字科技有限公司
[TOC]
Windows端DLL接口文档
一、文档说明
1.1 版本说明
文档版本号 | SDK 版本号 | 发布日期 | 更新内容 |
---|---|---|---|
v1.0.0 | v1.0.0 | 2021.3.15 | 新版本发布 |
v1.0.1 | v1.0.1 | 2021.5.19 | 支持商品代码模型代码自动匹配 |
v1.0.2 | v1.0.2 | 2021.6.03 | 1.增加拍照功能 2.增加自主注册功能 |
v1.0.3 | v1.0.3 | 2021.6.08 | 接口优化 |
v1.0.4 | v1.0.4 | 2021.6.18 | 1.支持导入导出已学习的数据 2.增加释放的函数 3.AutoDetect 函数不再返回置信度 |
v1.0.5 | v1.0.5 | 2021.7.08 | 1.不再使用dev.txt 改成 dev.ini 2.AutoDetect函数不再返回0 如果没有结果直接忽略 |
v1.0.6 | v1.0.6 | 2021.08.17 | 1.SetFeedBack函数增加商品名称字段 |
v1.0.7 | v1.0.7 | 2021.10.22 | |
v1.0.8 | v1.0.8 | 2021.11.12 | 1.解决启动不了程序的问题 2.增加了解绑接口 |
v1.0.9 | v1.0.9 | 2021.12.10 | 1.日志按天分割 2.修正版本号 |
v1.0.10 | v1.0.10 | 2021.12.28 | 1.修正错误索引无法加载的问题 2.增加函数清空学习记录 |
v1.0.10.1 | v1.0.10.1 | 2022.01.05 | 修正了关闭程序之后进程无法关闭的问题 |
v1.0.10.2 | v1.0.10.2 | 2022.01.13 | 修正了开启局域网同步后会出现未响应的问题 |
v1.0.11 | v1.0.11 | 2022.03.04 | 1.升级了算法 2.解决了导入问题和配置文件的问题 |
v1.0.11.2 | v1.0.11.2 | 2022.04.07 | 1.移除了识别图片储存和同步到云端 2.不再生成索引文件 |
v1.0.11.3 | v1.0.11.3 | 2022.04.20 | 1.修改了学习的部分逻辑 2.日志只保留7日 |
v1.0.11.4 | v1.0.11.4 | 2022.05.23 | 1.修复了数据库异常数据的问题 2.增加了重新打开摄像头接口 |
v.1.0.11.5 | v1.0.11.5 | 2022.10.20 | 1.新增接口:ClearEmptyData 2.修复了问题 |
v1.0.11.6 | v1.0.11.6 | 2022.11.11 | 1.新增接口:SelectByName 2.放开局域网同步功能,放开储存打称图 3.修改数据库时间为当地时间,修改日志乱码情况 |
v1.0.11.7 | v1.0.11.7 | 2022.11.29 | 1.新增接口:FreshChangeError |
v1.0.11.8 | v1.0.11.8 | 2023.1.31 | 1.新增上传商品数据的接口:UploadTrainedData 2.新增下载商品数据的接口:DownloadTrainedData |
v1.0.11.9 | v1.0.11.9 | 2023.2.16 | 1.修改了从摄像头获取图片的编码格式 2.新增检验sn码状态接口 |
v1.0.12.0 | v1.0.12.0 | 2023.3.3 | 1.新增试用接口Probation 2.新增预学习接口PreLearning |
v1.0.12.1 | v1.0.12.1 | 2023.4.6 | 1.校验snCode接口(SnCodeVerification)新增非必填参数timeOut(默认15s),用于控制请求超时时间 2.新增不规则裁剪接口LrregularScaleSetting |
v1.0.13.0 | v1.0.13.0 | 2023.4.10 | 1.新增初始化接口Init 2.新增上传单条数据接口:UploadSingleData 3.新增上传数据库接口:UploadDatabase 4.新增根据plul列表下载数据接口:DownloadDatabase 5.新增根据时间下载最新数据接口:DownloadDatabaseAuto |
v1.0.13.1 | v1.0.13.1 | 2023.5.24 | 1.新增接口:SetFeedBackMixed,用于区分混称或非混称商品 |
v1.0.13.2 | v1.0.13.2 | 2023.5.26 | 1.新增接口:GetDownloadDatabaseSize获取当前需要自动同步数据的数量 |
v1.0.13.3 | v1.0.13.3 | 2023.6.1 | 1.新增接口:AutoDetectWithPic 识别商品并返回识别图片 |
v1.0.13.4 | v1.0.13.4 | 2023.07.19 | 1.新增网络请求超时错误码:-4028 2.优化上传单条商品数据接口 UploadSingleData,并新增错误码:-4012 |
1.2 ⽂档概述
此文档用于说明元芒数字(WM)i 识别(AceKG)系统(简称 WmAceKG) Windows 系统接口开发使用,集成相关软件包,以实现相关功能的接口说明文档
1.3 术语定义及说明
- 术语说明
- DLL:集成在 Windows 端的软件包;
- 商品Id:这里的商品Id,泛指商品识别信息。需要在接口中统一并能唯一识别商品信息;
- 本文中所有传输内容无特殊说明均使用 ANSI 编码;
- 本文中的 DLL 适用于操作系统 Windows 7以上的版本,支持32或64位操作系统
二、 调用方法说明
2.1 集成方法说明
- 将压缩包内所有 DLL 放在程序可执行目录下即可
- 客户端加载WmAceKG-x86.dll(32位)
- 加载DLL中的函数即可
- 我方提供 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 接口调用流程描述
- 设备初次使用,注册 pos 机 :initpos
- 设置摄像头 序号 SetCameraId
- 获取秤盘裁剪坐标 GetScaleSetting 如果为空 进入第4 ,否则进入第6
- 首先调用 GetScaleBitmap 获得一张原图 根据原图裁剪左上角 xy 坐标 和 长宽
- 设置秤盘裁剪坐标 SaveScaleSetting
- 调用AutoDetect 接口(其他说明放到对应的接口中了)
- 用户做出选择后,调用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)
-
请求参数:
请求参数 必填 类型 描述 tenant Y char* 租户代码,线上申请后邮件发送 posCode Y char* pos机的编号,可自己编辑,一旦对应不可更改 snNo Y char* 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)
- 参数说明:
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
num | Y | int | 摄像头序号,一般从 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);
- 参数说明:
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
rawPath | Y | char* | 原图路径 该值为引用传递 调用后会修改成最终结果 |
cropPath | Y | char* | 裁剪后的图片路径 该值为引用传递 调用后会修改成最终结果 |
-
返回值: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);
- 参数说明:
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
x | Y | int | 左上角 x 坐标值 |
y | Y | int | 左上角 y 坐标值 |
width | Y | int | 宽度 |
height | Y | int | 高度 |
-
返回值: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);
- 参数说明:
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
x | Y | int& | 左上角 x 坐标值 该值为引用传递 调用后会修改成最终结果 |
y | Y | int& | 左上角 y 坐标值 该值为引用传递 调用后会修改成最终结果 |
width | Y | int& | 宽度 该值为引用传递 调用后会修改成最终结果 |
height | Y | int& | 高度 该值为引用传递 调用后会修改成最终结果 |
-
返回值: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)
- 请求参数:
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
Productcode | Y | char* | 最匹配的商品代码 用逗号分割 该值为引用传递 调用后会修改成最终结果 |
sessionId | Y | char* | 打称记录的 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);
- 请求参数:
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
Productcode | Y | char* | 最匹配的商品代码 用逗号分割 该值为引用传递 调用后会修改成最终结果 |
sessionId | Y | char* | 打称记录的 id 该 id 随机生成 该值为引用传递 调用后会修改成最终结果 |
path | Y | char * | 识别的商品图像 该值为引用传递 调用后会修改成最终结果 |
-
返回值: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)
- 参数说明:
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
code | Y | const char* | 选择的商品代码 |
sessionId | Y | char* | 打称记录 Id |
hit | Y | bool | 是否命中 |
productName | Y | char* | 商品名称 |
-
返回值: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)
- 参数说明:
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
code | Y | const char* | 选择的商品代码 |
sessionId | Y | char* | 打称记录 Id |
hit | Y | bool | 是否命中 |
productName | Y | char* | 商品名称 |
mixed | N | bool | 是否为混称商品 |
-
返回值: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)
- 参数说明:
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
code | Y | const 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);
- 参数说明:
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
path | Y | const 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);
- 参数说明:
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
path | Y | const 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);
- 参数说明:
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
tenant | y | char* | 租户 |
snNo | y | char* | 注册码 |
-
返回值: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)
- 参数说明:
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
num | Y | int | 摄像头序号,一般从 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)
- 参数说明:
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
name | Y | char* | 商品名字(类型为UTF-8) |
code | Y | char* | 商品对应的plu |
image | Y | char* | 返回商品图片对应的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)
- 参数说明:
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
code | Y | char* | 商品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)
- 参数说明:
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
productCode | Y | char* | 商品国标码 |
productName | Y | char* | 商品名称 |
sessionId | Y | char* | 识别接口返回的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)
- 参数说明:
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
filePath | Y | char* | 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)
- 参数说明:
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
snCode | Y | char* | snCode |
timeOut | N | int | 网络请求超时时间(秒) |
返回值: 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)
- 参数说明:
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
path | Y | char* | 商品列表文件路径 |
返回值: 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);
- 参数说明:
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
x1 | Y | int | 点位1 x 坐标值 |
y1 | Y | int | 点位1 y 坐标值 |
x2 | Y | int | 点位2 x 坐标值 |
y2 | Y | int | 点位2 y 坐标值 |
x3 | Y | int | 点位3 x 坐标值 |
y3 | Y | int | 点位3 y 坐标值 |
x4 | Y | int | 点位4 x 坐标值 |
y4 | Y | int | 点位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)
- 参数说明:
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
code | Y | char* | 商品code |
client | Y | char* | 客户名称 |
sessionId | Y | char* | 识别返回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)
- 参数说明:
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
client | Y | char* | 客户名称 |
返回值: 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)
- 参数说明:
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
client | Y | char* | 客户名称 |
path | Y | char* | 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)
- 参数说明:
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
client | Y | char* | 客户名称 |
返回值: 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)
- 参数说明:
请求参数 | 必填 | 类型 | 描述 |
---|---|---|---|
client | Y | char* | 客户名称 |
size | Y | int& | 数据大小,该值为引用传递,会在接口内部修改参数的值 |
返回值: 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函数 |
-2005 | sessionId未找到 | 检查是否成功调用AutoDetect函数 |
-2006 | 初始化pos失败 | 检查执行目录是否有dev.ini |
-2007 | 打开文件失败 | 检查传入传入路径是否正确 |
-2008 | 保存坐标,像素长宽失败 | 默认像素为640*480 请确认x+w <640 y+h<480 |
-2009 | 没有设置摄像头剪辑坐标 | 请使用SaveScaleSetting函数保存下坐标 |
-2010 | 摄像头尚未加载完毕 | 摄像头加载根据硬件不同速度也不同,请在SetCameraId后 等待1秒再调用该函数 |
-3001 | 该名称没有匹配到照片 | 请检查名称是否合理 |
-3002 | 请求照片失败 | 请检查传入的名字是否合法 |
-3003 | 读取文件失败 | 检查传入参事的文件路径是否正确 |
-4001 | snCode没有找到 | snCode没有找到 |
-4002 | 绑定pos机失败 | 该posCode已经绑定过,并且绑定的mac地址和传入的mac地址不一致 |
-4003 | 绑定pos机失败 | 此POS的MAC地址 绑定过其它POS机,请联系管理员确认POS机编号! |
-4004 | 租户没找到 | tenantCode没有找到 |
-4005 | snCode没有绑定 | 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机器上。