वर्तमान API स्कैन क्षेत्र को सीमित करने का कोई तरीका प्रदान नहीं करता है। हालांकि, आप या तो डिटेक्टर से बाहर आने वाले परिणामों को फ़िल्टर कर सकते हैं या डिटेक्टर में पारित छवि को फसल कर सकते हैं।
फ़िल्टर परिणाम दृष्टिकोण
इस दृष्टिकोण के साथ, बारकोड डिटेक्टर अभी भी पूर्ण छवि क्षेत्र स्कैन होगा, लेकिन पता चला लक्ष्य क्षेत्र के बाहर से बारकोड नजरअंदाज कर दिया जाएगा। ऐसा करने का एक तरीका एक "फोकस करने वाला प्रोसेसर" लागू करना है जो डिटेक्टर से परिणाम प्राप्त करता है और केवल आपके संबंधित ट्रैकर को अधिकांश बारकोड में गुजरता है। उदाहरण के लिए:
public class CentralBarcodeFocusingProcessor extends FocusingProcessor<Barcode> {
public CentralBarcodeFocusingProcessor(Detector<Barcode> detector, Tracker<Barcode> tracker) {
super(detector, tracker);
}
@Override
public int selectFocus(Detections<Barcode> detections) {
SparseArray<Barcode> barcodes = detections.getDetectedItems();
for (int i = 0; i < barcodes.size(); ++i) {
int id = barcodes.keyAt(i);
if (/* barcode in central region */) {
return id;
}
}
return -1;
}
}
फिर आप इस तरह डिटेक्टर के साथ इस प्रोसेसर सहयोगी चाहते हैं:
BarcodeDetector barcodeDetector = new BarcodeDetector.Builder(context).build();
barcodeDetector.setProcessor(
new CentralBarcodeFocusingProcessor(myTracker));
फसल छवियाँ दृष्टिकोण
आप छवि अपने आप को काटने के लिए पहली आवश्यकता होगी, डिटेक्टर को बुलाए जाने से पहले। यह डिटेक्टर सबक्लास को कार्यान्वित करके किया जा सकता है जो बारकोड डिटेक्टर को लपेटता है, प्राप्त छवियों को फसल करता है, और फसल वाली छवियों के साथ बारकोड स्कैनर को कॉल करता है।
उदाहरण के लिए, आप रोकना और इस तरह चित्र काटने के लिए एक डिटेक्टर बनाने चाहते हैं:
class MyDetector extends Detector<Barcode> {
private Detector<Barcode> mDelegate;
MyDetector(Detector<Barcode> delegate) {
mDelegate = delegate;
}
public SparseArray<Barcode> detect(Frame frame) {
// *** crop the frame here
return mDelegate.detect(croppedFrame);
}
public boolean isOperational() {
return mDelegate.isOperational();
}
public boolean setFocus(int id) {
return mDelegate.setFocus(id);
}
}
आप इस एक के साथ बारकोड डिटेक्टर लपेट चाहते हैं, कैमरा स्रोत और बारकोड के बीच में डालने डिटेक्टर:
BarcodeDetector barcodeDetector = new BarcodeDetector.Builder(context)
.build();
MyDetector myDetector = new MyDetector(barcodeDetector);
myDetector.setProcessor(/* include your processor here */);
mCameraSource = new CameraSource.Builder(context, myDetector)
.build();
क्या आप कृपया अपना कोड साझा कर सकते हैं कि आप अपने पारदर्शी ओवरले का उपयोग कैसे करते हैं? क्या आप एक आयताकार वर्ग प्रदर्शित करते हैं? यदि हां, तो आप यह कैसे करते हैं ... मैं इसे समझने के लिए दीवार के खिलाफ अपने सिर को टक्कर लगी हूं ... अगर आप इससे मेरी मदद कर सकते हैं तो मैं बहुत सराहना करता हूं। – Vincy