Как обнаружить и извлечь QR-код из рамки предварительного просмотра, используя OpenCV в Android? - PullRequest
0 голосов
/ 12 февраля 2012

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

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

    // 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, приложение закрывается с принудительным закрытием. Что мне с этим делать? Кто-нибудь, пожалуйста, помогите

1 Ответ

0 голосов
/ 12 февраля 2012

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

...