Termuxでスマホを監視カメラ化 その(1)

Termuxを使えば、スマホの監視カメラ化もできます。

またかー、このブログの記事、実現まですごく苦労するんだよねー、とか思った方。

そのとおりです、すみません。

たしかに、ね。

スマホ 監視カメラ” で検索すればいろいろな方法が見つかりますし、 なにより監視カメラそのものが安い !!

わざわざTermuxで苦労しなくても良さそうです。

でも、

・24時間365日とり続けたい

・リモートでカメラ内の画像を確認/操作したい

・画像処理とか音声合成とかもやらせたい

とか市販カメラではわりと見つからない機能を実現できますし、なによりも余ったスマホを使えばカメラ代はタダです !!

(電源ケーブルの引き回しのための費用は必要。)

やってみましょう!!

方法としては、Termuxのtermux-camera-photoコマンドでひたすら写真を撮る方法もあります。

例えば次のスクリプト

#!/data/data/com.termux/files/usr/bin/sh
while true
do
        termux-camera-photo ~/storage/downloads/$(date +%Y%m%d%H%M%S).jpg
done

でも、termux-camera-photo 実行1回毎にピント合わせして写真を撮るので、途切れ途切れの画像となります。

Termuxでは動画コマンドはありません。

そこで、「adb」を使って、次の方針で進めてみます。

・標準カメラを起動

・adb機能でカメラ画面を動画キャプチャー

・保存先はSDカード

・溜まった動画はadbを使って遠隔でWindows PCへ回収し、Termuxで消去。

手順1  スマホにTermuxをインストール

これは、過去記事の通りやればOKです。

plant-smile.hatenadiary.jp

plant-smile.hatenadiary.jp

手順2 WindowsパソコンのPowershell上からsshでTermuxと接続。

これは必須ではありませんが、WindowsパソコンのPowershell上からsshでTermuxと接続します。

そうしないと、スマホの小さい画面上でコマンドを打つ羽目になります。

この方法も過去記事の通りです。

手順3 adbのインストール

Termuxを起動したら、(ubuntuにはログインせず、)次のコマンドを実行します。

※ Termuxから。
pkg install android-tools

参考 adbとは  「Android Debug Bridge(adb)は、デバイスと通信するための多用途のコマンドライン ツールです。」
Android Debug Bridge(adb)  |  Android デベロッパー  |  Android Developers

手順4 adbでスマホ自身に接続

もともとadbはパソコンからスマホに接続して使う為のツールですが、今回はadbの機能をスマホ自身で使いたいので、Termuxを使ってスマホからスマホ自身に接続します。

次のコマンドで接続できるでしょうか?

※ Termuxから。
adb tcpip 5555
adb connect (スマホのipアドレス):5555

ここで次のようなエラーが出たら、スマホ画面で「許可」を押します。

~ $ adb connect 192.168.0.12:5555

failed to authenticate to 192.168.0.12:5555

接続できたかどうか次のコマンドで確認します。

※ Termuxから。
$ adb devices
List of devices attached
emulator-5555 device
192.168.0.12:5555 device

とか出ればOKです。

しかし、

192.168.0.12:5555       unauthorized

とか、

emulator-5555 device

だけだとダメです。

ダメだったら次の方法を試してください。

方法1

下記URLの 「4. PCと接続してから adb connect」を実施。

Android端末内のTermuxからその端末自体にadb接続する2 (PC・USBケーブル不要) - Blogs | hone-choko-labo

方法2

USBを接続したり外したり、それではダメならば下記のURLを参考にしてください。

[Android][ADB] adb devices unauthorized の修正法 #Android - Qiita

手順5  デバイスidの確認。

もし adb devices で表示されるデバイスが1個だけならば不要ですが、2個以上表示される場合は、

※ Termuxから。
adb device -l

として、デバイスidを確認してください。

PS C:\Users\frieren> adb devices -l
List of devices attached
192.168.0.12:5555      device product:crosshatch model:Pixel_3_XL device:crosshatch transport_id:2
emulator-5554          device product:sdk_gphone64_x86_64 model:sdk_gphone64_x86_64 device:emu64xa transport_id:1

この場合だとidは 2 です。

手順6 アプリのパッケージ詳細情報を取得

標準カメラアプリの情報が必要です。 そこで、アプリのパッケージ詳細情報を取得します。

まず次のコマンドを実行します。

※ Termuxから。
adb shell pm list packages

すごく長いリストが出るので、"camera"で検索して、それっぽいものを探します。

シャープのAQUOSだと次のようなそれっぽい名前が見つかりました。

package:jp.co.sharp.android.camera

手順7 アプリのパッケージ詳細情報を取得

次のコマンドです。

※ Termuxから。
adb -t (デバイスid) shell pm dump <パッケージ名>

バイスidが4, パッケージ名が jp.co.sharp.android.camera の場合は

adb -t 4 shell pm dump jp.co.sharp.android.camera

すると、下記のようにこれまたものすごく長いログが出ます。

~ $ adb -t 4 shell pm dump jp.co.sharp.android.camera
DUMP OF SERVICE package:
Activity Resolver Table:
  Full MIME Types:
      text/plain:
        82e7b09
jp.co.sharp.android.camera/.stillimagecamera.VoiceActivity filter 5a0c13c
          Action:
"jp.co.sharp.android.intent.action.SH_EYE_CATCH_SELFIE_SHOT"
          Category: "android.intent.category.DEFAULT"
          Category: "android.intent.category.VOICE"
          StaticType: "text/plain"
        82e7b09
jp.co.sharp.android.camera/.stillimagecamera.VoiceActivity filter babec5
          Action: "jp.co.sharp.android.intent.action.SH_VIDEO_CAMERA"
          Category: "android.intent.category.DEFAULT"
          Category: "android.intent.category.VOICE"
          StaticType: "text/plain"
・・・

が、欲しいのは一番最初の

jp.co.sharp.android.camera/.stillimagecamera.VoiceActivity

が欲しい情報のハズで、もしこの後の手順で標準カメラアプリが起動しない場合は、「android.intent.action.MAIN:」の方を探してください。

参考URL

adb からアプリ起動 | noitaro.github.io

手順8 標準カメラ起動!!

次のコマンドで起動できます。

※ Termuxから。
adb -t (デバイスid) shell am start -n (アプリのパッケージ詳細情報)

たとえばAQUOS SH-M15, SH-M08だと、ともに次のコマンドで行けました。

  adb -t 4 shell am start -n jp.co.sharp.android.camera/.stillimagecamera.VoiceActivity

手順9 動画キャプチャー !! (ただしストレス溜まるところ。)

動画キャプチャーを試してみるのですが、ここはストレスが溜まるところです。

まずはやってみましょう。

※ Termuxから。
 adb -t (デバイスid) shell screenrecord --time-limit 3 --verbose /sdcard/testrecord.mp4

うまくいったでしょうか?

もしかすると、「Permission denied」が出たかもしれません。

これは、Termuxやadbでは書き込みできる場所がかなり制限されているためです。

(たぶんandroidシステムで制限されている)

大変ですが、

※ Termuxから。
adb shell

でadbのシェルに入った上で、cd コマンドで /sdcard とか ~ とか、あちこち移動して、動画を書き込める場所を探してみてください。

どうしても無理ならば、ここはいったん、次の手順10(次回)へ行ってもいいです。

「adbのシェルに入った上で」の理由は、adbシェルから見えるディレクトリ構造と、Termuxから見えるディレクトリ構造とが異なる場合があるためです。

(ubuntuを入れた際に、Termux自体とubuntuとでディレクトリ構造が異なったのと同じような感じ。)