4

カメラで複数の QR コードをリアルタイムでスキャンし、認識された QR コードの上に追加情報をディスプレイに表示する修士論文用に、Android 3.1 を搭載した Motorola Xoom タブレット用のアプリケーションを作成します。

認識は ZXing Android アプリ ( http://code.google.com/p/zxing/ ) で行われます。基本的に、ZXing アプリのコードを変更して、複数の QR コードを同時に認識できるようにしました。元のアプリのようにスキャンが成功した後にフリーズすることなく、このスキャンを継続的に実行します。したがって、私のアプリは基本的に、複数の QR コードを連続してスキャンする ZXing アプリです。

しかし、私は問題に直面しています:

  1. ZXing アプリは、ある種の連続オートフォーカスを行います。オートフォーカスを開始し、終了すると自動的にオートフォーカスを再開します。しかし、この方法では、カメラの明るさの設定が明るすぎて、画像がほぼ完全に白くなり、カメラが QR コードを認識できなくなります。オートフォーカスを無効にすると問題は解決しますが、そうしないと QR コードの認識が特定の距離でのみ可能になるため、オートフォーカスが必要です。

    • カメラの明るさ設定を変更するにはどうすればよいですか?
    • 誰かがオートフォーカスの別の可能性を知っていますか?
4

4 に答える 4

5

Samsung Galaxy Grand 2 (Android 4) でも同じ問題が発生し、1 つの解決策が見つかりました。カメラを起動する前にオートフォーカス機能を無効にします。1〜2秒後に有効にします。いくつかのアプローチを試し、オートフォーカス機能を定期的に切り替えることにしました。これを実装するために、util クラス - FocusHandler を作成しました。

public class FocusHandler implements Runnable{

    private final int FOCUS_OFF_TIME = 2000;
    private final int FOCUS_ON_TIME = 20000;
    private boolean flag = false;
    private boolean state = false;
    private Handler handler;
    private WeakReference<ZXingScannerView> scannerView;

    public FocusHandler(Handler handler, ZXingScannerView scannerView){
        this.handler = handler;
        this.flag = false;
        this.scannerView = new WeakReference<>(scannerView);
    }

    public void start(){
        state = true;
        this.handler.post(this);
    }

    public void stop(){
        state = false;
        scannerView.clear();
    }

    @Override
    public void run() {
        if (!state || this.scannerView.get() == null){
            return;
        }

        int time;
        if (!flag){
            this.scannerView.get().setAutoFocus(flag);
            time = FOCUS_OFF_TIME;
        }
        else{
            this.scannerView.get().setAutoFocus(flag);
            time = FOCUS_ON_TIME;
        }

        flag = !flag;
        handler.postDelayed(this, time);
    }
}

/*************** アクティビティ ******************/

    private ZXingScannerView scannerView;
    private FocusHandler focusHandler;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_scanner);
        scannerView = new ZXingScannerView(this);
        focusHandler = new FocusHandler(new Handler(), scannerView);
        frameLayout.addView(scannerView);
    }

    @Override
    protected void onResume() {
        super.onResume();
        scannerView.setResultHandler(this);
        scannerView.setAutoFocus(false);
        scannerView.startCamera();
        focusHandler.start();
    }

    @Override
    public void onPause() {
        super.onPause();
        scannerView.stopCamera();
        focusHandler.stop();
    }
于 2016-09-21T14:30:55.863 に答える
0

一部のデバイスではそうです (私にとっては Android 3.0 デバイスでも発生しました: Samsung Galaxy Tab 10.1)。オートフォーカスの呼び出しが成功した後も、自動露出はロックされたままです。別の光度領域に向けて別のフォーカスを行うと、自動露出が再び作動しますが、フォーカスが完了した後もロックされたままになります。これを修正する方法はまだわかりません。

于 2012-05-16T12:41:58.703 に答える