使用flask框架,数据库为pymysql,构造一个工业缺陷检测系统
时间: 2025-06-04 12:45:39 浏览: 20
<think>嗯,用户想用Flask和pymysql构建一个工业缺陷检测系统。首先,我需要确定这个系统的基本组成部分。通常,这样的系统需要用户上传图片,然后后台处理这些图片,检测是否有缺陷,再存储结果到数据库。所以,我应该考虑如何设计数据库表结构,处理文件上传,以及如何集成缺陷检测模型。
接下来,用户可能不太熟悉Flask和pymysql的具体操作,所以需要分步骤指导。首先,安装必要的库,比如Flask、pymysql,可能还需要用到Pillow处理图像,以及深度学习框架如TensorFlow或PyTorch,但用户没有明确提到模型部分,可能只需要框架部分,所以暂时先不深入模型实现。
数据库设计方面,可能需要两个表,一个存储用户信息,另一个存储检测记录。用户表需要用户名和密码,检测记录表需要关联用户ID、图片路径、检测结果和时间戳。不过用户可能只需要核心功能,所以可能先简化,只保留检测记录表,用户认证可以后续扩展。
然后,设置Flask应用结构,包括初始化app,配置数据库连接参数,比如主机、用户名、密码、数据库名。接着,创建数据库连接和游标,可能需要用上下文管理器处理连接,避免资源泄露。
关于路由,需要处理上传图片的POST请求,上传的文件保存到服务器,然后将信息存入数据库。检测结果可以暂时模拟,比如随机返回是否有缺陷,或者调用一个简单的模型。但用户可能希望看到如何集成检测功能,所以可能需要提到如何加载模型并进行推理。
文件上传部分,要确保上传目录存在,限制允许的文件类型,比如图片格式。处理上传时,生成唯一文件名防止冲突,保存文件到指定路径。然后将文件路径、检测结果、时间戳存入数据库。
前端部分需要简单的HTML表单,让用户选择文件上传,并显示结果。可能需要使用Jinja2模板来渲染结果页面,显示检测记录。
可能遇到的坑:数据库连接没有正确关闭,导致资源耗尽;文件上传的安全问题,比如验证文件类型和大小;检测模型的高性能要求,可能需要异步处理,但用户可能暂时不需要,所以先同步处理。
测试时,用户可能需要用curl或Postman测试API,或者写简单的HTML表单。需要提醒用户安装所有依赖库,创建数据库和表结构,并确保数据库连接参数正确。
最后,扩展部分可以考虑用户认证、异步任务、模型部署、前端优化等,但用户目前可能需要基础框架,所以先提供核心代码示例,再建议可能的优化方向。</think>以下是一个基于 Flask + PyMySQL 的工业缺陷检测系统基础框架设计思路和示例代码,主要包含数据库设计、核心API实现和简单的前端交互:
---
### **1. 系统架构设计**
```
工业缺陷检测系统
├── 前端 (HTML/CSS/JS) # 用户上传图片/查看结果
├── Flask后端 # 处理请求、逻辑控制
├── 深度学习模型 # 执行缺陷检测算法(可替换)
└── MySQL数据库 # 存储用户、检测记录、缺陷数据
```
---
### **2. 数据库设计 (pymysql)**
```sql
-- 用户表(可选)
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) UNIQUE NOT NULL,
password VARCHAR(100) NOT NULL
);
-- 检测记录表(核心)
CREATE TABLE defect_records (
id INT PRIMARY KEY AUTO_INCREMENT,
user_id INT, -- 如果需要用户关联
image_path VARCHAR(255) NOT NULL, -- 上传图片存储路径
defect_type VARCHAR(50), -- 缺陷类型
confidence FLOAT, -- 检测置信度
is_defective BOOLEAN DEFAULT FALSE,-- 是否缺陷
detection_time DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (user_id) REFERENCES users(id)
);
```
---
### **3. Flask核心代码示例**
```python
from flask import Flask, render_template, request, redirect, url_for
import pymysql
import os
from datetime import datetime
app = Flask(__name__)
app.config['UPLOAD_FOLDER'] = 'static/uploads/'
app.config['ALLOWED_EXTENSIONS'] = {'png', 'jpg', 'jpeg'}
# 数据库配置
db_config = {
'host': 'localhost',
'user': 'your_username',
'password': 'your_password',
'db': 'defect_detection',
'charset': 'utf8mb4',
'cursorclass': pymysql.cursors.DictCursor
}
def get_db_connection():
return pymysql.connect(**db_config)
# 模拟缺陷检测函数(替换为实际模型)
def detect_defect(image_path):
# 此处应调用实际AI模型,返回检测结果
return {
'is_defective': True,
'defect_type': '划痕',
'confidence': 0.92
}
@app.route('/')
def index():
return render_template('upload.html')
@app.route('/upload', methods=['POST'])
def upload_file():
if 'file' not in request.files:
return redirect(request.url)
file = request.files['file']
if file.filename == '':
return redirect(request.url)
if file and allowed_file(file.filename):
# 保存上传文件
filename = datetime.now().strftime("%Y%m%d%H%M%S") + "_" + file.filename
save_path = os.path.join(app.config['UPLOAD_FOLDER'], filename)
file.save(save_path)
# 执行缺陷检测
result = detect_defect(save_path)
# 存储到数据库
connection = get_db_connection()
try:
with connection.cursor() as cursor:
sql = """
INSERT INTO defect_records
(image_path, defect_type, confidence, is_defective)
VALUES (%s, %s, %s, %s)
"""
cursor.execute(sql, (
save_path,
result['defect_type'],
result['confidence'],
result['is_defective']
))
connection.commit()
finally:
connection.close()
return render_template('result.html',
image_path=save_path,
result=result)
return redirect(request.url)
def allowed_file(filename):
return '.' in filename and \
filename.rsplit('.', 1)[1].lower() in app.config['ALLOWED_EXTENSIONS']
if __name__ == '__main__':
os.makedirs(app.config['UPLOAD_FOLDER'], exist_ok=True)
app.run(debug=True)
```
---
### **4. 前端示例 (templates/upload.html)**
```html
<!DOCTYPE html>
<html>
<head>
<title>工业缺陷检测</title>
</head>
<body>
<h1>上传待检测图片</h1>
<form method="post" enctype="multipart/form-data" action="/upload">
<input type="file" name="file" accept="image/*" required>
<input type="submit" value="开始检测">
</form>
</body>
</html>
```
---
### **5. 运行准备**
1. 安装依赖:
```bash
pip install flask pymysql pillow
```
2. 创建MySQL数据库和表结构
3. 配置`db_config`中的数据库连接信息
4. 创建`static/uploads/`目录存放上传图片
---
### **6. 扩展方向建议**
1. **模型集成**:替换`detect_defect()`函数为实际模型(如YOLO、Faster R-CNN)
2. **异步处理**:使用Celery处理耗时检测任务
3. **用户认证**:增加注册/登录功能(使用Flask-Login)
4. **可视化增强**:通过Echarts展示检测统计图表
5. **REST API**:提供JSON接口供其他系统调用
6. **安全优化**:限制文件大小、类型校验、防SQL注入
需要根据具体工业场景调整缺陷类型判断逻辑和模型选型。实际工业部署还需要考虑:
- 高并发处理
- 模型服务化部署(TensorFlow Serving等)
- 硬件加速(GPU推理)
- 日志监控系统
阅读全文
相关推荐

















