开源Google Vision API CameraSource类是否已过期?

时间:2016-09-30 17:42:44

标签: android android-camera google-play-services android-vision google-vision

SO Threadpm0733464中,这样说:

  

我们开源了CameraSource类,它也有自动聚焦方法。这个允许你设置一个特定的焦点模式,而不是"连续视频"官方API默认为的模式:

哪个好。但似乎Google Vision API已经移动,而开放源代码版本却没有。官方API现在有一种新型处理器叫做:FocusingProcessor - 它允许探测器只响应OnFocus事件。

 barcodeDetector = new BarcodeDetector.Builder(this)
            .setBarcodeFormats(Barcode.QR_CODE | Barcode.PDF417)
            .build();
 barcodeDetector.setProcessor(new BarcodeFocusingProcessor(
            barcodeDetector,
            new NullTracker()));
 CameraSource.Builder builder = new CameraSource.Builder(getApplicationContext(), barcodeDetector)
            .setFacing(CameraSource.CAMERA_FACING_BACK)
            .setRequestedPreviewSize(1600, 1024)
            .setAutoFocusEnabled(true)
            .setRequestedFps(24.0f);
    cameraSource = builder.build();

在我的实验中,这个"发现"条形码比使用示例在Official Google Vision API Samples

中显示的处理器快得多

我错过了什么地方吗?或者Google.Vision库中的CameraSource与他们在开源中显示的不同?

[编辑] 根据pm0733464的要求共享代码:

为了记录,我开始使用视觉api Demo的分支,允许automatically detecting barcode

我的代码进行了一些简单的更改。首先,我将PDF417添加到可扫描的条形码中。然后我将处理器设置为自动对焦。我将跟踪器变成了一个nullTracker,因为我不需要图形显示,我希望这会加速一些事情

BarcodeCaptureActivity 我更改了 createCameraSource ,它定义了条形码检测器,如下所示:

  BarcodeDetector barcodeDetector =
                new BarcodeDetector.Builder(context)
                        .setBarcodeFormats(Barcode.PDF417)
                        .build();


        barcodeDetector.setProcessor(new MyCameraFocusingProcessor(
                barcodeDetector,
                new NullTracker()));


// Creates and starts the camera.  Note that this uses a higher resolution in comparison
        // to other detection examples to enable the barcode detector to detect small barcodes
        // at long distances.

        CameraSource.Builder builder = new CameraSource.Builder(getApplicationContext(), barcodeDetector)
                .setFacing(CameraSource.CAMERA_FACING_BACK)
                .setRequestedPreviewSize(1600, 1024)
                .setRequestedFps(24.0f);

        // make sure that auto focus is an available option
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH)
        {
            builder = builder.setFocusMode(
                    autoFocus ? Camera.Parameters.FOCUS_MODE_CONTINUOUS_PICTURE : null);
        }

        mCameraSource = builder
                .setFlashMode(useFlash ? Camera.Parameters.FLASH_MODE_TORCH : null)
                .build();
    }

我的FocusProcessor(在同一个类中)看起来像这样:

private class MyCameraFocusingProcessor implements Detector.Processor<Barcode>
    {
        public MyCameraFocusingProcessor(BarcodeDetector barcodeDetector, NullTracker emptyTracker)
        {

        }

        @Override
        public void release()
        {

        }

        @Override
        public void receiveDetections(Detector.Detections<Barcode> detections)
        {
            //  boolean chk = detections.detectorIsOperational();
            int sizeCheck = detections.getDetectedItems().size();
            if (sizeCheck > 0)
            {
                SparseArray<Barcode> codes = detections.getDetectedItems();
                for (int i = 0; i < sizeCheck; i++)
                {
                    Barcode barcode = codes.valueAt(i);
                    try
                    {
                        if (barcode.format == Barcode.PDF417)
                        {
                            Intent data = new Intent();
                            data.putExtra(BarcodeObject, barcode);
                            setResult(CommonStatusCodes.SUCCESS, data);
                            finish();
                            break;
                        }
                    }
                    catch (Exception ex)
                    {
                        Log.d("Detect", "Error: " + ex.getMessage());
                    }
                }
            }
            return;
        }
    }

    private class NullTracker
    {

    }

1 个答案:

答案 0 :(得分:0)

官方版和开源版CameraSource都是最新版本,尽管某些选项略有不同。

FocusingProcessor并不是新的,因为它包含在API的初始启动中。这实际上与相机的焦点或OnFocus概念无关。相反,它与检测器选择“聚焦”在特定检测项目上有关。例如,有一个LargestFaceFocusingProcessor - FocusingProcessor的子类 - 它最初检测视图中的最大面部,并且只有在可见时才会跟踪面部。

两个版本的CameraSource现在都支持自动对焦,尽管每个版本的具体细节都有所不同。如果官方条形码示例应用程序较慢,则可能表示该应用程序未启用自动对焦。