AccidentCamera
AccidentCameraはAndroidの手振れ軽減機能やLEDライトのオンオフ機能などを備えた多機能カメラです.
撮影した画像は全て sdcard/DCIM/Camera/ 以下に保存されます.
Contents |
特徴
- 撮影開始から一定時間静止しないと撮影出来ないようにしたので,車での移動中なども手振れの少ない写真が撮れます
- 端末の加速度・方位・ピッチ・ロールを元に,まるで慣性が働いているかのような照準アニメーションを実装しました.これが端末の「揺れ具合」を表します.
- 現在の加速度・方位などを知るためや,LEDをオンオフするためのアプリとしての利用も可能です
動作環境(Requirements)
- Android 1.6 以上(Android 1.6 or higher)
動作確認機種(Validation devices)
- Sony Ericsson Xperia X10 完全動作
- Sony Ericsson Xperia X10 mini 完全動作
- Samsung Galaxy S LEDオンオフ不可
- Google(HTC) Nexus One LEDオンオフ不可
- HTC Magic HT-03A LEDオンオフ不可
- Sharp IS01 LEDオンオフ不可
インストール
- Android Market(Android端末のみアクセス可)
- 各紹介サイト
Caution!
このソフトウェアはAndroidにおける画像認識の練習として作成したソフトウェアです.決して盗撮などの犯罪目的では使用しないで下さい.
このソフトウェアはプレビューフレームのコールバック関数を利用する事によって「低画質な」画像をシャッター音なしで受け取っています(詳しい方法については後述).これは画像をリアルタイムに取得し解析するための正当な行為であり,全ての携帯端末(スマートフォン, ガラケー...)に備わっている/備わっているべき機能です.そして,Androidでは他に,最高画質にもかかわらずシャッター音を消すことの出来る手段(詳しい方法については伏せます)が存在するため,犯罪行為の助長にはあたらないと判断しこれを公開しました.
Screenshots
撮影しようとしている様子(Lady Javaの1シーンより引用)
設定画面のパラメータについて
FPS of Animation | 照準アニメーションのFPS |
Max camera shake parameter to take picture | 撮影時にどこまでの手振れを許容するか |
Static time to take picture | 何秒間静止したら撮影するか |
Debug mode | デバッグモードの切り替え |
更新履歴
Version 1.1 (2011/3/26)
- YCbCr420をRGBに変換する関数をJNIを用いて実装していたが、Javaで処理しても十分に速く出来たのでJNIを使わないようにした
- ローパスフィルタを用いて振動を表す照準をなめらかに動くようにした
- SDカードへ画像を保存する際にMediaStoreを使うようにした(他のギャラリーアプリなどからすぐに参照できるようになっています)
- カメラのアスペクト比がおかしくなっていたのを修正
技術的な話
どうやってプレビュー画像を取得しているのか
Camera.PreviewCallbackのonPreviewFrame(byte[] data, Camera camera)の引数dataにYCbCr420の画像が入っているのでそれを利用します.
YCbCr420からRGBへ変換
YCbCr420のままでは白黒画像を取得するぐらいにしか使えないのでRGBに変換する必要があります.
具体的な方法は次のページが詳しいです.
上述decodeYUVを使ったら紫と緑のシマシマ画像が出力されちゃう・・
decodeYUVに渡す画像の大きさを間違えた時にこのような画像が出力されます.
NASKIT» Blog Archive » Xperiaのカメラ を参考に適切なプレビュー画像の大きさを取得してから渡してみて下さい.
Thanks!: 「ToyCam」作者の3156さん
ネイティブコードの変更が反映されない
JNI側を書き換えてコンパイルしてもEclipseはそれを検出出来ず,「実行」しても端末にapkファイルが転送されない事によってその更新が反映されない事があります.JNI側を書き換えたらJava側のソースに簡単な修正を加えて元に戻す癖をつけた方が良さそうです.私はこれに気づかず何度か引っかかりました・・・
XperiaのLEDフラッシュをオンオフする
次のページで詳しい方法が解説されています.
Thanks
- Developer Collaboration ProjectからAndroid端末をお借りました