本文章来自程序汪背后的私活小团队,无人售货机的项目,希望把这些真实案例分享出来,大家能学到点东西,比如软件硬件怎么对接,商业项目具体怎么评估价格,无人售货机技术方案是什么样的等等。
B站【我是程序汪】
开发人员
-
前端 技术栈 vue 主要任务小程序及PC端页面
-
后端 技术栈 springboot
-
AI商品识别
-
硬件 售货机 锁 摄像头 电子秤
-
开发周期60天
-
开发人数 3人
-
整体研发费用是20万
-
走的公司合同
-
云服务器2台
后端技术选型
-
核心框架:Spring Boot
-
数据库连接池:Druid
-
缓存:redis
-
数据库:mysql
项目背景
售货机目前市面上已经很多了,特别是风景区车站地铁等,无人售货机目前市面上的成品相对较少,我们利用视频流进行AI自动识别来判断顾客购买了具体什么商品,相比其他售货机体验更好操作也更简单。
本项目涉及3个硬件联调对接 摄像头(成品)、电子秤、门锁
核心流程
程序汪还是画个简单的流程图吧,方便大家理解
摄像头
这里的摄像头用于监控同时也方便AI识别商品,摄像头本身不需要然后开发,只需要购买市面上的成品就可以。视频推流AI去分析识别出具体商品
摄像头实时捕捉客户取货过程,从而判断客户拿的是什么。与静态识别相比,这项技术需要的摄像头更少,不需要检测所有产品,只需要看客户拿走或放回的产品。摄像头较少,一般都设在门上,空间利用率高。
顾客拿出来商品的瞬间AI就可以识别出商品,如下图
摄像头的文档主要就是配置好网络设置好推流基本操作
电子秤
这里电子秤的作用主要是验证 AI识别的正确性,算双重验证吧。当开门时和拿走商品时,计算重量的变化来确定商品。电子秤会主动上报重量给后端,这里核心的参数是 订单ID
后端系统上架商品会输入相应的重量
电子秤的接口文档
设备登录 (A1)
命令报文数据域:
代码 | 长度 | 格式 | 数据 | 描述 |
SN | 6 | HEX | ||
ICCID | 10 | HEX | ||
CSQ | 1 | HEX |
响应报文数据域:成功响应:
代码 | 长度 | 格式 | 数据 | 描述 |
ReturnCode | 1 | HEX | 80 | 80表示成功 |
ErrorCode | 1 | HEX | 00 | 00正常 |
设备心跳 (A2)
命令报文数据域:
代码 | 长度 | 格式 | 数据 | 描述 |
服务响应
代码 | 长度 | 格式 | 数据 | 描述 |
Heart | 1 | Hex | 80 |
服务开启命令 (A0)
后端服务通过订单ID 识别具体是哪次交易
命令报文数据域:
代码 | 长度 | 格式 | 数据 | 描述 |
timeId | 10 | HEX | 订单ID | |
relay1_on_off | 4 | HEX | 00,01 | 00关闭设备 01开启设备 大端序排列 |
Relay2_on_off | 4 | HEX | 00,01 | 00关闭设备 01开启设备 大端序排列 |
Relay3_on_off | 4 | HEX | 00,01 | 00关闭设备 01开启设备 大端序排列 |
fan_on_off | 4 | HEX | 00,01 | 00关闭设备 01开启设备 大端序排列 |
led_on_off | 4 | HEX | 00,01 | 00关闭设备 01开启设备 大端序排列 |
Fan_water | 1 | HEX | 0,1 | 风机喷雾 0关闭 1开启 |
fan_speed | 1 | HEX | 1,2,3 | 1慢速 2中速 3快速 |
left_right | 1 | HEX | 0-200 | 对应 0-270度 |
up_down | 1 | HEX | 0-200 | 对应 0-270度 |
led_pwm | 1 | HEX | 30,60,90 | 30低 60中 90高(亮度) |
led_mode | 1 | HEX | 1,2 | 1冷光 2暖光 |
响应报文数据域:成功响应:
代码 | 长度 | 格式 | 数据 | 描述 |
ReturnCode | 1 | HEX | 80 | 80表示成功 |
relay1_time | 4 | HEX | 0x64000000十进制100 | 时间秒 正常数据为时间 |
Relay2_time | 4 | HEX | 0x64000000十进制100 | 时间秒 正常数据为时间 |
Relay3_time | 4 | HEX | 0x64000000十进制100 | 时间秒 正常数据为时间 |
fan_time | 4 | HEX | 0x64000000十进制100 | 时间秒 正常数据为时间 |
led_time | 4 | HEX | 0x64000000十进制100 | 时间秒 正常数据为时间 |
Fan_water | 1 | HEX | 0,1 | 风机喷雾 0关闭 1开启 |
结束数据上传 (A3)
代码 | 长度 | 格式 | 数据 | 描述 |
timeId | 10 | HEX | 订单ID | |
relay1_time | 4 | HEX | 0x64000000十进制100 | 时间秒 正常数据为时间 |
Relay2_time | 4 | HEX | 0x64000000十进制100 | 时间秒 正常数据为时间 |
Relay3_time | 4 | HEX | 0x64000000十进制100 | 时间秒 正常数据为时间 |
fan_time | 4 | HEX | 0x64000000十进制100 | 时间秒 正常数据为时间 |
led_time | 4 | HEX | 0x64000000十进制100 | 时间秒 正常数据为时间 |
Fan_water | 1 | HEX | 0,1 | 风机喷雾 0关闭 1开启 |
fan_speed | 1 | HEX | 1,2,3 | 1慢速 2中速 3快速 |
left_right | 1 | HEX | 0-200 | 对应 0-270度 |
up_down | 1 | HEX | 0-200 | 对应 0-270度 |
led_pwm | 1 | HEX | 1,2,3 | 1低 2中 3高(亮度) |
led_mode | 1 | HEX | 1,2 | 1冷光 2暖光 |
water_error | 1 | HEX | 无水预警 | |
moto_error | 1 | HEX | 升降超时预警 | |
AC_moto_error | 1 | HEX | 防堵预警 | |
DC_error | 1 | HEX | 断电预警 |
响应报文数据域:成功响应:
代码 | 长度 | 格式 | 数据 | 描述 |
ReturnCode | 1 | HEX | 80 | 80表示成功 |
Errorcode | 1 | HEX | 00 | 00 |
数据
#A01234567890681C02A064000000C80000002C01000090010000F4010000010232323C012516
A0 设备开启指令
设备ID 123456789068
64000000 100 秒 继电器一通道时间
。。。。
。。。。
。。。。
25数据校验和
售货机的开锁
注意关闭门锁后需要后端调用AI 和 电子秤 获去商品信息进行验证,验证通过结算订单
AI商品识别
这里的AI商品识别是找的一个专业团队开发的,这里给大家一个参考吧,市面上成熟的也比较多,你花钱就行
文章最下面分享下腾讯 百度等AI商品识别能力项目资源
小程序
以前开发的充电宝项目的小程序非常类似,拿过来改吧改吧就变无人售货机项目了,接私活项目如果你没有可以复用的项目,都是从零开始开发成本就非常高了。
PC端
目前主要功能,跟以前充电宝项目基本差不多吧,拿来根据甲方要求,再改吧改吧
AI商品识别项目参考资料
[1]
https://ai.baidu.com/solution/fmcg/sku
[2]
https://github.com/huggingface/pytorch-image-models
[3]
https://www.paddlepaddle.org.cn/modelbasedetail/vgg
[4]
https://cloud.tencent.com/document/product/865/36457
[5] https://ai.baidu.com/tech/easydl/dkycommodity
历史私活项目案例分享