2010年9月14日火曜日

Pythonを使ってAndroid端末を5分でリモートカメラにする方法

このブログ記事をはてなブックマークに追加

Android端末をリモートカメラにしてしまう方法「Spycam」という記事経由でTurn your Android Phone Into a Remote Spy Camera with Ruby in 15 Minutesを知った。SL4AのJRubyを使ってAndroid端末を15分で遠隔操作のスパイカメラにしてしまえるらしい。これは面白い。そこで、Rubyが15分ならPythonを使って5分でリモートカメラにしてしまおうと思い立った。

まず、Pythonでは標準モジュールのSimpleHTTPServerやwsgiref.simple_serverを使って簡単にWebサーバを構築することができる。そしてSL4Aを使えばAndroid端末をそのままサーバとして起動させることができる。これを組み合わせればできたも同然だ。

それで書いたのが以下のコードだ。10行そこそこでAndroid端末をWebサーバに仕立て上げ、Webブラウザ経由で写真を撮ることができる。こんなちっこい端末がWebサーバになるなんて世の中進歩したものだ。

remote_camera.py

import android from wsgiref.simple_server import make_server droid=android.Android() pic='/sdcard/snapshot.jpg' def camera(env,res): if env['PATH_INFO']=='/': droid.cameraCapturePicture(pic) res('200 OK',[('Content-type','image/jpeg')]) return [file(pic).read()] httpd=make_server('',9998,camera) httpd.serve_forever()

使い方は次の通り。まず、SL4Aを起動し、メニューボタンから"View"を選ぶとダイアログが出てくるので"Interpreters"を選択する。


再度、メニューボタンから今度は"Start Server"、"Public"を選択する。これでAndroid端末がサーバとして機能する。


次に、Android画面上部のインジケータ部分を開き、"SL4A Service"をタップする。そうするとScript Monitorが立ち上がるので、Serverのアドレスを確認する。それから先ほど作成したPythonスクリプト(remote_camera.py)を起動する。


サーバのアドレスの最後にソースコードで指定したポート(上記のコードでは9998)を加えたURLをWebブラウザに入力する。例えばサーバのアドレスが your.address.net だとすれば、 http://your.address.net:9998/ がWebブラウザに入力するURLとなる。これで遠隔操作による撮影が可能になった。ページをリロードすればその度に写真が撮影され表示される。試しに最近購入した書籍などを撮影。


これを使って次のような遊びをしてみた。Android端末を見つかりにくいところに隠し、あとでWebブラウザから写真を撮る。その画像とかすかに聞こえるシャッター音を頼りに隠したAndroid端末を探すというゲームだ。子供たち相手にやってみたが皆大喜びだった。もっと広い場所でやれば本当に楽しそうだ。必要なものはAndroid端末とWebブラウザの使えるデバイスだけだ。デバイスもPCではなくAndroid端末のようなスマートフォンで良いのだから手軽だ。

これは使い方の一例だが、Android端末とSL4Aを使えば可能性が本当に広がってくる。

2 コメント:

noreacky さんのコメント...

その遊びを発明されたことも本当におもしろい!と思います。

nox さんのコメント...

コメントありがとうございます。
技術そのものも面白いのですが、それをどのように利用するかを考えるのはもっと面白いと思っています。