2024.11.14
いまさらNode.jsを知ろう~環境構築も~
2019.10.30
プログラミングAndroidのQRコードリーダーSDKはzxingよりOpenCV4が精度いい
坂東です。
既存アプリにQRコードリーダー機能を追加するにあたり定番のzxingを使ったんですけれど、
QRコードの読取、生成をする [Android]
https://qiita.com/hoshiume11/items/0f496fe80df84875c132
妙に読み取り精度が悪いんです。
カメラに近づきすぎても離れすぎても駄目で、30cm〜40cmぐらいの距離じゃないと認識しない。
いままでzxing使ってて別に支障なかったけどなあ、と思って気づいた今回は使うのはフロントカメラ。
いままではリアのメインカメラを使うのばかりでした。
リアカメラはまあメインなのでオートフォーカスがあったり画質が良かったりレンズが3つあったりします。
フロントカメラは自撮り用途なので機能的に大きく劣りオートフォーカスもなかったりする機種が多いです。
zxingはどうもオートフォーカス前提の実装で距離にシビアなんじゃないかなと。
zxingに食わせる前に画像加工しなきゃだめか。
OpenCVいれるかー、と思ったら最近のOpenCVにはQRコード読み取り機能がついてるんですね。
cv::QRCodeDetector Class Reference
https://docs.opencv.org/4.0.0/de/dc3/classcv_1_1QRCodeDetector.html
さっそく実装。すぐできた。
カメラで読ませるなら、だいたいこんなかんじ。
override fun onCameraFrame(inputFrame: CameraBridgeViewBase.CvCameraViewFrame): Mat { val detector = QRCodeDetector() val data = detector?.detectAndDecode (inputFrame.rgba()) if (data != null && data?.length > 0) { runOnUiThread { Toast.makeText(getApplicationContext(), data, Toast.LENGTH_LONG).show() } } return inputFrame.rgba() }
認識精度は大幅に向上しました。
でもOpenCVライブラリってでかいからapkが50MBぐらい増える。
まあ内部用アプリなのでいいけど公開するなら考えちゃいますね。
こちらで色々説明してくれてます。
QRコード検出APIの解説
https://qiita.com/tomoaki_teshima/items/f136e51fa1da6927471b
おわり。
【記事への感想募集中!】
記事への感想・ご意見がありましたら、ぜひフォームからご投稿ください!【テクノデジタルではエンジニア/デザイナーを積極採用中です!】
下記項目に1つでも当てはまる方は是非、詳細ページへ!Qangaroo(カンガルー)
【テクノデジタルのインフラサービス】
当社では、多数のサービスの開発実績を活かし、
アプリケーションのパフォーマンスを最大限に引き出すインフラ設計・構築を行います。
AWSなどへのクラウド移行、既存インフラの監視・運用保守も承りますので、ぜひご相談ください。
詳細は下記ページをご覧ください。
最近の記事
タグ検索