2015-08-15 7 views
24

मैं नए Google बारकोड एपीआई से नमूना कोड के साथ खेल रहा हूं। यह एक बारकोड की लाइव कैमरा फ़ीड पर एक बॉक्स और बारकोड मान ओवरले करता है। (इसके अलावा चेहरे)Google Play सेवाओं में नए बारकोड API का उपयोग करके बारकोड मान कैप्चर कैसे करें?

मैं नहीं बता सकता कि मेरे ऐप में बारकोड मान कैसे वापस किया जाए। ए) कैसे पता लगाना है कि एक पहचान घटना कब हुई और बी) मेरे ऐप के अन्य हिस्सों में उपयोग के लिए ravValue तक कैसे पहुंचे। क्या कोई इसके लिए सहायता कर सकता है?

https://developers.google.com/vision/multi-tracker-tutorial

https://github.com/googlesamples/android-vision

अद्यतन: बिल्डिंग @ pm0733464 के जवाब पर, मुझे लगता है कि मैं गतिविधि में यहां पहुंच सकता है ट्रैकर वर्ग के लिए एक कॉलबैक इंटरफ़ेस (onFound कहा जाता है) जोड़ा गया। गूगल बहु ट्रैकर नमूना अनुकूल:

GraphicTracker:

class GraphicTracker<T> extends Tracker<T> { 
    private GraphicOverlay mOverlay; 
    private TrackedGraphic<T> mGraphic; 
    private Callback mCallback; 

    GraphicTracker(GraphicOverlay overlay, TrackedGraphic<T> graphic, Callback callback) { 
     mOverlay = overlay; 
     mGraphic = graphic; 
     mCallback = callback; 
    } 

    public interface Callback { 
     void onFound(String barcodeValue); 
    } 

    @Override 
    public void onUpdate(Detector.Detections<T> detectionResults, T item) { 
     mCallback.onFound(((Barcode) item).rawValue); 
     mOverlay.add(mGraphic); 
     mGraphic.updateItem(item); 
    } 

BarcodeTrackerFactory:

class BarcodeTrackerFactory implements MultiProcessor.Factory<Barcode> { 
    private GraphicOverlay mGraphicOverlay; 
    private GraphicTracker.Callback mCallback; 

    BarcodeTrackerFactory(GraphicOverlay graphicOverlay, GraphicTracker.Callback callback) { 
     mGraphicOverlay = graphicOverlay; 
     mCallback = callback; 
    } 

    @Override 
    public Tracker<Barcode> create(Barcode barcode) { 
     BarcodeGraphic graphic = new BarcodeGraphic(mGraphicOverlay); 
     return new GraphicTracker<>(mGraphicOverlay, graphic, mCallback); 
    } 
} 

मुख्य गतिविधि:

BarcodeDetector barcodeDetector = new BarcodeDetector.Builder(context).build(); 
BarcodeTrackerFactory barcodeFactory = new BarcodeTrackerFactory(mGraphicOverlay, new GraphicTracker.Callback() { 
    @Override 
    public void onFound(String barcodeValue) { 
     Log.d(TAG, "Barcode in Multitracker = " + barcodeValue); 
    } 
}); 
MultiProcessor<Barcode> barcodeMultiProcessor = new MultiProcessor.Builder<>(barcodeFactory).build(); 
barcodeDetector.setProcessor(barcodeMultiProcessor); 
+0

मुझे आपकी राय में अभी तक रूचि है। एपीआई के साथ आपके अनुभव क्या हैं: बारकोड को पहचानना कितना अच्छा है? इसके अलावा जब यह थोड़ा सा अंधेरा है? क्या यह तेज़ है? तो कुल मिलाकर: क्या यह ज़िक्सिंग से बेहतर प्रदर्शन कर रहा है? और आखिरकार, क्या आप एक पूरा उदाहरण प्रदान कर सकते हैं? – Dante

+0

गिटहब पर एक नया बारकोड रीडर नमूना ऐप है: https://github.com/googlesamples/android-vision/tree/master/visionSamples/barcode-reader – pm0733464

+1

@Dante आपके द्वारा 'कॉलबैक' के साथ साझा किया गया कोड बहुत उपयोगी था मुझे। आपका बहुत बहुत धन्यवाद! –

उत्तर

35

सीधे, बारकोड डिटेक्टर

एक दृष्टिकोण एक बिटमैप पर सीधे बारकोड डिटेक्टर का उपयोग करने के लिए है का उपयोग करते हुए इस तरह:

BarcodeDetector barcodeDetector = new BarcodeDetector.Builder(context).build(); 
Frame frame = new Frame.Builder().setBitmap(bitmap).build(); 
SparseArray<Barcode> barcodes = barcodeDetector.detect(frame); 
if (barcodes.size() > 0) { 
    // Access detected barcode values 
} 

प्राप्त सूचनाओं

एक और दृष्टिकोण स्थापित करने के लिए है कैमरा पूर्वावलोकन वीडियो से पता लगाए गए बारकोड प्राप्त करने के लिए एक पाइपलाइन संरचना (गिटहब पर MultiTracker example देखें)। आप इस तरह, पता चला बारकोड प्राप्त करने के लिए अपने स्वयं के ट्रैकर निर्धारित करेंगे:

class BarcodeTrackerFactory implements MultiProcessor.Factory<Barcode> { 
    @Override 
    public Tracker<Barcode> create(Barcode barcode) { 
     return new MyBarcodeTracker(); 
    } 
} 

class MyBarcodeTracker extends Tracker<Barcode> { 
    @Override 
    public void onUpdate(Detector.Detections<Barcode> detectionResults, Barcode barcode) { 
     // Access detected barcode values 
    } 
} 

इस पर नजर का एक नया उदाहरण onUpdate विधि का पता चला बारकोड मूल्य प्राप्त करने के साथ, प्रत्येक बारकोड के लिए बनाया जाता है।

फिर आप कैमरा स्रोत लगातार डिटेक्टर में छवियों को स्ट्रीम करने के लिए की स्थापना की, अपने पर नजर में परिणाम प्राप्त:

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

mCameraSource = new CameraSource.Builder(context, barcodeDetector) 
    .setFacing(CameraSource.CAMERA_FACING_BACK) 
    .setRequestedPreviewSize(1600, 1024) 
    .build(); 

बाद में, आप या तो सीधे कैमरे स्रोत शुरू करने या साथ संयोजन के रूप में इसका इस्तेमाल होता है एक दृश्य जो कैमरा पूर्वावलोकन दिखाता है (अधिक जानकारी के लिए MultiTracker example देखें)।

+0

आपको बहुत धन्यवाद - ट्रैकर के अद्यतन का उपयोग करके ऐसा लगता है कि यह कॉलबैक है जिसे मैं ढूंढ रहा हूं। कारखानों और बिल्डर्स के साथ उदाहरण में कक्षाओं की स्थापना के तरीके के साथ, मुझे ट्रैकर वर्ग के अंदर देखने का एहसास नहीं था। – Scott

+0

एफवाईआई, आपके उत्तर का उपयोग करके मैंने ट्रैकर क्लास में एक कॉलबैक इंटरफेस जोड़ा ताकि मैं मुख्य गतिविधि से बारकोड तक पहुंच सकूं। मैंने इस समाधान को शामिल करने के लिए अपना प्रश्न अपडेट किया। अगर मैंने कुछ अनदेखा किया है तो कृपया मुझे सही करने के लिए स्वतंत्र महसूस करें। – Scott

+1

अच्छा लग रहा है। यदि आपको केवल अपने ऐप (और चेहरे नहीं) में बारकोड को संभालने की आवश्यकता है, तो सामान्य होने के बजाय ट्रैकर से प्राप्त करने के लिए ग्राफ़िकट्रैकर को बदलकर इसे सरल बनाया जा सकता है। इस तरह, आपको आइटम को अद्यतन (बारकोड) में अद्यतन करने की आवश्यकता नहीं होगी। – pm0733464

संबंधित मुद्दे