OCR: Image au texte?

Avant de marquer que de copier ou de répéter la question, merci de lire l'ensemble de la question en premier.

Je suis capable de faire à pressent est comme ci-dessous:

  1. Pour obtenir de l'image et de la culture de la pièce souhaitée pour l'OCR.
  2. Le traitement de l'image à l'aide de tesseract et leptonica.
  3. Appliquée lorsque le document est coupée en morceaux ie 1 caractère par l'image qu'il donne de 96% de précision.
  4. Si je ne fais pas ça, et le document de fond est de couleur blanche et le texte est en noir couleur, il donne presque la même précision.

Par exemple, si l'entrée est comme cette photo :

Photo de début

OCR: Image au texte?

Photo fin

Ce que je veux, c'est pouvoir obtenir la même précision pour cette photoOCR: Image au texte?
sans générer de blocs.

Le code que j'ai utilisé pour init tesseract et extraire du texte à partir de l'image est comme ci-dessous:

Pour l'initialisation des tesseract

.h fichier

tesseract::TessBaseAPI *tesseract;
uint32_t *pixels;

.m fichier

tesseract = new tesseract::TessBaseAPI();
tesseract->Init([dataPath cStringUsingEncoding:NSUTF8StringEncoding], "eng");
tesseract->SetPageSegMode(tesseract::PSM_SINGLE_LINE);
tesseract->SetVariable("tessedit_char_whitelist", "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ");
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");

Pour obtenir un texte à partir d'une image

- (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];
}

Mais je ne reçois pas de bon de sortie pour la plaque d'immatriculation de l'image, soit il est nul ou il donne des ordures de données pour l'image.

Et si j'utilise l'image qui est la première ie fond blanc avec texte noir, puis la sortie est de 89 à 95% de précision.

Merci de m'aider.

Toutes suggestions seront appréciées.

Mise à jour

Grâce à @jcesar pour assurer le lien et aussi à @konstantin pribluda de fournir de précieuses informations et guide.

Je suis capable de convertir les images dans le bon noir et blanc (ou presque). et si la reconnaissance est meilleure pour toutes les images 🙂

Besoin d'aide avec une bonne binarisation d'images. Toute Idée sera apprécié

source d'informationauteur The iOSDev | 2012-11-06