Le moteur OCR de Tesseract n’est pas capable de lire le texte à partir d’une image générée automatiquement, mais peut le faire à partir d’une CUT dans MS Paint.

J’utilise un wrapper .NET pour le moteur OCR de Tesseract. J’ai un gros document qui est un PNG. Lorsque je découpe une partie de l’image dans la peinture MS puis l’introduit dans le moteur, cela fonctionne. Mais lorsque je le fais en code, le moteur ne peut pas reconnaître le texte de l’image. Les images se ressemblent et les propriétés ne semblent pas très éteintes. Donc je suis un peu confus.

Voici les deux images. De la peinture MS:

entrez la description de l'image ici

À partir du code:

entrez la description de l'image ici

Voici ce que je tire de l’image MS Paint:

entrez la description de l'image ici

Et par le code:

entrez la description de l'image ici

Ils sont vraiment similaires, donc je ne sais pas pourquoi il ne peut pas reconnaître le deuxième texte. Voici comment je génère l’image.

public Bitmap CropImage(Bitmap source, Rectangle section) { Bitmap bmp = new Bitmap(section.Width, section.Height); Graphics g = Graphics.FromImage(bmp); g.DrawImage(source, 0, 0, section, GraphicsUnit.Pixel); return bmp; } private void Form1_Load(object sender, EventArgs e) { Bitmap source = new Bitmap(test); Rectangle section = new Rectangle(new Point(78, 65), new Size(800, 50)); Bitmap CroppedImage = CropImage(source, section); CroppedImage.Save(@"c:\users\user\desktop\test34.png", System.Drawing.Imaging.ImageFormat.Png); this.pictureBox1.Image = CroppedImage; } 

La résolution par défaut d’un nouveau bitmap est 96 ppp, ce qui ne convient pas à des fins d’OCR. Essayez d’augmenter à 300 DPI, tels que:

bmp.SetResolution(300, 300);

Mise à jour 1: lorsque vous redimensionnez l’image, sa dimension devrait également changer. Voici un exemple de fonction de redimensionnement:

 public static Image Rescale(Image image, int dpiX, int dpiY) { Bitmap bm = new Bitmap((int)(image.Width * dpiX / image.HorizontalResolution), (int)(image.Height * dpiY / image.VerticalResolution)); bm.SetResolution(dpiX, dpiY); Graphics g = Graphics.FromImage(bm); g.InterpolationMode = InterpolationMode.Bicubic; g.PixelOffsetMode = PixelOffsetMode.HighQuality; g.DrawImage(image, 0, 0); g.Dispose(); return bm; }