2017年7月21日金曜日

Androidカメラとバーコード

以前作っていたカメラアプリを、最新の自前フレームワークに対応させて復活。

と言っても、カメラのプレビュー映像が表示されるだけだが、
Androidでカメラ使ったアプリの開発経験があれば、それだけでかなり大変だと分かるはず。

で、これをバーコード読み込みに対応させるのが今回の目的。
元々は、秋葉原で購入したUSBのバーコードリーダーを800円でゲットし、
OTGケーブルで接続して使っていたのだが、
カメラでさっと読み込みしたいじゃない?

幸い、GooglePlayサービスに、バーコード読み込みのAPIがあるってことだし、
試してみることに。

実際に、カメラアプリを作ったことがあれば、
http://dev.eyewhale.com/archives/1372
ここをさっと流し読みするだけで、30分でできるはず。

まあ、実際には、足りないSDKをダウンロードしたりの時間も含まれるわけですが。
(API21、Android5.0以上じゃないと使えないっぽいです)

で、早速組み込んだアプリを実機テスト。
実機テストでおなじみの nuuX4の登場です。

いやあ、想像していたのより、さくさく読めますね。
バーコードの読み取りが成功する度に、コールバックが呼ばれるので、
ずっとバーコードをかざしていると、毎フレーム呼ばれます。
なので、自前で排他処理とかが必要。

とか、そんなのは、どうでも良し!
もっと深刻な問題が!

ネット検索すると、同じようにGooglePlayサービスでバーコード読み取りしている人はたくさん居て、皆、読み取りがすごいと、感心しているのですが…。

これ、超高性能カメラ専用APIだった!?

サンプルでは、デフォルトで背面カメラをしているのだが、
私は、正面カメラ(自撮用、フロントカメラ)で読み込みたいのです。

しかしこれが全く読み込めない。
極たまに1フレームだけ読み込めるときがあるので、プログラムが間違っているわけでは無いと思う。

実際に表示されるプレビュー映像を見れば分かるのだが、
フロントカメラの場合、バーコードの線が潰れて読み取れないような映像になっている。
バックカメラ二すると、ものすごく綺麗なプレビューが表示されて、さっと読み取れる。

nuuX4のカメラは、相当良いものだ。
バックカメラは1300万画素だし、フロントカメラも500万画素ある。
この画素で潰れて読めないとか、ありえなさ過ぎる…。

カメラの設定かもと思ったが、用意されているカメラの設定APIには大したものがない。

https://developers.google.com/android/reference/com/google/android/gms/vision/CameraSource

プレビュー解像度は、1920x1080にしているし、オートフォーカスも trueだ。
後はマクロ撮影があればいいのだが、カメラが対応していても、APIがない。

バーコード関係なく、nuuX4標準でついてるカメラアプリでも、フロントカメラは同じように潰れているので、もはや設定ではどうしようもないのかもしれないが、
そうすると、このGooglePlayサービスのバーコード読み取りAPIは、1300万画素程度ないと、使えないということか?

読み取れないって人がたまにいるけど、もしかしたら、この問題と同じなのかもしれない…。


2017年7月7日金曜日

AndroidStudioでプロジェクト

少しXenkoを触っていたけど、再び、AndroidStudioに戻ってきた。
Ver3がリリースされたって聞いたからなんだけど、プレビュー版で、安定版ではなかったので、Ver2.3.3にアップデートしただけにしておいた。

docomo withで、Android7の機種を手に入れたので、最新の機能も試してみたい。
まあ、6すら満足に触ってないけどね…。

というわけで、またフレームワークのところからいじりはじめた。
2D仕様になっていたのを OpenGL仕様に作り変えている、その続きから。

テストアプリを作るところまですら行ってない。

Activity切り替えとか、そんなに必要としていない機能も作ってるからなぁ。
まあ、カメラアプリを作るには必須なんだけど。

Androidでまともなアプリを作ろうと思ったら、Activityにstatic変数を使わないのは当然として、メンバー変数もなるべく使っちゃダメっての読んで、極限まで減らしたところ。

さて、何ゲー作るかな。