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

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

3天内不再提示

OpenVINO Java API详解与演示

英特尔物联网 来源:英特尔物联网 2023-11-09 17:03 次阅读

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

英特尔 发行版 OpenVINO 工具套件基于 oneAPI 而开发,可以加快高性能计算机视觉深度学习视觉应用开发速度工具套件,适用于从边缘到云的各种英特尔平台上,帮助用户更快地将更准确的真实世界结果部署到生产系统中。通过简化的开发工作流程, OpenVINO 可赋能开发者在现实世界中部署高性能应用程序和算法

Java 是一门面向对象的编程语言,不仅吸收了 C++ 语言的各种优点,还摒弃了 C++ 里难以理解的多继承、指针等概念,因此 Java 语言具有功能强大和简单易用两个特征。Java 语言作为静态面向对象编程语言的代表,极好地实现了面向对象理论,允许程序员以优雅的思维方式进行复杂的编程。

虽然 OpenVINO 在 [OpenVINO Contrilb][1]提供了 Ubuntu 版本的 api,但由于使用 JNI 技术,这对于没有涉及 C/C++ 编程的开发者并不是特别的友好,且后期的维护更新也带来了不小的麻烦。

在之前的工作中,我们推出了 OpenVINO Java API ,旨在推动 OpenVINO 在 Java 领域的应用,目前已经成功在 Mac、Windows、Linux 平台实现使用。在本文中,我们将介绍如何在英特尔开发套件 AIxBoard 上基于 Linux 系统实现 OpenVINO Java API。

项目中所使用的代码已上传至 OpenVINO Java API 仓库中,GitHub 网址为:

https://github.com/Hmm466/OpenVINO-Java-API

(复制链接到浏览器打开)

1. 英特尔开发套件 AIxBoard 介绍

1.1产品定位

英特尔开发套件 AIxBoard 是英特尔开发套件官方序列中的一员,专为入门级人工智能应用和边缘智能设备而设计。英特尔开发套件 AIxBoard 能完美胜人工智能学习、开发、实训、应用等不同应用场景。该套件预装了英特尔 OpenVINO 工具套件、模型仓库和演示。

套件主要接口与 Jetson Nano 载板兼容,GPIO 与树莓派兼容,能够最大限度地复用成熟的生态资源。这使得套件能够作为边缘计算引擎,为人工智能产品验证和开发提供强大支持;同时,也可以作为域控核心,为机器人产品开发提供技术支撑。

使用英特尔开发套件 AIxBoard,您将能够在短时间内构建出一个出色的人工智能应用应用程序。无论是用于科研、教育还是商业领域,英特尔开发套件 AIxBoard 都能为您提供良好的支持。借助 OpenVINO 工具套件,CPU、iGPU 都具备强劲的 AI 推理能力,支持在图像分类、目标检测、分割和语音处理等应用中并行运行多个神经网络

1.2产品参数

d76f5396-7edd-11ee-939d-92fbcf53809c.png

1.3AI 推理单元

借助 OpenVINO 工具,能够实现 CPU+iGPU 异构计算推理,IGPU 算力约为 0.6TOPS。

d790e236-7edd-11ee-939d-92fbcf53809c.png

2准备工作

2.1

配置 java 环境

下载并配置 JDK:

JDK(Java Development Kit)称为 Java 开发包或 Java 开发工具,是一个编写 Java 的 Applet 小程序和应用程序的程序开发环境。JDK 是整个 Java 的核心,包括了 Java 运行环境(Java Runtime Environment),一些 Java 工具和 Java 的核心类库(Java API)。不论什么 Java 应用服务器实质都是内置了某个版本的 JDK。主流的 JDK 是 Sun 公司发布的 JDK,除了 Sun 之外,还有很多公司和组织都开发了自己的 JDK。

2.1.1添加 api 到本地 maven

添加 OpenVINO Java API 至 Maven(目前没有在 maven 中央仓库发布,所以需要手动安装)

2.1.2clone OpenVINO Java API 项目到本地

java
git clone https://github.com/Hmm466/OpenVINO-Java-API

左滑查看更多

2.1.3通过 IDEA 或 Eclipse 打开

通过 maven install 到本地 maven 库中

[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 14.647 s
[INFO] Finished at: 2023-11-02T21:34:49+08:00
[INFO] ------------------------------------------------------------------------

左滑查看更多

jar 包会放置在:

/{userHome}/.m2/repository/org/openvino/java-api/1.0-SNAPSHOT/java-api-1.0-SNAPSHOT.pom

2.2安装 OpenVINO Runtime

OpenVINO 有两种安装方式: OpenVINO Runtime 和 OpenVINO Development Tools。

OpenVINO Runtime 包含用于在处理器设备上运行模型部署推理的核心库。OpenVINO Development Tools 是一组用于处理 OpenVINO 和 OpenVINO 模型的工具,包括模型优化器、OpenVINO Runtime、模型下载器等。在此处我们只需要安装 OpenVINO Runtime 即可。

2.2.1下载 OpenVINO Runtime

访问 Download the Intel Distribution of OpenVINO Toolkit 页面,按照下面流程选择相应的安装选项,在下载页面,由于 AIxBoard 使用的是 Ubuntu20.04,因此下载时按照指定的编译版本下载即可。

d7ac0516-7edd-11ee-939d-92fbcf53809c.pngd7c1ee80-7edd-11ee-939d-92fbcf53809c.png

2.2.2解压缩安装包

我们所下载的 OpenVINO Runtime 本质是一个 C++ 依赖包,因此我们把它放到我们的系统目录下,这样在编译时会根据设置的系统变量获取依赖项。

shell
cd ~/Downloads/
tar -xvzf l_openvino_toolkit_ubuntu20_2022.3.1.9227.cf2c7da5689_x86_64.tgz
sudo mv l_openvino_toolkit_ubuntu20_2022.3.1.9227.cf2c7da5689_x86_64/runtime/lib/intel64/* /usr/lib/

左滑查看更多

2.3编译 OpenCV java 库

2.3.1下载 ANT

由于 OpenCV 编译出 libopencv_java{version}.[so|dll|dylib] 需要 apache ant 的支持,所以需要手动下载ant[2]并加入环境变量

shell
export ANT_HOME={ant_home}
export PATH=$ANT_HOME/bin:$PATH

左滑查看更多

2.3.2OpenCV[3] 下载源代码

解压缩之后进入文件夹:

shell
mkdir build
cd build
cmake -DBUILD_SHARED_LIBS=OFF -DWITH_IPP=OFF -DBUILD_ZLIB=OFF -DCMAKE_INSTALL_PREFIX=你的opencv目录
 -DJAVA_INCLUDE_PATH={jdk 所在位置}/include -DJAVA_AWT_INCLUDE_PATH={jdk 所在位置}/include
 -DJAVA_INCLUDE_PATH2={jdk 所在位置}/include -DBUILD_JAVA=ON ..

左滑查看更多

注意看输出有没有:

--  Java:
--   ant:
--   JNI:
--   Java wrappers:
--   Java tests:

左滑查看更多

需要不为 NO 或者有目录,然后编译安装:

shell
make -j 8
make install

左滑查看更多

3在 AIxBoard 上进行测试

3.1源代码直接测试

shell
git clone https://github.com/Hmm466/OpenVINO-Java-API

左滑查看更多

-使用IDEA / Eclipse 打开项目

- 运行

src/test/java/org.openvino.java.test.YoloV8Test

d7e0c63e-7edd-11ee-939d-92fbcf53809c.png

3.2创建其他项目进行测试

创建一个 AlxBoardDeployYolov8 Maven 项目

创建完成之后引用我们刚刚 install 的 OpenVINO-Java-API,或者直接 clone 项目直接修改体验

maven 引用:

maven

  org.openvino
  java-api
  1.0-SNAPSHOT

【注意】如果才用 maven 依赖需要注意 opencv 的库引用问题.可以将 OpenVINO-Java-API/libs 的 opencv 库引用到你的项目下

编写测试代码:

java
OpenVINO vino = OpenVINO.load();
OvVersion version = vino.getVersion();
Console.println("---- OpenVINO INFO----");
Console.println("Description : %s", version.description);
Console.println("Build number: %s", version.buildNumber);

左滑查看更多

结果将输出:

text
---- OpenVINO INFO----
Description : OpenVINO Runtime
Build number: 2023.2.0-12538-e7c1344d3c3
det
text
Description : OpenVINO Runtime
Build number: 2023.2.0-12538-e7c1344d3c3
[INFO] Loading model files: model/yolov8/yolov8s.xml
[INFO] model name: torch_jit
[INFO]  inputs:
[INFO]   input name: images
[INFO]   input type: Node
[INFO]   input shape: Shape{, rank=4, dims=1,3,640,640}
[INFO]  outputs:
[INFO]   output name: output0
[INFO]   output type: Node
[INFO]   output shape: Shape{, rank=3, dims=1,84,8400}
[INFO] Read image files: dataset/image/demo_2.jpg


 Detection result : 


1: 0 0.92775315  {0, 304, 268x519}
2: 0 0.90614283  {632, 97, 615x725}
3: 0 0.9032028  {286, 198, 190x591}
4: 62 0.902739  {258, 164, 446x284}
5: 0 0.80478114  {739, 262, 123x229}
6: 0 0.7890141  {891, 314, 231x226}
7: 63 0.7383257  {532, 518, 260x275}
8: 63 0.7148062  {861, 448, 90x86}
9: 56 0.5889373  {102, 614, 185x216}
10: 0 0.4642688  {1006, 315, 116x159}
11: 63 0.43404874  {987, 483, 104x126}
12: 63 0.38955435  {892, 480, 202x196}
13: 62 0.30369592  {961, 384, 87x81}

左滑查看更多

seg
text
---- OpenVINO INFO----
Description : OpenVINO Runtime
Build number: 2023.2.0-12538-e7c1344d3c3
[INFO] Loading model files: model/yolov8/yolov8s-seg.xml
[INFO] model name: torch_jit
[INFO]  inputs:
[INFO]   input name: images
[INFO]   input type: Node
[INFO]   input shape: Shape{, rank=4, dims=1,3,640,640}
[INFO]  outputs:
[INFO]   output name: output0
[INFO]   output type: Node
[INFO]   output shape: Shape{, rank=3, dims=1,116,8400}
[INFO] Read image files: dataset/image/demo_2.jpg


 Segmentation result : 


1: 0 0.9207011  {0, 66, 439x801}
2: 0 0.91634876  {403, 151, 339x721}
3: 63 0.9086068  {37, 460, 388x231}
4: 56 0.74821126  {878, 517, 146x265}
5: 0 0.37459317  {679, 331, 91x263}
6: 0 0.31526685  {641, 345, 45x39}

左滑查看更多

pose
text
---- OpenVINO INFO----
Description : OpenVINO Runtime
Build number: 2023.2.0-12538-e7c1344d3c3
[INFO] Loading model files: model/yolov8/yolov8s.xml
[INFO] model name: torch_jit
[INFO]  inputs:
[INFO]   input name: images
[INFO]   input type: Node
[INFO]   input shape: Shape{, rank=4, dims=1,3,640,640}
[INFO]  outputs:
[INFO]   output name: output0
[INFO]   output type: Node
[INFO]   output shape: Shape{, rank=3, dims=1,84,8400}
[INFO] Read image files: dataset/image/demo_2.jpg


 Classification result : 


1: 1  0.9001118  {407, 151, 334x722} Nose: (0.0 ,0.0 ,3.4155396E-6) Left Eye: (0.0 ,0.0 ,6.0583807E-6) Right Eye: (0.0 ,0.0 ,3.7476743E-6) Left Ear: (0.0 ,0.0 ,3.2295986E-6) Right Ear: (0.0 ,0.0 ,1.7464492E-6) Left Shoulder: (0.0 ,0.0 ,2.5992335E-6) Right Shoulder: (0.0 ,0.0 ,3.937065E-6) Left Elbow: (0.0 ,0.0 ,7.936895E-6) Right Elbow: (0.0 ,0.0 ,2.3217426E-6) Left Wrist: (0.0 ,0.0 ,3.6387396E-6) Right Wrist: (0.0 ,0.0 ,4.40427E-6) Left Hip: (0.0 ,0.0 ,1.940609E-6) Right Hip: (0.0 ,0.0 ,3.770945E-6) Left Knee: (0.0 ,0.0 ,2.4128974E-6) Right Knee: (0.0 ,0.0 ,3.424496E-6) Left Ankle: (0.0 ,0.0 ,7.5513196E-7) Right Ankle: (0.0 ,0.0 ,4.3359764E-6) 
2: 1  0.8558029  {0, 65, 441x802} Nose: (0.0 ,0.0 ,5.9377476E-7) Left Eye: (0.0 ,0.0 ,7.104497E-6) Right Eye: (0.0 ,0.0 ,1.319968E-6) Left Ear: (0.0 ,0.0 ,6.459948E-7) Right Ear: (0.0 ,0.0 ,4.0330252E-7) Left Shoulder: (0.0 ,0.0 ,1.5084498E-7) Right Shoulder: (0.0 ,0.0 ,6.642805E-7) Left Elbow: (0.0 ,0.0 ,2.447048E-6) Right Elbow: (0.0 ,0.0 ,2.463981E-7) Left Wrist: (0.0 ,0.0 ,3.8335997E-7) Right Wrist: (0.0 ,0.0 ,3.6232507E-7) Left Hip: (0.0 ,0.0 ,3.2433576E-7) Right Hip: (0.0 ,0.0 ,7.913691E-7) Left Knee: (0.0 ,0.0 ,4.720929E-7) Right Knee: (0.0 ,0.0 ,4.3835226E-7) Left Ankle: (0.0 ,0.0 ,1.2476052E-7) Right Ankle: (0.0 ,0.0 ,4.4775015E-7) 
3: 1  0.60723305  {678, 333, 95x259} Nose: (0.0 ,0.0 ,8.775595E-7) Left Eye: (0.0 ,0.0 ,7.137654E-7) Right Eye: (0.0 ,0.0 ,1.2003383E-6) Left Ear: (0.0 ,0.0 ,8.495165E-7) Right Ear: (0.0 ,0.0 ,5.2003993E-6) Left Shoulder: (0.0 ,0.0 ,3.1942466E-7) Right Shoulder: (0.0 ,0.0 ,1.1035459E-6) Left Elbow: (0.0 ,0.0 ,5.3546346E-6) Right Elbow: (0.0 ,0.0 ,1.7979652E-6) Left Wrist: (0.0 ,0.0 ,8.755582E-7) Right Wrist: (0.0 ,0.0 ,6.6855574E-7) Left Hip: (0.0 ,0.0 ,4.0984042E-7) Right Hip: (0.0 ,0.0 ,7.5307044E-6) Left Knee: (0.0 ,0.0 ,9.537544E-7) Right Knee: (0.0 ,0.0 ,7.810681E-8) Left Ankle: (0.0 ,0.0 ,3.2538756E-7) Right Ankle: (0.0 ,0.0 ,1.2676019E-6) 
4: 1  0.38707685  {1277, 740, 44x138} Nose: (0.0 ,0.0 ,1.074906E-4) Left Eye: (0.0 ,0.0 ,3.1907311E-6) Right Eye: (0.0 ,0.0 ,9.670388E-6) Left Ear: (0.0 ,0.0 ,4.4663593E-6) Right Ear: (0.0 ,0.0 ,0.0025005206) Left Shoulder: (0.0 ,0.0 ,4.032511E-5) Right Shoulder: (0.0 ,0.0 ,2.5534397E-5) Left Elbow: (0.0 ,0.0 ,0.0043662274) Right Elbow: (0.0 ,0.0 ,4.32287E-5) Left Wrist: (0.0 ,0.0 ,8.4830776E-7) Right Wrist: (0.0 ,0.0 ,5.0576923E-6) Left Hip: (0.0 ,0.0 ,1.1178828E-5) Right Hip: (0.0 ,0.0 ,2.2293802E-5) Left Knee: (0.0 ,0.0 ,3.1517664E-6) Right Knee: (0.0 ,0.0 ,8.923516E-5) Left Ankle: (0.0 ,0.0 ,5.5582723E-6) Right Ankle: (0.0 ,0.0 ,2.206743E-6) 

左滑查看更多

cls
text
---- OpenVINO INFO----
Description : OpenVINO Runtime
Build number: 2023.2.0-12538-e7c1344d3c3
[INFO] Loading model files: model/yolov8/yolov8s.xml
[INFO] model name: torch_jit
[INFO]  inputs:
[INFO]   input name: images
[INFO]   input type: Node
[INFO]   input shape: Shape{, rank=4, dims=1,3,640,640}
[INFO]  outputs:
[INFO]   output name: output0
[INFO]   output type: Node
[INFO]   output shape: Shape{, rank=3, dims=1,84,8400}
[INFO] Read image files: dataset/image/demo_2.jpg


 Classification Top 10 result : 


classid probability
------- -----------
{14789}   {635.549438}
{3679}   {635.543701}
{14788}   {635.522583}
{14731}   {635.518616}
{14730}   {635.513428}
{3839}   {635.502441}
{14790}   {635.497314}
{14732}   {635.489258}
{14781}   {635.486694}
{14739}   {635.484985}

左滑查看更多

4总结

在该项目中,我们基于 AIxBoard 为硬件基础实现了 Java 在 Ubuntu 22.04 系统上成功使用 OpenVINO Java API,并且成功允许了 Yolov8 模型,验证了 Java 运行的可行性,并简化了 Java 开发者对于 AI 类项目的上手难度。

同时 OpenVINO Java API 已完成了 Mac、Linux、Windows 的测试,Windows 平台的文档也正在输出。后续我还会将继续使用 OpenVINO Java API 在 英特尔开发套件 AIxBoard 部署更多的深度学习模型。

审核编辑:汤梓红

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

    关注

    61

    文章

    9953

    浏览量

    171705
  • JAVA
    +关注

    关注

    19

    文章

    2966

    浏览量

    104707
  • 边缘计算
    +关注

    关注

    22

    文章

    3085

    浏览量

    48905
  • OpenVINO
    +关注

    关注

    0

    文章

    92

    浏览量

    197

原文标题:OpenVINO™ Java API 详解与演示|开发者实战

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

收藏 人收藏

    评论

    相关推荐

    如何使用OpenVINO C++ API部署FastSAM模型

    象的位置和边界。本文将介绍如何使用 OpenVINO C++ API 部署 FastSAM 模型,以实现快速高效的语义分割。在前文中我们发表了《基于 OpenVINO Python API
    的头像 发表于 11-17 09:53 914次阅读
    如何使用<b class='flag-5'>OpenVINO</b> C++ <b class='flag-5'>API</b>部署FastSAM模型

    在Raspberry Pi上从源代码构建OpenVINO 2021.3收到错误怎么解决?

    命名为“openvino.runtime”的模块。 分辨率 从 2022.1 OpenVINO™起,推出了新的OpenVINOAPI 2.0。“
    发表于 08-15 08:24

    运行任何OpenVINO Python演示和示例时报错怎么解决?

    运行任何OpenVINO™ Python 演示和示例时,会出现错误: FileNotFoundEror:[WinError 2]。
    发表于 08-15 07:21

    高手总结java常用API(免费下载)

    高手总结java常用API(免费下载)。
    发表于 11-06 11:27 0次下载

    JAVA教程之滑杆演示

    JAVA教程之滑杆演示,很好的学习资料。
    发表于 03-31 11:13 9次下载

    java入门到详解[推荐]

    java入门到详解[推荐]
    发表于 03-19 11:23 4次下载

    使用Java API技巧分析

    本文介绍了一些关于Java API安全和性能方面的简单易用的技巧,其中包括保证API Key安全和开发Web Service方面中在框架方面选择的一些建议。 程序员都喜欢使用API!例
    发表于 09-27 14:09 3次下载

    基于Android开发手册—API函数详解

    基于Android开发手册—API函数详解
    发表于 10-24 09:06 18次下载
    基于Android开发手册—<b class='flag-5'>API</b>函数<b class='flag-5'>详解</b>

    OpenVINO工具套件预处理API的概念及使用方法

    OpenVINO 2022.1之前版本不提供OpenVINO Runtime原生的用于数据预处理的API函数1 ,如图1-1所示,开发者必须通过第三方库(例如:OpenCV)来实现数据预处理。
    的头像 发表于 06-09 17:25 2110次阅读

    OpenVINO™ C# API详解演示

    OpenVINO C# API 支持 NuGet 程序包安装方式,这与 OpenVINO C++ 库的安装过程相比,更加简单。如果使用 Visual Studio 开发 AI 项目,则可以通过 NuGet 程序包管理功能直接安装
    的头像 发表于 10-13 16:39 751次阅读
    <b class='flag-5'>OpenVINO</b>™  C# <b class='flag-5'>API</b><b class='flag-5'>详解</b>与<b class='flag-5'>演示</b>

    基于OpenVINO Python API部署RT-DETR模型

    平台实现 OpenVINO 部署 RT-DETR 模型实现深度学习推理加速, 在本文中,我们将首先介绍基于 OpenVINO Python API 部署 RT-DETR 模型。
    的头像 发表于 10-20 11:15 961次阅读
    基于<b class='flag-5'>OpenVINO</b> Python <b class='flag-5'>API</b>部署RT-DETR模型

    基于OpenVINO C++ API部署RT-DETR模型

    Python API 部署 RT-DETR 模型 | 开发者实战》,在该文章中,我们基于 OpenVINO Python API 向大家展示了包含后处理的 RT-DETR 模型的部署流程,但在实际工业
    的头像 发表于 11-03 14:30 834次阅读
    基于<b class='flag-5'>OpenVINO</b> C++ <b class='flag-5'>API</b>部署RT-DETR模型

    基于OpenVINO C# API部署RT-DETR模型

    Python API 部署 RT-DETR 模型 | 开发者实战》和《基于 OpenVINO C++ API 部署 RT-DETR 模型 | 开发者实战》,在该文章中,我们基于 OpenVI
    的头像 发表于 11-10 16:59 753次阅读
    基于<b class='flag-5'>OpenVINO</b> C# <b class='flag-5'>API</b>部署RT-DETR模型

    OpenVINOJava API应用RT-DETR做目标检测器实战

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

    Java集合API的改进介绍

    解答这些问题。 我们将逐步学习 Java 集合类的优化过程,并按版本逐一对比分析。主要讨论的焦点将包括 JDK 1.0、1.2、1.4、1.5、1.6、1.8、9、10、11 和 21 版本的 Java 集合功能 Java 集合
    的头像 发表于 11-22 11:12 181次阅读
    <b class='flag-5'>Java</b>集合<b class='flag-5'>API</b>的改进介绍