emoiの日記

忘れっぽい雑食系エンジニアのメモblogです。

OpenCV を使って Android で MobileNet-SSD を動かす

環境

Ubuntu 16.04
Android Studio 3.1.3
OpenCV 3.41
Nexsus 5

はじめに

OpenCV公式のサポートスタンスはここに明記されている。

We’re not aiming to teach you all about Android

Android - OpenCV library

初期設定手順

まずはOpenCVのセットアップと Hello World
OpenCV for AndroidをAndroid Studioに導入するメモ

f:id:r17u:20180622103959p:plain

MobileNet-SSD サンプル

OpenCV: How to run deep networks on Android device
Nexus5だと処理が重いがなんとかリアルタイムでできている。
f:id:r17u:20180622103144p:plain

エラー対応

  • error: cannot find symbol variable hoge

コード該当箇所にカーソルを合わせて「alt+enter」を押下すると、import欄に自動で追記され、再度ビルドするとエラーがなくなる。

  • 実機を認識させる

Ubuntu + Android Studioで実機をUSBに接続してデバッグ - Symfoware

  • 'com.android.tools.build:gradle:3.1.3'が無いとエラーが出たら、repositoriesにgoogle()を追加。

android - Can not find gradle 3.1.1 - Stack Overflow

  • Error: Your project contains C++ files...

LLDB, CMake, and NDK をインストール
Add C and C++ code to Your project  |  Android Developers

  • Configuration 'compile' is obsolete and has been replaced with 'implementation' and 'api'.

Android Studioの新コンフィグレーションimplementationとapiのひとつ注意点

  • Error: Your project contains C++ files but it is not using a supported native build system.

落書き帳: Android Studio への移行
LobiのAndroidアプリ開発を Android Studio 3.0 に移行しました! - KAYAC engineers' blog

  • Camera is not available (in use or does not exist): Fail to connect to camera service

カメラの権限をonにする

  • No implementation found for long org.opencv.dnn.Dnn.readNetFromCaffe_0

.caffemodelおよび.prototextファイルパスがあっているか確認。
次はOpenCV Manager のverを確認。アップデートする。
Failed to load mobilenet-ssd caffemodel. · Issue #9904 · opencv/opencv · GitHub
androidのcpuを調査

~/Android/Sdk/platform-tools$ adb shell cat /proc/cpuinfo

インストール

~/Android/Sdk/platform-tools$ adb install /home/hoge/OpenCV-android-sdk/apk/OpenCV_3.4.1_Manager_3.41_armeabi-v7a.apk
3888 KB/s (11490451 bytes in 2.886s)
	pkg: /data/local/tmp/OpenCV_3.4.1_Manager_3.41_armeabi-v7a.apk
Success

Success の代わりにFailure [INSTALL_FAILED_UPDATE_INCOMPATIBLE]が出たら、
Android実機に既に入っているOpenCV Managerをアンインストールして再度試す。

Ubuntu 16.04 にAndroid Studio環境作る

環境

Ubuntu 16.04
Android Studio 3.1

手順

$ sudo add-apt-repository ppa:maarten-fonville/android-studio
$ sudo apt-get update
$ sudo apt-get install android-studio

umakeできない。

$ umake android
ERROR: A default framework for category Android was requested where there is none usage: umake android [-h] {android-ndk} ...

対処法。

$ git clone https://github.com/ubuntu/ubuntu-make
$ cd ubuntu-make
$ bin/umake android

アイコンが見つからない場合。

$ /opt/android-studio/bin/studio.sh

初期画面。
f:id:r17u:20180622103453p:plain

エミュレーター起動

f:id:r17u:20180622103655p:plain
AVD(Android Virtual Device) を動かすためには、仮想環境を動かす設定を場合によっては変更する必要がある。
以下を参考に確認、変更した。
android - /dev/kvm is not found on Ubuntu 14.04 - Ask Ubuntu

起動後。
f:id:r17u:20180622103742p:plain

Ubuntu 16.04 よく使うpython環境構築メモ

git

$ sudo apt-get install git

Anaconda

最新の hoge.sh ファイルを wget してからインストール。適宜enterを押す。

$ wget https://repo.continuum.io/archive/Anaconda3-5.2.0-Linux-x86_64.sh
$ bash Anaconda3-5.2.0-Linux-x86_64.sh

インストール後。

$ source .bashrc

よく使うpythonライブラリ

$ pip install selenium
$ pip install PyQtGraph
$ pip install 'pubnub>=4.0.8'
$ pip install git+https://github.com/yagays/pybitflyer
$ pip install websocket-client
$ pip install ploty
$ pip install git+https://github.com/hyperopt/hyperopt
$ pip install pandas-highcharts

AWS EC2 Ubuntu 16.04 Remminaによるリモートデスクトップ

MacWindows からリモートデスクトップ接続する記事は見かけるが、
Ubuntuからというのはあまりないのでまとめておく。

環境

AWS EC2
Ubuntu 16.04 (クライアントおよびサーバー)

EC2インスタンス作成

AWSサービス内のEC2を検索。
f:id:r17u:20180612045233p:plain

EC2ダッシュボードにて、インスタンス作成をクリック。
f:id:r17u:20180612045349p:plain

Ubuntu Server 16.04 LTS (HVM), SSD Volume Type を選択。
f:id:r17u:20180612045415p:plain

t2.microを選択。
f:id:r17u:20180612045503p:plain

ここで容量は30GBまで増やせる。最後に確認して作成。
f:id:r17u:20180612045536p:plain

キーペアの作成

インスタンス作成後にキーペアの名前を入力、
hoge.pem 形式のファイルを任意のフォルダにダウンロードする。

インスタンス動作の確認。

しばらく時間を置くと、インスタンスのステータスがrunningに変わる。
f:id:r17u:20180612050043p:plain

ssh接続

hoge.pem のあるフォルダ内で作業する。
@以降に作成したインスタンスのパブリックDNSを入力。

$ sudo ssh -i hoge.pem ubuntu@hoge.ap-northeast-1.compute.amazonaws.com

更新

$ sudo apt update && sudo apt upgrade

パス設定、GUIインスール、ポート解放

ssh上で設定を進める。手順はこちらに詳しく書いてある。
AWS EC2のUbuntuにWindowsからリモートデスクトップで接続し、Ganacheを起動する手順

設定が終わったらsshを終了する。

$ exit

Remmina 設定

Remmina起動。
f:id:r17u:20180612052247p:plain

Newをクリック。
f:id:r17u:20180612052313p:plain

任意の名前を入力。
プロトコルはRDPを選択。
ServerにパブリックDNSを入力。
User name は変更していなければubuntu
Color depth は Remote FXを選択。
f:id:r17u:20180612052342p:plain

接続

さきに設定したパスを入力。
f:id:r17u:20180612052655p:plain

この画面が出れば成功。
f:id:r17u:20180612052719p:plain

Ubuntu16.04でGo1.9を動かすメモ

goインストール

$ sudo apt-get update
$ wget https://storage.googleapis.com/golang/go1.9.2.linux-amd64.tar.gz
$ sudo tar -zxvf  go1.9.2.linux-amd64.tar.gz -C /usr/local/

確認

$ go version

パス

$ sudo mkdir -p ~/go; echo "export GOPATH=$HOME/go" >> ~/.bashrc
$ echo "export PATH=$PATH:$HOME/go/bin:/usr/local/go/bin" >> ~/.bashrc
$ source ~/.bashrc
$ sudo chown hoge.hoge -R /home/hoge/go

確認

$ go env

gin設定

$ go get github.com/gin-gonic/gin

go/src で git clone

$ cd go/src
$ git clone https://gitlab.com/hoge/hoge.git

go get で必要なライブラリをインストールした後、run

$ cd hoge
$ go get
$ go run hoge.go

github操作メモ リポ作成からプッシュまで

githubで新規リポジトリ作成

publicとprivate設定に注意。

初期化

空のフォルダ上にて以下コマンドで初期化。

git init

初期化後に更新したいファイル群を配置。

除外フォルダおよびファイルの設定

.gitignoreファイルを作成

# folder
hoge/
# file
*hoge.hoge

コミット

git add .
git commit -m "first commit"

commiter変更

※複数のアカウントを持っている場合

git config --local user.name hogehoge
git config --local user.email hogehoge@hoge.com
git commit --amend

author変更

※複数のアカウントを持っている場合

git commit --amend --author="hoge <hogehoge@hoge.com>"

確認

git status
git log --pretty=full

プッシュ

git remote add origin https://github.com/hogehoge/hogehoge.git
git push origin master

プライベートリポのクローン

git clone https://hogehoge@github.com/foo/bar.git

重いリポジトリをクローンした場合のエラー回避

エラー例

Cloning into 'hoge'...
remote: Counting objects: hoge, done.
remote: aborting due to possible repository corruption on the remote side.
fatal: protocol error: bad pack header

回避策

git clone --depth 1 https://hogehoge/hoge/hoge.git

push 取り消し

git log --oneline
git reset --hard hogehoge
git log --oneline
git push -f