基于知识图谱的垃圾自动分类系统设计与实现(图片识别+客户端小程序+服务端Python)

目 录
摘 要 I
ABSTRACT II
目 录 III
1 绪论 1
1.1 研究背景及意义 1
1.2 国内外研究现状 2
1.2.1 垃圾分类软件现状 2
1.2.2 垃圾图像分类研究现状 2
1.3 本文主要研究内容及章节安排 3
2 相关技术介绍 5
2.1 知识图谱理论 5
2.2 深度学习知识图谱模型 5
2.3 深度学习Python框架简介 7
2.4 Web开发简介 8
2.4.1 Flask框架技术 8
2.4.2 微信小程序开发 8
3 垃圾分类深度学习知识图谱模型的设计与实现 9
3.1 构建垃圾图片数据集 9
3.2 深度学习知识图谱模型搭建 11
3.2.1 开发环境和配置 11
3.2.2 YOLOv5模型搭建及配置 11
3.3 深度学习知识图谱模型优化 12
3.4 深度学习知识图谱模型实验结果 13
4 基于知识图谱的垃圾自动分类系统的设计与实现 14
4.1 功能分析 14
4.1.1 拍照或图片智能垃圾分类功能 14
4.1.2 分类图例 14
4.1.3 分类知识 15
4.2 系统设计 15
4.3 系统实现 16
4.3.1 服务器端实现 16
4.3.2 微信垃圾分类小程序设计 23
4.4 系统测试 25
4.4.1 测试环境与测试用例 25
4.4.2 服务器配置与启动测试 25
4.4.3 浏览器端测试 26
4.4.4 微信小程序测试 27
总 结 31
致 谢 33
参考文献 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)

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

  • 30
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值