JavaとPythonで画像認識AIを作成する方法【OpenCV×DeepLearning4J】

はじめに

AIによる画像認識は、製造、医療、小売など様々な分野で活用されています。この記事では、PythonのOpenCVで画像処理を行い、JavaのDeepLearning4JでAIモデルを構築・推論する実践的な方法を紹介します。

想定読者

  • PythonまたはJavaで画像処理・機械学習を学びたい方
  • システム間連携を実装したい開発者
  • 業務に画像認識を導入したい技術者

全体の流れ

  1. Pythonで画像を前処理し、NumPy配列を保存
  2. Java(DeepLearning4J)で学習済みモデルを読み込み推論
  3. 結果をJavaアプリで表示・保存

1. Pythonで画像の前処理(OpenCV使用)

必要ライブラリ

pip install opencv-python numpy

コード例(画像→NumPy配列)

import cv2
import numpy as np

image = cv2.imread("sample.jpg", cv2.IMREAD_GRAYSCALE)
resized = cv2.resize(image, (28, 28))  # 28x28に変換(MNIST想定)

np.save("image.npy", resized / 255.0)  # 正規化して保存

2. Javaで画像認識(DeepLearning4J)

依存関係(Maven)

<dependencies>
  <dependency>
    <groupId>org.deeplearning4j</groupId>
    <artifactId>deeplearning4j-core</artifactId>
    <version>1.0.0-beta7</version>
  </dependency>
  <dependency>
    <groupId>org.nd4j</groupId>
    <artifactId>nd4j-native-platform</artifactId>
    <version>1.0.0-beta7</version>
  </dependency>
</dependencies>

NumPyファイルの読み込みと推論処理

import org.nd4j.linalg.api.ndarray.INDArray;
import org.nd4j.linalg.factory.Nd4j;
import org.deeplearning4j.nn.multilayer.MultiLayerNetwork;
import org.nd4j.linalg.dataset.api.preprocessor.NormalizerMinMaxScaler;

import java.io.File;

public class PredictImage {
  public static void main(String[] args) throws Exception {
    INDArray input = Nd4j.createFromNpyFile(new File("image.npy")).reshape(1, 1, 28, 28);

    MultiLayerNetwork model = MultiLayerNetwork.load(new File("model.zip"), false);

    INDArray output = model.output(input);
    int predictedClass = Nd4j.argMax(output, 1).getInt(0);

    System.out.println("予測結果: " + predictedClass);
  }
}

3. 結果の表示と連携Tips

  • Java SwingやJavaFXで結果画像と認識ラベルを同時に表示可能
  • Pythonで処理した画像を共有フォルダやREST APIでJavaに渡す設計も実用的
  • JavaからPythonをProcessBuilderで呼び出すことで、スムーズな連携が可能

まとめ

PythonとJavaを連携することで、柔軟な前処理・堅牢なバックエンド推論環境を両立できます。業務や研究など、あらゆる場面で応用可能な構成なので、画像認識AIの導入を検討している方はぜひ取り組んでみてください。

タイトルとURLをコピーしました