图像检测服务
- Author: Huang Wenyang
- Innovation Center
- Algorithm engineer
项目介绍
本项目提供一个基于深度学习的图像目标检测服务,基于YOLO模型对武侯祠相关文物和场景进行识别和检测。服务提供了多种API接口,方便不同场景下的调用需求。
功能特性
- 基于YOLO的目标检测模型
- 提供多种API接口满足不同需求
- 支持文件上传和直接图像数据处理
- 内置Web测试界面,方便调试和演示
- 支持直接返回标注图像或Base64编码数据
项目结构
wuhouci-detection-service/
├── app.py # Flask主应用
├── requirements.txt # 项目依赖
├── README.md # 项目说明文档
├── model/
│ └── best.pt # YOLO训练模型
├── templates/
│ └── index.html # Web界面模板
├── uploads/ # 上传文件存储目录
└── static/
└── results/ # 检测结果存储目录
安装部署
环境要求
- Python 3.10
- pip包管理器
安装依赖
pip install -r requirements.txt
模型准备
- 将训练好的YOLO模型文件命名为
best.pt - 将模型文件放置在
model/目录下
运行服务
python app.py
服务将在 http://0.0.0.0:5000 上运行
API接口说明
1. 健康检查
GET /health
检查服务运行状态和模型加载情况。
响应示例:
{
"status": "running",
"model_loaded": true
}
2. 目标检测(返回URL)
POST /detect
Content-Type: multipart/form-data
上传图片文件进行目标检测,返回检测结果和图像URL。
请求参数:
file: 图像文件
响应示例:
{
"original_url": "/uploads/uuid.jpg",
"result_url": "/static/results/uuid.jpg",
"detections": [
{
"class_name": "文物名称",
"confidence": 0.95,
"bbox": [100.0, 150.0, 300.0, 400.0]
}
]
}
3. 目标检测(直接返回图像)
POST /detect/image
Content-Type: multipart/form-data
上传图片文件进行目标检测,直接返回标注后的图像二进制数据。
请求参数:
file: 图像文件
响应:
- Content-Type: image/jpeg
- 标注后的图像二进制数据
4. 目标检测(返回检测结果和图像数据)
POST /detect/with-data
Content-Type: multipart/form-data
上传图片文件进行目标检测,返回检测结果和Base64编码的标注图像。
请求参数:
file: 图像文件
响应示例:
{
"detections": [
{
"class_name": "文物名称",
"confidence": 0.95,
"bbox": [100.0, 150.0, 300.0, 400.0]
}
],
"image_data": "data:image/jpeg;base64,/9j/..."
}
使用示例
Python调用示例
import requests
# 基础URL,请替换为实际部署的IP和端口
BASE_URL = "http://localhost:5000"
# 方法1: 文件上传检测
with open('test_image.jpg', 'rb') as f:
response = requests.post(
f'{BASE_URL}/detect',
files={'file': f}
)
result = response.json()
print(result)
# 方法2: 直接获取标注图像
with open('test_image.jpg', 'rb') as f:
response = requests.post(
f'{BASE_URL}/detect/image',
files={'file': f}
)
# 保存图像
with open('result.jpg', 'wb') as f:
f.write(response.content)
curl调用示例
# 文件上传检测
curl -X POST "http://localhost:5000/detect" \
-H "Content-Type: multipart/form-data" \
-F "file=@test_image.jpg"
# 直接返回标注图像
curl -X POST "http://localhost:5000/detect/image" \
-H "Content-Type: multipart/form-data" \
-F "file=@test_image.jpg" \
--output result.jpg
# 返回检测结果和图像数据
curl -X POST "http://localhost:5000/detect/with-data" \
-H "Content-Type: multipart/form-data" \
-F "file=@test_image.jpg"
Web界面测试
服务提供内置的Web测试界面,访问主页即可进行在线测试:
http://localhost:5000
在Web界面中,可以选择本地图片文件,通过点击不同的测试按钮来验证各个API接口的功能。
网络访问说明
本地访问
- URL:
http://localhost:5000或http://127.0.0.1:5000
局域网访问
- URL:
http://你的本机IP地址:5000
外网访问
如需外网访问,需要:
- 配置路由器端口转发
- 使用内网穿透工具(如ngrok)
- 部署到公网服务器
注意事项
- 确保模型文件
model/best.pt存在且格式正确 - 服务默认监听所有网络接口(0.0.0.0),请注意网络安全
- 生产环境建议关闭debug模式
- 根据实际需求调整上传文件大小限制
- 建议在生产环境中添加身份验证和访问控制
依赖说明
- Flask: Web框架
- OpenCV: 图像处理库
- Ultralytics: YOLO模型库
- NumPy: 数值计算库