(はてなブログから引っ越し '24/8/17)
しょくぶつ(^ ^) です。
Termuxを使えば、スマホの監視カメラ化もできます。
またかー、このブログの記事、実現まですごく苦労するんだよねー、とか思った方。
そのとおりです、すみません。
たしかに、ね。
Googleで “スマホ 監視カメラ” で検索すればいろいろな方法が見つかりますし、
なにより監視カメラそのものが安い !!
たとえばamazonでは「アトムテック(ATOM tech) 屋内/屋外兼用の防犯カメラ ATOM Cam 2 (アトムカムツー) 1080PフルHD Alexa対応 見守りカメラ 監視カメラ ネットワークカメラ ペットカメラ/ベビーモニター AC2」というものが\4680(※'24/8/17現在) で購入できます。
わざわざ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とでディレクトリ構造が異なったのと同じような感じ。)