当前位置: 首页 > article >正文

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
    

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
    

四、使用示例

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,上传图片即可获取检测结果。

五、总结

通过上述步骤,我们成功将YOLOv5与SpringBoot集成。借助SpringBoot的强大功能和YOLOv5的高效目标检测能力,可以快速搭建一个目标检测系统。此方案适用于需要高性能目标检测的后端服务场景。


版权声明:本博客内容为原创,转载请保留原文链接及作者信息。

参考文章

  • GitHub - zeng699304/AI-Integrated-SpringBoot-Application
  • yolov5+opencv+java:通过DJL在maven项目中使用yolov5的小demo

http://www.kler.cn/a/526503.html

相关文章:

  • JavaScript系列(50)--编译器实现详解
  • 知识管理系统塑造企业文化与学习型组织的变革之路
  • sem_wait的概念和使用案列
  • .Net / C# 繁体中文 与 简体中文 互相转换, 支持地方特色词汇
  • Linux——网络(tcp)
  • 芯片AI深度实战:基础篇之langchain
  • 前端知识速记—JS篇:null 与 undefined
  • Linux实操篇-文件目录类>/>>/echo/head/tail/ln/history
  • leetcode-分割等和子集
  • Java中 instanceof 的用法(详解)
  • 安卓(android)饭堂广播【Android移动开发基础案例教程(第2版)黑马程序员】
  • 谭浩强C语言程序设计(4) 8章(上)
  • deepseek R1 14b显存占用
  • 【Block总结】HWD,小波下采样,适用分类、分割、目标检测等任务|即插即用
  • 【Block总结】CAA捕获远程上下文信息,增强特征提取的能力|即插即用
  • 哈希表实现
  • 缓冲区和c库的简单实现
  • 性能优化2-删除无效引用
  • kobject、kset和ktype的关系
  • 论文阅读(七):贝叶斯因果表型网络解释遗传变异和生物学知识
  • python | OpenCV小记(一):cv2.imread(f) 读取图像操作(待更新)
  • 春晚舞台上的智能革命:中美人形机器人技术对比与发展
  • 日志2025.1.30
  • 【深度分析】DeepSeek 遭暴力破解,攻击 IP 均来自美国,造成影响有多大?有哪些好的防御措施?
  • Spring AI 与企业级应用架构的结合
  • 举例说明python单利模式的必要性