Prima di contrassegnare come domanda di copia o ripetizione, leggere prima l'intera domanda.OCR: Immagine in testo?
sono in grado di fare al pressent è come qui sotto:
- per ottenere l'immagine e ritagliare la parte desiderata per l'OCR.
- Elaborare l'immagine utilizzando
tesseract
eleptonica
. - Quando il documento applicato viene ritagliato in blocchi, ovvero 1 carattere per immagine, fornisce il 96% di precisione.
- Se non lo faccio e lo sfondo del documento è di colore bianco e il testo è di colore nero, offre quasi la stessa accuratezza.
Per esempio, se l'ingresso è come questa foto:
Foto avviare
Foto fine
Quello che voglio è quello in grado di ottenere il stessa accuratezza per questa foto
senza generare blocchi.
Il codice che ho usato per init tesseract ed estrarre il testo da un'immagine è come qui sotto:
Per init di Tesseract
nel file h
tesseract::TessBaseAPI *tesseract;
uint32_t *pixels;
nel file di .m
tesseract = new tesseract::TessBaseAPI();
tesseract->Init([dataPath cStringUsingEncoding:NSUTF8StringEncoding], "eng");
tesseract->SetPageSegMode(tesseract::PSM_SINGLE_LINE);
tesseract->SetVariable("tessedit_char_whitelist", "ABCDEFGHIJKLMNOPQRSTUVWXYZ");
tesseract->SetVariable("language_model_penalty_non_freq_dict_word", "1");
tesseract->SetVariable("language_model_penalty_non_dict_word ", "1");
tesseract->SetVariable("tessedit_flip_0O", "1");
tesseract->SetVariable("tessedit_single_match", "0");
tesseract->SetVariable("textord_noise_normratio", "5");
tesseract->SetVariable("matcher_avg_noise_size", "22");
tesseract->SetVariable("image_default_resolution", "450");
tesseract->SetVariable("editor_image_text_color", "40");
tesseract->SetVariable("textord_projection_scale", "0.25");
tesseract->SetVariable("tessedit_minimal_rejection", "1");
tesseract->SetVariable("tessedit_zero_kelvin_rejection", "1");
Per il testo ottenere da un'immagine
- (void)processOcrAt:(UIImage *)image
{
[self setTesseractImage:image];
tesseract->Recognize(NULL);
char* utf8Text = tesseract->GetUTF8Text();
int conf = tesseract->MeanTextConf();
NSArray *arr = [[NSArray alloc]initWithObjects:[NSString stringWithUTF8String:utf8Text],[NSString stringWithFormat:@"%d%@",conf,@"%"], nil];
[self performSelectorOnMainThread:@selector(ocrProcessingFinished:)
withObject:arr
waitUntilDone:YES];
free(utf8Text);
}
- (void)ocrProcessingFinished0:(NSArray *)result
{
UIAlertView *alt = [[UIAlertView alloc]initWithTitle:@"Data" message:[result objectAtIndex:0] delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
[alt show];
}
Ma non ottengo uscita corretta per l'immagine del numero di targa o è nullo o dà alcuni dati spazzatura per l'immagine.
E se utilizzo l'immagine che è la prima, ovvero lo sfondo bianco con testo nero, l'output è preciso dall'89 al 95%.
Please help me out.
Qualsiasi suggerimento sarà apprezzato.
Aggiornamento
Grazie a @jcesar per fornire il link e anche per @konstantin Pribluda per fornire informazioni e preziosa guida.
Sono in grado di convertire le immagini in una corretta forma in bianco e nero (quasi).e quindi il riconoscimento è migliore per tutte le immagini :)
Hai bisogno di aiuto con la corretta binarizzazione delle immagini. Qualsiasi Idea sarà apprezzata
Forse puoi provare a manipolare l'immagine prima di provare a riconoscere il testo, ad esempio cambiare il colore dei pixel non nero (o vicino al nero) in bianco. In questo momento non ho il codice obiettivo-c per farlo, ma sono sicuro che può essere fatto. – jcesarmobile
Ho pensato per questo ma lo stesso qui non sono in grado di implementarlo. –
Leggere i collegamenti sulla risposta accettata http://stackoverflow.com/questions/9977905/change-a-color-in-a-uiimage – jcesarmobile