2017-02-08 9 views
6

Я пытаюсь отключить множественное обнаружение Barcode. Как отключить MultiProcessor с помощью Google Vision API, я не мог найти решение с официального сайта hereКак отключить множественное обнаружение штрих-кода Android Vision API

Я скачал образец из here

кодекса

BarcodeDetector barcodeDetector = new BarcodeDetector.Builder(context).build(); 
    BarcodeTrackerFactory barcodeFactory = new BarcodeTrackerFactory(mGraphicOverlay); 
    barcodeDetector.setProcessor(
      new MultiProcessor.Builder<>(barcodeFactory).build()); 

Даже если удалить ниже линии, я не может обнаружить вообще.

barcodeDetector.setProcessor(
     new MultiProcessor.Builder<>(barcodeFactory).build()); 
+1

Я думаю, что Вы могли бы хотеть это, http://stackoverflow.com/questions/32999813/preview-size-for-barcode-scanner- from-vision-api/34156158 # 34156158 –

+0

Нет, пожалуйста, прочитайте, что я прошу. –

ответ

0

Я решил этот обнаружение множественного Barcode в то же время, исследуя образец кода и некоторые логические реализации.

Решение является: остановка mPreview и начать снова после 1 секунды delay

Создание обратного вызова слушателя

public interface BarCodeDetectListener { 
void onBarCodeDetect(Barcode barcode); 
} 

BarcodeGraphicTracker

Когда устройство обнаружено Barcode внутри onNewItem() кал lback к Barcodefragment

class BarcodeGraphicTracker extends Tracker<Barcode> { 
... 
... 
private BarcodeGraphic mGraphic; 
private BarCodeDetectListener barCodeDetectListener; 
... 

/** 
    * Start tracking the detected item instance within the item overlay. 
    */ 
@Override 
public void onNewItem(int id, Barcode item) { 
    mGraphic.setId(id); 
    barCodeDetectListener.onBarCodeDetect(item); 
} 
} 

BarCodeFragment

@SuppressLint("NewApi") 
public class SurveyBarCodeFragment extends Fragment implements BarCodeDetectListener { 
    ... 
    private CameraSourcePreview mPreview; 
    private CameraSource mCameraSource; 
    ... 



@Override 
public void onBarCodeDetect(final Barcode barcode) { 
    new Handler().post(new Runnable() { 
     @Override 
     public void run() { 
      mPreview.stop(); //Stop preview 
      new Handler().postDelayed(new Runnable() { 
       @Override 
       public void run() { 
        try { 
         if (ActivityCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) { 
          // TODO: Consider calling 
          // ActivityCompat#requestPermissions 
          // here to request the missing permissions, and then overriding 
          // public void onRequestPermissionsResult(int requestCode, String[] permissions, 
          //           int[] grantResults) 
          // to handle the case where the user grants the permission. See the documentation 
          // for ActivityCompat#requestPermissions for more details. 
          return; 
         } 
         //Start preview after 1s delay 
         mPreview.start(mCameraSource); 
        } catch (IOException e) { 
         e.printStackTrace(); 
        } 
       } 
      }, 1000); 
     } 
    }); 

} 
} 
1

Обновите BarcodeGraphicTracker и реализовать onNewItem функции, как показано ниже:

public class BarcodeGraphicTracker extends Tracker<Barcode> { 

     private static final String TAG = "Barcode-reader"; 
     @Override 
     public void onNewItem(int id, final Barcode item) { 
      Log.d(TAG, "Detected!!"+ item.toString()); 
       Runnable r=new Runnable() 
       { 
        public void run() 
        { 
         //write your code here 
         } 
        } 
       }; 
       getActivity().runOnUiThread(r); 
     } 

     @Override 
     public void onUpdate(Detector.Detections<Barcode> detectionResults, Barcode item) { 

     } 
    } 

и BarcodeTrackerFactory как:

public class BarcodeTrackerFactory implements MultiProcessor.Factory<Barcode> { 

     @Override 
     public Tracker<Barcode> create(Barcode barcode) { 
      return new BarcodeGraphicTracker(); 
     } 

    } 
+0

Как насчет 'GraphicOverlay' ?. Я думаю, что это не сработает без 'GraphicOverlay' –

+0

Сохраните весь код так, как он был в примере кода. Просто вырежьте код из onUpdate и вставьте его в onNewItem, а затем попробуйте. – nnn

+0

Не обнаруживает ничего !! –