C#: estrae testo da immagini o PDF scansionati con OCR

2024-01-17 01:39:15 Tesia tian

Nell'era digitale di oggi, estrarre testo da immagini o PDF scansionati è un requisito comune per varie applicazioni. Il riconoscimento ottico dei caratteri (OCR) è una tecnologia che consente ai computer di riconoscere ed estrarre testo da tali documenti. Con esso, possiamo convertire facilmente immagini e PDF scansionati in formati modificabili e ricercabili, semplificando l'elaborazione e l'analisi del contenuto testuale. In questo blog esploreremo come farlo estrai testo da immagini e PDF scansionati con OCR in C#.

Librerie C# per l'estrazione di testo da immagini e PDF scansionati

Per estrarre il testo dalle immagini, utilizzeremo Spire.OCR for .NET biblioteca. Spire.OCR for .NET è una potente libreria progettata specificamente per estrarre testo da immagini nelle applicazioni .NET. Supporta vari formati di immagine come BMP, JPG, PNG, TIFF e GIF.

Ecco i passaggi per installare Spire.OCR for .NET:

  • Modifica la piattaforma di destinazione della tua soluzione in x64.
  • C#: Extract Text from Images or Scanned PDFs with OCR

  • Installa Spire.OCR da NuGet eseguendo il comando seguente nella console di gestione pacchetti NuGet:
    Install-Package Spire.OCR
  • Apri la cartella della soluzione e vai alla directory "packages\Spire.OCR.1.8.0\runtimes\win-x64\native". Copia i file DLL da questa directory e incollali nella cartella "Debug" della tua soluzione.

C#: Extract Text from Images or Scanned PDFs with OCR

Per estrarre il testo dai PDF scansionati, dobbiamo prima convertire il documento PDF in immagini. Per questa attività utilizzeremo la libreria Spire.PDF for .NET Una volta completata la conversione, possiamo utilizzare Spire.OCR per estrarre il testo dalle immagini risultanti.

È possibile installare Spire.PDF for .NET da NuGet eseguendo il comando seguente nella console di gestione pacchetti NuGet:

Install-Package Spire.PDF

Estrai testo da immagini in C#

Spire.OCR fornisce il metodo OcrScanner.Scan() per riconoscere il testo da un'immagine. Dopo il riconoscimento è possibile ottenere il testo riconosciuto utilizzando la proprietà OcrScanner.Text.

Ecco i passaggi principali per riconoscere il testo da un'immagine utilizzando Spire.OCR:

  • Crea un'istanza della classe OcrScanner.
  • Riconoscere il testo da un'immagine utilizzando il metodo OcrScanner.Scan().
  • Ottieni il testo riconosciuto dall'oggetto OcrScanner utilizzando la proprietà OcrScanner.Text.
  • Salvare il testo in un file di testo.

Ecco un esempio di codice che mostra come riconoscere il testo da un'immagine e salvare il risultato in un file di testo:

  • C#
using Spire.OCR;
    using System.IO;
    
    namespace ReadTextFromImage
    {
        internal class Program
        {
            static void Main(string[] args)
            {
                //Specify the path of the input image file
                string imageFilePath = "Image.png";
                //Specify the path of the output text file
                string outputFilePath = "ScanImage.txt";
    
                //Call the ScanTextFromImage method to scan text from an image
                string scannedText = ScanTextFromImage(imageFilePath);
    
                //Write the text to the specified file
                File.WriteAllText(outputFilePath, scannedText);
            }
    
            public static string ScanTextFromImage(string imageFilePath)
            {
                //Instantiate an OcrScanner object
                using (OcrScanner ocrScanner = new OcrScanner())
                {
                    //Scan text from the image
                    ocrScanner.Scan(imageFilePath);
    
                    //Get the recognized text from the OcrScanner object
                    IOCRText text = ocrScanner.Text;
    
                    //Return the text
                    return text.ToString();
                }
            }
        }
    }

C#: Extract Text from Images or Scanned PDFs with OCR

Estrai testo da immagini con coordinate in C#

L'estrazione delle coordinate è utile quando è necessario identificare la posizione esatta di elementi di testo specifici nell'immagine. Con Spire.OCR puoi recuperare il testo riconosciuto in blocchi o righe. Per ogni blocco, puoi ottenere informazioni dettagliate sulla posizione, comprese le coordinate xey, nonché la larghezza e l'altezza.

Ecco i passaggi principali per estrarre il testo insieme alle informazioni sulla posizione da un'immagine utilizzando Spire.OCR:

  • Crea un'istanza della classe OcrScanner.
  • Riconoscere il testo da un'immagine utilizzando il metodo OcrScanner.Scan().
  • Ottieni il testo riconosciuto dall'oggetto OcrScanner utilizzando la proprietà OcrScanner.TextOcrScanner.Text.
  • Scorrere i blocchi di testo del testo riconosciuto.
  • Per ogni blocco, ottieni le informazioni sul testo e sulla posizione utilizzando le proprietà IOCRTextBlock.Text e IOCRTextBlock.Box, quindi aggiungi il risultato a un elenco di stringhe.
  • Salva il contenuto dell'elenco in un file di testo.

Ecco un esempio di codice che mostra come riconoscere il testo insieme alle informazioni sulla posizione da un'immagine e salvare il risultato in un file di testo:

  • C#
using Spire.OCR;
    using System.Collections.Generic;
    using System.IO;
    
    namespace ReadTextFromImageWithCoordinates
    {
        internal class Program
        {
            static void Main(string[] args)
            {
                //Specify the path of the input image file
                string imagePath = "Image.png";
                //Specify the path of the output text file
                string outputFile = "ScanImageWithCoordinates.txt";
    
                //Call the ScanTextFromImageWithCoordinates method to extract text and its area information from the image
                List<string> extractedText = ScanTextFromImageWithCoordinates(imagePath);
    
                //Write the result to the specified file
                File.WriteAllLines(outputFile, extractedText);
            }
    
            //Retrieve the text blocks along with their location information (x, y, width, height) from an image
            public static List<string> ScanTextFromImageWithCoordinates(string imageFilePath)
            {
                //Create a list
                List<string> extractedText = new List<string>();
    
                //Instantiate an OcrScanner object
                using (OcrScanner ocrScanner = new OcrScanner())
                {
                    //Scan text from the image
                    ocrScanner.Scan(imageFilePath);
                    //Get the scanned text
                    IOCRText text = ocrScanner.Text;
    
                    //Iterate through each text block
                    foreach (IOCRTextBlock block in text.Blocks)
                    {
                        //Append the text of each block and its location information to the list
                        extractedText.Add($"Text: {block.Text}\nRectangular Area: {block.Box}");
                    }
                }
    
                return extractedText;
            }
        }
    }

Estrai testo da PDF scansionati in C#

Per estrarre il testo dai PDF scansionati, dobbiamo seguire un processo in due passaggi. Innanzitutto, utilizziamo Spire.PDF per convertire i PDF scansionati in immagini. Quindi, utilizziamo Spire.OCR per estrarre il testo da quelle immagini.

Ecco i passaggi principali per riconoscere il testo da un PDF scansionato utilizzando Spire.PDF e Spire.OCR:

  • Crea un'istanza della classe PdfDocument.
  • Carica un documento PDF utilizzando il metodo PdfDocument.LoadFromFile().
  • Scorri le pagine del documento PDF.
  • Converti ogni pagina in un oggetto Immagine utilizzando il metodo PdfDocument.SaveAsImage().
  • Salva l'oggetto Immagine in un flusso utilizzando il metodo Image.Save().
  • Crea un'istanza della classe OcrScanner.
  • Riconoscere il testo dal flusso utilizzando il metodo OcrScanner.Scan().
  • Ottieni il testo riconosciuto utilizzando la proprietà IOCRText.Text e aggiungilo a un elenco di stringhe.
  • Salva il contenuto dell'elenco in un file di testo.

Ecco un esempio di codice che mostra come riconoscere il testo da un PDF scansionato e salvare il risultato in un file di testo:

  • C#
using Spire.OCR;
    using Spire.Pdf;
    using System.Collections.Generic;
    using System.Drawing;
    using System.Drawing.Imaging;
    using System.IO;
    
    namespace ReadTextFromScannedPDF
    {
        internal class Program
        {
            static void Main(string[] args)
            {
                //Specify the path of the scanned PDF file
                string pdfFilePath = "Sample.pdf";
                //Specify the path of the output text file
                string outputFilePath = "ScanPDF.txt";
    
                //Extract text from the scanned PDF
                List<string> extractedText = ExtractTextFromScannedPDF(pdfFilePath);
    
                //Write the text to the specified file
                File.WriteAllLines(outputFilePath, extractedText);
            }
    
            //Extract text from a scanned PDF
            public static List<string> ExtractTextFromScannedPDF(string pdfFilePath)
            {
                //Create a list to store the extracted text
                List<string> extractedText = new List<string>();
    
                //Create an instance of the PdfDocument class
                using (PdfDocument document = new PdfDocument())
                {
                    //Load the PDF document
                    document.LoadFromFile(pdfFilePath);
    
                    //Iterate through each page of the document
                    for (int pageIndex = 0; pageIndex < document.Pages.Count; pageIndex++)
                    {
                        //Convert the page to an image
                        using (Image image = document.SaveAsImage(pageIndex, 300, 300))
                        {
                            //Create a memory stream to hold the image data
                            using (MemoryStream stream = new MemoryStream())
                            {
                                //Save the image to the memory stream in PNG format
                                image.Save(stream, ImageFormat.Png);
                                stream.Position = 0;
    
                                //Scan the text from the image and add it to the list
                                string text = ScanTextFromImageStream(stream);
                                extractedText.Add(text);
                            }
                        }
                    }
                }
    
                //Return the list
                return extractedText;
            }
    
            //Scan text from an image stream
            public static string ScanTextFromImageStream(Stream stream)
            {
                //Create an instance of the OcrScanner class
                using (OcrScanner ocrScanner = new OcrScanner())
                {
                    //Scan the text from the image stream in PNG format
                    ocrScanner.Scan(stream, OCRImageFormat.Png);
                    IOCRText text = ocrScanner.Text;
    
                    //Return the text
                    return text.ToString();
                }
            }
        }
    }

Ottieni una licenza gratuita

Per sperimentare appieno le funzionalità di Spire.OCR for .NET o Spire.PDF for .NET senza limitazioni di valutazione, puoi richiedere una licenza di prova gratuita di 30 giorni.

Conclusione

Questo post del blog ha dimostrato come estrarre testo da immagini e documenti PDF scansionati in C#. In caso di domande, non esitate a pubblicarle sul nostro forum o inviarle al nostro team di supporto via e-mail.

Guarda anche