Salve, premetto che è da poco che ho iniziato lo sviluppo su android.
Qualcuno sa darmi indicazioni o esempi su come realizzare un programma OCR per android?
Devo scattare una foto e riconoscere un numero/codice.
Visualizzazione stampabile
Salve, premetto che è da poco che ho iniziato lo sviluppo su android.
Qualcuno sa darmi indicazioni o esempi su come realizzare un programma OCR per android?
Devo scattare una foto e riconoscere un numero/codice.
Ciao,
se può interessarti ho utilizzato nella mia app la process library zxing - Multi-format 1D/2D barcode image processing library with clients for Android, Java - Google Project Hosting per il riconoscimento dei barcode ean, funziona egregiamente.
Se usi eclipse, devi creare la folder 'libs' nel tuo progetto, copiare lì il file .jar della libreria zxing, dopodichè implementare nell'app una classe di 'implementazione' simile a questa (esempio):
oltre a queste due: http://code.google.com/p/zxing/sourc...ntegrator.javacodice:package mia.applicazione.test;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.google.zxing.integration.android.IntentIntegrator;
import com.google.zxing.integration.android.IntentResult;
public class AndroidScanner extends Activity {
TextView format=null;
TextView contents=null;
Bundle bundlescanner;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.screen3);
format=(TextView)findViewById(R.id.format);
contents=(TextView)findViewById(R.id.contents);
Button confermaScansione = (Button) findViewById(R.id.pulsanteConfermaBarCode);
confermaScansione.setOnClickListener(new View.OnClickListener() {
public void onClick(View arg0){
Intent intent = new Intent();
intent.putExtra("formato", format.getText().toString());
intent.putExtra("codiceletto", contents.getText().toString());
setResult(RESULT_OK,intent);
finish();
}
});
}
public void doScan(View v) {
IntentIntegrator.initiateScan(this);
}
public void onActivityResult(int request, int result, Intent i) {
IntentResult scan=IntentIntegrator.parseActivityResult(request,result, i);
if (scan!=null) {
format.setText(scan.getFormatName());
contents.setText(scan.getContents());
}
}
@Override
public void onSaveInstanceState(Bundle state) {
state.putString("format", format.getText().toString());
state.putString("contents", contents.getText().toString());
}
@Override
public void onRestoreInstanceState(Bundle state) {
format.setText(state.getString("format"));
contents.setText(state.getString("contents"));
}
}
http://code.google.com/p/zxing/sourc...entResult.java
a cui è associata la view di questo layout (xml):
codice:<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Avvia Scansione!"
android:onClick="doScan"
/>
<TextView android:id="@+id/format"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<View
android:layout_width="fill_parent"
android:layout_height="2dip"
android:background="#FF0000FF"
/>
<TextView android:id="@+id/contents"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<Button
android:id="@+id/pulsanteConfermaBarCode"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Conferma BarCode"
/>
</LinearLayout>
Grazie per la completa risposta, a me interessa solo un semplice OCR non per il barcode, neanche la gestione della lingua mi interessa, perchè devo riconoscere semplicemente l'etichetta con i prezzi.
Come ti dicevo con android ci sto mettendo le mani da poco e l'esempio è abbastanza complesso, non hai qualcosa di semplice, che scattata una foto mi riconosca il prezzo?
mmm... per l'esempio dobbiamo ragionarci. Sei riuscito a creare una prima app semplice con un layout e una activity? ... ad ogni modo, in pratica ti serve che da una foto tu ottenga dei numeri (che sarebbe il prezzo)... oddio, non è molto conveniente... per il semplice fatto che ci sono da superare questi punti:
1) Conversione ocr da una image a testo (anche se sono prezzi, quei numeri sono testo).
2) Ammesso che si riesca a trovare un modo per realizzare il punto 1, in che modo si possono gestire gli errori di conversione? E' ad alta intensità uso utente, nel senso che l'omino che fa le foto ai prezzi deve stare lì a controllare che sia stato correttamente convertito in OCR (e farebbe prima ad inserirli manualmente)....
Chissà se l'app 'scan2pdf' può aiutare... se i sorgenti sono free si potrebbe prendere un buono spunto
Si, si sto facendo delle app, ma cose semplici per fare pratica con i widget.
Visto che l'OCR è ormai una tecnica "vecchia" pensavo fosse più semplice, ormai ci sono librerie per il riconoscimento vocale e facciale e ancora ci sono problemi con l'ocr?
Volevo utilizzare questa tecnica perchè se l'utente può essere propenso a premere un bottone solo per confermare se la scansione è corretta, cosa più difficile sarebbe invogliarlo a inserire tutti i prezzi manualmente.
Permettimi un'osservazione: in che modo vuoi trattare i prezzi 'scansionati', ovvero le cifre? Dovrai sicuramente associarle a qualcosa... qualcosa del tipo 'articolo xxx = prezzo appena scansionato'... ma se hai già una anagrafica (articoli?) a cui associare dei prezzi scansionati, perchè non usare i barcode, che possono fare da ponte univoco al singolo elemento dell'anagrafica e al suo relativo prezzo scansionato ?
:)