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 enveloppant 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 framework .NET 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+ du framework .NET. Il s'agit de la classe parente de divers types d'images, notamment System.Drawing.Bitmap .

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

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

Avec une seule instruction, créez un IronTesseract et alimentez-le avec un System.Drawing.Bitmap enveloppé par 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.

```cs:title=Extraire du texte en une ligne var result = new IronOcr.IronTesseract().Read(new IronOcr.OcrImageInput(new System.Drawing.Bitmap("image.png"))) ;


<div class="hsg-featured-snippet">
    <h3>Flux de travail minimal (5 étapes)</h3>
    <ol>
        <li><a class="js-modal-open" data-modal-id="trial-license-after-download" href="https://nuget.org/packages/IronOcr/">Téléchargez la bibliothèque C# pour la lecture des objets System.Drawing.</a></li>
        <li>Obtain System.Drawing objects such as `Bitmap` and `Image`</li>
        <li>Construct the `OcrImageInput` class using the acquired data</li>
        <li>Utilize `AnyBitmap` from Iron Software for Linux and macOS</li>
        <li>Définissez la zone de lecture en spécifiant la région de recadrage</li>
    </ol>
</div>

<br class="clear">

## Comment lire dans System.Drawing.Bitmap?

<TODO : Ajouter une image ici -->
<!-- ![Capture d'écran démontrant how do i read from system.drawing.bitmap ? in IronPDF](/static-assets/images/TODO/how-do-i-read-from-system-drawing-bitmap-step_screenshot.webp) -->
<!-- Description : Capture d'écran montrant le processus étape par étape -->

Tout d'abord, instanciez la classe **`IronTesseract`** pour effectuer l'OCR. Créez un `System.Drawing.Bitmap` à partir de l&#39;une des différentes méthodes. Dans l'exemple de code, un chemin de fichier est utilisé.

Ensuite, utilisez l&#39;instruction `using` pour créer l&#39;objet `OcrImageInput` , en lui passant l&#39;image provenant de l&#39;objet `System.Drawing.Bitmap` . Enfin, utilisez la méthode `Read` pour effectuer la reconnaissance optique de caractères (OCR).

```csharp
:path=/static-assets/ocr/content-code-examples/how-to/input-system-drawing-read-bitmap.cs

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

La déclaration using est cruciale lorsque l'on travaille avec OcrImageInput car elle assure une bonne gestion des ressources et un nettoyage de la mémoire. OcrImageInput implémente IDisposable, ce qui signifie qu'il détient des ressources non gérées qui doivent être libérées lorsque vous n'utilisez plus l'objet. Sans la mention utilisant, ces ressources pourraient ne pas être libérées rapidement, ce qui pourrait entraîner des fuites de mémoire ou des blocages 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 ?

System.Drawing.Bitmap fournit plusieurs méthodes de chargement au-delà du constructeur de chemin de fichier utilisé dans notre exemple. Vous pouvez créer des Bitmaps à partir de flux (new Bitmap(stream)), à partir d'Images existantes (new Bitmap(image)), ou même créer des bitmaps vierges avec des dimensions spécifiques (new Bitmap(width, height)). 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 Assembly.GetManifestResourceStream(). IronOcr gère toutes ces sources Bitmap de manière transparente grâce au constructeur OcrImageInput. 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, éliminez-le immédiatement après avoir créé le OcrImageInput. 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 des instructions utilisant ou des blocs try-finally pour garantir l'élimination. N'oubliez pas que OcrImageInput crée sa propre copie interne, de sorte que la Bitmap d'origine peut être éliminée 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?

<TODO : Ajouter une image ici -->

La lecture d'une System.Drawing.Image est aussi simple que la création de l'objet OcrImageInput avec l'Image et l'exécution du 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);
$vbLabelText   $csharpLabel

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

Alors que System.Drawing.Bitmap est une implémentation spécifique pour les images bitmap, System.Drawing.Image est une classe de base abstraite qui peut représenter différents formats d'image, notamment JPEG, PNG, GIF et TIFF. À des fins d'OCR, IronOcr traite les deux de manière identique via OcrImageInput, mais Image offre plus de flexibilité lorsque vous travaillez avec différents formats. Bitmap offre des capacités de manipulation au niveau du pixel, tandis que Image est plus adapté à la manipulation générale 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 d'un disque. Il détecte automatiquement le format de l'image et gère le processus de lecture du fichier. Des méthodes alternatives comme Image.FromStream sont plus appropriées pour les applications web ou pour travailler avec des flux de mémoire. Image.FromFile verrouille le fichier jusqu'à ce que l'Image soit éliminée, ce qui peut être une considération 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 OcrImageInput . 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);
$vbLabelText   $csharpLabel

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

AnyBitmap offre une compatibilité multiplateforme supérieure à celle des classes System.Drawing. Alors que System.Drawing.Common bénéficie d'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écifiquement 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 automatique du ramassage des ordures et à des modèles d'élimination 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 à System.Drawing.Bitmap qui peut contenir des verrous de fichier, AnyBitmap charge les images entièrement dans la mémoire, évitant ainsi 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é de la mémoire d'AnyBitmap peut réduire de manière significative 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 OcrImageInput , vous pouvez spécifier la zone à scanner. 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);
$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 le Rectangle utilise le format (X, Y, Largeur, Hauteur), où (0,0) est le 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 un balayage complet, puis analyser le OcrResult pour trouver les positions du texte de manière programmatique. 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

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.

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,299,091 | Version : 2025.12 vient de sortir