作者:UR的出不克
这是一个基于YOLOv5和Flask的卫星图片目标检测Web应用系统。系统可以对卫星图片中的特定目标进行检测和识别,包括油罐、船只、桥梁和飞机等目标。
- 支持Web界面图片上传和检测
- 支持API接口调用
- 实时显示检测结果和置信度
- 支持多目标同时检测
- 检测目标类别:
- 油罐(oilcan)
- 船只(vessel)
- 桥梁(bridge)
- 飞机(plane)
- Python 3.7+
- PyTorch 1.7.0+
- Flask
- OpenCV
- 其他依赖见requirements.txt
- 克隆项目到本地
git clone [项目地址]
cd yolo-flask-master
- 下载YOLOv5
git clone https://github.com/ultralytics/yolov5.git
cd yolov5
pip install -r requirements.txt
cd ..
- 安装项目依赖
pip install -r requirements.txt
- 准备模型文件
- 将训练好的模型文件
best.pt
放在yolov5
目录下
- 创建main.py
在
yolov5
目录下创建main.py
文件,内容如下:
import torch
from models.experimental import attempt_load
from utils.general import non_max_suppression
from utils.datasets import letterbox
import cv2
import numpy as np
def detect(weights, source, device):
# 加载模型
model = attempt_load(weights, device=device)
# 读取图像
img0 = cv2.imread(source)
img = letterbox(img0, 640, stride=32)[0]
img = img.transpose((2, 0, 1))[::-1]
img = np.ascontiguousarray(img)
img = torch.from_numpy(img).to(device)
img = img.float()
img /= 255.0
if img.ndimension() == 3:
img = img.unsqueeze(0)
# 推理
pred = model(img, augment=False)[0]
pred = non_max_suppression(pred, 0.25, 0.45)
# 处理结果
det = pred[0]
if len(det):
det[:, :4] = scale_coords(img.shape[2:], det[:, :4], img0.shape).round()
return det
def scale_coords(img1_shape, coords, img0_shape):
gain = min(img1_shape[0] / img0_shape[0], img1_shape[1] / img0_shape[1])
pad = (img1_shape[1] - img0_shape[1] * gain) / 2, (img1_shape[0] - img0_shape[0] * gain) / 2
coords[:, [0, 2]] -= pad[0]
coords[:, [1, 3]] -= pad[1]
coords[:, :4] /= gain
coords[:, 0].clamp_(0, img0_shape[1])
coords[:, 1].clamp_(0, img0_shape[0])
coords[:, 2].clamp_(0, img0_shape[1])
coords[:, 3].clamp_(0, img0_shape[0])
return coords
- 运行应用
python app.py
-
Web界面使用:
- 访问 http://localhost:5000
- 点击上传按钮选择图片
- 点击"目标检测"按钮进行检测
- 查看检测结果和置信度
-
API接口使用:
- 接口地址:http://localhost:5000/api
- 请求方式:POST
- 请求格式:JSON
- 参数说明:
{ "img_base64": "图片base64编码字符串" }
- 后端:Flask
- 深度学习框架:YOLOv5 + PyTorch
- 前端:Bootstrap
- 图像处理:OpenCV
作者:UR的出不克
MIT License