跳到主要内容

图像检测服务

  • 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

模型准备

  1. 将训练好的YOLO模型文件命名为 best.pt
  2. 将模型文件放置在 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:5000http://127.0.0.1:5000

局域网访问

  • URL: http://你的本机IP地址:5000

外网访问

如需外网访问,需要:

  1. 配置路由器端口转发
  2. 使用内网穿透工具(如ngrok)
  3. 部署到公网服务器

注意事项

  1. 确保模型文件 model/best.pt 存在且格式正确
  2. 服务默认监听所有网络接口(0.0.0.0),请注意网络安全
  3. 生产环境建议关闭debug模式
  4. 根据实际需求调整上传文件大小限制
  5. 建议在生产环境中添加身份验证和访问控制

依赖说明

  • Flask: Web框架
  • OpenCV: 图像处理库
  • Ultralytics: YOLO模型库
  • NumPy: 数值计算库