changzengli/yolo-onnx-java环境配置与快速上手
文章详细介绍了如何配置JDK 11+环境、GPU加速设置、Maven依赖管理以及项目中的核心主文件功能。内容包括JDK版本验证、CUDA/cuDNN安装指南、国内镜像源优化,以及CameraDetection.java等主文件的实时目标检测实现。
环境要求:JDK 11+与GPU配置建议
JDK 11+ 环境配置
为了确保 changzengli/yolo-onnx-java 项目的顺利运行,必须满足以下JDK环境要求:
- JDK版本:必须使用 JDK 11或更高版本。JDK 8及以下版本不支持项目中的某些特性(如
var关键字和模块化功能)。 - 验证JDK版本: 运行以下命令验证当前JDK版本:
java -version输出应为类似以下内容:
openjdk version "17.0.15" 2025-04-15 OpenJDK Runtime Environment (build 17.0.15+6-Debian-1deb12u1) OpenJDK 64-Bit Server VM (build 17.0.15+6-Debian-1deb12u1, mixed mode, sharing) - 安装JDK 11+:
GPU配置建议
对于视频流实时检测或高性能需求场景,建议使用GPU加速推理。以下是GPU配置的详细建议:
1. 硬件要求
- 显卡型号:推荐使用 NVIDIA RTX 3060或更高性能显卡。
- 显存容量:至少 6GB显存,以确保模型推理的流畅性。
2. 软件依赖
- CUDA Toolkit:安装与显卡驱动兼容的CUDA版本(推荐 CUDA 11.8)。
- cuDNN:下载与CUDA版本匹配的cuDNN库,并配置环境变量。
- ONNX Runtime GPU版:确保安装
onnxruntime-gpu库以启用GPU加速。
3. 验证GPU支持
运行以下命令验证CUDA和cuDNN是否安装成功:
nvcc -V
输出应显示CUDA版本信息:
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2025 NVIDIA Corporation
Built on Mon_Apr_15_2025_12:00:00_PDT
Cuda compilation tools, release 11.8, V11.8.00
4. 项目中的GPU启用
在代码中,通过以下方式启用GPU加速:
OrtSession.SessionOptions sessionOptions = new OrtSession.SessionOptions();
sessionOptions.addCUDA(); // 启用CUDA加速
OrtSession session = environment.createSession(model_path, sessionOptions);
5. 常见问题
- 驱动不兼容:确保显卡驱动为最新版本。
- 显存不足:降低输入分辨率或使用更轻量级的模型。
- 性能优化:多线程处理视频流,避免队列堆积。
环境配置流程图
版本兼容性表格
| 组件 | 推荐版本 | 最低要求 |
|---|---|---|
| JDK | 17 | 11 |
| CUDA | 11.8 | 11.0 |
| cuDNN | 8.6 | 8.0 |
| ONNX Runtime | 1.15.0 | 1.10.0 |
通过以上配置,您可以充分发挥GPU的加速能力,显著提升模型的推理效率。
Maven依赖配置与国内源优化
在Java项目中,Maven是管理项目依赖的核心工具。对于changzengli/yolo-onnx-java项目,正确配置Maven依赖和优化国内源是确保项目顺利构建和运行的关键步骤。以下将详细介绍如何完成这些配置。
1. Maven依赖配置
项目的核心依赖包括onnxruntime和opencv,这些依赖在pom.xml中已定义。以下是pom.xml中的关键依赖配置:
<dependencies>
<dependency>
<groupId>com.microsoft.onnxruntime</groupId>
<artifactId>onnxruntime</artifactId>
<version>1.16.1</version>
</dependency>
<dependency>
<groupId>org.openpnp</groupId>
<artifactId>opencv</artifactId>
<version>4.7.0-0</version>
</dependency>
</dependencies>
依赖说明
- onnxruntime:用于加载和运行ONNX模型,支持CPU和GPU推理。
- opencv:提供图像处理功能,支持图像的读取、转换和显示。
可选GPU支持
如果需要使用GPU加速推理,可以将onnxruntime替换为onnxruntime_gpu:
<dependency>
<groupId>com.microsoft.onnxruntime</groupId>
<artifactId>onnxruntime_gpu</artifactId>
<version>1.16.1</version>
</dependency>
2. 国内源优化
默认情况下,Maven从中央仓库下载依赖,速度较慢。建议配置国内镜像源(如阿里云)以加速下载。
配置步骤
- 打开Maven的
settings.xml文件(通常位于~/.m2/settings.xml或/etc/maven/settings.xml)。 - 添加以下镜像配置:
<mirrors>
<mirror>
<id>aliyun</id>
<name>Aliyun Maven Mirror</name>
<url>https://maven.aliyun.com/repository/public</url>
<mirrorOf>central</mirrorOf>
</mirror>
</mirrors>
验证配置
运行以下命令验证依赖是否从国内源下载:
mvn clean install
如果下载速度显著提升,说明配置成功。
3. 常见问题解决
依赖下载失败
- 问题:依赖下载超时或失败。
- 解决方案:
- 检查网络连接。
- 确保
settings.xml中的镜像配置正确。 - 清理本地仓库后重试:
mvn dependency:purge-local-repository
GPU支持问题
- 问题:使用
onnxruntime_gpu时报错。 - 解决方案:
- 确保已安装对应版本的CUDA和cuDNN。
- 检查显卡驱动是否为最新版本。
- 运行
nvcc -V验证CUDA是否安装成功。
4. 总结
通过正确配置Maven依赖和优化国内源,可以显著提升项目的构建效率。以下是配置的流程图:
通过以上步骤,您可以为changzengli/yolo-onnx-java项目提供稳定高效的依赖管理支持。
直接运行的主文件介绍:CameraDetection.java等
在changzengli/yolo-onnx-java项目中,CameraDetection.java、CameraDetectionV11.java和CameraDetectionWarnDemo.java是三个可以直接运行的主文件,用于实现基于YOLO模型的实时视频目标检测功能。以下是对这些文件的详细介绍:
1. CameraDetection.java
CameraDetection.java是一个基于YOLOv7模型的实时视频目标检测示例。它支持从摄像头或视频文件中读取帧,并通过ONNX模型进行目标检测。
功能特点:
- 支持多种输入源:可以直接从摄像头(如
video.open(0))或视频文件(如video.open("video/car3.mp4"))读取数据。 - 跳帧检测:通过设置
detect_skip参数,控制检测频率,优化性能。 - 结果可视化:在检测到的目标周围绘制边界框,并显示标签和置信度。
- GPU支持:通过
sessionOptions.addCUDA(0)启用GPU加速(需安装CUDA环境)。
代码结构:
public class CameraDetection {
public static void main(String[] args) throws OrtException {
// 初始化OpenCV和ONNX环境
// 加载模型和标签
// 打开视频源
// 循环读取帧并进行检测
// 可视化结果
}
}
示例输出:
input name = input
TensorInfo(javaType=FLOAT, shape=[1, 3, 640, 640])
2. CameraDetectionV11.java
CameraDetectionV11.java是基于YOLOv11模型的改进版本,支持更高效的目标检测和自定义配置。
功能特点:
- 非极大值抑制(NMS):通过
nonMaxSuppression方法过滤重叠的检测框。 - 动态跳帧:根据帧率动态调整检测频率。
- 多线程支持:适合高帧率视频流处理。
关键方法:
public static List<float[]> nonMaxSuppression(List<float[]> bboxes, float iouThreshold) {
// 实现非极大值抑制逻辑
}
public static void xywh2xyxy(float[] bbox) {
// 将边界框格式从(x, y, w, h)转换为(x1, y1, x2, y2)
}
示例输出:
time:45 ms.
person : 2
car : 1
3. CameraDetectionWarnDemo.java
CameraDetectionWarnDemo.java是一个告警示例,通过检测目标数量的变化触发告警逻辑。
功能特点:
- 目标计数:记录每帧中检测到的目标数量。
- 告警触发:当目标数量发生变化时(如新目标出现或消失),输出告警信息。
- 简易去重:通过
ConcurrentHashMap避免重复告警。
告警逻辑:
for (Map.Entry<String, Integer> entry : current.entrySet()) {
if (!last.containsKey(entry.getKey())) {
System.err.println(entry.getValue() + "个 " + entry.getKey() + " 出现了");
}
}
示例输出:
1个 person 出现了
1个 car 离开了
4. 其他主文件
除了上述文件,项目中还包含以下可直接运行的主文件:
- ObjectDetection_1_25200_n.java:支持YOLOv5模型。
- ObjectDetection_n_7.java:支持YOLOv7模型。
- ObjectDetection_1_n_8400.java:支持YOLOv8和YOLOv9模型。
这些文件的结构和功能类似,但针对不同模型输出格式进行了适配。
5. 运行示例
以下是一个简单的运行流程:
- 环境准备:确保JDK >= 11,并安装OpenCV和ONNX Runtime依赖。
- 模型配置:将训练好的ONNX模型文件(如
yolov7-tiny.onnx)放入src/main/resources/model/目录。 - 运行主文件:直接运行
CameraDetection.java或其他主文件。
示例命令:
java -cp "target/classes:lib/*" cn.ck.CameraDetection
6. 总结
通过CameraDetection.java等主文件,用户可以快速实现基于YOLO模型的实时目标检测功能。这些文件不仅支持多种输入源和模型格式,还提供了灵活的配置选项和告警逻辑,适合实际项目中的集成和扩展。
视频与图片识别效果展示
在 changzengli/yolo-onnx-java 项目中,视频与图片识别功能通过多种模型实现了高效的目标检测与姿态估计。以下是一些典型的识别效果展示,帮助开发者直观了解项目的实际应用场景。
图片识别效果
项目支持对静态图片进行目标检测,包括但不限于车辆、行人、安全帽等常见目标。以下是部分示例:
-
车辆检测
通过ObjectDetection_1_25200_n.java或ObjectDetection_n_7.java运行,可以准确识别图片中的车辆位置和类别。

检测结果:车辆位置(边界框)、类别标签(如“car”)及置信度分数。 -
安全帽检测
适用于工地场景,检测工人是否佩戴安全帽。

检测结果:安全帽佩戴状态(“helmet”或“no_helmet”)。 -
人体姿态估计
使用PoseEstimation.java对图片中的人体关键点进行识别,适用于动作分析、跌倒检测等场景。

检测结果:17个关键点坐标及连接线。
视频识别效果
项目支持实时视频流或本地视频文件的识别,以下是部分动态效果展示:
-
实时视频流检测
通过CameraDetection.java运行,支持摄像头或RTSP流输入,实时检测视频中的目标。

功能特点:低延迟、高帧率(依赖GPU性能)。 -
跳绳计数
结合姿态估计模型,对视频中的跳绳动作进行计数。
功能特点:动态跟踪关键点,统计跳绳次数。 -
旋转目标检测
适用于倾斜或旋转目标的检测,如车牌识别。

检测结果:目标角度(如车牌倾斜角度)。
效果对比表格
以下为不同模型的识别效果对比:
| 模型名称 | 适用场景 | 输入类型 | 输出结构 | 示例图片/视频 |
|---|---|---|---|---|
ObjectDetection_1_25200_n | 通用目标检测 | 图片/视频 | [1, 25200, 85] | ![]() |
ObjectDetection_n_7 | 高精度目标检测 | 图片/视频 | [n, 7] | ![]() |
PoseEstimation | 人体姿态估计 | 图片/视频 | 关键点坐标 | ![]() |
流程图:视频识别流程
以下为视频识别的核心流程:
通过以上示例和表格,开发者可以快速了解项目的识别能力,并根据实际需求选择合适的模型进行集成。
总结
本文全面讲解了changzengli/yolo-onnx-java项目的环境配置、依赖管理和核心功能实现。从JDK/GPU环境搭建到Maven国内源加速,再到CameraDetection系列文件的实时检测与告警功能,为开发者提供了完整的实践指南。项目支持多种YOLO模型和输入源,结合流程图和效果展示,显著降低了目标检测技术的入门门槛。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考






