目 录
1 绪论 1
1.1 研究背景及意义 1
1.2 国内外研究现状 2
1.2.1 国外研究现状 2
1.2.2 国内研究现状 2
1.3 研究目标和内容 3
1.4 本章小结 4
2 相关理论及技术介绍 5
2.1 卷积神经网络(CNN) 5
2.1.1 卷积神经网络简介 5
2.1.2 卷积神经网络体系结构 6
2.2 Resnet算法 7
2.3 Jaccard相似系数 8
2.4 激活函数 9
2.4.1 Sigmoid函数 9
2.4.2 Softmax函数 9
2.4.3 Relu函数 9
2.5 本章小结 10
3 可行性分析与需求分析 11
3.1 系统可行性分析 11
3.1.1 技术可行性 11
3.1.2 经济可行性 11
3.1.3 功能可行性 11
3.2 系统需求分析 11
3.3 本章小结 11
4 系统总体设计 13
4.1 系统功能设计 13
4.2 实验数据 13
4.2.1 数据来源 13
4.2.2 数据分析与预处理 14
4.2.3 数据增广 15
4.3 本章小结 16
5 系统的功能与实现 17
5.1 拍照识别功能 17
5.2 文字识别功能 18
5.3 分类指南功能 18
5.4 本章小结 20
6 系统测试 21
6.1 测试目标 21
6.2 功能测试 21
6.3 本章小结 22
结论与展望 23
参考文献 24
致谢 26
1.3 研究目标和内容
目前分离垃圾的方法是手工挑选方法,其中有人被用来分离不同的物体/材料。分离废物的人,由于垃圾中的有害物质,容易患疾病。考虑到这一点,它促使人们要开发一个能够对废物进行分类的识别系统。这个系统可以花很短的时间对废物进行分类,而且在分类方面比手工方式更准确。随着系统的到位,有益的分离废物仍然可以回收利用,并转化为能源和燃料,以促进经济的增长。为分离累积废物而开发的系统是基于卷积神经网络的组合算法,即卷积神经网络处理识别和分类。
本课题的研究目的在于使用近几年来发展迅速的深度学习方法设计一个垃圾分类系统,从而实现对日常生活中常见垃圾进行智能识别分类,提高人们垃圾分类投放意识,同时避免人们错误投放而产生的环境污染。使用卷积神经网络模型中的深度残差网络(Deep residual network, ResNet)处理图片信息,可以训练出更深的网络,将Jaccard系数作为相似度系数,使得识别精度更高。
本课题的研究内容介绍如下:
1.数据的收集以及预处理:使用网络爬虫对百度网站进行爬取相同格式的垃圾图片,通过爬虫获取的大量数据,使用科学库pandas、numpy等对图像的特征进行预处理、标准化。神经网络模型的训练需要大量的数据充当训练集与测试集。系统能根据训练模型给定的图片类型预测出最正确的类别。
2.建立数据模型:为了使训练出后的模型精度可以得到更大程度的提高,减少由于网络添加多层导致的训练误差扩大化,需要通过Resnet算法来有效避免神经网络模型随着拟合层数的加深,准确率升高又急速下降的问题。导入科学库TensorFlow、sklearn搭建神经网络数据模型,定义算法核心的 bottleneck残差学习单元搭建ResNet-50数据模型同时引入softmax、relu、sigmoid等激活函数。导入训练集,进行不断的监督学习训练搭建垃圾识别模型。
3.算法编写:使用Python导入科学库pandas、nltk等,搭建Jaccard类。按照算法思想:Jaccard相似指数用来度量两个集合之间的相似性,它被定义为两个集合交集的元素个数除以并集的元素个数来进行代码编写。使用 jaccard算法对不同的垃圾分类样本进行相似度的计算,避免系统训练模型对目标垃圾图片无法进行有效的辨认。通过相似度排序,对不同系统训练分类模型样本与目标样本的相似度的对比差值,最终确定目标垃圾分类。
4.微信小程序开发:垃圾分类识别的系统实现形式为微信小程序,将系统实现程序打包成小程序形式,利用手机摄像头或者相册图片等形式来获取目标图片的来源。整个系统的开发都是基于Uni-app框架来完成,通过运行工具的打包小程序功能最终将整个系统封装成可供手机安装的小程序来实现,最终完成垃圾分类识别系统的实现。
5.最终对本系统的功能以及性能进行测试,同时提出系统在未来开发方向做出实际合理的展望。
<template>
<view>
<!-- 拍照 -->
<view class="content">
<image class="logo" :src=pic_path @click="get_pic_info"></image>
<view @click="get_pic_info" v-if="scale == true" class="pic_sure" hover-class="pic_sure_hover">扫一扫</view>
<view v-else @click="pic_determine" class="pic_sure" hover-class="pic_sure_hover">测一测</view>
</view>
<!-- 文本搜索 -->
</view>
</template>
<script>
const MD5 = require('pages/md5/md5.js') // 引入md5.js文件
export default {
data() {
return {
title: 'Hello',
src: '',
pic_path: "/static/saoyisao.png",
Base64: '',
anmationShow: false,
garbage_info: '',
scale: true
}
},
onLoad() {
},
methods: {
get_pic_info: function() {
var that = this
// uni.authorize({
// scope: 'scope.camera',
// success() {
// uni.getLocation()
// }
// })
uni.chooseImage({
count: 1, //默认9
sizeType: ['original'], //可以指定是原图还是压缩图,默认二者都有
sourceType: ['album', 'camera'], //从相册选择
success: function(res) {
that.scale = false
that.pic_path = res.tempFilePaths[0]
var path = res.tempFilePaths[0]
uni.getFileSystemManager().readFile({
filePath: path,
encoding: "base64",
success: function(data) {
that.Base64 = data.data
}
})
}
});
},
pic_determine: function() {
uni.showToast({
title: "正在识别...",
icon: 'loading',
duration: 1000,
})
//获取当前时间戳
var timestamp = Date.parse(new Date());
// console.log("当前时间戳为:" + timestamp);
// 使用加密
var SecretKey = '0daf3ab76762797eb6729362ad5d19ea'
var miyao = MD5.hexMD5(SecretKey + timestamp).toString(); // 使用加密
console.log(SecretKey)
console.log(miyao)
var that = this
var url = 'https://aiapi.jd.com/jdai/garbageImageSearch?appkey=a06479cbfd68f27d900a1073dfdc317d×tamp=' +
timestamp + '&sign=' + miyao;
uni.request({
url: url,
method: "POST",
header: {
'Content-Type': 'application/JSON',
},
data: {
cityId: 310000,
imgBase64: that.Base64
},
success: function(res) {
console.log(res)
that.scale = true
if (res.data.result.status != 0) {
uni.showToast({
title: '识别失败,换个角度。。',
icon: 'none'
})
} else {
that.garbage_info = res.data.result.garbage_info[0]
uni.setStorage({
key: 'garbage_info', // 命名
data: that.garbage_info //内容
});
var pic_path = that.pic_path
uni.navigateTo({
url: '../result/result?pic_path=' + pic_path
});
}
},
fail: function() {
uni.showToast({
title: '识别失败,换个角度。。'
})
}
});
},
},
}
</script>
<style>
/* 扫一扫 */
.pic_sure {
width: 300upx;
line-height: 80upx;
color: white;
margin-bottom: 20upx;
border-radius: 50upx;
text-align: center;
background-color: #C8B7AD;
background-color: rgb(252, 126, 67);
background: bg_red;
}
.pic_sure_hover {
background: rgb(236, 179, 156);
}
.content {
margin-top: 200upx;
border-radius: 50upx;
width: 100%;
height: 600upx;
background-image: url('http://img5.imgtn.bdimg.com/it/u=3801175907,1027721896&fm=26&gp=0.jpg');
background-size: cover;
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
}
.logo {
height: 400upx;
width: 400upx;
border-radius: 30upx;
margin-top: 100upx;
margin-left: auto;
margin-right: auto;
margin-bottom: 50upx;
}
</style>