0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

英特尔开发套件『哪吒』在Java环境实现ADAS道路识别演示 | 开发者实战

研扬科技AAEON 2024-04-29 08:07 次阅读

作者:黄明明
英特尔边缘计算创新大使

简介

本文使用来自Open Model Zoo的预训练的 road-segmentation-adas-0001模型。ADAS 代表高级驾驶辅助服务。该模型识别四个类别:背景、道路、路缘和标记。

硬件环境

此文使用了英特尔开发套件家族里的『哪吒』(Nezha)开发板,其为研扬科技针对边缘 AI 行业开发者推出的开发板,虽只有信用卡大小(85 x 56mm),但『哪吒』采用 Intel N97 处理器(Alder Lake-N),最大睿频 3.6GHz,Intel UHD Graphics 内核GPU,可实现高分辨率显示;板载 LPDDR5 内存、eMMC 存储及 TPM 2.0,配备 GPIO 接口,支持 Windows 和 Linux 操作系统,这些功能和无风扇散热方式相结合,为各种应用程序构建高效的解决方案,如您是树莓派开发者又需要更好的AI算力, 强力推荐产品, 其适用于如自动化、物联网网关、数字标牌和机器人等应用。售价 RMB 999起, 『哪吒』开发套件Nezha intel x86开发板板载Alder N97 可Win10/Ubuntu N97 4G+32G。

模型下载

首先进入

https://storage.openvinotoolkit.org/repositories/open_model_zoo/2023.0/models_bin/1/road-segmentation-adas-0001/FP32/

下载指定版本的segmentation 模型文件

wKgZombZYRaAGSBsAACKnmU7En4992.png

搭建OpenVINO Java环境

由于之前文章都介绍过Java环境的搭建,而这篇文章主要讲述代码怎么写的,所以对于环境的搭建不做过多的说明,大家可以进入

https://github.com/Hmm466/OpenVINO-Java-API/tree/main/docs/cn

查看各个系统的安装文档:

wKgZombZYTiABD0RAAC5vIfFQzs060.png

编写测试代码

大致上分为四步:

  1. 加载OpenVINO Runtime

2. 加载模型

3. 加载图片并推理

4. 处理结果

加载OpenVINO Runtime

1. OpenVINO vino = OpenVINO.load();
2. //加载OpenCV Dll
3. vino.loadCvDll();
4. OvVersion version = vino.getVersion();
5. Console.println("---- OpenVINO INFO----");
6. Console.println("Description : %s", version.description);
7. Console.println("Build number: %s", version.buildNumber);

结果将输出当前系统OpenVINO版本:

1. ---- OpenVINO INFO----
2. Description : OpenVINO Runtime
3. Build number: 2023.2.0-13089-cfd42bd2cb0-HEAD

加载模型

1. String modelPath = "model/road-segmentation-adas-0001.xml";
2. Core core = new Core();
3. // -------- Step 2. Read a model --------
4. Console.println("[INFO] Loading model files: %s", modelPath);
5. Model model = core.readModel(modelPath);
6. CompiledModel compiledModel = core.compileModel(model, "AUTO");

加载图片并处理

1. Input inputLayerIr = compiledModel.input(0);
2. Tensor inputTensor = inferRequest.getInputTensor();
3. Mat rgbImage = new Mat();
4. Imgproc.cvtColor(mat, rgbImage, Imgproc.COLOR_BGR2RGB);
5. int imageH = mat.height();
6. int imageW = mat.width();
7. int channels = mat.channels();
8. Shape shape = inputLayerIr.getShape();
9. long N = shape.getDims().get(0);
10. long C = shape.getDims().get(1);
11. long H = shape.getDims().get(2);
12. long W = shape.getDims().get(3);

13.
14. Mat resizedImage = new Mat();
15. Imgproc.resize(mat,resizedImage, new Size(W, H));
16. int[] data = matToIntArray(resizedImage)
17. NDArray array = manager.create(data,new Shape(H,W,C));
18. NDArray inputImage = array.transpose(2,0,1).expandDims(0);
19. float[] floats = intToFloatArray(inputImage.toIntArray());

开始推理&处理结果

1. inputTensor.setData(floats);
2. inferRequest.infer();
3. Tensor outputTensor = inferRequest.getOutputTensor(0);
4. int outputLength = (int) outputTensor.getSize();
5. float[] outputData = outputTensor.getData(float[].class, outputLength);
6. NDArray ndArray = manager.create(outputData,new Shape(1,4,H,W));
7. ndArray = ndArray.argMax(1);
8. if (ndArray.getShape().get(0) == 1){
9. ndArray = ndArray.squeeze(0);
10. }
11. ndArray = ndArray.toType(DataType.UINT8, true);
12. NDArray mask = manager.zeros(new Shape(ndArray.getShape().get(0),ndArray.getShape().get(1),3),DataType.UINT8);
13. Mat _mat = new Mat((int)ndArray.getShape().get(0),(int)ndArray.getShape().get(1), CvType.CV_8UC3);
14. byte[] b = mask.toByteArray();
15. _mat.put(0,0,b);
16. double[][] colors = new double[][]{{255, 44, 255}, {48, 255, 141}, {53, 255, 120}, {199, 216, 52}};
17. for (int i = 0 ; i < colors.length;i++) {
18. NDArray labelIndexMap = ndArray.eq(i);
19. labelIndexMap = labelIndexMap.toType(DataType.UINT8,true).mul(255);
20. Mat mat1 = new Mat((int) labelIndexMap.getShape().get(0), (int) labelIndexMap.getShape().get(1),CvType.CV_8UC1);
21. mat1.put(0,0,labelIndexMap.toByteArray());
22. List contours = new ArrayList<>();
23. Mat hierarchies = new Mat();
24. Imgproc.findContours(mat1,contours,hierarchies,Imgproc.RETR_EXTERNAL,Imgproc.CHAIN_APPROX_SIMPLE);

25. Imgproc.drawContours(_mat,contours,-1,new Scalar(colors[i][0], colors[i][1], colors[i][2]),Imgproc.FILLED);
26. }
27. Mat resized_mask = new Mat();
28. Imgproc.resize(_mat,resized_mask, new Size(imageW, imageH));
29. Core.addWeighted(resized_mask,0.2F,mat,0.8F,0,resized_mask);

结果展示

这里将背景、道路、路缘和标记都分别标记了出来,我们可以根据各个类别做自己想做的事情,比如分割出道路,将背景去除等等。

wKgaombZadGAAbLLAAzhQeBHD7c712.png

结语

整体步骤是这样,在该项目中,基于N97的『哪吒』平台通过Java API实现了基于segmentation 模型的分割代码,并且成功处理图片并展示。后续笔者将基于OpenVINO 实现OCR,背景扣除等模型实现。

关于英特尔 OpenVINO 工具套件的详细资料,包括三百多个经验证并优化的预训练模型的详细资料,请您前往

https://www.intel.com/content/www/us/en/developer/tools/openvino-toolkit/overview.html

除此之外,为了方便大家了解并快速掌握 OpenVINO 的使用,我们还提供了一系列开源的 Jupyter notebook demo。

运行这些 notebook,就能快速了解在不同场景下如何利用 OpenVINO 实现一系列、包括计算机视觉、语音及自然语言处理任务。

OpenVINO notebooks 的资源可以在 GitHub 下载安装:

https://github.com/openvinotoolkit/openvino_notebooks

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 英特尔
    +关注

    关注

    60

    文章

    9848

    浏览量

    171197
  • 开发板
    +关注

    关注

    25

    文章

    4872

    浏览量

    96971
  • adas
    +关注

    关注

    309

    文章

    2159

    浏览量

    208462
  • OpenVINO
    +关注

    关注

    0

    文章

    83

    浏览量

    162
收藏 人收藏

    评论

    相关推荐

    从运动员到开发者: 英特尔以开放式AI系统应对多重挑战

    打造的生成式AI(GenAI)检索增强生成(RAG)解决方案。该成果深度展示了英特尔如何通过基于英特尔®至强®处理器和英特尔® Gaudi AI加速器的开放式AI系统及平台,帮助开发者
    的头像 发表于 07-25 09:28 237次阅读
    从运动员到<b class='flag-5'>开发者</b>: <b class='flag-5'>英特尔</b>以开放式AI系统应对多重挑战

    英特尔开发板『哪吒』智慧交通演示——应急车道识别&amp;amp;违规提取 | 开发者实战

    之前写了很多关于JavaOpenVINO中的引用,有目标检测、道路分割、模型加速等,但虽然写了这么多,也似乎没有过多提及到一些实际生活上的案例。都说创新源于生活,于是乎就想做一些有意思的东西,想了
    的头像 发表于 05-25 08:06 247次阅读
    <b class='flag-5'>英特尔</b><b class='flag-5'>开发</b>板『<b class='flag-5'>哪吒</b>』智慧交通<b class='flag-5'>演示</b>——应急车道<b class='flag-5'>识别</b>&amp;amp;违规提取 | <b class='flag-5'>开发者</b><b class='flag-5'>实战</b>

    英特尔开发套件Java环境实现ADAS道路识别演示

    本文使用来自Open Model Zoo的预训练的 road-segmentation-adas-0001模型。ADAS 代表高级驾驶辅助服务。该模型识别四个类别:背景、道路、路缘和标
    的头像 发表于 04-20 10:32 491次阅读
    <b class='flag-5'>英特尔</b><b class='flag-5'>开发套件</b><b class='flag-5'>在</b><b class='flag-5'>Java</b><b class='flag-5'>环境</b><b class='flag-5'>实现</b><b class='flag-5'>ADAS</b><b class='flag-5'>道路</b><b class='flag-5'>识别</b><b class='flag-5'>演示</b>

    英特尔面向AI PC软件开发者与硬件供应商新增助力计划

    英特尔公司近日宣布“AI PC加速计划”再添两项人工智能(AI)新举措,即新增“AI PC开发者计划”,并吸纳独立硬件供应商(IHV)加入“AI PC加速计划”。
    的头像 发表于 04-02 10:09 287次阅读

    英特尔宣布AI PC加速计划新增两项AI举措

    首先,“AI PC 开发者计划”面向软件研发人员和独立软件开发商,为他们提供便捷的开发环境,助力加速大规模运用新型 AI技术。此计划包含一系列全面的工具、优化工作流方案、AI 部署框架
    的头像 发表于 03-27 16:03 327次阅读

    【转载】英特尔开发套件哪吒”快速部署YoloV8 on Java | 开发者实战

    部署到生产系统中。通过简化的开发工作流程,OpenVINO可赋能开发者现实世界中部署高性能应用程序和算法。 今天我们将基于哪吒开发者
    的头像 发表于 03-23 08:05 418次阅读
    【转载】<b class='flag-5'>英特尔</b><b class='flag-5'>开发套件</b>“<b class='flag-5'>哪吒</b>”快速部署YoloV8 on <b class='flag-5'>Java</b> | <b class='flag-5'>开发者</b><b class='flag-5'>实战</b>

    基于英特尔哪吒开发者套件平台来快速部署OpenVINO Java实战

    OpenVINO 工具套件基于OneAPI开发,可以加快高性能计算机视觉和深度学习应用开发速度的工具套件,适用于从边缘到云的各种英特尔计算平
    的头像 发表于 03-21 18:24 1376次阅读
    基于<b class='flag-5'>英特尔</b><b class='flag-5'>哪吒</b><b class='flag-5'>开发者</b><b class='flag-5'>套件</b>平台来快速部署OpenVINO <b class='flag-5'>Java</b><b class='flag-5'>实战</b>

    玩转PSoC 6 RTT积木式开发套件实现毫米波雷达等实用功能

    Jenson一起玩转这款灵活易用、玩法多样的MCU套件吧!PSoC6RTT开发板是一款供广大开发者评估和测试阶段使用的开发套件,一经推出就
    的头像 发表于 03-20 08:35 817次阅读
    玩转PSoC 6 RTT积木式<b class='flag-5'>开发套件</b>,<b class='flag-5'>实现</b>毫米波雷达等实用功能

    OpenVINO™ Java API应用RT-DETR做目标检测器实战

    本文将从零开始详细介绍环境搭建的完整步骤,我们基于英特尔开发套件AIxBoard为硬件基础实现Java
    的头像 发表于 03-18 15:04 718次阅读
    OpenVINO™ <b class='flag-5'>Java</b> API应用RT-DETR做目标检测器<b class='flag-5'>实战</b>

    英飞凌推出CYUSBS236 USB转串行通信(双通道)开发套件

    英飞凌科技(Infineon Technologies)近日宣布推出全新的CYUSBS236 USB 转串行通信(双通道)开发套件。该开发套件基于英飞凌的CY7C65215 USB 串行桥控制器,为开发者提供了快速、简便地
    的头像 发表于 01-24 17:12 792次阅读

    OpenVINO™ 赋能千元级『哪吒』AI开发套件大语言模型 | 开发者实战

    作者:英特尔AI软件布道师武卓博士前言人工智能的飞速发展中,大语言模型,如Stable-Zephyr-3b,已成为研究和应用的热点。这些模型以其强大的文本理解和生成能力多个领域大放异彩。然而
    的头像 发表于 01-06 08:05 1399次阅读
    OpenVINO™ 赋能千元级『<b class='flag-5'>哪吒</b>』AI<b class='flag-5'>开发套件</b>大语言模型 | <b class='flag-5'>开发者</b><b class='flag-5'>实战</b>

    用AI PC助力创新无限想象,英特尔人工智能创新应用大赛正式启动

    用新一代计算体验,释放创新无限想象        12月16日,英特尔人工智能创新应用大赛启动仪式深圳举办。通过本次大赛,英特尔为广大开发者提供了一个展示创意和成果的平台,并依托强大
    的头像 发表于 12-19 11:23 628次阅读

    基于英特尔® QuickAssist的®EP80579集成处理器开发套件

    采用英特尔® QuickAssist 技术的英特尔® EP80579 集成处理器的开发套件使客户能够为嵌入式、存储和通信应用创建新一代解决方案。该处理器采用片上系统 (SOC) 处理器产品系列的突破性技术,可提供出色的每瓦效能比
    发表于 11-14 08:32 0次下载
    基于<b class='flag-5'>英特尔</b>® QuickAssist的®EP80579集成处理器<b class='flag-5'>开发套件</b>

    OpenVINO Java API详解与演示

    英特尔 发行版 OpenVINO 工具套件基于 oneAPI 而开发,可以加快高性能计算机视觉和深度学习视觉应用开发速度工具套件,适用于从边
    的头像 发表于 11-09 17:03 938次阅读
    OpenVINO <b class='flag-5'>Java</b> API详解与<b class='flag-5'>演示</b>

    oneAPI &amp; OpenVINO™联合开发者大会开启:英特尔持续开源创新,助力AI开发落地

    的技术盛筵上,英特尔技术专家带来了oneAPI全球的发展近况及如何与合伙伙伴共建异构计算新生态,同时针对OpenVINO 2023.1新版本进行了技术亮点解析,并详细讲解了新版本如何更好地支持生成式AI模型、框架及大语言模型,实现
    的头像 发表于 11-04 16:00 541次阅读
    oneAPI &amp; OpenVINO™联合<b class='flag-5'>开发者</b>大会开启:<b class='flag-5'>英特尔</b>持续开源创新,助力AI<b class='flag-5'>开发</b>落地