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)](https://ironsoftware.com/csharp/ocr/how-to/input-images/). ### 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](https://ironsoftware.com/csharp/ocr/examples/ocr-image-filters-for-net-tesseract/). ## Comment lire dans System.Drawing.Image? 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`. ```csharp :path=/static-assets/ocr/content-code-examples/how-to/input-system-drawing-read-image.cs ```

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](https://ironsoftware.com/csharp/ocr/examples/csharp-tesseract-multithreading-for-speed/) 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. ```csharp :path=/static-assets/ocr/content-code-examples/how-to/input-system-drawing-read-anybitmap.cs ```

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é](https://ironsoftware.com/csharp/ocr/docs/).

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](https://ironsoftware.com/csharp/ocr/get-started/linux/), [macOS](https://ironsoftware.com/csharp/ocr/get-started/mac/) et [Docker](https://ironsoftware.com/csharp/ocr/get-started/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](https://ironsoftware.com/csharp/ocr/troubleshooting/system-drawing-common-ironocr/) 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. ```csharp :path=/static-assets/ocr/content-code-examples/how-to/input-images-read-specific-region.cs ```

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](https://ironsoftware.com/csharp/ocr/troubleshooting/crop-regions-rectangles/).

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](https://ironsoftware.com/csharp/ocr/examples/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](https://ironsoftware.com/csharp/ocr/how-to/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,246,844 | Version : 2025.12 vient de sortir