Проблема при получении рамки изображения ARCore для подачи сканера QRCode - PullRequest
0 голосов
/ 06 апреля 2020

Я создавал приложение с использованием ARCore, позволяя пользователю сканировать QRCode и визуализировать 3D-объект соответственно. Я пытался использовать AugmentedImage для распознавания QRCode, но он не работает должным образом, потому что различие QR-кодов не очень важно для ARCore распознавать один за другим.

Я хочу интегрировать сканер QRCode (используя ZXing lib или Google Vision API) для ARCore в одном модуле, воспользуйтесь преимуществом фрейма ARCore.

https://github.com/google-ar/sceneform-android-sdk/issues/43 Я пробовал это, но когда я обрабатывал оттенки серого, возникала проблема, что буфер не большой хватит .... Пожалуйста, помогите!

Мой код:

@Override
public void onUpdate(FrameTime frameTime) {
    // delegate this frame to cloud session to process
    if (this.cloudSession != null) {
        this.cloudSession.processFrame(mSceneView.getArFrame());
    }

    Frame frame = mSceneView.getArFrame();
    if (null == frame) return;
    try (Image image = frame.acquireCameraImage()) {
        if (image.getFormat() != ImageFormat.YUV_420_888) {
            throw new IllegalArgumentException(
                    "Expected image in YUV_420_888 format, got format " + image.getFormat());
        }

        ByteBuffer processedImageBytesGrayscale =
                edgeDetector.detect(
                        image.getWidth(),
                        image.getHeight(),
                        image.getPlanes()[0].getRowStride(),
                        image.getPlanes()[0].getBuffer());

        Bitmap bitmap = Bitmap.createBitmap(image.getWidth(), image.getHeight(),
                Bitmap.Config.ARGB_8888);
        processedImageBytesGrayscale.rewind();
        bitmap.copyPixelsFromBuffer(processedImageBytesGrayscale);


        String code = QRCodeHelper.detectQRCode(this, bitmap);
        if (code != null) {
            runOnUiThread(() -> tvScanningResult.setText(code));
        }

    } catch (Exception e) {
        Log.e(TAG, "Exception copying image", e);
    }
}
...