AndroidStudio で OpenCV をインポートする
の続きです。
OpenCV の QRコード検出
OpenCV 4.0 から QRコード検出用のAPIが追加された。
今回はこれを試す。
opencv : cv::QRCodeDetector Class Reference
下記を参考にした。
アプリを作成する
まず、下記を読んでください。
Android で OpenCV のサンプル camerapreview を試す
CameraActivity を継承して MainActivity.java を作成する。
public class MainActivity extends CameraActivity implements CvCameraViewListener2 {
private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
public void onManagerConnected(int status) {
// QRCodeDetector を準備する
mQRCodeDetector = new QRCodeDetector();
mPoints = new MatOfPoint2f(QUAD);
}
public Mat onCameraFrame(CvCameraViewFrame inputFrame) {
mGray = inputFrame.gray();
// QRコード を検出する
mQRCodeDetector.detect(mGray, mPoints);
// QRコードに枠を表示する
drawQuadrangle();
// QRコードを解読する
String result = mQRCodeDetector.decode(mGray, mPoints);
private void drawQuadrangle() {
// 詳細 略
注意:
アプリを実行すると、
メモリ不足 (Out of Memory) で異常終了する。
カメラからの画像を連続して処理するのがまずいようです。
検出は連続でもいいようですが、解読がダメみたいです。
対策として
(1) AndroidManifest に
android:largeHeap="true" を追加した。
(2) 画面にタッチした時に解読し、
一度解読したら次からスキップすようにした 。
アプリを実行する
サンプルコードをgithub に公開した。
https://github.com/ohwada/Android_Samples/tree/master/Opencv53