首页 > 编程语言 >英特尔开发套件“哪吒”快速部署YoloV8 on Java

英特尔开发套件“哪吒”快速部署YoloV8 on Java

时间:2024-03-26 12:33:30浏览次数:21  
标签:OpenVINO github Java intel YoloV8 套件 https com

作者:英特尔创新大使 黄明明

0. 前言

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

      今天我们将基于哪吒开发者套件平台来快速部署OpenVINO™ Java。

OpenVINO™ Java API 所在的GitHub 仓库地址: https://github.com/Hmm466/OpenVINO-Java-API (复制链接到浏览器打开)

1. 英特尔开发者套件-哪吒

1.1 产品介绍

哪吒(Nezha)开发套件以信用卡大小(85 x 56mm)的开发板-哪吒(Nezha)为核心,哪吒采用Intel® N97处理器(Alder Lake-N),最大睿频3.6GHz,Intel® UHD Graphics内核GPU,可实现高分辨率显示;板载LPDDR5内存、eMMC存储及TPM 2.0,配备GPIO接口(与树莓派兼容),支持Windows和Linux操作系统,这些功能和无风扇散热方式相结合,为各种应用程序构建高效的解决方案,适用于如自动化、物联网网关、数字标牌和机器人等应用。

1.2 系统安装

由于默认的开发版使用的Ubuntu 18 的系统,但是系统存在一个显示器只有800*600 的Bug,为此我们需要烧录一个新系统进去。我们进入Ubuntu intel-iot系统的下载网址(https://ubuntu.com/download/iot/intel-iot)然后下载Intel Atom® X7000E Series Processors (former codename Alder Lake N) 即可,因为哪吒平台是Alder Lake N 架构,所以下载对应平台的镜像即可(实际上下载正常的桌面版本即可)。将下载后的镜像文件刻录到U盘,按照正常的Ubuntu 系统安装即可。

1.3 GPU驱动安装

由于默认的Ubuntu 安装之后不会带有Intel GPU驱动,为了让推理的速度能过更加快一点,所以我们这里需要额外安装一下,首先进入https://docs.openvino.ai/archive/2023.1/openvino_docs_install_guides_configurations_for_intel_gpu.html

这里官网给出了两种安装方式:

A:通过deb安装

B:通过apt存储库。然后安装ocl-icd-libopencl1、intel-opencl-icd、intel-level-zero-gpu和level-zero apt软件包:

由于apt包需要配置仓库,所以我们直接通过deb方式安装。

1.3.1  创建一个临时文件夹

mkdir neo

1.3.2 下载所有的deb 包

cd neo
wget https://github.com/intel/intel-graphics-compiler/releases/download/igc-1.0.15985.7/intel-igc-core_1.0.15985.7_amd64.deb
wget https://github.com/intel/intel-graphics-compiler/releases/download/igc-1.0.15985.7/intel-igc-opencl_1.0.15985.7_amd64.deb
wget https://github.com/intel/compute-runtime/releases/download/24.05.28454.6/intel-level-zero-gpu-dbgsym_1.3.28454.6_amd64.ddeb
wget https://github.com/intel/compute-runtime/releases/download/24.05.28454.6/intel-level-zero-gpu_1.3.28454.6_amd64.deb
wget https://github.com/intel/compute-runtime/releases/download/24.05.28454.6/intel-opencl-icd-dbgsym_24.05.28454.6_amd64.ddeb
wget https://github.com/intel/compute-runtime/releases/download/24.05.28454.6/intel-opencl-icd_24.05.28454.6_amd64.deb
wget https://github.com/intel/compute-runtime/releases/download/24.05.28454.6/libigdgmm12_22.3.11_amd64.deb

1.3.3 通过root安装所有的包

sudo dpkg -i *.deb

这个时候我们就可以使用GPU来推理了。

2. 准备工作

 2.1 配置Java 环境

2.1.1 下载并配置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.2 添加api到本地maven

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

2.1.3 clone OpenVINO™ Java API 项目到本地

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

2.1.4 通过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[5] 页面,按照下面流程选择相应的安装选项,在下载页面,由于哪吒使用的是 Ubuntu22.04,因此下载时按照指定的编译版本下载即可。

2.2.2 解压缩安装包

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

cd ~/Downloads/

tar -xvzf l_openvino_toolkit_ubuntu22_2023.3.0.13775.ceeafaf64f3_x86_64.tgz

sudo mv l_openvino_toolkit_ubuntu22_2023.3.0.13775.ceeafaf64f3_x86_64/runtime/lib/intel64/* /usr/lib/

3. 在哪吒平台上进行测试

3.1 源代码直接测试

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

使用IDEA打开OpenVINO-Java-API项目

创建src/test/java/org.openvino.java.test.OpenVINOTest

编写测试代码:

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);

结果将输出

---- OpenVINO INFO----

Description : OpenVINO Runtime

Build number: 2023.3.0-13775-ceeafaf64f3-releases/2023/3

3.2 运行YoloV8模型演示效果

4. 总结

在该项目中,我们基于英特尔开发套件哪吒为硬件基础实现了Java在 Ubuntu 22.04 系统上成功使用OpenVINO™ Java API,并且成功允许了Yolov8模型,验证了Java可以在各种硬件平台上快速部署和运行,同时简化了Java开发者对于AI类项目的上手难度。后续我还会将继续使用 OpenVINO™ Java API 在 英特尔开发套件上部署更多的深度学习模型。

标签:OpenVINO,github,Java,intel,YoloV8,套件,https,com
From: https://blog.csdn.net/gc5r8w07u/article/details/137012670

相关文章

  • JAVA接口详解
    一,抽象类抽象类为用abstract修饰的类1,定义的成员变量与普通的类没有区别2,抽象类不可以被实例化3,当一个类不具体描述某个对象时,可以定义为抽象类4,如果一个类包含抽象方法,则这个类必须是抽象类,没有抽象方法,也可以被称为抽象类5,一个方法可以被修饰为abstract,这个方法可以不......
  • Java基础语法(三)
    1.if语句1.1格式一 if(关系表达式){  语句体;   }执行流程    ①首先计算关系表达式的值    ②如果关系表达式的值为true就执行语句体    ③如果关系表达式的值为false就不执行语句体    ④继续执行后面的语句内容......
  • Java中的运算符使用
    运算符算术运算符+ - * / %++ --不要使用小数进行相等判断++:一元运算符,把原数据加1,再放回去。例:i++等价于 i=i+1;i++或++i单独出现时,没有区别,都是直接加1就行。i++;++i;当参与混合运算时,i++是先使用后加1,++i是先加1后使用。当一个计算公式中,出......
  • 卡码java基础课 | 21.图形的面积(面向对象)
    学习内容:面向对象的特性,封装、继承、多态。重点归纳:成员变量的定义:访问修饰符、数据类型、变量名。访问修饰符,private只能类内部使用,protected只能类内部和子类使用,public可以从任何地方访问。方法:访问修饰符、返回类型、方法名、参数列表。以及构造函数。1.封装:通过将属性设......
  • java打包docker镜像
    参考:https://blog.csdn.net/liuxianwen1990/article/details/136256490 1,把jar包复制/opt/test,cd到这个目录下 2,创建Dockerfile文件,jdk8版本vimDockerfileFROMopenjdk:8-jre-alpineCOPYdemo-0.0.1-SNAPSHOT.jardemo-0.0.1-SNAPSHOT.jarCMD["java","-jar&q......
  • How to get the client IP address with Javascript only
    LearnhowtogettheclientIPaddress(localandprivate)usingonlyjavascript.​​Javascript无法获取(也无法存储)客户端IP,但是Javascript能够创建Http请求,并且服务器端语言能够检索用户的公共IP,因此您可以利用这一优势。换句话说,如果你想检索用户的公共IP,你将依赖于对任......
  • 【Java】Java中是值传递还是引用传递的?
    对于Java的初学者来说值传递和引用传递是一个容易混淆的概念,很多时候调用方法传入参数运行方法后的结果与自己享的不一致。那么Java到底是如何传参的呢?简介值传递:在值传递中,函数接收到的是参数的值的副本,而不是参数本身。当你向函数传递一个参数时,函数会创建一个新的变量......
  • Java中128陷阱源码剖析(一看就懂)
    文章目录128陷阱例子解析问题一问题二问题三128陷阱例子现在有这样的程序,相同的值判断相等,不同的值大小下,得出的结果却不同。publicclassMain{publicstaticvoidmain(String[]args){Integera=123;Integerb=123;int......
  • How to get the client IP address with Javascript only
    LearnhowtogettheclientIPaddress(localandprivate)usingonlyjavascript.​​Javascriptisunabletoget(norstoressomewhere)theclientIP,howeverjavascriptisabletocreateHttprequests,andserversidelanguagesareabletoretrievetheu......
  • Java中的流和IO操作及底层实现原理
    Java中的流和IO操作是Java编程中非常基础和重要的概念,它们主要用于处理数据的输入和输出。下面我会详细解释这两个概念。流(Stream)在Java中,流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输......