JavaME 開発方法 〜JavaMEの開発環境構築 仮想OSにRPiをインストール〜

表題の通りに、前回作成した仮想マシン(VM Box使用)にRPiをインストールします。ラズパイを起動してみると下のように動きました。参考にしたサイトはこちらです。

そして、ロケール(Locale)を日本に指定します。

初期設定を、終えたら再起動するように促されるので、その通りにします、

そして、再起動したまた同じような画面が出る場合があるのでそれは無視してウィンドウを閉じます。

とりあえずはここまでがインストールの手順になります。
ここからターミナルを使用して(コマンドで)OSのアップデートなどを行います。

注意

ダウンロードしてくるファイル(ISO)のx86, x64 などを確認して、VMBoxで作成する仮想マシンのビット数を間違えないようにする。

ここでダウンロードしたのは32ビットのOSイメージでした。

うまくホストマシンとの接続ができなかったので、再インストールしているときに気がつきました。。。

でわでわ。。。



ラズパイ RPi 〜(成功)PC(Mac)からSSH接続〜

今回も、ラズパイ(RPi)へのSSH接続に挑戦します。

前回の反省

RPiに接続するのにはLANで接続してやらないとダメな様だ。

反省を活かす

シンプルにLANで接続してやれば良いだけです。できるかどうかはやって見てから。。。
前回、RPiをPC上で探し当てるのに「arp-scan」コマンドをインストールしました。> arp-scan -Vでバージョンの確認をします。つまりインストールされている確認をします。

そして、RPiとMac(PC)を接続します。下の様に接続しました。

なんか、USBとLANで接続しているので無限ループしそうですが、現在の自分の理解としては以下の様に理解しています。

  1. RPiのUSBはあくまで電源を共有するためのUSB
  2. ネットワーク接続に関しては、LANもしくはWifiでの接続になる

これでPCからRPiへの接続を試みます。

いきなり詰まる

先ほどの「arp-scan」はどうやらIPがわからないと使えない様で。。。仕方ないので、他の方法を探します。
「ifconfig」コマンドで調べることにしましたが、出力される内容がわからないので、調べました。参考サイトはこちらです。
そして、理解したのは以下の内容です。

  1. ifconfigコマンドで出力される「lo0」「eth0」などはネットワークインターフェースの名前であること
  2. しかし、ラズパイの情報を持っていないと話にならない

というわけで、ラズパイに改めてログインしてSSHの設定などを行うことにしました。

RPiを見てみる

結局は、ラズパイの設定を見て設定しているIPアドレスを調べました。自分の場合は192.168.4.2なっていたので上のようにLANでPCと接続してから、以下の手順で接続しました。

bluetoothctlを使う

sshで以下のコマンドで接続しました。

$ ssh pi@192.168.4.2
# パスワードなどを聞かれます。。。
$ sudo bluetoothctl

下のような感じで表示されました。

そして、接続したいMACアドレス(上の黒塗りにしている部分)をコマンドに渡します。

そして、Mmicrobitと接続ができました。



ラズパイ RPi 〜(失敗)PC(Mac)からSSH接続〜

今回は自分のPC(Mac)でSSH接続、つまりUSBで接続してMacから操作しようということをしようと思います。

SSH接続

ターミナルからラズパイ(RPi)に接続しようというわけです。
もともと、RPiに画面を使用したアプリを作成しようと色々試したのですが、結局は中途半端になっておりました。
画面作成はどうしてもビデオカードなどを使用したり、小型のディスプレイを使用したりと面倒なことが多いので、保留になっていましたが、今回はシンプルに画面なしのものを作成しようと考えています。

MIDIプレイヤー

これを作成したいのですが、道のりは遠そうなのでJavaの基本ブログ(JAVA学習フロー)を作成しながらのんびりと行こうと思います。

はじめの一歩

まずはラズパイの環境構築などを行うためのセットアップが必要なので、Macから接続してラズパイをコントロールできる様にしようと思います。ほぼ、手順の再確認になります。

SSH接続手順

Macからラズパイを探す必要があります。なのでMacとラズパイをUSBで接続したら、以下の手順を踏みます。

  1. ターミナルを起動
  2. ラズパイをターミナルから探す
  3. ラズパイとSSH接続する

macでは「arp-scan」コマンドが使える様です。
こちらのサイトを参考にしました。

brewコマンド

自分も最近知ったのですが、「brew」コマンドはMacで使用できるコマンドでいろんなアプリをインストールできるコマンドです。Pythonとかrubyとかgitに上がっているものなど色々とインストールできる様です。

今回は「arp-scan」を使用してやろうと思います、がせっかくの機会のなでこのコマンドのGithubをみてみました。いろんな人が色々とやっているのだなぁと感慨深いものがありいました。

失敗1

今回の挑戦は、USBでラズパイに接続することでしたが、USBは電源につい泣いているのもあり、ネットワークを別個に接続する必要があるみたいです。
現状のRPiは何も設定していないので、ネットワークを接続できる様な設定が必要です。

RPiの設定を行う

やっぱり、ネットワークの設定だけはやっておかないといけない様です。。。

結果

電源を入れたラズパイにLANケーブルを接続して、改めて上のコマンドで検索してやる必要があるようです。

ラズパイにJava OpenCV 環境セットアップ

この記事の概要

  1. JavaCV for Raspberry Piをインストール
  2. ラズパイ用OpenCVのセットアップ → 失敗、C言語,Pythonでのインストールだった。
  3. 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もインストール

※注意点

ここの操作で注意するべきは、次の通りです。

  1. インストールしているJDK、の場所を指定してやるというところです。
    筆者の場合は「/usr/lib/jvm/java-11-openjdk-armhf/」が、その場所なのでJAVAの項目を変更しています。※動画は変更していません。

  2. こちらのサイトを参考にしました。下のコマンドでインストールできます。
    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の方の手順を使用することにしました。
こちらのページになります。

手順

全部コマンドで実行します。下のコマンドをたたいていくだけです。

  1. OpenCVのZIPファイルをダウンロード
  2. ZIPファイルを解凍
  3. 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

次はビルドするコマンドです。

  1. 出力用のフォルダbuildを作成
  2. cmakeコマンドを実行
  3. makeコマンドの実行、オプション「-j4」をつけ忘れないように注意
  4. 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には色々な「アルゴリズムを使」うとか、ベクトル、パターン認識、特徴量の計算など「機械学習で必要になるであろう」事が記載されていました。

必要な工程

  1. Eclipseのインストールなどのセットアップ
  2. OpenCVのインストール(ここから記載します)
  3. OpenCVのJARファイルとOpenCVのC言語資源(ソース) インストール
  4. 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の準備>

  1. Eclipse SceneBuilderを追加する
  2. JavaFX SceneBuilder 〜EclipseとSceneBuilder連携~

<TensorFlow関連>

 家計簿アプリ作成

  1. Eclipse アプリ作成 Lv1〜家計簿を作る準備〜
  2. Eclipse アプリ作成 Lv2〜家計簿を作る土台作り〜
  3. Eclipse アプリ作成 Lv3〜3Dグラフ用Cube作り〜
  4. Eclipse アプリ作成 Lv4〜3Dグラフ用Cubeに高さを与える〜
  5. Eclipse アプリ作成 Lv5〜惨敗:CubeにTextureを貼る〜
  6. Eclipse アプリ作成 Lv7〜Cubeを日付順に並べる〜

Install XFCE4 on RPi 〜ラズパイに高速軽量デスクトップインストール〜

イントロダクション

ラズパイに表題のアプリケーションをインストールします。デフォルトインストールされているラズビアンは以下の理由で使用しません。

・起動が遅い

そしてXFCE4を使用する理由を列挙します。

  1. GUIアプリを作成したい
  2. CUIでの画面アプリケーションは動かせない(自分の知る限り)

XFCE4のインストール

参考にするサイトのURLです。

http://www.etcwiki.org/wiki/XFCE_desktop_on_raspberry_pi

そして、以前、XFCE4のインストールを行なっていたのでどこまでやったかを確認します。

インストール

上記のサイトのコマンドを叩いていけばインストールできます。

su
apt-get update
apt-get upgrade
apt-get install vim sudo raspi-config rpi-update  #VIMインストール
raspi-config    (change what you want, do NOT boot to desktop)

ポイントはデスクトップを起動しない設定を最後の行でするところです。

これでXFCE4のインストールは完了で、次はウィンドウマネージャをインストールしてやる必要があります。

このままだと今までと大して変わりません。。。。

今までと同じラズパイ画面がでます(笑)