Как обнаружить и извлечь QR-код из кадра предварительного просмотра с помощью OpenCV в Android?

Я использую библиотеку Android Zxing для декодирования QR-кода, который необходимо извлечь в режиме реального времени из кадра предварительного просмотра камеры. Проблема в том, что я должен использовать OpenCV для обнаружения QR-кода, не прося пользователя захватить изображение. Подскажите пожалуйста: Как использовать кадры с камеры? Как использовать OpenCV для обнаружения QR-кода в этих кадрах без захвата изображения? Какой алгоритм использовать для обнаружения QR-кода? Кроме того, я был бы признателен, если бы кто-нибудь мог сказать мне, какие функции, библиотеки использовать, а также некоторые примеры кодов, которые могут мне помочь.

Обновление: это то, что я делаю сейчас: использую кадр предварительного просмотра, декодирую его в массив байтов, а затем передаю его в RGBLuminance
public void surfaceCreated(SurfaceHolderholder) {

    // The Surface has been created, acquire the camera and tell it where
    // to draw.

    camera = Camera.open();
    try {
        camera.setPreviewDisplay(holder);

        camera.setPreviewCallback(new PreviewCallback() {

            public void onPreviewFrame(byte[] data, Camera arg1) {
                boolean shouldCall = (System.currentTimeMillis() - lastTime) > 1000;
                if (shouldCall) {
                    lastTime = System.currentTimeMillis();
                    //slow work


                Camera.Parameters parameters = camera.getParameters();
                Size size = parameters.getPreviewSize();

                Bitmap bMap1 =  BitmapFactory.decodeByteArray(data, 0, data.length);
                TextView textv = (TextView) findViewById(R.id.mytext);
                LuminanceSource source = new RGBLuminanceSource(bMap1); 

                BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
                Reader reader = new MultiFormatReader();

                try {
                     Result result = reader.decode(bitmap);
                     text = result.getText(); 
                        byte[] rawBytes = result.getRawBytes();
                        if (rawBytes!= null)
                            camera.stopPreview();
                        BarcodeFormat format = result.getBarcodeFormat(); 
                        ResultPoint[] points = result.getResultPoints();
                        ParsedResult result2 = parseResult(result);

                        textv.setText(text);



                } catch (NotFoundException e) {
                    camera.startPreview();
                    e.printStackTrace();
                } catch (ChecksumException e) {
                    text = "Checksum Error";
                    camera.stopPreview();
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (FormatException e) {
                    text = "Format Error";
                    camera.stopPreview();
                    // TODO Auto-generated catch block
            e.printStackTrace();


                } 

                lastTime = System.currentTimeMillis();
                }



            }
        });
    } catch (IOException e) {
        camera.startPreview();
    }
}

Но это не работает. Может ли кто-нибудь сказать мне, что я делаю неправильно? Кроме того, я использую тот же экземпляр декодирования в другом фрагменте кода, где я просто делаю снимок и декодирую его. Но каждый раз, когда картинка не содержит QR, приложение вылетает с принудительным закрытием. Что мне с этим делать? Кто-нибудь, пожалуйста, помогите


person Amna Qandeel    schedule 12.02.2012    source источник


Ответы (1)


Не уверен, если вы уже используете zxing, то у вас уже есть код, который декодирует QR-коды из кадров камеры в Android, точка. Что еще вам нужно - зачем возиться с OpenCV?

person Sean Owen    schedule 12.02.2012
comment
это должно быть обнаружено. Я не могу использовать файл изображения. Как я уже упоминал, мне приходится использовать кадры предварительного просмотра камеры, чтобы обнаружить код. Здесь на помощь приходит OpenCV. - person Amna Qandeel; 13.02.2012
comment
Да, и, как я уже сказал, библиотеке не нужно декодировать файл изображения. На самом деле он включает в себя код, который обнаруживает штрих-код из кадра предварительного просмотра камеры (не фотографии). Если вам по какой-то причине нужно использовать OpenCV, хорошо, но если нет, то у вас уже есть готовое решение. - person Sean Owen; 13.02.2012