如何使用Java基于YOLO实现行人及人体目标检测(附源码)
使用SmartJavaAI实现行人及人体检测,使用yolo的onnx模型实现
简介
行人目标检测是计算机视觉领域的重要任务,旨在从图像或视频中自动识别并定位行人对象。它广泛应用于智能监控、自动驾驶、安防系统等场景,通过分析图像中的特征信息,实现对行人的准确检测和跟踪。
行人检测模型是基于专门的行人数据集进行训练的,因而在识别行人目标上具有更高的准确性和鲁棒性。相比之下,通用的目标检测模型虽然也支持人员检测,但其训练数据中人员样本较少,导致在特定行人类别的识别效果通常不够理想。针对行人场景专门优化的模型,能够更好地适应复杂环境和多样化的人体姿态,提高检测的精度和稳定性。
现在我们已经可以借助 SmartJavaAI 项目,通过 Java 快速接入行人目标检测能力。本文将手把手教你如何使用 SmartJavaAI 来实现行人目标识别功能,即使你没有深度学习基础,也能轻松上手!
SmartJavaAI是什么?
SmartJavaAI是专为JAVA 开发者打造的一个功能丰富、开箱即用的 JAVA AI算法工具包,致力于帮助JAVA开发者零门槛使用各种AI算法模型,开发者无需深入了解底层实现,即可轻松在 Java 代码中调用人脸识别、目标检测、OCR 等功能。底层支持包括基于 DJL (Deep Java Library) 封装的深度学习模型,以及通过 JNI 接入的 C++/Python 算法,兼容多种主流深度学习框架如 PyTorch、TensorFlow、ONNX、Paddle 等,屏蔽复杂的模型部署与调用细节,开发者无需了解 AI 底层实现即可直接在 Java 项目中集成使用,后续将持续扩展更多算法,目标是构建一个“像 Hutool 一样简单易用”的 JAVA AI 通用工具箱

效果展示

快速开始
借助 SmartJavaAI 开源项目,你可以直接在 Java 中集成行人目标检测模型,无需自己处理复杂的深度学习框架。
Maven
在项目的 pom.xml 中添加以下依赖,详细引入方式参考 Maven 引入。
如需引入全部功能,请使用 【不推荐 ❌】 all 模块。
<dependency>
<groupId>cn.smartjavaai</groupId>
<artifactId>vision</artifactId>
<version>1.0.24</version>
</dependency>
获取行人检测模型
PersonDetModelConfig config = new PersonDetModelConfig();
config.setModelEnum(PersonDetectorModelEnum.YOLOV8_PERSON);
config.setModelPath("/Users/wenjie/Documents/develop/model/person/yolov8n-person.onnx");
PersonDetModel detectorModel = ObjectDetectionModelFactory.getInstance().getModel(config);
PersonDetModelConfig参数说明
字段名称 | 字段类型 | 默认值 | 说明 |
---|---|---|---|
modelEnum | DetectorModelEnum | 无 | 行人检测模型枚举 |
modelPath | String | 模型路径 | |
topK | int | 不限制 | 检测结果数量 |
threshold | double | 0.5 | 置信度阈值,分数低于这个值的结果将被过滤掉。值越高越严格,越低越宽松 |
device | DeviceEnum | CPU | 指定运行设备,支持 CPU/GPU |
gpuId | int | 0 | gpu设备ID 当device为GPU时生效 |
predictorPoolSize | int | 默认为cpu核心数 | 模型预测器线程池大小 |
customParams | Map<String, Object> | 无 | 个性化配置(按模型类型动态解析) |
支持行人检测模型
模型名称 | 引擎 | 模型开源网站 |
---|---|---|
YOLOV8_PERSON | OnnxRuntime | Github |
PersonDetModel API 方法说明
行人检测
Image图片源请查看文档Image使用说明
R<DetectionResponse> detect(Image image);
DetectedObjects detectCore(Image image);
DetectionResponse字段说明
- 返回并非json格式,仅用于字段讲解
{
"detectionInfoList": [ //检测信息列表
{
"detectionRectangle": { //矩形框
"height": 174, // 矩形高度
"width": 147, // 矩形宽度
"x": 275, // 左上角横坐标
"y": 143 // 左上角纵坐标
},
"objectDetInfo": { //行人检测信息
"className": "person" //类别
},
"score": 0.8118719 //检测结果置信度分数
}
]
}
检测并绘制结果
该接口支持对图像进行检测,并将检测结果绘制在图像上,同时返回检测结果信息。
- 保存绘制后的图片到指定路径,检测结果通过
DetectionResponse
返回。
R<DetectionResponse> detectAndDraw(String imagePath, String outputPath);
- 支持直接输入
Image
对象进行检测,检测结果通过DetectionResponse
返回。
可以通过DetectionResponse
中的drawnImage
获取绘制后的Image
对象。
R<DetectionResponse> detectAndDraw(Image image);
使用说明
imagePath
:待检测图像的文件路径。outputPath
:绘制检测结果后图像的保存路径。image
:待检测的Image
对象。- 返回的
DetectionResponse
包含检测框信息及绘制后的图像(drawnImage
),方便后续处理或展示。
完整示例项目
项目地址:https://gitee.com/dengwenjie/SmartJavaAI/tree/master/examples
开源项目地址
🔗 Gitee 项目地址:https://gitee.com/dengwenjie/SmartJavaAI
🔗 GitHub 项目地址:https://github.com/geekwenjie/SmartJavaAI
🔗 GitCode 项目地址:https://gitcode.com/geekwenjie/SmartJavaAI
📖 在线文档地址:http://doc.smartjavaai.cn
更多推荐
所有评论(0)