1

В этом SO Thread, pm0733464, говорит следующее:Является ли OpenSource поставщиком API CameraSource класса Out-Dated?

we open sourced the CameraSource class, which has an auto focus method as well. This one allows you to set a specific focus mode as opposed to the "continuous video" mode that the official API defaults to:

Который был велик. Но похоже, что API Google Vision перешел, и в открытой версии Sourced нет. У официального 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

ли я что-то отсутствует где-нибудь? Или это CameraSource в библиотеках Google.Vision не тот, который они показывают в открытом исходном коде?

[EDIT] Sharing код по просьбе pm0733464:

Для записи, я начал с развилки зрения апи 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 
    { 

    } 

ответ

0

Оба официальных и открытых источников уегз ion CameraSource являются текущими, хотя в некоторых вариантах есть небольшие различия.

FocusingProcessor не является новым, поскольку он был включен в первоначальный запуск API. На самом деле это совсем не связано с концепцией фокусировки камеры или OnFocus. Вместо этого он связан с выбором детектора, чтобы «сосредоточиться» на определенном обнаруженном элементе. Например, есть LargestFaceFocusingProcessor - подкласс FocusingProcessor - который изначально обнаруживает наибольшее лицо в поле зрения и только дорожки, которые смотрят до тех пор, пока они видны.

Обе версии CameraSource теперь поддерживают автофокус, хотя специфика того, как это указано в каждом, немного расходится. Если пример примерного примера штрих-кода медленнее, это, вероятно, указывает на то, что автофокус не был включен в этом приложении.

+0

Спасибо за ответ. Есть ли план слияния двух версий? Или fork постоянный, и версия с открытым исходным кодом всегда будет немного отключена? Поскольку вы видели и то, и другое, есть ли недостаток в использовании версии OpenSource для профессионального проекта? Я спрашиваю, потому что, похоже, ошибка в официальной версии. Когда я вызываю cameraSource.release(), я получаю сообщение об ошибке: приложение передало NULL-поверхность. Я пробовал несколько решений на SO, но это всегда происходит. Приложение продолжает работать, но я бы хотел более детально контролировать CameraSource, чтобы избежать таких вещей. – MarkJoel60

+0

"официальные версии с открытым исходным кодом CameraSource являются текущими, хотя есть небольшие отличия" @ pm0733464 - я хотел бы понять небольшие отличия.Потому что даже когда я добавляю FocussingProcessor, openSource по-прежнему почти в два раза медленнее, чем «официальная» версия. И оба звонят автофокусом. (И оба выдают ошибку при остановке(), когда вызывается mCamera.setPreviewTexture (null).) – MarkJoel60

+0

Можете ли вы разместить свой код? – pm0733464

Смежные вопросы