基于YOLO模型的无人机图像自动分析系统,实现从消息队列接收图像数据、执行目标检测、存储推理结果的全流程自动化。
- ✅ RabbitMQ 消息队列通信
- ✅ MinIO 分布式存储集成
- 🚀 YOLOv11 目标检测模型
- 🔧 Pydantic 配置管理
- 📊 多维度数据监控日志
- 🔄 断线自动重连机制
- Python 3.9+
- RabbitMQ 3.8+
- MinIO 2023+
# 安装依赖
pip install -r requirements.txt
# 启动主程序
python main.py
- 创建配置文件
config.yml
rabbitmq:
host: "rabbitmq-server"
port: 5672
username: "guest"
password: "guest"
queue_name: "mq.drone-image.queue"
exchange: "mq.drone-image.exchange"
routing_key: "mq.drone-image.key"
minio:
endpoint: "minio-server:9000"
access_key: "your-access-key"
secret_key: "your-secret-key"
secure: false
drone_image_bucket: "drone-images"
env: "dev"
- 数据模型说明
class DroneImageData:
device_id: str # 设备唯一标识
bucket: str # MinIO存储桶名称
path: str # 图片存储路径
latitude: float # 拍摄纬度
longitude: float # 拍摄经度
create_time: datetime # 拍摄时间
.
├── config/ # 配置管理
│ ├── __init__.py
│ ├── models.py # Pydantic数据模型
│ └── loader.py # 配置加载器
├── consumers/ # 消息消费者
│ └── rabbitmq_consumer.py
├── handlers/ # 业务处理器
│ └── message_handler.py
├── model/ # 数据模型
│ └── DroneImageData.py
├── yolo_model/ # YOLO模型文件
│ └── yolo11n.pt
├── config.yml # 主配置文件
└── requirements.txt # 依赖清单
sequenceDiagram
participant RabbitMQ
participant Consumer
participant MinIO
participant YOLO
RabbitMQ->>Consumer: 接收JSON消息
Consumer->>MinIO: 下载原始图像
MinIO-->>Consumer: 返回图像数据
Consumer->>YOLO: 执行目标检测
YOLO-->>Consumer: 返回检测结果
Consumer->>MinIO: 上传预测结果
%(asctime)s - %(name)s - %(levelname)s - %(message)s
日志文件存储路径:logs/app.log
- 模型文件需放置在
yolo_model/
目录 - 生产环境建议:
- 启用MinIO HTTPS连接
- 配置RabbitMQ TLS加密
- 设置定期日志轮转
- 开发环境可通过
.env
文件覆盖配置
Q: 为什么模型会从GitHub下载? A: 请检查模型路径是否正确,确保:
os.path.abspath(os.path.join(os.path.dirname(__file__), "../yolo_model/yolo11n.pt"))
Q: 如何支持多环境配置? A: 通过修改env字段切换环境:
env: "prod" # 可选值:dev/test/prod