1 Star 5 Fork 0

Antus / GarbageClassification

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
README.md 4.90 KB
一键复制 编辑 原始数据 按行查看 历史
Antus 提交于 2021-05-09 21:32 . update README.md.

垃圾分类识别

介绍

基于tensorflow,opencv及量化模型权重训练实现的机器视觉智能垃圾分类,适用于低算力移动端设备如树莓派。 模型可识别的垃圾有['电池', '烟蒂', '塑料瓶', '砖瓦', '水果', '瓜子'(3代没有), '易拉罐', '废纸', '陶瓷', '菜叶']

由于需要备战考研没有时间继续,留下的多线程实现动态检测控制视频播放的功能仍未去完善

版本v1.0:

这是最原始的一个版本,由于项目需要有可视化界面,首先想到的是python下的几个图形界面开发库,比较主流的像Tkinter,PyQt和wxpython。 他们的大致区别可见https://blog.csdn.net/weixin_43870400/article/details/115076429 我选择的是wxpython(因为据说文档完善,案例丰富,现在想想其实不如用官方的tkinter,wxpython在树莓派上的安装是相当的漫长且坑多)

版本v2.0:

由于版本1具有一些问题(见下文)无法运行在设备上,第二个版本放弃了使用图形界面开发库的做法,本着简洁化的思想,直接使用opencv自带的窗口 进行图形界面的编写,且保留了上一代的所有功能。opencv的窗口显示摄像头捕捉到的画面,且所有的绘制操作无法在显示帧的范围以外进行,考虑到 美观性和尽可能的避免画面被文字遮挡,采用了拼接的方法,即在显示相机捕捉的帧前,使用opencv的函数将帧与一张空白图片拼接,并将空白部分作为 画板输出文字信息,然后显示在屏幕上。另外由于opencv无法显示中文(缺少字体库),需要在程序中导入字体库,项目中使用的是simhei字体。

版本v3.0(onRasp版):

版本3是最后采用的版本,这一代更换了模型训练的方法,把简洁化的思想进一步落实,并且更规范化。

版本说明:

1代 优点:使用图形界面开发库,具有较多的组件如按钮组件可使用,开发度丰富,更容易做用户交互。 缺点:在pc上环境部署正常进行,但树莓派上配置时,wxpython的安装需要本地编译后才能安装,这个编译的过程长达一个小时左右,且可能出错。部署 完成后发现运行时会卡在视频播放界面,无法调出窗口,猜测是cpu算力不足以支撑wxpython和cv的同时画面渲染。

2代 优点:使用opencv自带的库进行图形界面开发,能较容易实现简易的界面。 缺点:无法做用户交互,模型训练方法对没有独显的电脑来说速度太慢,代码量较臃肿;与1代具有相同问题,即视频播放无声音。

3代 优点:简洁易读,模型训练方法容易且速度快;视频播放具有音频(上传版本不含视频播放功能)。 缺点:仍未解决使用多线程实现动态检测控制视频播放的问题,因此未添加动态检测函数部分;1和2代在pc上运行可实现动态检测控制视频播放,在树莓派上 无法实现。

程序流程:

程序如果识别不到物品会显示“正在检测”(或“无”),几秒之后会自动播放视频(onRasp版本使用oxmplayer),程序中有动态检测的功能,播放 视频期间如果检测到摄像头前有物品移动,则退出视频播放,继续垃圾识别分类,如此循环;识别出垃圾且分类完成后,则开始运转舵机(由于设备中 的sd卡不幸损坏,上传的v1.0和v2.0版本中不包含硬件运转的程序模块),进行垃圾投放;在识别期间如果移动待分类垃圾,则不会运转。当超声波检测到 某种垃圾满载时,蜂鸣器会发出警报声,并在屏幕上显示满载的垃圾种类。

环境依赖

python3 需要的环境依赖在各个版本的文件夹里,不做赘述

安装教程

  1. 项目克隆到本地
  2. 终端进入某个版本项目目录
  3. 执行pip3 install -r requirements.txt

使用方法

python3 xxxx.py

联系方式

邮箱:944649374@qq.com

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吗?

Python
1
https://gitee.com/Cairsimod/garbage-classification.git
git@gitee.com:Cairsimod/garbage-classification.git
Cairsimod
garbage-classification
GarbageClassification
master

搜索帮助