Comment utiliser les images d'entrée pour le traitement OCR en C#

Comment lire à partir de flux en C#35 ; pour l'OCR

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

IronOCR lit les données d'image directement à partir de flux en C# en passant le flux aux constructeurs OcrInput ou OcrImageInput, ce qui permet un traitement OCR efficace sans enregistrer les fichiers sur le disque.

Un flux est un flux continu d'informations binaires qui peuvent être lues ou écrites. En programmation, les flux traitent efficacement les données trop volumineuses pour la mémoire en les traitant en morceaux gérables.

Les méthodes d'importation d'IronOcr acceptent directement les flux de données d'images. Transmettez les données du flux à une méthode d'importation, qui gère automatiquement toutes les étapes nécessaires. Pour les scénarios avancés, explorez la classe OcrInput qui offre des options étendues pour la préparation de divers formats d'entrée.

Démarrage rapide : Utiliser un flux pour la saisie OCR en quelques secondes

Cet exemple démontre l'OCR immédiate en alimentant un System.IO.Stream dans IronOcr, en sautant les chemins d'accès aux fichiers et en récupérant le texte reconnu avec un minimum de code.

Nuget IconCommencez dès maintenant à créer des PDF avec NuGet :

  1. Installez IronOCR avec le gestionnaire de packages NuGet

    PM > Install-Package IronOcr

  2. Copiez et exécutez cet extrait de code.

    using var input = new IronOcr.OcrInput(stream);
    var result = new IronOcr.IronTesseract().Read(input);
  3. Déployez pour tester sur votre environnement de production.

    Commencez à utiliser IronOCR dans votre projet dès aujourd'hui grâce à un essai gratuit.
    arrow pointer


Comment lire des flux avec IronOCR?

<TODO : Ajouter une image ici -->

Tout d'abord, instanciez la classe IronTesseract pour effectuer l'OCR. Utilisez la méthode FromFile de AnyBitmap pour importer le fichier image. Cet objet AnyBitmap convertit les données de l'image en un flux. Ensuite, utilisez l'instruction using pour créer l'objet OcrImageInput en transmettant le flux d'images avec la méthode GetStream. Enfin, utilisez la méthode Read pour effectuer la reconnaissance optique de caractères (OCR).

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

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

// Read image file to AnyBitmap
AnyBitmap anyBitmap = AnyBitmap.FromFile("Potter.tiff");

// Import image stream
using var imageInput = new OcrImageInput(anyBitmap.GetStream());
// Perform OCR
OcrResult ocrResult = ocrTesseract.Read(imageInput);
$vbLabelText   $csharpLabel

L'OCR basée sur les flux est utile aux applications web qui reçoivent des téléchargements d'images, traitent des images provenant de bases de données ou traitent des données temporaires qui ne doivent pas être écrites sur le disque. L'approche par flux s'intègre parfaitement aux objets System.Drawing et à d'autres bibliothèques de manipulation d'images.

Pourquoi utiliser des flux pour l'OCR?

Travailler avec des flux présente plusieurs avantages pour les développeurs .NET :

  1. Efficacité de la mémoire : Traite les données par morceaux plutôt que de charger des fichiers entiers en mémoire
  2. Sécurité : Traiter des documents sensibles sans créer de fichiers temporaires sur le disque
  3. Performance : Élimination de la surcharge d'E/S des opérations du système de fichiers
  4. Flexibilité : Travaillez avec des téléchargements web, des BLOB de base de données et des transformations en mémoire

Pour le traitement de documents de plusieurs pages ou la manipulation de flux PDF, IronOcr conserve la même API simple tout en offrant des performances robustes. Lorsque vous travaillez avec des documents numérisés, vous pouvez également tirer parti des capacités d'IronOcr pour lire efficacement des documents numérisés grâce au traitement en flux.

Comment puis-je spécifier une région de numérisation pour l'OCR en flux ?

<TODO : Ajouter une image ici -->

Pour améliorer les performances sur les grandes images et obtenir des lectures spécifiques de certaines régions, utilisez la classe CropRectangle. Le constructeur de l'OcrImageInput accepte un objet CropRectangle comme second paramètre, ce qui vous permet de spécifier quelle région du document image doit être lue. L'exemple de code ci-dessous précise que seuls le numéro de chapitre et la région du titre doivent être lus.

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

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

// Read image file to AnyBitmap
AnyBitmap anyBitmap = AnyBitmap.FromFile("Potter.tiff");

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

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

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

Cette technique est particulièrement utile lorsque vous devez OCR une région spécifique d'une image ou lorsque vous traitez des documents structurés où le texte apparaît à des endroits prévisibles. Pour des scénarios plus complexes impliquant des tableaux ou des données structurées, découvrez comment lire des tableaux dans des documents.

À quoi ressemble la région de balayage dans la sortie ?

OCR demo : document dans Photo Viewer avec texte extrait 'Chapter Eight The Deathday Party' montré dans la console de débogage

Quelles sont les techniques avancées de traitement des flux que je peux utiliser ?

Lorsque vous travaillez avec des flux, exploitez les fonctionnalités supplémentaires d'IronOCR pour améliorer la précision de la reconnaissance. Les filtres d'optimisation d'image peuvent être appliqués directement aux données de flux avant le traitement OCR :

using IronOcr;
using IronSoftware.Drawing;
using System.IO;

// Process stream with filters
public string ProcessStreamWithFilters(Stream imageStream)
{
    IronTesseract ocrTesseract = new IronTesseract();

    // Configure for better accuracy
    ocrTesseract.Configuration.BlackListCharacters = "~`$#^*_}{][|\\";
    ocrTesseract.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd;

    using var input = new OcrImageInput(imageStream);

    // Apply preprocessing filters
    input.Deskew();
    input.DeNoise();
    input.Sharpen();

    var result = ocrTesseract.Read(input);
    return result.Text;
}
using IronOcr;
using IronSoftware.Drawing;
using System.IO;

// Process stream with filters
public string ProcessStreamWithFilters(Stream imageStream)
{
    IronTesseract ocrTesseract = new IronTesseract();

    // Configure for better accuracy
    ocrTesseract.Configuration.BlackListCharacters = "~`$#^*_}{][|\\";
    ocrTesseract.Configuration.PageSegmentationMode = TesseractPageSegmentationMode.AutoOsd;

    using var input = new OcrImageInput(imageStream);

    // Apply preprocessing filters
    input.Deskew();
    input.DeNoise();
    input.Sharpen();

    var result = ocrTesseract.Read(input);
    return result.Text;
}
$vbLabelText   $csharpLabel

Pour améliorer le traitement des images, envisagez d'utiliser l'Assistant de filtrage afin de déterminer automatiquement les meilleures étapes de prétraitement pour vos types de documents spécifiques. En outre, lorsque vous traitez des images tournées ou de travers dans vos flux, la fonctionnalité fixer l'orientation de l'image peut améliorer de manière significative la précision de l'OCR.

Comment travailler avec différentes sources de flux ?

IronOcr gère diverses sources de flux de manière transparente. Qu'il s'agisse de traiter des téléchargements à partir d'un formulaire web, d'extraire des images d'une base de données ou de convertir des formats, l'API reste cohérente :

// From MemoryStream
byte[] imageBytes = GetImageBytesFromDatabase();
using var memoryStream = new MemoryStream(imageBytes);
using var input = new OcrImageInput(memoryStream);

// From FileStream
using var fileStream = new FileStream("document.png", FileMode.Open);
using var input2 = new OcrImageInput(fileStream);

// From network stream
using var webClient = new WebClient();
using var networkStream = webClient.OpenRead("https://example.com/image.jpg");
using var input3 = new OcrImageInput(networkStream);
// From MemoryStream
byte[] imageBytes = GetImageBytesFromDatabase();
using var memoryStream = new MemoryStream(imageBytes);
using var input = new OcrImageInput(memoryStream);

// From FileStream
using var fileStream = new FileStream("document.png", FileMode.Open);
using var input2 = new OcrImageInput(fileStream);

// From network stream
using var webClient = new WebClient();
using var networkStream = webClient.OpenRead("https://example.com/image.jpg");
using var input3 = new OcrImageInput(networkStream);
$vbLabelText   $csharpLabel

Pour des résultats optimaux, pensez à ajuster les paramètres DPI lorsque vous travaillez avec des flux à faible résolution. IronOCR gère automatiquement la détection du DPI, mais une configuration manuelle peut améliorer la précision pour des cas d'utilisation spécifiques. Lorsque vous travaillez avec des documents multipages, envisagez de traiter les fichiers TIFF et GIF multipages par le biais du traitement des flux.

Comment traiter les résultats de l'OCR à partir de flux ?

Après avoir traité votre flux, IronOCR fournit des objets de résultat riches qui vont au-delà de la simple extraction de texte. La classe OcrResult contient des informations détaillées sur le texte reconnu, notamment les scores de confiance, le positionnement et la structure :

// Process stream and analyze results
using var input = new OcrImageInput(stream);
var result = new IronTesseract().Read(input);

// Access detailed results
foreach (var page in result.Pages)
{
    Console.WriteLine($"Page {page.PageNumber} Confidence: {page.Confidence}%");

    foreach (var paragraph in page.Paragraphs)
    {
        Console.WriteLine($"Paragraph: {paragraph.Text}");
        Console.WriteLine($"Location: X={paragraph.X}, Y={paragraph.Y}");
    }
}

// Export results
string text = result.Text;
string searchablePdf = result.SaveAsSearchablePdf("output.pdf");
string hocrHtml = result.SaveAsHocrHtml("output.html");
// Process stream and analyze results
using var input = new OcrImageInput(stream);
var result = new IronTesseract().Read(input);

// Access detailed results
foreach (var page in result.Pages)
{
    Console.WriteLine($"Page {page.PageNumber} Confidence: {page.Confidence}%");

    foreach (var paragraph in page.Paragraphs)
    {
        Console.WriteLine($"Paragraph: {paragraph.Text}");
        Console.WriteLine($"Location: X={paragraph.X}, Y={paragraph.Y}");
    }
}

// Export results
string text = result.Text;
string searchablePdf = result.SaveAsSearchablePdf("output.pdf");
string hocrHtml = result.SaveAsHocrHtml("output.html");
$vbLabelText   $csharpLabel

L'objet résultat fournit également des méthodes pour exporter vers des PDF consultables ou hOCR HTML format, ce qui facilite la création d'archives de documents consultables à partir de vos flux d'entrée. À des fins de débogage, vous pouvez utiliser la fonction de mise en évidence des textes pour visualiser ce qu'IronOcr a détecté dans vos images.

Quelles sont les considérations de performance à connaître ?

Lorsque vous traitez plusieurs flux ou que vous mettez en œuvre des solutions d'OCR à haut débit, tenez compte de ces stratégies d'optimisation :

  1. Réutiliser les instances IronTesseract : Créez une instance unique et réutilisez-la pour plusieurs opérations
  2. Mettre en œuvre le suivi de la progression : Pour les flux importants, utilisez le suivi de la progression pour surveiller l'état du traitement
  3. Processus en parallèle : IronOCR prend en charge le traitement simultané de plusieurs flux
  4. Optimiser la qualité de l'image : Prétraitez les flux pour garantir une résolution et une clarté optimales

Pour des performances optimales, explorez les options de configuration fast OCR et envisagez de mettre en œuvre le traitement multithread pour les opérations par lots. Lorsque vous travaillez avec des applications sensibles au facteur temps, la compréhension des timeouts peut vous aider à gérer efficacement les opérations d'OCR de longue durée.

Comment résoudre les problèmes courants liés aux flux de données?

Lorsque vous travaillez avec des flux, vous pouvez être confronté à des défis spécifiques. Voici des solutions à des scénarios courants :

  • Position du flux : Toujours réinitialiser la position du flux à 0 avant de passer à IronOcr
  • Disposition : Utilisez des déclarations utilisant pour assurer un nettoyage correct des ressources
  • <Prise en charge des formats : IronOcr prend en charge différents formats d'image, notamment JPEG, PNG, TIFF et BMP par le biais de flux
  • Gestion de la mémoire : Pour les flux importants, envisagez le traitement par morceaux ou les approches de diffusion en continu

Pour les documents complexes ou lorsque l'OCR standard ne donne pas de résultats satisfaisants, les fonctions de vision artificielle peuvent aider à localiser et à extraire le texte avec plus de précision. En outre, lorsque vous travaillez avec des flux de faible qualité, consultez le guide fixing low quality scans pour connaître les techniques de prétraitement qui peuvent améliorer de manière significative les taux de reconnaissance.

Pour obtenir des informations plus détaillées sur l'utilisation des flux et d'autres méthodes d'entrée, consultez nos guides pratiques et exemples de code.

Questions Fréquemment Posées

Comment puis-je effectuer une reconnaissance optique de caractères (OCR) sur des données d'image sans les enregistrer d'abord sur le disque ?

IronOcr permet de traiter directement les flux d'images en les passant aux constructeurs OcrInput ou OcrImageInput. Cela permet un traitement efficace de l'OCR sans créer de fichiers temporaires, ce qui est idéal pour traiter les téléchargements web, les BLOB de base de données ou les documents sensibles qui ne doivent pas toucher le disque.

Quels types de flux peuvent être utilisés comme entrée pour le traitement OCR ?

IronOCR accepte tout System.IO.Stream contenant des données d'image. Il peut s'agir de flux de mémoire provenant de téléchargements sur le web, de flux provenant de champs BLOB de bases de données ou de flux créés à partir de bibliothèques de manipulation d'images. La bibliothèque gère automatiquement toutes les étapes de conversion nécessaires lorsque vous passez le flux à OcrInput ou OcrImageInput.

Quelle est la manière la plus simple d'effectuer une reconnaissance optique de caractères sur un flux en C# ?

La méthode la plus rapide consiste à créer un objet OcrInput avec votre flux et à appeler la méthode Read : 'using var input = new IronOcr.OcrInput(stream) ; var result = new IronOcr.IronTesseract().Read(input);'. Ce code minimal effectue l'OCR et renvoie immédiatement le texte reconnu.

Pourquoi devrais-je utiliser des flux plutôt que des chemins d'accès aux fichiers pour l'OCR ?

L'OCR basée sur les flux avec IronOCR offre plusieurs avantages : efficacité de la mémoire en traitant les données par morceaux, sécurité renforcée en évitant les fichiers temporaires sur le disque, amélioration des performances en éliminant la surcharge des E/S de fichiers, et plus grande flexibilité lorsque l'on travaille avec des téléchargements web ou des BLOB de base de données.

Puis-je spécifier une zone spécifique d'un flux d'images à lire ?

Oui, IronOCR vous permet de définir la zone de lecture en spécifiant une région de culture lors du traitement des flux. Cette fonctionnalité vous permet de concentrer l'OCR sur des parties spécifiques de l'image sans traiter l'ensemble du document, ce qui améliore à la fois la vitesse et la précision.

Comment le traitement des flux s'intègre-t-il aux autres bibliothèques de manipulation d'images ?

L'approche par flux d'IronOCR s'intègre parfaitement aux objets System.Drawing et aux autres bibliothèques de manipulation d'images .NET. Vous pouvez utiliser la classe AnyBitmap pour convertir des images en flux à l'aide de la méthode GetStream, ce qui facilite la combinaison de l'OCR avec d'autres flux de traitement d'images.

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