垃圾分类微信小程序设计python 您所在的位置:网站首页 垃圾分类python 垃圾分类微信小程序设计python

垃圾分类微信小程序设计python

2023-08-15 20:52| 来源: 网络整理| 查看: 265

垃圾分类微信小程序设计

本次设计详细方案和代码在 https://download.csdn.net/download/by1jing/12589494,在该文档中有详细代码介绍。

垃圾分类,指按一定规定或标准将垃圾分类储存、分类投放和分类搬运,从而转变成公共资源的一系列活动的总称。分类的目的是提高垃圾的资源价值和经济价值,力争物尽其用;然而在日常生活中大部分人对垃圾分类还是有些不知所措的,对干垃圾、湿垃圾分的不是很清楚,由此本文就提出了使用深度学习的方法对垃圾进行分类,并将学习模型转移到微信小程序上,真正的方便居民的生活。此项目主要由两大部分组成,首先基于python利用深度神经网络算法搭建图像识别算法,进而通过训练得到理想的模型,然后利用微信开发工具搭建垃圾分类微信小程序并利用训练出的模型实现垃圾分类整个系统的设计开发。

系统概述: 对于图像分类任务,当前最先进的架构是卷积神经网络(CNN)。无论是面部识别、自动驾驶还是目标检测,CNN均得到了广泛应用。在本项目中,针对垃圾图片识别任务,设计了一个基于TensorFlow的VGG16卷积神经网络(CNN)模型,并将模型移植到移动端微信小程序中进行应用。

本次垃圾图片分类任务采用的是经典的深度学习模型VGG16。VGG是Simonyan 和Zisserman在文献《Very Deep Convolutional Networks for Large Scale Image Recognition》中提出卷积神经网络模型,其名称来源于作者所在的牛津大学视觉几何组(Visual Geometry Group)的缩写。该模型参加2014年的 ImageNet图像分类与定位挑战赛,取得了优异成绩:在分类任务上排名第二,在定位任务上排名第一。

针对VGG16进行具体分析发现,VGG16共包含:13个卷积层(Convolutional Layer),分别用conv3-XXX表示,3个全连接层(Fully connected Layer),分别用FC-XXXX表示,5个池化层(Pool layer),分别用maxpool表示。其中,卷积层和全连接层具有权重系数,因此也被称为权重层,总数目为13+3=16,这即是VGG16中16的来源。(池化层不涉及权重,因此不属于权重层,不被计数)。

VGG16的突出特点是简单,具有很高的拟合能力,但同时缺点也很明显,即训练时间过长,调参难度大,需要的存储容量大,不利于部署。例如存储VGG16权重值文件的大小为500多MB,不利于安装到嵌入式系统中。

实现代码:

```python def processing_data(data_path): """ 数据处理 :param data_path: 数据集路径 :return: train, test:处理后的训练集数据、测试集数据 """ train_data = ImageDataGenerator( # 对图片的每个像素值均乘上这个放缩因子,把像素值放缩到0和1之间有利于模型的收敛 rescale=1. / 225, # 浮点数,剪切强度(逆时针方向的剪切变换角度) shear_range=0.1, # 随机缩放的幅度,若为浮点数,则相当于[lower,upper] = [1 - zoom_range, 1+zoom_range] zoom_range=0.1, # 浮点数,图片宽度的某个比例,数据提升时图片水平偏移的幅度 width_shift_range=0.1, # 浮点数,图片高度的某个比例,数据提升时图片竖直偏移的幅度 height_shift_range=0.1, # 布尔值,进行随机水平翻转 horizontal_flip=True, # 布尔值,进行随机竖直翻转 vertical_flip=True, # 在 0 和 1 之间浮动。用作验证集的训练数据的比例 validation_split=0.1 ) # 接下来生成测试集,可以参考训练集的写法 validation_data = ImageDataGenerator( rescale=1. / 255, validation_split=0.1) train_generator = train_data.flow_from_directory( # 提供的路径下面需要有子目录 data_path, # 整数元组 (height, width),默认:(256, 256)。 所有的图像将被调整到的尺寸。 target_size=(150, 150), # 一批数据的大小 batch_size=16, # "categorical", "binary", "sparse", "input" 或 None 之一。 # 默认:"categorical",返回one-hot 编码标签。 class_mode='categorical', # 数据子集 ("training" 或 "validation") subset='training', seed=0) validation_generator = validation_data.flow_from_directory( data_path, target_size=(150, 150), batch_size=16, class_mode='categorical', subset='validation', seed=0) return train_generator, validation_generator 数据加载进模型之后,需要定义模型结构,并优化函数、损失函数和性能指标。这里直接调用VGG16模型作为卷积神经网络模型,包括13个卷积层(Convolutional Layer),3个全连接层(Fully connected Layer), 5个池化层(Pool layer),然后接全连接层,神经元数目为256,再接relu激活函数。再接全连接层,神经元个数为6,得到6维的特征向量,用于6个垃圾的分类训练,送入softmaxt分类,得到分类结果的概率output。 由于批量梯度下降法在更新每一个参数时,都需要所有的训练样本,所以训练过程会随着样本数量的加大而变得异常的缓慢。随机梯度下降法(Stochastic Gradient Descent,简称SGD)正是为了解决批量梯度下降法这一弊端而提出的。 所以构建一个Optmizer 优化器 ,optimizer=SGD(lr=1e-3,momentum=0.9) ,随机梯度下降 1e-3的学习率。最后数据分批训练,一批16张图片,分20轮训练。 ```python def model(train_generator, validation_generator, save_model_path): vgg16_model = VGG16(weights='imagenet',include_top=False, input_shape=(150,150,3)) top_model = Sequential() top_model.add(Flatten(input_shape=vgg16_model.output_shape[1:])) top_model.add(Dense(256,activation='relu')) top_model.add(Dropout(0.5)) top_model.add(Dense(10,activation='softmax')) model = Sequential() model.add(vgg16_model) model.add(top_model) # 编译模型, 采用 compile 函数: https://keras.io/models/model/#compile model.compile( # 是优化器, 主要有Adam、sgd、rmsprop等方式。 optimizer=SGD(lr=1e-3,momentum=0.9), # 损失函数,多分类采用 categorical_crossentropy loss='categorical_crossentropy', # 是除了损失函数值之外的特定指标, 分类问题一般都是准确率 metrics=['accuracy']) model.fit_generator( # 一个生成器或 Sequence 对象的实例 generator=train_generator, # epochs: 整数,数据的迭代总轮数。 epochs=20, # 一个epoch包含的步数,通常应该等于你的数据集的样本数量除以批量大小。 steps_per_epoch=2704 // 16, # 验证集 validation_data=validation_generator, # 在验证集上,一个epoch包含的步数,通常应该等于你的数据集的样本数量除以批量大小。 validation_steps=272 //16, ) model.save(save_model_path) return model 3.3模型训练及保存 在定义模型架构和编译模型之后,要使用训练集去训练模型,使得模型可以识别图片。这里,将使用训练集和测试集来拟合模型,并保存模型。 def evaluate_mode(validation_generator, save_model_path): # 加载模型 model = load_model('results/knn.h5') # 获取验证集的 loss 和 accuracy loss, accuracy = model.evaluate_generator(validation_generator) print("\nLoss: %.2f, Accuracy: %.2f%%" % (loss, accuracy * 100))

微信小程序实现

http{

server{

listen 443 ssl; //因为为https协议 因此根据预定定义443端口 server_name www.xxxxx.com; //此处填写域名 ssl_certificate

/etc/nginx/certs/3558126.pem; //填写ssl证书位置

ssl_certificate_key

/etc/nginx/certs/3558126.key ;

ssl_session_timeout 5m; ssl_ciphers

ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location ~* \.php$ { root /; //设置根目录 fastcgi_pass 127.0.0.1:9000; //设置fastcgi server的地址 fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /$fastcgi_script_name; include fastcgi_params; //设置传递参数 } location / { proxy_pass http://localhost:7777; proxy_http_version 1.1; proxy_read_timeout 600s; proxy_send_timeout 12s; root /wepro/; ///设置非php访问代理访问路径 }

垃圾分类微信小程序测试

1.程序下载运行

微信搜索“基于图像识别的你是什么辣鸡”小程序,点击进入即可。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有