Come si fa la lettura programmatica di un codice a barre che viene catturato utilizzando una fotocamera del cellulare? Ad esempio, come farlo usando iPhone o Android o Java ME? Abbiamo bisogno di hardware separato per leggere il codice a barre o possiamo manipolare le immagini?Lettura di codici a barre utilizzando la foto scattata con la fotocamera del telefono cellulare
risposta
Google ha reso questo INCREDIBILMENTE semplice con le loro librerie Zebra Crossing. Essi hanno il supporto per fare la scansione attraverso le immagini sulle seguenti piattaforme:
- J2SE
- Android
e altri hanno portato a:
- J2ME
- CSharp
- CPP
- Rim
- iPhone
- Bug
Come un altro poster già accennato, su Android si potrebbe anche usare un Intent per chiamare Barcode Reader con qualcosa del tipo:
public Button.OnClickListener mScan = new Button.OnClickListener() {
public void onClick(View v) {
Intent intent = new Intent("com.google.zxing.client.android.SCAN");
intent.putExtra("SCAN_MODE", "ONE_D_MODE");
startActivityForResult(intent, 0);
}
};
public void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == 0) {
if (resultCode == RESULT_OK) {
String contents = intent.getStringExtra("SCAN_RESULT");
String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
// Handle successful scan
} else if (resultCode == RESULT_CANCELED) {
// Handle cancel
}
}
}
Ovviamente è possibile leggere il codice a barre da un'immagine di esso. Probabilmente devi pensare a problemi come
- Orientamento; forse la foto non è dritta, quindi le barre non sono verticali. Inoltre, potrebbe essere capovolto ...
- Focus; cosa succede se il colpo è sfocato? Probabilmente c'è un limite in cui diventa impossibile interpretarlo in modo sicuro.
- Ritagliata; cosa succede se l'inquadratura è cattiva, quindi l'intero codice non è nemmeno nell'immagine?
Ci sono molti progetti e prodotti esistenti che risolvono questo ... Here is one, per esempio. Alcune soluzioni sembrano non essere molto sensibili a punti come quelli sopra, ma affermano di essere in grado di trovare e riconoscere i codici a barre indipendentemente dall'orientamento e dalla posizione nell'immagine, per esempio.
Per Android è molto semplice. Basta usare il servizio fornito dall'app Barcode Scanner (dipendenza). Quindi l'applicazione Barcode Scanner gestirà tutta la parte di scansione e ti restituirà semplicemente il codice.
Penso che soluzioni simili siano disponibili per altre piattaforme, ma in Android è ancora più semplice grazie alla sua architettura Intent.
I codici a barre possono essere letti mediante analisi prese dalle telecamere del telefono.
Una ben nota complicazione è che le telecamere a fuoco fisso (come sui vecchi iPhone 2G/3G e alcuni Androidi) non possono prendere la fotografia istantanea a breve distanza. Per contrastare questo, si devono usare speciali algoritmi di "deconvoluzione" e l'ultima volta che ho controllato questo non faceva parte del Zebra Crossing.
Alcuni hanno implementato soluzioni: sono a conoscenza delle seguenti app per iPhone che possono leggere UPC con telecamera a fuoco fisso: pic2shop (Benoit Maison/Vision Smarts), RedLaser (Occipital) e ShopSavvy (Big in Japan) - check li fuori e penso che tutti abbiano SDK disponibili per terze parti interessate.
Suggerirei di scegliere una soluzione che decodifica anche i codici a barre in immagini sfocate. Esistono molti telefoni Android di fascia bassa che dispongono solo di telecamere a fuoco fisso e che richiedono soluzioni di elaborazione delle immagini più sofisticate rispetto alle soglie binarie offerte dalle soluzioni software sopra elencate. Esempi di tali soluzioni più avanzate includono redlaser o Scandit barcode scanner SDK.
Scandit SDK è molto facile da integrare e viene fornito con una versione community gratuita. C'è anche un product API che rende semplice convertire i codici a barre in nomi di prodotti.
Disclaimer: Sono uno dei co-fondatori di Scandit.
Solo per un aggiornamento di tutti i neofiti in cerca di una risposta a questa domanda, Google offre ora Barcode Detection Apis tramite Google Play Services per semplificare la scansione del codice a barre utilizzando la fotocamera del telefono. Non è più necessario dipendere da Apis di terze parti.
il problema con ZXing - l'ultima volta che ho controllato - era che non funzionava con la telecamera a fuoco fisso, che la maggior parte dei telefoni cellulari (economici || iPhone 2G) ha –