Google OS実験室 ~Moonlight 明日香~

GoogleのAndroidで遊び始めて, すでに6年以上が経った. Androidは思った以上の発展を遂げている. この技術を使って, 新しいことにチャレンジだ!!

Android

Google ML Kit試してみた!

先日(2018/5/8-10)開催されたGoogleの開発者向けイベント「Google I/O 2018」で「ML Kit」[1]のβ版が発表された.
AndroidやiOS向けアプリでML Kitを使うことで, 機械学習を活用したテキスト認識, 顔検出, 画像のラベル付けなどが容易に利用できるようだ.

そこで, quickstart-android[2]を早速試してみた.

1. MK Kit概要
1.1 主な機能
現時点では, 5つのAPIが提供されており, APIによってOn-deviceとCloudでの対応状況が異なっている.
On-devieとCloudの両方に対応している場合でも, 認識精度や取得できる情報が異なっている.

MLKit02

FeatureOn-deviceCloud
テキスト認識
顔検出
バーコードスキャン
画像のラベル付け
ランドマーク認識

1.2 主な特徴
 ・ 「Firebase」上で利用でき, 「Android」向けと「iOS」向けの双方が用意されている.
 ・ On-device上の機能を利用する場合は, ネットワーク接続なしに無償で利用できる.
 ・ 独自のTensorFlow Liteモデルを利用できる.
など, など...

2. ML Kitデモのビルド
2.1 ソースコード取得
(1) リポジトリをクローンする.

 $ git clone https://github.com/firebase/quickstart-android.git

(2) Android Studioでquickstart-android/mlkitをインポートする.

MLKit

2.2 Firebaseのプロジェクト作成
(1) Firebase Consoleでプロジェクトを作成する.
(2) プロジェクトの設定ファイルgoogle-services.jsonをダウンロードする.
(3) Android Studioのmlkit/appの下に, google-services.jsonを配置する.

2.3 ビルド
今回は以下の環境でビルドした.
[ビルド環境]

 ・ Android Studio 3.1.2
 ・ buildToolVersion 27.0.3

 ・ compileSdkVersion 27
 ・ targetSdkVersion 27

3. ML Kitデモ
3.1 顔検出
単に顔位置を検出するだけでなく, 目の位置やhappiness度なども認識している.
上の二人は, happiness度低~い.

keyaki01
[出典:欅坂46公式サイト オフィシャルレポート]

3.2 テキスト認識
On-deviceの場合には, 行単位で認識するみたい.
まだ, 日本語は対応していないとのこと.

MLkit03

3.3 バーコードスキャン
バーコードもQRコードも認識できる.
ただ, バーコードは回転に弱い感じ.

MLKit05

3.4 ラベル認識
On-deviceでは400+ ラベル, Cloudでは10,000ラベルの認識ができるそうだ.
On-deviceだと, iPodをMobile phoneと間違えたので, iPod自体がラベルにないのだろう.

MLkit04

まずは, Quickstartのデモを動作させてみた.
On-device上でもラベル認識以外はそれなりに認識できている.
Cloudになると, もっと認識精度はいいだろうし...

だが, あくまでパターン認識なので, 100%正解ってことはない.
誤認識することもあると割り切って, うまくアプリで使ってやることが大事!!

それなりにおもしろいことができるのではとの期待が膨らんできたので, デモのソースコードやML Kitのドキュメントを読んで, 少しアプリへの実装の仕方を勉強してみよう.

----
参照URL:
[1] ML Kit for Firebase | Firebase
[2] firebase/quickstart-android: Firebase Quickstart Samples for Android

Wifi経由でadb接続する

普段, Androidアプリのデバッグは, PCとAndroid端末をUSBでadb接続して行っている.
しかし, 今回はAndroidのUSB Host APIを使ってArduino UNO(R3)とのUSB接続をデバッグしたいので, PCとAndroid端末をUSB接続できない. そこで, Wifi経由でのadb接続を利用することにした.
以前, Android 2.xxの時に一度試したことがあるが, その時はなぜか成功しなかった.
今回は, 安定してadb接続することができたので, その手順をまとめておく.

[手順] [1]
1. usbケーブルでPCとAndroid端末を接続する.
2. Android端末をネットワークに接続する.
3. Android端末のIPアドレスを調べる. (設定>Wi-Fiから)
4. コマンドプロンプトを起動する.
5. ">adb tcpip 5555"を実行する.
6. ">adb connect IPアドレス:5555"を実行する.
7. usbケーブルを外す.
8. ">adb devices"でAndroid端末がリストされるか確認する.

[動作例]
Nexus 7 (2013) / Android 4.4.4

adb01

もし, 切断する場合は, ">adb disconnect IPアドレス:5555"を実行する.

----
参照URL:
[1] ネットワーク越しにadb接続する<< TechBooster


Android 5.0 Lollipopにしてみた!

2014年11月12日に, Nexusシリーズ向けにAndroid 5.0(Lollipop)の提供が開始された.

さっそくNexus 7 (2012)をAndroid 5.0にしてみた.

手順は簡単.
1) 「Factory Images for Nexus Devices[1]からNexus7(WiFi)用Android 5.0イメージをダウンロードする.
2) 「
Nexus7にファクトリーイメージを書き込む [2]を参照し, ファクトリーイメージを書き込む.

アップデート後:
Nexus01

Nexus02

アップデートは完了.

Android 5.0 Lollipopでは, 「Material Design(マテリアルデザイン)」が採用されており, 見た目が洗練された感じがする.

----
参照URL:
[1] Factory Images for Nexus Devices
[2] Nexus7にファクトリーイメージを書き込む

CTSテストを試してみる

CTS実行環境を構築したので, CTSテストが正しく動作するか確認してみた.
本来ならGoogle社のNexus7等で試すのが一番良いのだが, 端末内のユーザデータ等を初期化する必要があるので, 今回はMSI社のPrimo81上で試してみた.

MSI Primo81
 CPU : Allwinner A31s Quad core 
 OS : Android 4.4 (4.2からupdate)
 メモリ :  DDR 1GB

1. CTSテスト実行[1]
 1) 「CTS実行環境を構築する」のテスト実行手順に沿って, Primo81の各種設定, アプリのインストール, テストデータのコピー等を行う.
 2) CTSプログラムを起動し, テストプラン"CTS"を実行する.
  cts-tf > run cts --plan CTS

2. テスト結果
 Primo81のテスト結果は以下の通り.

cts-02

テストが終了した時に, 画面にデバイスがマウントできないといったエラーが発生していた.
レポートを見ると, どうもテストは途中で中断したようである.

テスト実行中に, テストがFAILした場合などに端末にリブートがかかる場合があったが, その際にデバイスをマウントできなかったのだろうか?
dmesgでログをみると, 以下のようなエラーが発生していた.

[15337.971348] usb 1-1: USB disconnect, device number 104
[15338.281864] usb 1-1: new high-speed USB device number 105 using ehci-pci
[15338.685170] usb 1-1: New USB device found, idVendor=0db0, idProduct=0007
[15338.685173] usb 1-1: New USB device strings: Mfr=2, Product=3, SerialNumber=4
[15338.685175] usb 1-1: Product: Android
[15338.685176] usb 1-1: Manufacturer: USB Developer
[15338.685177] usb 1-1: SerialNumber: 51494143057817f0507
[15348.728709] usb 1-1: USB disconnect, device number 105
[15349.028809] usb 1-1: new high-speed USB device number 106 using ehci-pci
[15349.255309] usb 1-1: New USB device found, idVendor=0db0, idProduct=0007
[15349.255315] usb 1-1: New USB device strings: Mfr=2, Product=3, SerialNumber=4
[15349.255318] usb 1-1: Product: Android
[15349.255321] usb 1-1: Manufacturer: USB Developer
[15349.255323] usb 1-1: SerialNumber: 51494143057817f0507
[15349.297934] systemd-udevd[4784]: Failed to apply ACL on /dev/bus/usb/001/054: No such file or directory
[15349.297954] systemd-udevd[4784]: Failed to apply ACL on /dev/bus/usb/001/054: No such file or directory
[15349.324133] systemd-udevd[4784]: Failed to apply ACL on /dev/bus/usb/001/055: No such file or directory
[15349.324141] systemd-udevd[4784]: Failed to apply ACL on /dev/bus/usb/001/055: No such file or directory
[15349.340719] systemd-udevd[4784]: Failed to apply ACL on /dev/bus/usb/001/056: No such file or directory
[15349.340726] systemd-udevd[4784]: Failed to apply ACL on /dev/bus/usb/001/056: No such file or directory
[15349.359394] systemd-udevd[4784]: Failed to apply ACL on /dev/bus/usb/001/057: No such file or directory
   :

このエラーの回避策について少し調べてみたが, あまり見当たらない.
他の人はこのようなエラーが発生していないのだろうか?

今回はとりあえずスキップされたテスト項目を抽出し, その部分のみ再度テストすることとする.
原因/回避策は, また時間のあるときに調べてみよう....

----
参照URL:
 [1] Google OS実験室 ~Moonlight明日香~ : CTS実行環境を構築する

プロフィール

明日香

アクセスカウンター
  • 今日:
  • 昨日:
  • 累計:

記事検索



  • ライブドアブログ