目 录
摘 要 1
ABSTRACT 2
第一章 绪论 4
1.1 研究背景及意义 4
1.2 国内外研究现状 5
1.2.1 垃圾分类软件现状 5
1.2.2 垃圾图像分类研究现状 5
1.3 本文主要研究内容及章节安排 6
第二章 相关技术介绍 7
2.1 深度学习模型 7
2.2 深度学习Python框架简介 9
2.3 Web开发简介 9
2.3.1 Flask框架技术 9
2.3.2 微信小程序开发 9
第三章 垃圾分类深度学习模型的设计与实现 11
3.1 构建垃圾图片数据集 11
3.2 深度学习模型搭建 13
3.2.1 开发环境和配置 13
3.2.2 YOLOv5模型搭建及配置 13
3.3 深度学习模型优化 14
3.4 深度学习模型实验结果 15
第四章 垃圾分类系统的设计与实现 16
4.1 功能分析 16
4.1.1 拍照或图片智能垃圾分类功能 16
4.1.2 分类图例 16
4.1.3 分类知识 17
4.2 系统设计 17
4.3 系统实现 18
4.3.1 服务器端实现 18
4.3.2 微信垃圾分类小程序设计 25
4.4 系统测试 26
4.4.1 测试环境与测试用例 26
4.4.2 服务器配置与启动测试 27
4.4.3 浏览器端测试 28
4.4.4 微信小程序测试 29
第五章 结论 32
致 谢 33
参考文献 34
附 录 34
1.3 本文主要研究内容及章节安排
根据上述所调研的资料,发现目前的垃圾分类相关研究,依旧没有高效地用于微信小程序,以至于不能满足用户的实际垃圾分类需求。因此,本项目设计了一款基于Python的垃圾分类系统,本用户通过微信小程序前端拍照,并将招聘发送给后端服务器的深度学习模型进行识别,最后将识别结果通过小程序可视化,以此来实现对生活垃圾的分类。本文总共五章,各章的主要内容如下:
第一章简述了生活垃圾分类的相关背景及意义,并且调研了生活垃圾分类的相关软件,分析了各自的优缺点。
第二章是对本项目所涉及的相关技术进行简介。首先介绍了深度学习模型YOLO系列的基本原理及优缺点。然后介绍了深度学习中常见的Python框架,包括TensorFlow、PyTorch和Keras。最后,对本项目的服务器端的相关技术进行简介,包括Flask框架技术和微信小程序开发的相关技术。
第三章为垃圾分类系统的深度学习模型的相关介绍。首先对本项目YOLOv5s模型所需的生活垃圾图像样本以及LabelImg标注工具的使用方法,通过数据清洗、尺寸标准化、数据标准以及数据集划分等过程构建了垃圾图像数据集。然后搭建YOLOv5s深度学习模型,以及训练方法和通过调节学习率来对模型进行优化,提高模型的准确率。最后,通过200轮训练,本项目深度学习模型对垃圾分类的准确率达到了98.5%。
第四章为垃圾分类系统整体的设计与实现过程。首先介绍了垃圾分类系统的功能需求,并介绍了系统的整体设计,包括小程序前端和服务器端的相关设计。然后,具体实现了相关功能,并对所有功能进行了相应的测试。
第五章总结了本文的工作。

import datetime
import logging as rel_log
import os
import shutil
from datetime import timedelta
from flask import *
from detector import detector

UPLOAD_FOLDER = r'./tmp/uploads'

ALLOWED_EXTENSIONS = set(['png', 'jpg'])
app = Flask(__name__)
app.secret_key = 'secret!'
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER

werkzeug_logger = rel_log.getLogger('werkzeug')
werkzeug_logger.setLevel(rel_log.ERROR)

# 解决缓存刷新问题
app.config['SEND_FILE_MAX_AGE_DEFAULT'] = timedelta(seconds=1)


# 添加header解决跨域
@app.after_request
def after_request(response):
    response.headers['Access-Control-Allow-Origin'] = '*'
    response.headers['Access-Control-Allow-Credentials'] = 'true'
    response.headers['Access-Control-Allow-Methods'] = 'POST'
    response.headers['Access-Control-Allow-Headers'] = 'Content-Type, X-Requested-With'
    return response


def allowed_file(filename):
    return '.' in filename and filename.rsplit('.', 1)[1] in ALLOWED_EXTENSIONS


@app.route('/')
def page_index():
    return redirect(url_for('static', filename='./index.html'))


@app.route('/upload', methods=['GET', 'POST'])
def upload_file():
    file = request.files['file']
    print(datetime.datetime.now(), file.filename)
    if file and allowed_file(file.filename):
        src_path = os.path.join(app.config['UPLOAD_FOLDER'], file.filename)
        file.save(src_path)
        shutil.copy(src_path, './tmp/ct')
        image_path = os.path.join('./tmp/ct', file.filename)
        pid, image_info = current_app.model.detect(image_path, file.filename.rsplit('.', 1)[1])
        return jsonify({'status': 1,
                        'image_url': 'http://192.168.2.107:8001/tmp/ct/' + pid,
                        'draw_url': 'http://192.168.2.107:8001/tmp/draw/' + pid,
                        'image_info': image_info})

    return jsonify({'status': 0})


@app.route("/download", methods=['GET'])
def download_file():
    # 需要知道2个参数, 第1个参数是本地目录的path, 第2个参数是文件名(带扩展名)
    return send_from_directory('data', 'testfile.zip', as_attachment=True)


# show photo
@app.route('/tmp/<path:file>', methods=['GET'])
def show_photo(file):
    if request.method == 'GET':
        if not file is None:
            image_data = open(f'tmp/{file}',
                              "rb").read()
            response = make_response(image_data)
            response.headers['Content-Type'] = 'image/png'
            return response


if __name__ == '__main__':
    files = ['tmp/ct', 'tmp/draw', 'tmp/uploads']
    for ff in files:
        if not os.path.exists(ff):
            os.makedirs(ff)
    with app.app_context():
        current_app.model = detector()
    app.run(host='192.168.2.107', port=8001, debug=True)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐