開発者の実践 | OpenVINO™ Java API の詳細な説明とデモンストレーション

青い文字をクリックしてください

開発をもっと面白くするためにフォローしてください

次の記事は、インテル エッジ コンピューティング イノベーション アンバサダーの Huang Mingming が執筆した Intel Internet of Things からのものです。


インテル® ディストリビューション OpenVINO™ ツール スイートは、高性能コンピューター ビジョンおよびディープ ラーニング ビジョン アプリケーションの開発を加速するために、oneAPI に基づいて開発されています。このツール スイートは、エッジからクラウドまでのさまざまなインテル プラットフォームに適用でき、ユーザーがより正確なアプリケーションをより迅速に開発できるようにします。実世界の結果を実稼働システムにデプロイします。 OpenVINO™ は、合理化された開発ワークフローを通じて、開発者が高性能のアプリケーションとアルゴリズムを現実世界に展開できるようにします。

Java は、C++ 言語のさまざまな利点を吸収するだけでなく、C++ の多重継承やポインタなどの難解な概念を放棄したオブジェクト指向プログラミング言語であるため、強力な機能という 2 つの特徴を備えています。そしてシンプルさと使いやすさ。静的オブジェクト指向プログラミング言語の代表である Java 言語は、オブジェクト指向理論を優れて実装しており、プログラマーが洗練された考え方で複雑なプログラミングを実行できるようにします。

OpenVINO™ は [OpenVINO Contrilb][1] で API の Ubuntu バージョンを提供していますが、JNI テクノロジーを使用しているため、これは C/C++ プログラミングに関与していない開発者にとっては特に使いやすいものではなく、後のメンテナンス アップデートでも問題が発生します。小さなトラブルはありません。

以前の取り組みでは、Java 分野での OpenVINO™ のアプリケーションを促進することを目的として、OpenVINO™ Java API を立ち上げ、Mac、Windows、および Linux プラットフォームでの使用に成功しました。この記事では、インテル開発キット AIxBoard に基づいて Linux 上に OpenVINO™ Java API を実装する方法について説明します。

プロジェクトで使用されるコードは、GitHub URL の OpenVINO™ Java API リポジトリにアップロードされています。

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

(リンクをコピーしてブラウザで開きます)

1. インテル開発キット AIxBoard の概要

3ba416157af184ce02340495725f1364.png

1.1

製品の位置付け

インテル開発キット AIxBoard は、エントリーレベルの人工知能アプリケーションおよびエッジスマートデバイス向けに設計されたインテル開発キットの公式ラインのメンバーです。 Intel の開発キット AIxBoard は、人工知能の学習、開発、トレーニング、アプリケーションなどのさまざまなアプリケーション シナリオを完璧に処理できます。このスイートには、インテル® OpenVINO™ ツールスイート、モデルリポジトリ、およびデモがプリインストールされています。

キットのメインインターフェイスはJetson Nanoキャリアボードと互換性があり、GPIOはRaspberry Piと互換性があり、成熟した生態資源を最大限に再利用できます。これにより、スイートはエッジ コンピューティング エンジンとして機能し、人工知能製品の検証と開発を強力にサポートできると同時に、ロボット製品開発に技術サポートを提供するドメイン制御コアとしても機能します。

インテル開発キット AIxBoard を使用すると、すぐに素晴らしい人工知能アプリケーションを構築できるようになります。研究、教育、ビジネスのいずれの目的でも、インテル開発キット AIxBoard が対応します。 OpenVINO™ ツール スイートを使用すると、CPU と iGPU の両方に強力な AI 推論機能が備わり、画像分類、物体検出、セグメンテーション、音声処理などのアプリケーションでの複数のニューラル ネットワークの並列実行をサポートします。

1.2

製品パラメータ

af814ba8628a9d31183c2a8ff3908017.png

1.3

AI推論ユニット

OpenVINO™ ツールを使用すると、CPU+iGPU のヘテロジニアス コンピューティング推論が実現でき、IGPU の計算能力は約 0.6TOPS になります。

1f7df6b6fed02055197dcd06b7ad9769.png

2

準備

2.1

Java環境を構成する

JDK をダウンロードして構成します。

JDK (Java Development Kit) は、Java Development Kit または Java Development Tools と呼ばれ、Java アプレットおよびアプリケーションを作成するためのプログラム開発環境です。 JDK は、Java ランタイム環境、いくつかの Java ツール、Java のコア クラス ライブラリ (Java API) を含む Java 全体の中核です。 Java アプリケーション サーバーには基本的に、特定のバージョンの JDK が組み込まれています。 JDK の主流は Sun が公開している JDK ですが、Sun 以外にも多くの企業や組織が独自の JDK を開発しています。

2.1.1 

APIをローカルMavenに追加

OpenVINO™ Java API を Maven に追加します (現在、Maven 中央リポジトリで公開されていないため、手動インストールが必要です)

2.1.2 

OpenVINO™ Java API プロジェクトをローカルにクローン作成する

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

左にスワイプするとさらに表示されます

2.1.3 

IDEA または Eclipse で開く

Maven を介してローカル 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™ ランタイムをインストールする

OpenVINO™ には、OpenVINO™ Runtime と OpenVINO™ Development Tools の 2 つのインストール方法があります。

OpenVINO™ ランタイムには、プロセッサ デバイス上でモデル デプロイ推論を実行するためのコア ライブラリが含まれています。 OpenVINO™ 開発ツールは、モデル オプティマイザー、OpenVINO™ ランタイム、モデル ダウンローダーなどを含む、OpenVINO™ および OpenVINO™ モデルを操作するためのツール セットです。ここでは、OpenVINO™ ランタイムをインストールするだけです。

2.2.1 

OpenVINO™ ランタイムをダウンロード

「Intel Distribution of OpenVINO™ Toolkit のダウンロード」ページにアクセスし、以下のプロセスに従って対応するインストール オプションを選択します。ダウンロード ページでは、AIxBoard は Ubuntu20.04 を使用しているため、指定されたコンパイル済みバージョンに従ってダウンロードできます。

720de82c74730fa422575f43327481c7.png

50be45741aa511624a4014b18209435f.png

2.2.2 

インストールパッケージを解凍します

ダウンロードした OpenVINO™ ランタイムは本質的に 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.2 

OpenCV[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

e4ca4821853214b0729f374882475b78.png

3.2

テスト用に他のプロジェクトを作成する

AlxBoardDeployYolov8 Maven プロジェクトを作成する

作成後、インストールしたばかりの OpenVINO-Java-API を参照するか、プロジェクトを直接複製してエクスペリエンスを直接変更します。

メイブンリファレンス:

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

[注意] 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}

左にスワイプするとさらに表示されます

7bba2bb072a6b4b3fe8afd7b00d21404.png

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}

左にスワイプするとさらに表示されます

e8451a6e971f6d81062c69cc481056b1.png

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)

左にスワイプするとさらに表示されます

147069a712a3f4cada23ab79a77b156c.png

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 にさらに多くの深層学習モデルをデプロイする予定です。

[1] OpenVINO Contrilb:

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

【2】アリ公式サイト:

ant.apache.org

[3] OpenCV公式ウェブサイト:

https://opencv.org

OpenVINO™

- 終わり -

你也许想了解(点击蓝字查看)⬇️➡️ 开发者实战 | 介绍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 を今すぐ体験してください

4b471a8f9fbc15badda421d57de15582.png

この記事はとても興味深いものですが、「読んで」いますか?

おすすめ

転載: blog.csdn.net/OpenVINOCC/article/details/134454008