この記事の概要
- JavaCV for Raspberry Piをインストール
- ラズパイ用OpenCVのセットアップ → 失敗、C言語,Pythonでのインストールだった。
- Mac用OpenCVのセットアップ※古いです。
イントロダクション for JavaCV
下の方に記述している、書くOpenCVのインストールに関して、インストールは結局C言語とPythonでの利用時のインストールになっていました。
どうやら「JavaCV」がインストールするべきものだったようです。
上記のリンクを参考に実行すると下のようなコマンドをたたきます。
jarファイルのダウンロードはこちらからできるようです。
ここから jar をダウンロードすることができます: https://drive.google.com/folderview?id=0B0lFIImWo61bc3pTTHdZN3NmNkE&usp=sharing
すべてのコンパイラ ツールとビデオ ライブラリを取得
下のコマンドをたたき、必要なツールをインストールする
sudo apt-get update
sudo apt-get install build-essential cmake pkg-config libpng12-0 libpng12-dev libpng++-dev libpng3 \n
libpnglite-dev libpngwriter0-dev libpngwriter0c2 zlib1g-dbg zlib1g zlib1g-dev pngtools libtiff4-dev \n
libtiff4 libtiffxx0c2 libtiff-tools libjpeg8 libjpeg8-dev libjpeg8-dbg libjpeg-progs ffmpeg libavcodec-dev \n
libavcodec52 libavformat52 libavformat-dev libgstreamer0.10-0-dbg libgstreamer0.10-0 libgstreamer0.10-dev \n
libxine1-ffmpeg libxine-dev libxine1-bin libunicap2 libunicap2-dev libdc1394-22-dev libdc1394-22 libdc1394-utils \n
swig libv4l-0 libv4l-dev
システム内のSOファイルをリンクする
sudo ldconfig
JavaCVのソースを取得
git clone https://github.com/bytedeco/javacv.git
OpenCVと接続するためのC++のソースを取得
git clone https://github.com/bytedeco/javacpp.git
JavaCVのソースをコンパイルする
cd javacv
mvn clean install -Dplatform.name=linux-arm
イントロダクション for Raspberry Pi
OpenCVをラズパイにインストールして、定点観測をやりたいと思いました。
そんなわけで、早速セットアップを行いたいと思います。セットアップする項目としては以下の通りです。
- GUI作成用のJavaFXのインストール
- OpenCVのインストール
- ハローOpenCV プログラムの実行確認
JavaFXのインストール
ラズパイにJavaFXをインストールします。OpenCVのチュートリアルでは、JavaFXを使用していました。
コーディング喪服勝っていますが、下のような感じで動きました。(Eclipse使用)
そんなわけで、今度はラズパイにJavaFXを準備したいと思っております。
JavaFXのセットアップ in RPi
参考にするサイトは、こちらのオラクルのサイトです。
上記の記事は、「JavaFXはJava11に同梱されているので、Java11をインストールしてね」という内容でした。
Javaのインストール
下のコマンドでインストールできます。
$ cd /home/pi
$ wget https://download.bell-sw.com/java/13/bellsoft-jdk13-linux-arm32-vfp-hflt.deb
$ sudo apt-get install ./bellsoft-jdk13-linux-arm32-vfp-hflt.deb
下のコマンドは、各コマンドの設定を変更するものです。※インストールは上で終わり
インストールしたJavaのバージョンを11に切り替えます。
$ sudo update-alternatives --config javac
$ sudo update-alternatives --config java
インストールができたら、下のコマンドで確認します。
$ java --version
openjdk version "13-BellSoft" 2019-09-17
OpenJDK Runtime Environment (build 13-BellSoft+33)
OpenJDK Server VM (build 13-BellSoft+33, mixed mode)
OpenCVのインストール(for Linux)
ラズパイはLinuxです。なのでこちらのチュートリアルにある内容のLinuxの部分を読み進めます。
必要なものをインストールする
次のものが必要になります。参照先は次の\リンク先に記述しています。
Antはsnapをインストールしてからになるので次のようにコマンドをたたきます。
sudo apt update
sudo apt install snapd
sudo reboot
sudo snap install ant --classic
CMakeのインストール
> sudo apt-get -y install cmake
> which cmake
/usr/bin/cmake
> cmake --version
cmake version 2.8.12.2
最新版が欲しい場合は、こちらのリンクからどうぞ
CMake GUIもインストール
※注意点
ここの操作で注意するべきは、次の通りです。
-
インストールしているJDK、の場所を指定してやるというところです。
筆者の場合は「/usr/lib/jvm/java-11-openjdk-armhf/」が、その場所なのでJAVAの項目を変更しています。※動画は変更していません。 -
こちらのサイトを参考にしました。下のコマンドでインストールできます。
Configureが完了したときには下のように画面が白くなっていることを確認する
CMake-Guiのインストール
> sudo apt-get -y install cmake-qt-gui > which cmake-gui /usr/bin/cmake-gui > cmake-gui --version cmake version 2.8.12.2
OpenCV(ライブラリ)のダウンロード
こちらのリンクにコマンドがあります。
ソースからビルドする方法です。結構時間がかかります。
# Install minimal prerequisites (Ubuntu 18.04 as reference)
sudo apt update && sudo apt install -y cmake g++ wget unzip
# Download and unpack sources
wget -O opencv.zip https://github.com/opencv/opencv/archive/4.x.zip
unzip opencv.zip
# Create build directory
mkdir -p build && cd build
# Configure
cmake ../opencv-4.x
# Build
cmake --build .
上記でJARができない?
上の操作を行ったけど、肝心のJARが作成されませんでした。もう一度調べOpenCV4の方の手順を使用することにしました。
こちらのページになります。
手順
全部コマンドで実行します。下のコマンドをたたいていくだけです。
- OpenCVのZIPファイルをダウンロード
- ZIPファイルを解凍
- opemcv-4.xという名前のフォルダをopencvに変更
wget -O opencv.zip https://github.com/opencv/opencv/archive/4.x.zip
unzip opencv.zip
mv opencv-4.x opencv
次はビルドするコマンドです。
- 出力用のフォルダbuildを作成
- cmakeコマンドを実行
- makeコマンドの実行、オプション「-j4」をつけ忘れないように注意
- make installの実行
mkdir -p build && cd build
cmake ../opencv
make -j4
make install
色々やってみたが、JARファイルが作成されませんでした。。。
ハローOpenCV
JavaでOpenCVが動くことを確認します。
これがハローワールドのもう一つの役目です。早速コードを書きます。
【前提】
上記で作成したライブラリをビルドパスに追加する。
コマンドで実行する場合は下のように行う「/opencv/build/lib」は上記でビルドしてできたJARファイルが配置されているディレクトリになる。
-Djava.library.path=/opencv/build/lib
そして、ハローワールドのコードです。
public class HelloCV {
public static void main(String[] args){
System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
Mat mat = Mat.eye(3, 3, CvType.CV_8UC1);
System.out.println("mat = " + mat.dump());
}
}
実行方法
ズバリ、プロジェクト直下で次のコマンドを実行します。コマンドの内容としては次の通りです。
- JavaCVのJARファイルを参照するようにCPオプションを指定する
※CLASSPTH変数を定義してやるとコマンドでHelloCVクラスの参照ができなくなる - -DオプションでDLLファイルのあるディレクトリを指定する
- パッケージ名を含めたクラスの完全修飾名で起動するクラスを指定する
java -cp ".;C:\OpenCV\opencv\build\java\opencv-480.jar" -Djava.library.path="C:\OpenCV\opencv\build\java\x64" "src.main.java.cam.HelloCV"
IDE開発ツールの用意
デフォルトでインストールされているGeanyを使用します。
BlueJだとパッケージを開くたびにウィンドウを開くのである程度の大きさ、ファイル数になるとコーディングが大変なので、今回は使用しません。
インストール
こちらの本家サイトからダウンロード(Windows)
Linux、ラズパイなど
sudo apt-get install geany
sudo apt-get install geany-plugins
インントロダクション for MacOS
画像解析処理を行いたく思い「OpenCV」をセットアップします。
brewコマンドでインストールなどもできる様ですが、GitでPULLするのが一番早いと思いましたので、そのようにやります。
そもそも。。。
機械学習の理解をしようと色々と試みましたが、撃沈。。。(TensorFlow関連では基本的なこと、モデルの作成の理論までは理解できなかった)ので、OpenCVで機械学習を学ぼうとなりました。
OpenCVには色々な「アルゴリズムを使」うとか、ベクトル、パターン認識、特徴量の計算など「機械学習で必要になるであろう」事が記載されていました。
必要な工程
- Eclipseのインストールなどのセットアップ
- OpenCVのインストール(ここから記載します)
- OpenCVのJARファイルとOpenCVのC言語資源(ソース) インストール
- OpenCVの起動確認
OpenCVのインストール(makeコマンドを使う)
コマンドを叩いていけばOKですので。。。
参考サイト :本家家元OpenCVのページです。
参考サイト2:JavaでのOpenCVのページ。Javaでやるのでこちらを参照。
以下のコマンドを実行します(gitはインストール済みの場合)
>git clone git://github.com/opencv/opencv.git
gitのインストール:このページを参照しました。
>brew install git
そして以下のコマンドと続きます(対象のバージョンは「3.4.3」
>cd opencv >checkout 3.4.3 >mkdir build >cd build >cmake -DBUILD_SHARED_LIBS=OFF ..
そして処理が流れ始め。。。
javaフォルダができたかな?と思いきや。。。「ない」
そんな時は下のコマンドを叩く様です。
>export JAVA_HOME=/usr/lib/jvm/java-6-oracle >cmake -DBUILD_SHARED_LIBS=OFF ..
「/usr/lib/jvm/java-6-oracle」の部分は自分のマシンで使用するJDKの場所を指定します。自分の場合は以下の様になります。
>export JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.8.0_144.jdk/Contents/Home/
>cmake -DBUILD_SHARED_LIBS=OFF ..
>make -8j
そして、ビルドの結果
javaフォルダがない。。。
と思ったらopencv/binの中にありました。
そんなわけで、以下のコマンドでファイルをビルドパスに繋げやすい様にファイルを移動します。
>cp ./bin/opencv-343.jar ~/Java/OpenCv/ >cp ./lib/libopencv_java343.dylib ~/Java/OpenCv/
リンク先のファイルが「libopencv_java343.dylib」とは違う様ですが、このファイルで良い様です。
Eclipseのプロジェクトを右クリック > Build Pathを選択
Native Libraryを選択して。。。
Native libraryにOpenCVを登録(設定)します。
そして、実行!撃破!!
ソースは下の様になりました。対象のライブラリ部品から定数で参照する値は名前が違う場合がある様です。。。なのでハードコーディング(笑)
import org.opencv.core.CvType; import org.opencv.core.Mat; /** * OpenCVの部品を実行するクラス。 * * @author takunoji * * 2018/11/11 */ public class ReceiptCv { static { System.loadLibrary("opencv_java343"); } public static void main(String[] args) { new ReceiptCv().helloCv(); } public void helloCv() { Mat m = Mat.eye(3, 3, CvType.CV_8UC1); System.out.println("m = " + m.dump()); } }
そしてImShow(画像表示)→OpenCV3.Xではできません。
OpenCVの3.XからはHightGUIを使用しないようです。なのでJavaFXでイメージの表示を行います。「Java OpenCv Hello in Java〜OpenCv事始め〜」
旧バージョンでのImShowメソッドの使用方法
JARファイルをGitから直接ダウンロードします。
Imshow.jarを直接ダウンロードします。
Downloadボタンをクリックしてダウンロードします。
BuildPathをJARファイルに通します。
プロジェクトを右クリック > BuildPath
「Add External Jar」でダウンロードしたファイルを追加します。
実際の作業
https://www.youtube.com/watch?v=ZlTZDoYCAS8
次は、画像の表示をするための準備を行います。
ImShowのメソッドが使えないのでJavaFXによる画像表示GUIを作成していきます。
参考サイトはこちらです。
ちなみにチュートリアルでは「シーンビルダー」をインストールして画面の土台を作っています、下のような感じです。
関連ページ一覧
<JavaFXの準備>
<TensorFlow関連>
- Tensorflow Keras 〜初めてのKeras〜
- Tensorflow Keras Errors〜”python is not installed as a framework.”〜
- Python Tensorflow 〜初めての人工知能(TensorFlowインストール)〜
- Tensorflow Keras〜初めのトレーニング_1〜
- Tensorflow Keras〜初めのトレーニング_2:前処理〜
- TensorFlow Keras〜テキストの分類〜
- Python TensorFlow tutorial〜チュートリアルを進めるコツ、ワンポイント〜
- TensorFlow Keras〜回帰、準備から予測まで〜
- TensorFlow Java 環境構築〜JavaでもTensorFlow〜