基于tensorflow,opencv及量化模型权重训练实现的机器视觉智能垃圾分类,适用于低算力移动端设备如树莓派。 模型可识别的垃圾有['电池', '烟蒂', '塑料瓶', '砖瓦', '水果', '瓜子'(3代没有), '易拉罐', '废纸', '陶瓷', '菜叶']
由于需要备战考研没有时间继续,留下的多线程实现动态检测控制视频播放的功能仍未去完善
这是最原始的一个版本,由于项目需要有可视化界面,首先想到的是python下的几个图形界面开发库,比较主流的像Tkinter,PyQt和wxpython。 他们的大致区别可见https://blog.csdn.net/weixin_43870400/article/details/115076429 我选择的是wxpython(因为据说文档完善,案例丰富,现在想想其实不如用官方的tkinter,wxpython在树莓派上的安装是相当的漫长且坑多)
由于版本1具有一些问题(见下文)无法运行在设备上,第二个版本放弃了使用图形界面开发库的做法,本着简洁化的思想,直接使用opencv自带的窗口 进行图形界面的编写,且保留了上一代的所有功能。opencv的窗口显示摄像头捕捉到的画面,且所有的绘制操作无法在显示帧的范围以外进行,考虑到 美观性和尽可能的避免画面被文字遮挡,采用了拼接的方法,即在显示相机捕捉的帧前,使用opencv的函数将帧与一张空白图片拼接,并将空白部分作为 画板输出文字信息,然后显示在屏幕上。另外由于opencv无法显示中文(缺少字体库),需要在程序中导入字体库,项目中使用的是simhei字体。
版本3是最后采用的版本,这一代更换了模型训练的方法,把简洁化的思想进一步落实,并且更规范化。
1代 优点:使用图形界面开发库,具有较多的组件如按钮组件可使用,开发度丰富,更容易做用户交互。 缺点:在pc上环境部署正常进行,但树莓派上配置时,wxpython的安装需要本地编译后才能安装,这个编译的过程长达一个小时左右,且可能出错。部署 完成后发现运行时会卡在视频播放界面,无法调出窗口,猜测是cpu算力不足以支撑wxpython和cv的同时画面渲染。
2代 优点:使用opencv自带的库进行图形界面开发,能较容易实现简易的界面。 缺点:无法做用户交互,模型训练方法对没有独显的电脑来说速度太慢,代码量较臃肿;与1代具有相同问题,即视频播放无声音。
3代 优点:简洁易读,模型训练方法容易且速度快;视频播放具有音频(上传版本不含视频播放功能)。 缺点:仍未解决使用多线程实现动态检测控制视频播放的问题,因此未添加动态检测函数部分;1和2代在pc上运行可实现动态检测控制视频播放,在树莓派上 无法实现。
程序如果识别不到物品会显示“正在检测”(或“无”),几秒之后会自动播放视频(onRasp版本使用oxmplayer),程序中有动态检测的功能,播放 视频期间如果检测到摄像头前有物品移动,则退出视频播放,继续垃圾识别分类,如此循环;识别出垃圾且分类完成后,则开始运转舵机(由于设备中 的sd卡不幸损坏,上传的v1.0和v2.0版本中不包含硬件运转的程序模块),进行垃圾投放;在识别期间如果移动待分类垃圾,则不会运转。当超声波检测到 某种垃圾满载时,蜂鸣器会发出警报声,并在屏幕上显示满载的垃圾种类。
python3 需要的环境依赖在各个版本的文件夹里,不做赘述
pip3 install -r requirements.txt
python3 xxxx.py
QQ:944649374
1,2代的模型训练方法可参考 https://github.com/EdjeElectronics/TensorFlow-Object-Detection-API-Tutorial-Train-Multiple-Objects-Windows-10/blob/master/translate/README_Chinese.md https://github.com/EdjeElectronics/TensorFlow-Lite-Object-Detection-on-Android-and-Raspberry-Pi
3代可以使用微软的lobe平台,但具有一定局限性,如不能实现多目标识别、训练集只能是图片格式,不能使用可标注的voc格式数据集(不标注意味着不能显示 识别轮廓)、要求数据集图片中物品需尽量保证在图片中心等。
如果运行出现 error: (-215:Assertion failed) !_src.empty() in function 'cvtColor',再运行一次即可,出现这种错误的原因可能是摄像头比 识别程序启动慢了,可尝试在主函数的videocapture()后用sleep函数解决
tips
都看到这了可以给个star吗?
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。