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

新手零门槛!Java+YOLOv11从0到1:100行代码实现猫狗图像分类,一键复制跑通

做Java+YOLO入门的同学,是不是都被环境搭一周、依赖冲突、代码看不懂、模型加载失败这些问题劝退?我去年第一次学Java+YOLOv8的时候,光是解决OpenCV DNN的JNI依赖、模型格式转换,就折腾了整整3天,差点放弃。

今天这篇文章,用最主流、最稳定、零JNI依赖的技术栈:Java 17 + DJL(Deep Java Library,亚马逊开源的纯Java深度学习库) + YOLOv11n(轻量版,推理快,新手友好),实现经典的猫狗图像分类,核心代码100行左右,一键复制,Windows/Linux/macOS都能用,统信UOS/鲲鹏也能快速适配


一、先搞懂:为什么选这套技术栈?

新手入门Java+YOLO,最怕的就是JNI依赖冲突、跨平台适配难、代码复杂难维护,这套技术栈完美解决了所有痛点:

  1. 纯Java,零JNI依赖:DJL是纯Java实现的,不需要OpenCV DNN的JNI库,不需要TensorFlow Lite的C++库,一键安装NuGet(哦不对,是Maven)依赖,跨平台直接跑;
  2. 生态完善,支持所有主流模型:DJL原生支持YOLOv5/v8/v11/v26、BERT、ResNet等所有主流模型,支持ONNX Runtime、PyTorch、TensorFlow等推理引擎,新手入门用ONNX Runtime,性能好、部署简单;
  3. 代码简洁,新手友好:DJL封装了所有底层细节,比如模型加载、图像预处理、推理、后处理,核心代码100行左右就能实现完整的图像分类;
  4. 国产平台适配好:DJL原生支持统信UOS/麒麟/鲲鹏/飞腾等国产平台,开启NEON向量加速后,性能比原生Python还快。

二、环境准备(5分钟搞定,零踩坑)

2.1 系统要求

  • Java 11+(推荐Java 17 LTS,性能最好、兼容性最强);
  • Maven 3.6+(或者Gradle,新手推荐Maven,配置简单);
  • 任意操作系统(Windows/Linux/macOS/统信UOS/麒麟)。

2.2 Maven依赖配置(一键复制)

创建一个空的Maven项目,在pom.xml里添加以下依赖,不需要任何额外配置,不需要下载任何本地库

<?xml version="1.0" encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>yolo11-cat-dog</artifactId><version>1.0-SNAPSHOT</version><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><djl.version>0.27.0</djl.version></properties><dependencies><!-- DJL核心库 --><dependency><groupId>ai.djl</groupId><artifactId>api</artifactId><version>${djl.version}</version></dependency><!-- DJL ONNX Runtime推理引擎(新手首选,性能好、部署简单) --><dependency><groupId>ai.djl.onnxruntime</groupId><artifactId>onnxruntime-engine</artifactId><version>${djl.version}</version><scope>runtime</scope></dependency><!-- DJL图像预处理库 --><dependency><groupId>ai.djl</groupId><artifactId>model-zoo</artifactId><version>${djl.version}</version></dependency><!-- 日志库(可选,新手可以不加,用System.out.println) --><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-simple</artifactId><version>2.0.12</version></dependency></dependencies></project>

2.3 模型准备(1分钟搞定)

我们用Ultralytics官方预训练的YOLOv11n分类模型,轻量版,推理快,新手友好,模型大小仅2.8MB:

  1. 打开浏览器,访问Ultralytics官方模型库:https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11n-cls.onnx;
  2. 下载模型文件,放到项目的src/main/resources目录下;
  3. 模型的分类标签是COCO数据集的1000类,但我们只需要猫狗分类,标签索引是:15=猫,16=狗。

三、核心代码实现(100行左右,一键复制)

创建一个CatDogClassifier.java类,放在com.example包下,核心代码100行左右,一键复制就能跑通

packagecom.example;importai.djl.Application;importai.djl.MalformedModelException;importai.djl.Model;importai.djl.inference.Predictor;importai.djl.modality.Classifications;importai.djl.modality.cv.Image;importai.djl.modality.cv.ImageFactory;importai.djl.modality.cv.transform.Normalize;importai.djl.modality.cv.transform.Resize;importai.djl.modality.cv.transform.ToTensor;importai.djl.modality.cv.translator.ImageClassificationTranslator;importai.djl.repository.zoo.Criteria;importai.djl.repository.zoo.ModelNotFoundException;importai.djl.translate.TranslateException;importai.djl.translate.Translator;importjava.io.IOException;importjava.nio.file.Path;importjava.nio.file.Paths;importjava.util.List;publicclassCatDogClassifier{// 模型路径(src/main/resources目录下)privatestaticfinalStringMODEL_PATH="src/main/resources/yolo11n-cls.onnx";// 模型输入尺寸(YOLOv11分类模型固定224×224)privatestaticfinalintINPUT_SIZE=224;// 猫狗分类标签索引(COCO数据集)privatestaticfinalintCAT_INDEX=15;privatestaticfinalintDOG_INDEX=16;// 置信度阈值(只显示置信度>0.5的结果)privatestaticfinalfloatCONF_THRESHOLD=0.5f;publicstaticvoidmain(String[]args){// 1. 准备测试图片路径(换成你自己的图片路径)StringtestImagePath="src/main/resources/test-cat.jpg";// String testImagePath = "src/main/resources/test-dog.jpg";try{// 2. 构建图像分类翻译器(预处理+后处理)Translator<Image,Classifications>translator=ImageClassificationTranslator.builder()// 预处理:Resize到224×224 → ToTensor → Normalize(和Python训练时完全一致).addTransform(newResize(INPUT_SIZE,INPUT_SIZE)).addTransform(newToTensor()).addTransform(newNormalize(newfloat[]{0.485f,0.456f,0.406f},// COCO数据集均值newfloat[]{0.229f,0.224f,0.225f}// COCO数据集标准差))// 后处理:只显示Top 5结果.optTopK(5).build();// 3. 构建模型加载Criteria(指定模型路径、推理引擎、翻译器)Criteria<Image,Classifications>criteria=Criteria.builder().optApplication(Application.CV.IMAGE_CLASSIFICATION).setTypes(Image.class,Classifications.class).optModelPath(Paths.get(MODEL_PATH)).optTranslator(translator).optEngine("OnnxRuntime")// 指定ONNX Runtime推理引擎.build();// 4. 加载模型(只加载一次,不要每次推理都加载)try(Modelmodel=criteria.loadModel();Predictor<Image,Classifications>predictor=model.newPredictor()){System.out.println("模型加载成功!");// 5. 加载测试图片PathimagePath=Paths.get(testImagePath);Imageimage=ImageFactory.getInstance().fromFile(imagePath);System.out.println("测试图片加载成功!");// 6. 执行推理Classificationsclassifications=predictor.predict(image);System.out.println("推理完成!");// 7. 解析结果(只显示猫狗分类,置信度>0.5)List<Classifications.Classification>topK=classifications.topK();System.out.println("\nTop 5分类结果:");for(Classifications.Classificationcls:topK){System.out.printf("类别:%s,置信度:%.2f%%\n",cls.getClassName(),cls.getProbability()*100);}// 8. 只显示猫狗分类的最终结果System.out.println("\n猫狗分类最终结果:");booleanfound=false;for(Classifications.Classificationcls:topK){intindex=Integer.parseInt(cls.getClassName().split(" ")[0]);if(index==CAT_INDEX&&cls.getProbability()>CONF_THRESHOLD){System.out.printf("这是一只猫!置信度:%.2f%%\n",cls.getProbability()*100);found=true;break;}elseif(index==DOG_INDEX&&cls.getProbability()>CONF_THRESHOLD){System.out.printf("这是一只狗!置信度:%.2f%%\n",cls.getProbability()*100);found=true;break;}}if(!found){System.out.println("未检测到猫或狗!");}}catch(MalformedModelException|ModelNotFoundException|TranslateExceptione){e.printStackTrace();}}catch(IOExceptione){e.printStackTrace();}}}

四、测试运行(1分钟搞定,零踩坑)

  1. 准备一张测试图片(猫或狗的图片),放到项目的src/main/resources目录下,命名为test-cat.jpgtest-dog.jpg
  2. 修改CatDogClassifier.java里的testImagePath变量,换成你自己的图片路径;
  3. 右键点击CatDogClassifier.java,选择“Run ‘CatDogClassifier.main()’”;
  4. 等待几秒钟,就能在控制台看到分类结果!

五、新手常见问题与解决方案(避坑指南)

5.1 模型加载失败

  • 问题现象:报错ModelNotFoundExceptionMalformedModelException
  • 解决方案:检查模型路径是否正确,模型文件是否完整,模型文件是否放在src/main/resources目录下;
  • 避坑技巧:用绝对路径测试,比如C:/Users/xxx/Desktop/yolo11n-cls.onnx,确认没问题再用相对路径。

5.2 推理结果不对

  • 问题现象:明明是猫,却识别成狗,或者置信度很低;
  • 解决方案:检查预处理的均值和标准差是否和Python训练时完全一致,检查模型输入尺寸是否正确(YOLOv11分类模型固定224×224);
  • 避坑技巧:用Ultralytics官方预训练模型的话,预处理参数必须和官方一致,不要随便修改。

5.3 推理速度慢

  • 问题现象:单张图片推理要1秒以上;
  • 解决方案:检查是否每次推理都加载了模型(模型只加载一次,不要放在循环里),检查是否开启了CPU优化(DJL默认开启),如果有NVIDIA显卡,可以开启CUDA加速;
  • 避坑技巧:模型加载放在try-with-resources块外面,或者用单例模式,只加载一次。

六、进阶学习方向

跑通猫狗分类后,你可以沿着这几个方向深入学习:

  1. 目标检测:用YOLOv11n目标检测模型,实现猫狗目标检测;
  2. 自定义模型训练:用自己的数据集训练YOLOv11分类/目标检测模型,导出为ONNX格式,用DJL加载推理;
  3. 工业场景落地:结合OpenCV C#/Java,实现工业视觉缺陷检测;
  4. 国产平台适配:在统信UOS/鲲鹏/飞腾等国产平台上部署,开启NEON向量加速。

写在最后

Java+YOLO入门,从来不是简单的“找个代码复制粘贴”,而是要选对技术栈,避免JNI依赖冲突、跨平台适配难这些坑。本文这套技术栈,用纯Java的DJL库,一键安装Maven依赖,100行左右核心代码,一键复制就能跑通经典的猫狗图像分类,新手零门槛。

如果你在Java+YOLO入门中遇到任何问题,欢迎在评论区交流讨论。

http://www.jsqmd.com/news/614503/

相关文章:

  • .NET源码生成器基于partial范式开发和nuget打包醋
  • 用AI三步搞定产品原型设计,偷菜摸鱼也能高效完成!
  • 2.2MySQL 在电商全链路中的高频应用场景
  • 基于springboot植物销售管理系统的设计与实现_byn179m2_gk003
  • SDMatte辅助UI/UX设计:从真实界面截图快速提取设计组件库
  • 智能恒温器:挖掘节能潜力,应对高额能源账单
  • 患者姓名、身份证、病历号全字段精准脱敏,不丢业务语义——PHP医疗脱敏工具的5层语义感知架构详解
  • 【2026年网易春招- 4月2日-第二题- 背包排序】(题目+思路+JavaC++Python解析+在线测试)
  • 鸿蒙版微信APP总是收不到提醒?看看这两处设置是否正确
  • 3大技术突破重构翻译质量评估:COMET智能引擎的工业化实践
  • 编程已死,键盘长草!Claude Code之父对谈Kaparthy,全程爆金句
  • Agent Client Protocol 全景解析街
  • 如何在唐山挑选性价比高的二手房步梯房随着城市化进程的加快,越来越多的人选择购买二手房作为自己的居所。特别是在像唐山这样的城市里,由于其地理位置优越、经济发展迅速,二手房市场更是受到了不少购房者的青
  • 峨眉山:财神普贤双道场山,服务国内布局四川等地区,求财求事业福地 - 十大品牌榜
  • 三步搞定B站CC字幕下载与转换:告别手动转录的烦恼
  • Docker 容器中运行 AI CLI 工具:用户隔离与持久化卷实战指南淳
  • 光伏三相并网:集成MPPT与SPWM调制的高效逆变系统
  • PowerToys MeasureTool:让屏幕测量变得如此简单,设计师必备的免费神器
  • Spring Boot 4.0 Agent-Ready 架构实战避坑手册:4类ClassLoading冲突、3种Agent卸载失败场景、1套自动化验证脚本
  • 基于springboot油田土地档案管理系统的设计与实现_u0vz7897
  • 草履虫都能学会的Hadoop高可用的搭建
  • 高糖分水果 - 品牌企业推荐师(官方)
  • 【2026年华为暑期实习(AI)-4月8日-第二题- 路由器资源用量预测】(题目+思路+JavaC++Python解析+在线测试)
  • 如何快速下载Steam创意工坊模组:WorkshopDL终极免费解决方案 [特殊字符]
  • 2026年4月国内靠谱的剪叉车供应商选哪家,直臂式高空作业平台/曲臂式高空作业平台/剪叉车,剪叉车源头厂家怎么联系 - 品牌推荐师
  • 2026全流程智能体实战:你的竞争对手已经用 AI 打通全流程,你还在跨部门手动传数据?
  • 通俗易懂讲透RMSProp优化算法
  • 中国如何用特高压技术破解“能源不可能三角”?
  • 2026年服务器性能测试工具盘点与选型指南 - 领先技术探路人
  • 代谢重塑新纪元:腰纪线(MetaSlim)多维代餐粉开启靶向瘦腰科学减脂时代 - 品牌企业推荐师(官方)