开发者实战 | OpenVINO™ Java API 详解与演示

2023/11/16 17:00
阅读数 20

点击蓝字

关注我们,让开发变得更有趣

以下文章来源于英特尔物联网,作者 黄明明 英特尔边缘计算创新大使


英特尔® 发行版 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

产品参数



1.3

AI 推理单元


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



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.2 

Clone OpenVINO™ Java API 项目到本地

javagit 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,因此下载时按照指定的编译版本下载即可。



2.2.2 

解压缩安装包


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

shellcd ~/Downloads/tar -xvzf l_openvino_toolkit_ubuntu20_2022.3.1.9227.cf2c7da5689_x86_64.tgzsudo 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] 并加入环境变量

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

左滑查看更多


2.3.2 

OpenCV[3] 下载源代码


解压缩之后进入文件夹:

shellmkdir buildcd buildcmake -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 或者有目录,然后编译安装:

shellmake -j 8make install

左滑查看更多


3

在 AIxBoard 上进行测试


3.1

源代码直接测试

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

左滑查看更多


使用IDEA / Eclipse 打开项目

- 运行

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



3.2

创建其他项目进行测试


创建一个 AlxBoardDeployYolov8 Maven 项目


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


maven 引用:

maven<dependency>   <groupId>org.openvino</groupId>   <artifactId>java-api</artifactId>   <version>1.0-SNAPSHOT</version></dependency>

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


编写测试代码:

javaOpenVINO 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 RuntimeBuild number: 2023.2.0-12538-e7c1344d3c3dettextDescription : OpenVINO RuntimeBuild 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}

左滑查看更多



segtext---- OpenVINO INFO----Description : OpenVINO RuntimeBuild 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}

左滑查看更多



posetext---- OpenVINO INFO----Description : OpenVINO RuntimeBuild 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)

左滑查看更多



clstext---- OpenVINO INFO----Description : OpenVINO RuntimeBuild 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 部署更多的深度学习模型。


[1] OpenVINO Contrilb:

https://github.com/openvinotoolkit/openvino_contrib/tree/master/modules/java_api

[2] ant 官网:

ant.apache.org

[3] OpenCV 官网:

https://opencv.org

OpenVINO™

--END--


              
              
              
你也许想了解(点击蓝字查看)⬇️
➡️ 开发者实战 | 介绍OpenVINO™ 2023.1:在边缘端赋能生成式AI
➡️ 基于 ChatGLM2 和 OpenVINO™ 打造中文聊天助手
➡️ 基于 Llama2 和 OpenVINO™ 打造聊天机器人
➡️ OpenVINO™ DevCon 2023重磅回归!英特尔以创新产品激发开发者无限潜能
➡️ 5周年更新 | OpenVINO™  2023.0,让AI部署和加速更容易
➡️ OpenVINO™5周年重头戏!2023.0版本持续升级AI部署和加速性能
➡️ OpenVINO™2023.0实战 | 在 LabVIEW 中部署 YOLOv8 目标检测模型
➡️ 开发者实战系列资源包来啦!
➡️  以AI作画,祝她节日快乐;简单三步,OpenVINO™ 助你轻松体验AIGC
➡️  还不知道如何用OpenVINO™作画?点击了解教程。
➡️   几行代码轻松实现对于PaddleOCR的实时推理,快来get!
➡️   使用OpenVINO 在“端—边—云”快速实现高性能人工智能推理


             
             
             

扫描下方二维码立即体验 

OpenVINO™ 工具套件 2023.1


点击 阅读原文 立即体验OpenVINO 2023.1
文章这么精彩,你有没有“在看”?

本文分享自微信公众号 - OpenVINO 中文社区(openvinodev)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部