はじめに
AIによる画像認識は、製造、医療、小売など様々な分野で活用されています。この記事では、PythonのOpenCVで画像処理を行い、JavaのDeepLearning4JでAIモデルを構築・推論する実践的な方法を紹介します。
想定読者
- PythonまたはJavaで画像処理・機械学習を学びたい方
- システム間連携を実装したい開発者
- 業務に画像認識を導入したい技術者
全体の流れ
- Pythonで画像を前処理し、NumPy配列を保存
- Java(DeepLearning4J)で学習済みモデルを読み込み推論
- 結果を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の導入を検討している方はぜひ取り組んでみてください。