Sony Smarteyeglass使用jpeg流检测QR码

时间:2017-02-28 15:51:16

标签: sony sony-smarteyeglass

我正在尝试使用sony smarteyeglass检测qr代码

当我使用CAMERA_MODE_STILL时,我可以拍摄照片并检测其中的条形码工作正常!

现在我将录制模式更改为CAMERA_MODE_JPG_STREAM_LOW_RATE

我必须将分辨率设置为CAMERA_RESOLUTION_QVGA否则setCameraMode投掷“分辨率具有非法价值”,因为SmartEyeglassControlUtils流支持仅包含QVGA

private static final List<Integer> CAMERA_JPEG_STREAM_SUPPORT_RESOLUTION = Arrays.asList(
            SmartEyeglassControl.Intents.CAMERA_RESOLUTION_QVGA
);

我已经尝试过修改它,但是相机不再工作了。

那么如何在不必实际拍照并将其发送到zxing库的情况下检测QR码呢?有没有办法提高质量,仍然使用流?或者我是否必须使用Stillmode并实际捕获图片以便我可以使用3M分辨率?

1 个答案:

答案 0 :(得分:0)

很抱歉迟到的回复。您应该能够使用CAMERA_MODE_JPG_STREAM_LOW_RATE选项并逐帧捕获所需的图像并将它们发送到zing。如果从SampleCameraControl示例开始并打开“SampleCameraControl.java”文件,则可以在SampleCameraControl构造函数中修改侦听器,如下所示:

    // Initialize listener for camera events
    SmartEyeglassEventListener listener = new SmartEyeglassEventListener() {
        // When camera operation has succeeded
        // handle result according to current recording mode
        @Override
        public void onCameraReceived(final CameraEvent event) {

            /*
             * Turn over full control of the streamed video to the barcode scanner library
             * */
          byte[] bitmapdata = event.getData();

          //Convert the camera data to a bitmap
          Bitmap originalBitmap = BitmapFactory.decodeByteArray(bitmapdata, 0, bitmapdata.length);

          //Create a blank bitmap canvas so we can draw text
          Bitmap mainBitMap = Bitmap.createBitmap(WIDTH, HEIGHT, Bitmap.Config.ARGB_8888);      
          Canvas mainCanvas = new Canvas(mainBitMap);

          //Add the main bitmap to the new blank canvas
          mainCanvas.drawBitmap(originalBitmap, 0, 0, new Paint());

          mainCanvas = drawScanText(mainCanvas, "Scan:null");

          //Scan the barcode with Zxing
          scanBarcodeTask = new scanBarcodeTask().execute(originalBitmap);

        }
        // Called when camera operation has failed
        // We just log the error
        @Override
        public void onCameraErrorReceived(final int error) {
            Log.d(Constants.LOG_TAG, "onCameraErrorReceived: " + error);
        }
        // When camera is set to record image to a file,
        // log the operation and clean up
        @Override
        public void onCameraReceivedFile(final String filePath) {
            Log.d(Constants.LOG_TAG, "onCameraReceivedFile: " + filePath);
            mode.closeCamera(utils);
        }
    };