简介

旋转框(定向对象)目标检测通过引入一个额外的角度来更准确地定位图像中的对象,从而比标准对象检测更进一步。 旋转框目标检测器的输出是一组旋转的边界框,这些边界框精确地包围了图像中的目标,以及每个框的类别标签和置信度分数。当目标以各种角度出现时,定向边界框特别有用,例如在航空图像中,传统的轴对齐边界框可能包含不必要的背景。

现在我们已经可以借助 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>

模型简介及下载

实例分割模型

模型名称 引擎 模型简介 模型开源网站
YOLOV11-OBB OnnxRuntime Ultralytics在DOTAv1 数据集 上训练的模型、通过引入一个额外的角度来更准确地定位图像中的对象 Github

⚠️ 注意
不同模型支持的类别可能不一样,具体可查看模型目录下的 synset.txt 文件,其中列出了该模型支持的全部物体名称。


旋转框目标检测

1、获取旋转框目标检测模型

public ObbDetModel getModel(){
    ObbDetModelConfig config = new ObbDetModelConfig();
    //旋转框检测模型,切换模型需要同时修改modelEnum及modelPath
    config.setModelEnum(ObbDetModelEnum.YOLOV11);
    //模型所在路径,synset.txt也需要放在同目录下
    config.setModelPath("/Users/wenjie/Documents/develop/model/vision/obb/yolo11n-obb.onnx");
    // 指定允许的类别
//            config.setAllowedClasses(Arrays.asList("plane","ship"));
    //指定返回检测数量
    config.setDevice(device);
    //置信度阈值
    config.setThreshold(0.5f);
    return ObbDetModelFactory.getInstance().getModel(config);
}

2、旋转框目标检测

public void obbDet(){
    try {
        ObbDetModel detectorModel = getModel();
        //创建Image对象,可以从文件、url、InputStream创建、BufferedImage、Base64创建,具体使用方法可以查看文档
        Image image = SmartImageFactory.getInstance().fromFile(Paths.get("src/main/resources/obb/boats.jpg"));
        R<DetectionResponse> result = detectorModel.detect(image);
        if(result.isSuccess()){
            log.info("旋转框检测结果:{}", JSONObject.toJSONString(result.getData()));
        }else{
            log.info("旋转框检测失败:{}", result.getMessage());
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

3、旋转框目标检测并绘制检测结果

public void obbDetAndDraw(){
    try {
        ObbDetModel detectorModel = getModel();
        R<DetectionResponse> result = detectorModel.detectAndDraw("src/main/resources/obb/boats.jpg","output/boats_detected.png");
        if(result.isSuccess()){
            log.info("旋转框检测结果:{}", JSONObject.toJSONString(result.getData()));
        }else{
            log.info("旋转框检测失败:{}", result.getMessage());
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}

完整示例项目

项目地址: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

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐