PrivacyCamera
撮影した画像から自動で顔を認識し様々な処理を施す事が出来るカメラです。
Contents |
ダウンロード
- https://market.android.com/details?id=com.usi3.privacycamera
- http://www.androidpit.com/en/android/market/apps/app/com.usi3.privacycamera/PrivacyCamera
動作環境
- Android 1.6 以上
動作確認機種
RAMが100MB以下の端末では恐らく動きません。
Sony Ericsson Xperia X10 | 完全動作 |
---|---|
Sony Ericsson Xperia X10 mini | 上に同じ |
Samsung Galaxy S | 上に同じ |
LG Electronics Optimus GT540 | 上に同じ |
Sharp IS01 | 上に同じ |
Toshiba(FUJITSU) REGZA Phone T-01C | 上に同じ |
Google(HTC) Nexus One | まれに致命的なエラーが発生するので動かさないで下さい |
HTC Desire HD | 上に同じ |
Sony Ericsson Xperia arc | 上に同じ |
HTC Magic HT-03A | メモリー不足で不安定 |
対応言語
- 日本語 / English / 中文(简体)
使い方
起動したらオプションメニューから施したい処理を選択して下さい。
- 何もしない
- 任意の画像を上書き
- 黒い帯の目隠しを上書き
- 顔にモザイクをかける
Autofocus ボタンでピントを合わせた後に右上にある「音なし撮影ボタン」か右下にある「音あり撮影ボタン」のどちらかをタップします。
「音なし撮影ボタン」は処理が速いかわりに低画質(ディスプレイのサイズと同じ大きさ)で顔の認識率が低めです。「音あり撮影ボタン」は端末の限界の解像度で写真を取ります(1024x768~1920x1080)。処理が遅いかわりに認識率が比較的高いです。
撮影後は処理中を表すダイアログが開きます。処理が終わるまで待ってください。
処理が終わった後はこのようなダイアログが開きます。希望の処理を選んでください。(わざわざ画面をタッチしないと次に進めないようにしたのには盗撮用途に使われる事を防ぐ意味合いもあります)
設定画面の使い方
これが設定画面です。「上書きする画像を変更する」を選択すると次の画面に移ります。
オプションメニューから画像を追加出来ます。
アイテムを長くタップするとそのアイテムを削除できます。
撮影画像のサンプル
更新履歴
Version 1.1 (2011/3/27)
- Android 2.1以上のみに対応していたのを1.6以上なら動くように変更、そのかわり Nexus One では動かせなくなりました
- 顔の大きさによってモザイクの粗さを変えるように変更
- エラーメッセージの充実
技術情報
顔認識の方法
FaceDetector を使っています。OpenCV を使えばもっと高速に動作可能だと思います。
参考:Detection using OpenCV library on Sony Xperia(Android 1.6)
Bitmap を扱う時に多発する OutOfMemoryError をどうにかする
- BitmpaFactory.Options の inPurgeable と inInputShareable を true にする
- 使い終わった Bitmap をGCの対象にするために recycle() する
BitmapFactory.Options inPurgeable
http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inPurgeable
If this is set to true, then the resulting bitmap will allocate its pixels such that they can be purged if the system needs to reclaim memory. In that instance, when the pixels need to be accessed again (e.g. the bitmap is drawn, getPixels() is called), they will be automatically re-decoded.
(筆者訳)このオプションが true なら、システムがメモリを要求した時に開放されるような領域に結果の Bitmap を割り当てます。開放された後にその Bitmap のピクセルにアクセスがあった場合(例えば描画されたり、getPixels() が呼ばれた時など)、その瞬間に、自動的に再びデコードされます。
http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html#inInputShareable
This field works in conju(n)ction with inPurgeable. If inPurgeable is false, then this field is ignored. If inPurgeable is true, then this field determines whether the bitmap can share a reference to the input data (inputstream, array, etc.) or if it must make a deep copy.
(筆者訳)このオプションは inPurgeable と関連しています。inPurgeable が false ならこのオプションは無視され、true ならこのオプションはビットマップが入力データ(InputStream や配列など)への参照を保持出来るか(つまり、入力データをディープコピーすべきか)どうかを決めます。
Bitmap の処理を JNI には及ばないものの比較的速くする
getPixel, setPixel を使うと遅いので getPixels, setPixels を使うと良いです。
Thanks
- Developer Collaboration ProjectからAndroid端末をお借りました
- ライ麦畑でつかまえて
- 攻殻機動隊 STAND ALONE COMPLEX
- ぼっさん