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

    文章

    10320

    浏览量

    181068
  • 物联网
    +关注

    关注

    2950

    文章

    48121

    浏览量

    418278
  • JAVA
    +关注

    关注

    20

    文章

    3006

    浏览量

    116828
  • ADAS系统
    +关注

    关注

    4

    文章

    229

    浏览量

    26489
  • OpenVINO
    +关注

    关注

    0

    文章

    118

    浏览量

    818

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    全新Altera Agilex开发套件正式发布

    Altera 正式面向嵌入式和 FPGA 开发推出三款紧凑型、高性能开发套件,以丰富互联与扩展能力,加速从概念到原型的验证流程。
    的头像 发表于 03-19 16:06 323次阅读
    全新Altera Agilex<b class='flag-5'>开发套件</b>正式发布

    AI功能(SC171开发套件V2-FAS)

    多物品识别(Yolov8)案例----基于SC171开发套件V2-FAS 15分23秒 http://t.elecfans.com/v/28544.html *附件:文档:多物品识别(Yolov8
    发表于 02-11 14:33

    英特尔开发者年度盛会智潮涌动,推动AI创新走向产业纵深

    2026年1月16日,上海 ——2025英特尔AI开发者优秀项目路演暨英特尔平台企业AI解决方案创新实践赛颁奖大会成功举办,Bluedot团队打造的企业级数字大脑,破解企业知识数字化与高效应用难题
    的头像 发表于 01-19 16:14 486次阅读

    AI功能(SC171开发套件V3)2026版

    AI功能(SC171开发套件V3)2026版 序列 课程名称 视频课程时长 视频课程链接 课件链接 工程源码 1 人体目标检测(Yolov5)案例----基于SC171开发套件V3 8分19秒
    发表于 01-15 11:18

    DA14535 USB开发套件硬件解析:开启低功耗蓝牙开发新征程

    DA14535 USB开发套件硬件解析:开启低功耗蓝牙开发新征程 在当今的电子设备开发领域,低功耗蓝牙技术因其广泛的应用前景和高效的性能表现,受到了众多开发者的青睐。Renesas的D
    的头像 发表于 12-29 11:00 1098次阅读

    创芯赋能智能生态!汇顶科技亮相2025英特尔技术创新与产业生态大会

    11月19–21日,2025英特尔技术创新与产业生态大会在重庆盛大启幕。作为英特尔生态的重要合作伙伴,汇顶科技携人机交互、指纹识别等多项PC端创新成果,为英特尔硬件生态注入澎湃“芯”动
    的头像 发表于 11-21 15:00 5665次阅读
    创芯赋能智能生态!汇顶科技亮相2025<b class='flag-5'>英特尔</b>技术创新与产业生态大会

    科通技术获评英特尔首批尊享级合作伙伴

    近日,科通科技获评为英特尔首批“尊享级合作联盟成员”,即英特尔合作伙伴联盟体系中的最高级别会员。这一身份认证不仅是对双方十五年深度协同的认可,也是双方技术协同、产业赋能道路上的又一次
    的头像 发表于 11-17 16:52 815次阅读
    科通技术获评<b class='flag-5'>英特尔</b>首批尊享级合作伙伴

    使用英特尔® NPU 插件C++运行应用程序时出现错误:“std::Runtime_error at memory location”怎么解决?

    使用OpenVINO™工具套件版本 2024.4.0 构建C++应用程序 使用英特尔® NPU 插件运行了 C++ 应用程序 遇到的错误: Microsoft C++ exception: std::runtime_error at memory location
    发表于 06-25 08:01

    英特尔锐炫Pro B系列,边缘AI的“智能引擎”

    2025年6月19日,上海—— MWC 25上海期间,英特尔展示了一幅由英特尔锐炫™ Pro B系列GPU所驱动的“实时响应、安全高效、成本可控”的边缘AI图景。 英特尔客户端计算事
    的头像 发表于 06-20 17:32 1046次阅读
    <b class='flag-5'>英特尔</b>锐炫Pro B系列,边缘AI的“智能引擎”

    分析师:英特尔转型之路,机遇与挑战并存

    ,这正是英特尔当前发展所需。上任后,他迅速推动公司组织架构重组,加大制造与AI领域的投资,并将代工业务置于优先位置。尽管面临内外多重挑战,英特尔股票2025年上半年仍保持了稳定走势
    的头像 发表于 06-10 10:59 689次阅读
    分析师:<b class='flag-5'>英特尔</b>转型之路,机遇与挑战并存

    新思科技与英特尔EDA和IP领域展开深度合作

    近日,英特尔代工Direct Connect 2025上,新思科技宣布与英特尔EDA和IP领域展开深度合作,包括利用其通过认证的AI驱动数字和模拟设计流程支持
    的头像 发表于 05-22 15:35 1172次阅读

    英特尔发布全新GPU,AI和工作站迎来新选择

    英特尔推出面向准专业用户和AI开发者的英特尔锐炫Pro GPU系列,发布英特尔® Gaudi 3 AI加速器机架级和PCIe部署方案   2025 年 5 月 19 日,北京 ——今日
    发表于 05-20 11:03 1912次阅读

    英特尔以系统级代工模式促进生态协同,助力客户创新

    半导体代工领域,赢得客户信任是业务长期发展的关键,而构建完善的代工生态系统,毫无疑问是实现这一目标的前提。英特尔2025英特尔代工大会上
    的头像 发表于 05-09 14:38 677次阅读

    英特尔持续推进核心制程和先进封装技术创新,分享最新进展

    近日,2025英特尔代工大会上,英特尔展示了多代核心制程和先进封装技术的最新进展,这些突破不仅体现了英特尔技术
    的头像 发表于 05-09 11:42 986次阅读
    <b class='flag-5'>英特尔</b>持续推进核心制程和先进封装技术创新,分享最新进展

    英特尔宣布裁员20% 或2万人失业

    据外媒彭博社的报道,在当地时间4月24日,英特尔宣布裁员计划,比例超20%。按照截至2024年底英特尔全球拥有108900名员工来计算的话,预计此次裁员将波及大约2.2万名员工。旨在精简管理,并重
    的头像 发表于 04-25 17:34 753次阅读