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

(はてなブログから引っ越し '24/8/17)

しょくぶつ(^ ^) です。
Termuxを使えば、スマホの監視カメラ化もできます。

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

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

たしかに、ね。

Googleで “スマホ 監視カメラ” で検索すればいろいろな方法が見つかりますし、
なにより監視カメラそのものが安い !!
たとえばamazonでは「アトムテック(ATOM tech) 屋内/屋外兼用の防犯カメラ ATOM Cam 2 (アトムカムツー) 1080PフルHD Alexa対応 見守りカメラ 監視カメラ ネットワークカメラ ペットカメラ/ベビーモニター AC2」というものが\4680(※'24/8/17現在) で購入できます。

ネットワークカメラ ATOM Cam 2 (アトムカムツー):1080p フルHD 高感度CMOSセンサー搭載 / IP67防水防塵/赤外線ナイトビジョン 動作検知アラート機能 防犯カメラ/ペットカメラ/見守りカメラ/ベビーモニター/屋内屋外 ATOM tech製

わざわざ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です。
第3回:スマホでPython・機械学習 ! (1)
第4回:スマホでPython・機械学習 !(2)

手順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とでディレクトリ構造が異なったのと同じような感じ。)

プロフィール
この記事を書いた人
しょくぶつ (^ ^)

機械系の技術者です。学会発表13、論文掲載6(和・英)。プログラミング歴40年(つまり8bit世代ですね)。ゲーム歴40年(ファミコン世代ですね)。
お問い合わせは下記のメールアドレスにお寄せください。
plantsmilehatena@gmail.com

しょくぶつ (^ ^)をフォローする
termux
しょくぶつ (^ ^)をフォローする
タイトルとURLをコピーしました