SpringBoot中运行Yolov5程序
文章目录
- SpringBoot中运行Yolov5程序
- 一、引言
- 二、环境搭建
- 1、SpringBoot项目创建
- 2、YOLOv5环境配置
- 三、SpringBoot与YOLOv5集成
- 1、创建Python服务
- 2、SpringBoot调用Python服务
- 四、使用示例
- 1、创建控制器
- 五、总结
SpringBoot中运行Yolov5程序
一、引言
在人工智能领域,目标检测是一个热门且实用的技术。YOLOv5作为目标检测算法中的佼佼者,以其高效性和准确性受到广泛关注。而SpringBoot作为Java后端开发的主流框架,提供了强大的依赖管理和项目结构支持。将YOLOv5与SpringBoot结合,可以实现一个高效、可扩展的目标检测系统。
二、环境搭建
1、SpringBoot项目创建
-
步骤:
- 使用Spring Initializr(https://start.spring.io/)创建一个SpringBoot项目,选择Web依赖。
- 下载并解压项目到本地,使用IDE(如IntelliJ IDEA)打开项目。
- 在
pom.xml
中添加必要的依赖,例如spring-boot-starter-web
:
xml复制
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
2、YOLOv5环境配置
-
步骤:
- 安装Python 3.8+和PyTorch。
- 克隆YOLOv5仓库:
bash复制
git clone https://github.com/ultralytics/yolov5.git
- 进入YOLOv5目录,安装依赖:
bash复制
cd yolov5 pip install -r requirements.txt
三、SpringBoot与YOLOv5集成
1、创建Python服务
-
步骤:
- 在YOLOv5目录下,创建一个
api.py
文件,用于启动一个简单的Flask服务,将YOLOv5作为后端服务运行:
Python复制
from flask import Flask, request, jsonify import torch from models.experimental import attempt_load from utils.datasets import letterbox from utils.general import non_max_suppression, scale_coords from utils.torch_utils import select_device app = Flask(__name__) device = select_device('') model = attempt_load('yolov5s.pt', map_location=device) # 加载模型 @app.route('/detect', methods=['POST']) def detect(): file = request.files['image'] img = letterbox(file.read())[0] img = img[:, :, ::-1].transpose(2, 0, 1)[None] # BGR to RGB, to 3x416x416 img = torch.from_numpy(img).to(device) img = img.float() # uint8 to fp16/32 img /= 255.0 # 图像归一化 pred = model(img, augment=False)[0] pred = non_max_suppression(pred, 0.4, 0.5) return jsonify(pred) if __name__ == '__main__': app.run(host='0.0.0.0', port=5000)
- 启动Flask服务:
bash复制
python api.py
- 在YOLOv5目录下,创建一个
2、SpringBoot调用Python服务
-
步骤:
- 在SpringBoot项目中,创建一个
YoloService
类,用于调用YOLOv5的Flask服务:
java复制
import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; import java.util.Map; @Service public class YoloService { @Value("${yolo.api.url}") private String yoloApiUrl; public Map<String, Object> detect(byte[] image) { RestTemplate restTemplate = new RestTemplate(); return restTemplate.postForObject(yoloApiUrl + "/detect", image, Map.class); } }
- 在
application.properties
中配置YOLOv5服务的地址:
properties复制
yolo.api.url=http://localhost:5000
- 在SpringBoot项目中,创建一个
四、使用示例
1、创建控制器
-
步骤:
- 在SpringBoot项目中,创建一个
YoloController
类,用于接收图片并调用YoloService
:
java复制
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.multipart.MultipartFile; import java.util.Map; @RestController @RequestMapping("/yolo") public class YoloController { @Autowired private YoloService yoloService; @PostMapping("/detect") public Map<String, Object> detect(@RequestParam("image") MultipartFile image) throws Exception { return yoloService.detect(image.getBytes()); } }
- 启动SpringBoot应用,访问
http://localhost:8080/yolo/detect
,上传图片即可获取检测结果。
- 在SpringBoot项目中,创建一个
五、总结
通过上述步骤,我们成功将YOLOv5与SpringBoot集成。借助SpringBoot的强大功能和YOLOv5的高效目标检测能力,可以快速搭建一个目标检测系统。此方案适用于需要高性能目标检测的后端服务场景。
版权声明:本博客内容为原创,转载请保留原文链接及作者信息。
参考文章:
- GitHub - zeng699304/AI-Integrated-SpringBoot-Application
- yolov5+opencv+java:通过DJL在maven项目中使用yolov5的小demo