2017-02-28 70 views
0

我试图检测与QR码索尼smarteyeglass索尼Smarteyeglass检测QR码JPEG视频流

当我使用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 
); 

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

那么如何检测QR码而不必实际捕捉图片并将其发送到zxing库?有没有办法提高质量,仍然使用流?还是必须使用Stillmode并实际拍摄照片才能使用3M分辨率?

回答

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); 
     } 
    };