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

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

3天内不再提示

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

英特尔物联网 来源:英特尔物联网 2024-04-20 10:32 次阅读

简介

本文使用来自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 模型文件

571e07ce-fe39-11ee-a297-92fbcf53809c.png

搭建OpenVINO Java环境

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

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

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

5742ccf8-fe39-11ee-a297-92fbcf53809c.png

编写测试代码

大致上分为四步:

加载OpenVINO Runtime

加载模型

加载图片并推理

处理结果

加载OpenVINO Runtime

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

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

---- OpenVINO INFO----
Description : OpenVINO Runtime
Build number: 2023.2.0-13089-cfd42bd2cb0-HEAD

加载模型

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

加载图片并处理

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


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

开始推理&处理结果

inputTensor.setData(floats);
inferRequest.infer();
Tensor outputTensor = inferRequest.getOutputTensor(0);
int outputLength = (int) outputTensor.getSize();
float[] outputData = outputTensor.getData(float[].class, outputLength);
NDArray ndArray = manager.create(outputData,new Shape(1,4,H,W));
ndArray = ndArray.argMax(1);
if (ndArray.getShape().get(0) == 1){
  ndArray = ndArray.squeeze(0);
}
ndArray = ndArray.toType(DataType.UINT8, true);
NDArray mask = manager.zeros(new Shape(ndArray.getShape().get(0),ndArray.getShape().get(1),3),DataType.UINT8);
Mat _mat = new Mat((int)ndArray.getShape().get(0),(int)ndArray.getShape().get(1), CvType.CV_8UC3);
byte[] b = mask.toByteArray();
_mat.put(0,0,b);
double[][] colors = new double[][]{{255, 44, 255}, {48, 255, 141}, {53, 255, 120}, {199, 216, 52}};
for (int i = 0 ; i < colors.length;i++) {
    NDArray labelIndexMap = ndArray.eq(i);
    labelIndexMap = labelIndexMap.toType(DataType.UINT8,true).mul(255);
    Mat mat1 = new Mat((int) labelIndexMap.getShape().get(0), (int) labelIndexMap.getShape().get(1),CvType.CV_8UC1);
    mat1.put(0,0,labelIndexMap.toByteArray());
    List contours = new ArrayList<>();
  Mat hierarchies = new Mat();
  Imgproc.findContours(mat1,contours,hierarchies,Imgproc.RETR_EXTERNAL,Imgproc.CHAIN_APPROX_SIMPLE);
  Imgproc.drawContours(_mat,contours,-1,new Scalar(colors[i][0], colors[i][1], colors[i][2]),Imgproc.FILLED);
}
Mat resized_mask = new Mat();
Imgproc.resize(_mat,resized_mask, new Size(imageW, imageH));
Core.addWeighted(resized_mask,0.2F,mat,0.8F,0,resized_mask);

结果展示

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

575c1db6-fe39-11ee-a297-92fbcf53809c.png

结语

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



审核编辑:刘清

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

    关注

    61

    文章

    9960

    浏览量

    171736
  • 物联网
    +关注

    关注

    2909

    文章

    44625

    浏览量

    373200
  • JAVA
    +关注

    关注

    19

    文章

    2967

    浏览量

    104741
  • ADAS系统
    +关注

    关注

    4

    文章

    226

    浏览量

    25694
  • OpenVINO
    +关注

    关注

    0

    文章

    93

    浏览量

    198

原文标题:英特尔开发套件在Java环境实现ADAS道路识别演示 | 开发者实战

文章出处:【微信号:英特尔物联网,微信公众号:英特尔物联网】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    英特尔换帅 英特尔CEO Pat Gelsinger(帕特·基辛格)正式退休

    第八任CEO。 帕特·基辛格离任声明中表示:“今天对我而言既欣慰又感伤,因为这家公司是我大部分职业生涯的归宿。我为我们共同取得的成就感到自豪。这对我们所有人来说都是充满挑战的一年,我们做出了艰难但必要的决定,以应对当前的市场环境。 据
    的头像 发表于 12-04 14:58 501次阅读

    使用英特尔哪吒开发套件部署YOLOv5完成透明物体目标检测

    英特尔的哪吒(Nezha)开发套件是一款专为边缘AI和物联网应用设计的高性能计算平台,搭载了英特尔 N97处理器、内置英特尔 UHD Graphics GPU,并提供高达8GB LPD
    的头像 发表于 11-25 17:15 225次阅读
    使用<b class='flag-5'>英特尔</b>哪吒<b class='flag-5'>开发套件</b>部署YOLOv5完成透明物体目标检测

    英特尔至强品牌新战略发布

    品牌是企业使命和发展的象征,也承载着产品特质和市场认可。英特尔GTC科技体验中心的英特尔 至强 6 能效核处理器发布会上,英特尔公司全球副总裁兼首席市场营销官Brett Hannat
    的头像 发表于 10-12 10:13 438次阅读

    英特尔IT的发展现状和创新动向

    AI大模型的爆发,客观上给IT的发展带来了巨大的机会。作为把IT发展上升为战略高度的英特尔,自然推动IT发展中注入了强劲动力。英特尔IT不仅专注于创新、AI和优化,以及英特尔员工、最
    的头像 发表于 08-16 15:22 561次阅读

    英特尔是如何实现玻璃基板的?

    今年9月,英特尔宣布率先推出用于下一代先进封装的玻璃基板,并计划在未来几年内向市场提供完整的解决方案,从而使单个封装内的晶体管数量不断增加,继续推动摩尔定律,满足以数据为中心的应用的算力需求
    的头像 发表于 07-22 16:37 322次阅读

    英特尔CEO:AI时代英特尔动力不减

    英特尔CEO帕特·基辛格坚信,AI技术的飞速发展之下,英特尔的处理器仍能保持其核心地位。基辛格公开表示,摩尔定律仍然有效,而英特尔处理器
    的头像 发表于 06-06 10:04 425次阅读

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

    本文使用来自OpenModelZoo的预训练的road-segmentation-adas-0001模型。ADAS代表高级驾驶辅助服务。该模型识别四个类别:背景、道路、路缘和标记。硬件
    的头像 发表于 04-29 08:07 572次阅读
    <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> | <b class='flag-5'>开发</b>者实战

    英特尔宣布代工亏损70亿美元

    美元; 英特尔芯片制造业务2022年营收274.9亿美元,亏损70亿美元; 英特尔CEO帕特·基辛格还预测2024年将是英特尔芯片制造业务经营亏损最严重的一年。要到2027年才能够
    的头像 发表于 04-03 17:36 1288次阅读

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

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

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

    OpenVINO 工具套件基于OneAPI开发,可以加快高性能计算机视觉和深度学习应用开发速度的工具套件,适用于从边缘到云的各种英特尔计算平
    的头像 发表于 03-23 08:05 558次阅读
    【转载】<b class='flag-5'>英特尔</b><b class='flag-5'>开发套件</b>“哪吒”快速部署YoloV8 on <b class='flag-5'>Java</b> | <b class='flag-5'>开发</b>者实战

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

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

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

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

    英特尔1nm投产时间曝光!领先于台积电

    英特尔行业芯事
    深圳市浮思特科技有限公司
    发布于 :2024年02月28日 16:28:32

    英特尔首推面向AI时代的系统级代工—英特尔代工

    英特尔首推面向AI时代的系统级代工——英特尔代工(Intel Foundry),技术、韧性和可持续性方面均处于领先地位。
    的头像 发表于 02-25 10:38 546次阅读
    <b class='flag-5'>英特尔</b>首推面向AI时代的系统级代工—<b class='flag-5'>英特尔</b>代工

    英特尔登顶2023年全球半导体榜单之首

    英特尔行业芯事
    深圳市浮思特科技有限公司
    发布于 :2024年02月01日 11:55:16