LoginSignup
6
3

More than 3 years have passed since last update.

Android で OpenCV を使って QRコードを検出する

Last updated at Posted at 2019-12-28

AndroidStudio で OpenCV をインポートする
の続きです。

OpenCV の QRコード検出

OpenCV 4.0 から QRコード検出用のAPIが追加された。
今回はこれを試す。

opencv : cv::QRCodeDetector Class Reference

下記を参考にした。

QRコード検出APIの解説

アプリを作成する

まず、下記を読んでください。
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) 画面にタッチした時に解読し、
一度解読したら次からスキップすようにした 。

アプリを実行する

アプリが起動すると、
カメラのアクセス許可を要求する。
opencv53_permission.png

スクリーンショット
QRコードを検出解読した例
opencv53_decode.png

サンプルコードをgithub に公開した。
https://github.com/ohwada/Android_Samples/tree/master/Opencv53

6
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
3