Question

Je veux laisser Tesseract Orc sur un fichier image, pour scanner le contenu.
Le problème semble être que Tesseract nécessite non seulement du TIFF, mais il faut également que le fichier TIFF soit dans un certain format.

Avec juste un fichier TIFF normal, j'obtiens:

root@toshiba:~/Desktop# tesseract crap.tif crap.txt
Tesseract Open Source OCR Engine
check_legal_image_size:Error:Only 1,2,4,5,6,8 bpp are supported:32
Segmentation fault

Jusqu'à présent, j'ai réussi à trouver un antidote.
Il consiste à utiliser GIMP, à passer en mode> Mode> Index et à définir "Générer une palette optimale", "nombre maximum de couleurs" à 256.
enter image description here
Ensuite, je dois faire un autre truc avant de "sauver sous".
Aller à la couche> Transparence> Supprimer le canal alpha, ce qui supprimera la transparence, car les images TIF ne peuvent pas avoir de transparence.

enter image description here

Maintenant, le problème est que mon image d'entrée provient de C # et est prétraitée avec les filtres d'analyse d'image AFORGE.NET.

J'ai également trouvé un port .NET de Libtiff, et un exemple de la façon d'écrire une image avec une palette de couleurs ici:
http://bitmiracle.com/libtiff/help/create-tiff-with-palette-(color-map).aspx

Mais je ne sais pas comment obtenir les données de la source TIFF (celle avec la mauvaise palette) au TIFF Target (avec le format de palette correct) ...

Était-ce utile?

La solution

J'ai entendu dire que Tesseract est d'accord avec les tiffs en niveaux de gris.

Veuillez donc essayer de suivre le code pour la conversion de vos images TIFF en niveaux de gris:

using (Tiff tif = Tiff.Open(@"input.tif", "r"))
{
    FieldValue[] value = tif.GetField(TiffTag.IMAGEWIDTH);
    int width = value[0].ToInt();

    value = tif.GetField(TiffTag.IMAGELENGTH);
    int height = value[0].ToInt();

    int xresolution = -1;
    value = tif.GetField(TiffTag.XRESOLUTION);
    if (value != null)
        xresolution = value[0].ToInt();

    int yresolution = -1;
    value = tif.GetField(TiffTag.YRESOLUTION);
    if (value != null)
        yresolution = value[0].ToInt();

    int[] raster = new int[height * width];
    if (!tif.ReadRGBAImageOriented(width, height, raster, Orientation.TOPLEFT))
    {
        System.Windows.Forms.MessageBox.Show("Could not read image");
        return;
    }

    string fileName = "grayscale.tif";
    using (Tiff output = Tiff.Open(fileName, "w"))
    {
        output.SetField(TiffTag.IMAGEWIDTH, width);
        output.SetField(TiffTag.IMAGELENGTH, height);
        output.SetField(TiffTag.ROWSPERSTRIP, 1);
        output.SetField(TiffTag.SAMPLESPERPIXEL, 1);
        output.SetField(TiffTag.BITSPERSAMPLE, 8);
        output.SetField(TiffTag.PLANARCONFIG, PlanarConfig.CONTIG);
        output.SetField(TiffTag.COMPRESSION, Compression.LZW);
        output.SetField(TiffTag.FILLORDER, FillOrder.MSB2LSB);
        output.SetField(TiffTag.PHOTOMETRIC, Photometric.MINISBLACK);

        if (xresolution != -1 && yresolution != -1)
        {
            output.SetField(TiffTag.XRESOLUTION, xresolution);
            output.SetField(TiffTag.YRESOLUTION, yresolution);
        }

        byte[] samples = new byte[width];
        for (int y = 0, index = 0; y < height; y++)
        {
            for (int x = 0; x < width; x++)
            {
                int rgb = raster[index++];

                // compute pixel brightness taking human eye's sensitivity
                // to each of red, green and blue colors into account
                byte gray = (byte)(Tiff.GetR(rgb) * 0.299 + Tiff.GetG(rgb) * 0.587 + Tiff.GetB(rgb) * 0.114);

                // Alternative formulas for RGB -> Gray conversion

                //byte gray = (byte)(Tiff.GetR(rgb) * 0.2125 + Tiff.GetG(rgb) * 0.7154 + Tiff.GetB(rgb) * 0.0721);
                //byte gray = (byte)((Tiff.GetR(rgb) + Tiff.GetG(rgb) + Tiff.GetB(rgb)) / 3);

                samples[x] = gray;
            }

            output.WriteEncodedStrip(y, samples, samples.Length);
        }
    }
}

Espérons que cela fera l'affaire.

Autres conseils

J'ai eu le même problème avec Tesseract, mais grâce à vos conseils, je viens d'utiliser GIMP pour changer le .tif d'un fichier couleur en greyscale. Cela se fait facilement en utilisant le mode d'image de commande - GreysCale, puis en enregistrant à nouveau en tant que TIF. J'espère que cela aide quelqu'un qui ne veut pas utiliser la ligne de commande pour résoudre le problème de l'image.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top