【玄铁杯第三届RISC-V应用创新大赛】基于LICHEEPI 4A的智能冷鲜柜设计
[复制链接]
本帖最后由 电子烂人 于 2023-12-12 15:52 编辑
基于LICHEEPI 4A的智能冷鲜柜设计
一.项目介绍
1.项目背景:
在餐厅后厨和一些酒店中,食材的管理尤为重要。但是每当中午和晚上的“饭点”时,由于客流量多、订单爆满、后厨人手不足等情况,总是会出现食材耗尽的情况。本设计旨在识别冷鲜柜中的食材数量,并及时预警食材即将耗尽的情况,以避免顾客下单后无法备餐的情况。
2.项目介绍:
本设计使用LICHEEPI 4A 做为主控模块,读取温度模块数值,并显示到屏幕上。同时当接触开关打开并关闭时(对应柜门开启后关闭),使用OPENCV拍摄一张图片并处理其亮度和GAMMA值,使用nanodet检测图片里的食材类型和数量,并统计后发送到管理后台。
3.项目框架:
4.硬件介绍:
- 摄像头:sipeed官方摄像头
-
- licheepi 4a:
- LicheePi 4A 是基于 Lichee Module 4A 核心板的 高性能 RISC-V Linux 开发板,以 TH1520 为主控核心(4xC910@1.85G, RV64GCV,4TOPS@Int8 NPU, 50GFLOP GPU),板载最大 16GB 64bit LPDDR4X,128GB eMMC,支持 HDMI+MIPI 双4K 显示输出,支持 4K 摄像头接入,双千兆网口(其中一个支持POE供电)和 4 个 USB3.0 接口,多种音频输入输出(由专用 C906 核心处理)。
-
-
RS485温度传感器模块
-
-
显示模块:stm32f746discover
-
-
微动开关
-
-
自制licheepi 4A 的RS485拓展板(已更新到第三版)
-
-
该PCB引出了主要接口,并讲SPI和UART用电平转换芯片转换为3.3v电平,并用MAX13487芯片将串口转换为三路RS485信号
-
spi屏幕接口连接1.8寸LCD屏幕(由于官方示例撤下,暂未完成该部分代码设计)
-
二.方案实现:
使用MAIXHUB平台进行模型训练,类型选择NCNN
平台要求较为苛刻,由于本人在平台训练的模型识别率并不理想,这里借用了@小苏努力ING 的开源NCNN模型(链接:MaixHub)
在此基础上进行更改(已争取原作者同意)
运行程序
source ~/Desktop/python//ort/bin/activate
#进入虚拟环境
sudo python3 box.py
#使用管理员权限执行,已有管理员权限可直接执行python3 box.py
当接触开关发生变化时(对应冰箱门开启后关闭),LICHEEPI 4A从摄像头采集一张图片,传入NANODET中进行识别
def adb_shell(cmd):
result=os.popen(cmd,'r',1).read()
return result
#执行调用程序
def img_change(img,brightness,gamma):
img_hsv= cv2.cvtColor(img,cv2.COLOR_BGR2HSV)
img_hsv[:,:,2]=np.clip(img_hsv[:,:,2]+brightness,0,255)
img_output1 =cv2.cvtColor(img_hsv,cv2.COLOR_HSV2BGR)
#亮度调节
img_output2 = np.power(img_output1/float(np.max(frame)),gamma)
img_output2 = np.uint8(img_output2 *255)
#GAMMA调节
img_yuv = cv2.cvtColor(img_output2,cv2.COLOR_BGR2YUV)
img_yuv [:,:,0] =cv2.equalizeHist(img_yuv[:,:,0])
img_output3 = cv2.cvtColor(img_yuv,cv2.COLOR_YUV2BGR)
#直方图均值化
return img_output3
#图像数据处理
while(1):
mem.write(0x0,[0x00402078])
io=mem.read(0x0, 32).hexdump(4)
print(io)
#io="".join(io)
#re=re.findall('0xffec006050: ........',io)
#re=re.findall('\d\d\d\d\d\d\d\d',io)
#re=re.findall('0xffec006050: \d\d\d\d\d\d\d\d',io)
#print(re[0])
#if (re[0]=='0xffec006050: 7d49ffee'):
if('0xffec006050: 7d49bfff'in io):
ret,frame = cap.read()
#读取一帧图像
current_time = time.localtime()
formatted_time = time.strftime("%Y-%m-%d_%H:%M:%S", current_time)
#设定图片名称为时间,格式年月日时分秒
nanodet_cmd='./nanodet {}.jpg'.format(formatted_time)
#调用NANODET的指令
img_change(frame,50,1)
cv2.imwrite(r"/home/sipeed/ncnn/build/examples/"+ str(formatted_time) + ".jpg",frame)
#存储路径/home/sipeed/ncnn/build/examples/
同时从温度变送模块中读取实时的数据包并解析其中的温湿度
RS485=serial.Serial('/dev/ttyS1',115200,timeout=1)
RS485_Command = {
'temp485_query' :'010300000002C4B0',
'temp485_address':'010300000002C4B0',
}
hum=0
temp=0
def Read_date(hum,temp):
counter = 0
hum_buffer=[]
temp_buffer = []
Read_buffer=[]
Read_buffer = RS485.read(8)
while (1):
# 第1帧是否是0x01
if (counter == 0):
if (Read_buffer[0] == 0x01):
counter += 1
break
# 第2帧是否是功能码 0x03
elif (counter == 1):
if (Read_buffer[1] == 0x03):
counter += 1
break
# 第3帧是否是有效数值 0x04
elif (counter == 2):
if (Read_buffer[1] == 0x04):
counter += 1
break
# 第4帧和第5帧存放湿度高位和低位
elif (counter == 3):
hum_buffer= Read_buffer[2]
counter += 1
# 第5帧和第6存放温度高位和低位
elif (counter == 4):
temp_buffer= Read_buffer[2]
counter += 1
#第78帧接受校验位
elif (counter == 5):
test_buffer= Read_buffer[2]
counter += 1
#暂未写校验位的处理
else:
if (counter==9):
Recv_flag = 1
if (Recv_flag):
Recv_flag = 0
try:
unpack_data[0] = struct.unpack('<hh', temp_buffer[0:4])
unpack_data[1]=struct.unpack('<hh', hum_buffer[0:4])
hum = unpack_data[0]/10
temp = unpack_data[1]/10
return temp
except:
counter = 0
用另一路485传输温湿度数据到显示屏上
三.功能展示:
参考视频: 3d2fd85cc44afb48c120e8d32d9ddbbb 3d2fd85cc44afb48c120e8d32d9ddbbb
四.总结:
首先感谢这次EEWorld社区、平头哥开放社区和Sipeed提供的机会有了使用LicheePi 4A的机会。
本次设计由于中途负责NCNN部署部分的同学电脑出现问题,暂未做到实时检测的功能,而是使用图片识别进行下位替代。
最大的感触是RISC-V的生态环境还需要各位同学的帮助和官方的共同努力下才能完善,
本次设计一开始准备用光流法和MediaPipe进行箱内拿取物体的识别,已经在电脑上做好代码的前提下,发现RISC-v 暂未做MediaPipe的适配导致库文件不能使用。
后续小组成员在部署NCNN的时候发现vulkan驱动没有手册和使用例程,很多东西需要开发者从头摸索,中途交叉编译使用工具链又踩了很多的坑。
另外还有许多常用的PYTHON库不能直接使用,需要用官方的XHL文件在虚拟环境里进行安装,若没有官方的支持就很头疼
希望RISC-V社区和生态可以越来越好
往期文章:
- 【玄铁杯第三届RISC-V应用创新大赛】LicheePi 4A (1)开箱组装,点亮屏幕
- 【玄铁杯第三届RISC-V应用创新大赛】LicheePi 4A (2)烧录镜像,试用摄像头
- 【玄铁杯第三届RISC-V应用创新大赛】LicheePi 4A (3)ncnn训练和使用测试
- 【玄铁杯第三届RISC-V应用创新大赛】LicheePi 4A (3.5)ncnn的使用BUG补充
代码仓库:
仓库后续还会持续更新上传PCB文件,并开源到硬件平台
|