Comment utiliser les images System Drawing pour le traitement OCR en C#

Comment lire à partir d'objets System.Drawing en C

This article was translated from English: Does it need improvement?
Translated
View the article in English

IronOCR permet de lire du texte à partir d'objets System.Drawing tels que Bitmap et Image en les encapsulant dans OcrImageInput, offrant ainsi une fonctionnalité OCR transparente pour les applications .NET sur les plateformes Windows, macOS et Linux.

System.Drawing.Bitmap est une classe du .NET Framework utilisée pour travailler avec des images bitmap. Il fournit des méthodes et des propriétés pour créer, manipuler et afficher des images bitmap.

System.Drawing.Image est une classe de base pour tous les objets image GDI+ dans le .NET Framework. Il s'agit de la classe parente de divers types d'images, y compris System.Drawing.Bitmap.

IronSoftware.Drawing.AnyBitmap est une classe de bitmap dans IronDrawing, une bibliothèque open source développée à l'origine par Iron Software. Elle aide les ingénieurs logiciels C# à remplacer System.Drawing.Common dans les projets .NET sur les plateformes Windows, macOS et Linux.

Démarrage rapide : Lisez du texte à partir d'un System.Drawing.Bitmap

À l'aide d'une seule instruction, créez un IronTesseract et transmettez-lui un System.Drawing.Bitmap entouré de OcrImageInput pour extraire tout le texte. Cet exemple de démarrage rapide montre comment IronOCR convertit des images en texte lisible avec une configuration minimale.

  1. Installez IronOCR avec le Gestionnaire de Packages NuGet

    PM > Install-Package IronOcr
  2. Copiez et exécutez cet extrait de code.

    var result = new IronOcr.IronTesseract().Read(new IronOcr.OcrImageInput(new System.Drawing.Bitmap("image.png")));
  3. Déployez pour tester sur votre environnement de production.

    Commencez à utiliser IronOCR dans votre projet dès aujourd'hui avec un essai gratuit

    arrow pointer


Comment lire dans System.Drawing.Bitmap?

Commencez par instancier la classe pour effectuer l'OCR. Créez un à l'aide de l'une des différentes méthodes. Dans l'exemple de code, un chemin de fichier est utilisé.

Ensuite, utilisez l'instruction pour créer l'objet, en lui transmettant l'image provenant de l'objet . Enfin, utilisez la méthode pour effectuer l'OCR.

:path=/static-assets/ocr/content-code-examples/how-to/input-system-drawing-read-bitmap.cs
using IronOcr;
using System.Drawing;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Read image file to Bitmap
Bitmap bitmap = new Bitmap("Potter.tiff");

// Import System.Drawing.Bitmap
using var imageInput = new OcrImageInput(bitmap);
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);
Imports IronOcr
Imports System.Drawing

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Read image file to Bitmap
Private bitmap As New Bitmap("Potter.tiff")

' Import System.Drawing.Bitmap
Private imageInput = New OcrImageInput(bitmap)
' Perform OCR
Private ocrResult As OcrResult = ocrTesseract.Read(imageInput)
$vbLabelText   $csharpLabel

Pourquoi l'instruction using est-elle importante pour OcrImageInput?

L'instruction using est cruciale lorsque l'on travaille avec OcrImageInput car elle garantit une gestion correcte des ressources et un nettoyage de la mémoire. OcrImageInput implémente IDisposable, ce qui signifie qu'il contient des ressources non gérées qui doivent être libérées lorsque vous avez fini d'utiliser l'objet. Sans l'instruction using, ces ressources risquent de ne pas être libérées rapidement, ce qui pourrait entraîner des fuites de mémoire ou des verrouillages de fichiers. Cela est particulièrement important lors du traitement de plusieurs images dans le cadre d'opérations par lots. Pour plus de détails sur la gestion correcte des ressources dans IronOcr, consultez notre documentation Référence API.

Quelles sont les méthodes courantes de chargement des images bitmap ?

Bitmap propose plusieurs méthodes de chargement en plus du constructeur de chemin d'accès au fichier utilisé dans notre exemple. Vous pouvez créer Bitmap à partir de flux (StreamReader), à partir de Image existants (Image), ou même créer des bitmaps vides avec des dimensions spécifiques (Bitmap). Lorsque vous travaillez avec des applications web, le chargement à partir de flux est particulièrement utile pour traiter les fichiers téléchargés. Pour les ressources intégrées, vous pouvez utiliser Resources. IronOCR gère toutes ces sources source de manière transparente via le constructeur Bitmap. Pour en savoir plus sur les différentes méthodes de saisie, consultez notre guide Images (jpg, png, gif, tiff, bmp).

Quand dois-je me débarrasser de l'objet Bitmap?

Le délai d'élimination des bitmaps dépend du flux de travail de votre application. Si vous n'avez besoin du bitmap que pour l'OCR, supprimez-le immédiatement après avoir créé le ocrResult. Toutefois, si vous devez effectuer plusieurs opérations ou afficher l'image, maintenez-la en vie jusqu'à ce que toutes les opérations soient terminées. Utilisez toujours les instructions using ou les blocs try-finally pour garantir la suppression. N'oubliez pas que OcrImageInput crée sa propre copie interne, de sorte que le bitmap d'origine peut être supprimé après la création de OcrImageInput. Pour les scénarios complexes impliquant plusieurs opérations sur les images, consultez nos exemples de filtres d'optimisation d'image OCR.

Comment lire dans System.Drawing.Image?

La lecture d'un Image est aussi simple que de créer l'objet OcrInput avec le Image, puis d'effectuer le processus OCR standard à l'aide de la méthode Read.

:path=/static-assets/ocr/content-code-examples/how-to/input-system-drawing-read-image.cs
using IronOcr;
using Image = System.Drawing.Image;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Open image file as Image
Image image = Image.FromFile("Potter.tiff");

// Import System.Drawing.Image
using var imageInput = new OcrImageInput(image);
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);
Imports IronOcr
Imports Image = System.Drawing.Image

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Open image file as Image
Private image As Image = Image.FromFile("Potter.tiff")

' Import System.Drawing.Image
Private imageInput = New OcrImageInput(image)
' Perform OCR
Private ocrResult As OcrResult = ocrTesseract.Read(imageInput)
$vbLabelText   $csharpLabel

Quelle est la différence entre Image et Bitmap pour l'OCR ?

Alors que Bitmap est une implémentation spécifique pour les images bitmap, Image est une classe de base abstraite pouvant représenter divers formats d'image, notamment JPEG, PNG, GIF et TIFF. À des fins d'OCR, IronOCR traite les deux de manière identique via OcrInput, mais Image offre plus de flexibilité lors de l'utilisation de différents formats. Bitmap offre des capacités de manipulation au niveau du pixel, tandis que Image est plus adapté au traitement général des images. Les deux fonctionnent aussi bien l'un que l'autre avec le moteur avancé Tesseract 5 d'IronOCR. Le choix dépend des besoins généraux de votre application plutôt que des performances de l'OCR.

Pourquoi utiliser Image.FromFile plutôt que d'autres méthodes de chargement ?

Image.FromFile est la méthode la plus simple et la plus directe pour charger des images à partir du disque. Il détecte automatiquement le format de l'image et gère le processus de lecture du fichier. Des méthodes alternatives telles que MemoryStream sont plus adaptées aux applications web ou lors de l'utilisation de flux de mémoire. FileStream verrouille le fichier jusqu'à ce que FileStream soit libéré, ce qui peut être un facteur à prendre en compte dans les applications multithread. Pour les scénarios de production nécessitant des performances élevées ou un accès simultané, envisagez d'abord de charger les images dans des flux de mémoire. Notre exemple Multithreaded Tesseract OCR démontre les meilleures pratiques pour le traitement concurrent des images.

Comment lire IronSoftware.Drawing.AnyBitmap?

De même, après avoir créé ou obtenu un objet AnyBitmap, vous pouvez construire la classe OcrInput. Le constructeur se chargera de toutes les étapes nécessaires à l'importation des données. L'exemple de code ci-dessous illustre cela.

:path=/static-assets/ocr/content-code-examples/how-to/input-system-drawing-read-anybitmap.cs
using IronOcr;
using IronSoftware.Drawing;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Open image file as AnyBitmap
AnyBitmap anyBitmap = AnyBitmap.FromFile("Potter.tiff");

// Import IronSoftware.Drawing.AnyBitmap
using var imageInput = new OcrImageInput(anyBitmap);
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);
Imports IronOcr
Imports IronSoftware.Drawing

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Open image file as AnyBitmap
Private anyBitmap As AnyBitmap = AnyBitmap.FromFile("Potter.tiff")

' Import IronSoftware.Drawing.AnyBitmap
Private imageInput = New OcrImageInput(anyBitmap)
' Perform OCR
Private ocrResult As OcrResult = ocrTesseract.Read(imageInput)
$vbLabelText   $csharpLabel

Pourquoi choisir AnyBitmap plutôt que les classes System.Drawing ?

AnyBitmap offre une compatibilité multiplateforme supérieure à celle des classes Bitmap. Alors que Bitmap offre une prise en charge limitée sur les plateformes non Windows dans .NET 6+, AnyBitmap fonctionne de manière transparente sous Windows, Linux et macOS. Il fournit une API cohérente sans dépendances spécifiques à une plateforme, ce qui le rend idéal pour les déploiements dans le nuage et les applications conteneurisées. AnyBitmap offre également une meilleure gestion de la mémoire et des optimisations de performances spécialement conçues pour les tâches de traitement d'images. Pour des informations détaillées sur la compatibilité, consultez notre documentation Compatibilité.

Quelles sont les plateformes prises en charge par AnyBitmap ?

AnyBitmap prend en charge toutes les principales plateformes sur lesquelles .NET fonctionne : Windows (x86, x64, ARM), Linux (y compris Alpine Linux pour Docker) et macOS (Intel et Apple Silicon). La prise en charge d'un grand nombre de plateformes en fait le choix recommandé pour les applications .NET modernes qui doivent fonctionner dans divers environnements. Elle est particulièrement utile pour les déploiements dans le cloud sur AWS Lambda ou Azure Functions. Pour en savoir plus sur la configuration spécifique à une plateforme, consultez nos guides pour les environnements Linux, macOS et Docker.

Comment AnyBitmap gère-t-il la mémoire ?

AnyBitmap met en œuvre une gestion efficace de la mémoire grâce à l'intégration d'un ramasse-miettes automatique et à des modèles de libération explicites. Il utilise la mise en commun de la mémoire pour les tampons fréquemment alloués et met en œuvre la sémantique de copie sur écriture pour de meilleures performances. Contrairement à AnyBitmap qui peut verrouiller des fichiers, AnyBitmap charge les images entièrement en mémoire, ce qui évite les problèmes d'accès aux fichiers. Il permet également de mieux contrôler l'utilisation de la mémoire dans les scénarios à haut débit. Pour les applications traitant de grands volumes d'images, l'efficacité mémoire de AnyBitmap peut réduire considérablement l'empreinte mémoire globale. Consultez notre guide System.Drawing.Common Alternatives pour obtenir des conseils de migration.

Comment puis-je spécifier une région de balayage?

Lors de la construction de la classe OcrInput, vous pouvez spécifier la zone à analyser. Cela vous permet de définir la région spécifique du document image pour la reconnaissance optique de caractères (OCR). En fonction du document image, la spécification de la région de numérisation peut améliorer considérablement les performances. Dans l'exemple de code fourni, seuls le numéro et le titre du chapitre sont extraits.

:path=/static-assets/ocr/content-code-examples/how-to/input-images-read-specific-region.cs
using IronOcr;
using IronSoftware.Drawing;
using System;

// Instantiate IronTesseract
IronTesseract ocrTesseract = new IronTesseract();

// Specify crop region
Rectangle scanRegion = new Rectangle(800, 200, 900, 400);

// Add image
using var imageInput = new OcrImageInput("Potter.tiff", ContentArea: scanRegion);
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);

// Output the result to console
Console.WriteLine(ocrResult.Text);
Imports IronOcr
Imports IronSoftware.Drawing
Imports System

' Instantiate IronTesseract
Private ocrTesseract As New IronTesseract()

' Specify crop region
Private scanRegion As New Rectangle(800, 200, 900, 400)

' Add image
Private imageInput = New OcrImageInput("Potter.tiff", ContentArea:= scanRegion)
' Perform OCR
Private ocrResult As OcrResult = ocrTesseract.Read(imageInput)

' Output the result to console
Console.WriteLine(ocrResult.Text)
$vbLabelText   $csharpLabel

Quand devrais-je utiliser le balayage de régions pour de meilleures performances ?

La numérisation par région améliore considérablement les performances lorsque vous n'avez besoin que de texte provenant de zones spécifiques de documents cohérents. Les cas d'utilisation courants comprennent l'extraction d'en-têtes, de champs de formulaires, de totaux de factures ou d'informations sur les cartes d'identité. Les gains de performance sont les plus significatifs avec les grandes images où le texte n'occupe qu'une petite partie. Pour une facture de 3 000 x 4 000 pixels, la numérisation de la région du montant total peut être 10 à 20 fois plus rapide que l'OCR pleine page. La numérisation des régions améliore également la précision en éliminant les bruits potentiels provenant d'autres zones. Pour d'autres exemples de régions, consultez notre guide Zones de contenu et régions de recadrage avec les PDF.

Comment déterminer les coordonnées correctes de ma région ?

Pour déterminer les coordonnées, il faut comprendre que Rectangle utilise le format (X, Y, Largeur, Hauteur), où (0,0) correspond au coin supérieur gauche. Commencez par ouvrir votre image dans un éditeur d'images qui affiche les coordonnées du curseur. Vous pouvez également utiliser les fonctionnalités de débogage d'IronOCR pour visualiser les régions de texte détectées. Pour les mises en page dynamiques, envisagez d'utiliser IronOCR pour effectuer d'abord une numérisation complète, puis d'analyser le OcrResult afin de localiser les positions du texte par programmation. Notre exemple Highlight Texts for Debugging montre comment visualiser les régions OCR pour une détermination précise des coordonnées.

Que se passe-t-il si la région dépasse les limites de l'image?

Lorsqu'une région spécifiée dépasse les limites de l'image, IronOCR la coupe automatiquement dans la zone d'image valide. Par exemple, si votre image fait 1000x1000 pixels et que vous spécifiez un rectangle à (900, 900, 200, 200), IronOCR ne traitera que la zone allant de (900, 900) à (1000, 1000). Ce découpage automatique évite les erreurs mais peut entraîner une extraction incomplète du texte si vos coordonnées sont incorrectes. Validez toujours vos régions par rapport aux dimensions réelles de l'image. Pour les images de taille dynamique, calculez les régions en pourcentage plutôt qu'en pixels fixes. Le guide OCR Region of an Image fournit d'autres exemples de gestion sûre des régions.

Résultat OCR

Démonstration d'extraction OCR montrant le texte d'un chapitre de Harry Potter dans la visionneuse de photos et la sortie extraite dans la console de débogage

using OcrImageInput OcrImageInput IDisposable using System.Drawing.Bitmap Bitmaps new Bitmap(stream) Images new Bitmap(image) new Bitmap(width, height) Assembly.GetManifestResourceStream() Bitmap OcrImageInput Bitmap OcrImageInput using OcrImageInput Bitmap OcrImageInput System.Drawing.Image OcrImageInput Image Read System.Drawing.Bitmap System.Drawing.Image OcrImageInput Image Bitmap Image Image.FromFile Image.FromStream Image.FromFile Image AnyBitmap OcrImageInput AnyBitmap System.Drawing System.Drawing.Common AnyBitmap AnyBitmap AnyBitmap AnyBitmap System.Drawing.Bitmap AnyBitmap AnyBitmap OcrImageInput Rectangle OcrResult

Questions Fréquemment Posées

Comment extraire du texte d'un System.Drawing.Bitmap à l'aide de l'OCR en C# ?

IronOCR simplifie l'extraction de texte à partir d'objets System.Drawing.Bitmap. Tout d'abord, instanciez la classe IronTesseract, puis enveloppez votre Bitmap dans un objet OcrImageInput à l'aide d'une instruction using, et enfin appelez la méthode Read. Le code minimal est le suivant : var result = new IronOcr.IronTesseract().Read(new IronOcr.OcrImageInput(bitmap)) ;

Pourquoi la déclaration d'utilisation est-elle importante lorsque l'on travaille avec OcrImageInput ?

L'instruction using est cruciale car OcrImageInput implémente IDisposable et contient des ressources non gérées qui doivent être nettoyées correctement. Sans cela, vous risquez des fuites de mémoire ou des blocages de fichiers, en particulier lors du traitement de plusieurs images. L'entrée OcrImageInput d'IronOcr doit être éliminée correctement pour garantir une gestion efficace des ressources dans vos applications .NET.

Puis-je effectuer une reconnaissance optique de caractères sur des objets System.Drawing.Image ?

Oui, IronOcr prend en charge l'OCR sur les objets System.Drawing.Image puisque Image est la classe de base de Bitmap. Il suffit d'envelopper votre objet Image dans OcrImageInput de la même manière que vous le feriez avec un Bitmap, et IronOCR extraira le texte de manière transparente sur les plateformes Windows, macOS et Linux.

Qu'est-ce que IronSoftware.Drawing.AnyBitmap et quel est son rapport avec l'OCR ?

IronSoftware.Drawing.AnyBitmap est une classe de bitmap d'IronDrawing, une bibliothèque open-source qui aide à remplacer System.Drawing.Common dans les projets .NET. Elle offre une compatibilité multiplateforme pour Windows, macOS et Linux, ce qui la rend idéale pour une utilisation avec IronOcr lorsque vous avez besoin d'une gestion cohérente des images sur différents systèmes d'exploitation.

Puis-je spécifier une zone spécifique d'une image pour l'extraction de texte ?

Oui, IronOCR vous permet de définir des zones de lecture spécifiques en spécifiant des régions de culture. Cette fonctionnalité vous permet de concentrer le traitement OCR sur des sections particulières de vos objets System.Drawing, améliorant ainsi les performances et la précision lorsque vous n'avez besoin que de texte provenant de parties spécifiques d'une image.

IronOCR prend-elle en charge plusieurs langues ?

IronOCR prend en charge plusieurs langues, ce qui en fait un outil polyvalent pour des applications globales nécessitant la reconnaissance de texte dans différentes langues.

IronOCR peut-il être intégré dans des applications existantes ?

IronOCR est conçu pour être facilement intégré dans les applications existantes en utilisant C#, permettant aux développeurs d'ajouter des fonctionnalités OCR à leur logiciel avec un minimum d'effort.

Quels sont les avantages d'utiliser IronOCR pour la gestion des documents ?

Utiliser IronOCR pour la gestion des documents rationalise le flux de travail en convertissant les documents numérisés en texte modifiable et consultable, réduisant le besoin de saisie manuelle des données et améliorant l'accessibilité des documents.

Comment IronOCR peut-il améliorer la précision des données ?

IronOCR améliore la précision des données grâce à ses algorithmes de reconnaissance avancés et ses fonctionnalités de correction d'image, garantissant que le processus d'extraction de texte est à la fois fiable et précis.

Y a-t-il un essai gratuit disponible pour IronOCR ?

Oui, Iron Software propose un essai gratuit d'IronOCR, permettant aux utilisateurs de tester ses fonctionnalités et capacités avant de prendre une décision d'achat.

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite
Revu par
Jeff Fritz
Jeffrey T. Fritz
Responsable principal du programme - Équipe de la communauté .NET
Jeff est également responsable principal du programme pour les équipes .NET et Visual Studio. Il est le producteur exécutif de la série de conférences virtuelles .NET Conf et anime 'Fritz and Friends', une diffusion en direct pour développeurs qui est diffusée deux fois par semaine où il parle de technologie et écrit du code avec les téléspectateurs. Jeff écrit des ateliers, des présentations et prévoit du contenu pour les plus grands événements de développement Microsoft, y compris Microsoft Build, Microsoft Ignite, .NET Conf et le sommet Microsoft MVP
Prêt à commencer?
Nuget Téléchargements 5,896,332 | Version : 2026.5 just released
Still Scrolling Icon

Vous faites encore défiler ?

Vous voulez une preuve rapidement ? PM > Install-Package IronOcr
lancez un échantillon regardez votre image se transformer en texte consultable.