Met Aspose.OCR voor .NET kunt u de ingebouwde/visible tekst van de afbeeldingen lezen en valideren tegen een gecontroleerde keywordlijst – dan melden we wat er mis is. Deze gids verbetert de werkstromen met concrete, haalbare stappen die aan het einde de gist passen, plus optionele verbeteringen voor planning, rapportage en onderhoud.

Volledige voorbeeld

Voorwaarden

  • .NET 8 (of .NET 6+) SDK is geïnstalleerd.
  • NuGet toegang tot installatie Aspose.OCR.
  • Een map van beelden om te controleren (bijv. C:\Path\To\ImageArchive).
  • (Optioneel) Een Aspose-licentiebestand als u van plan bent om de beoordelingsgrens te overschrijden.

Creëer het project & toevoegen van pakketten

dotnet new console -n ImageArchiveKeywordAudit -f net8.0
cd ImageArchiveKeywordAudit
dotnet add package Aspose.OCR

Stap 1 - Maak je keywordlijst klaar

Beslist welke canonische sleutelwoorden uw afbeeldingen moeten bevatten. in de gist, zijn hardcoded voor eenvoud:

// Exact shape used in the gist
List<string> keywords = new List<string>
{
    "mountains", "beaches", "forests", "landscape"
};

** Tip (optional): ** Speel keywords in keywords.txt (een per lijn) en leg ze in List<string> op het werk om te voorkomen dat er recycle is.

Stap 2 - Initialiseren Aspose.OCR en scannen het archief

Match the gist: creëren van een OCR-motor, lijst afbeeldingen, elke bestand op de oCR en controleren voor de aanwezigheid van sleutelwoorden.

using System;
using System.Collections.Generic;
using System.IO;
using Aspose.Ocr;

namespace ImageArchiveKeywordAudit
{
    class Program
    {
        static void Main(string[] args)
        {
            // Path to the image archive directory (edit to your folder)
            string imageDirectory = @"C:\Path\To\ImageArchive";

            // Keyword list for auditing (matches the gist approach)
            List<string> keywords = new List<string>
            {
                "mountains", "beaches", "forests", "landscape"
            };

            // Initialize Aspose.OCR API (license is optional)
            // new License().SetLicense("Aspose.Total.lic");
            using (AsposeOcr api = new AsposeOcr())
            {
                // Process each JPG in the directory (same filter style as the gist)
                foreach (string imagePath in Directory.GetFiles(imageDirectory, "*.jpg"))
                {
                    // Extract text from the image
                    string extractedText = api.RecognizeImageFile(imagePath);

                    // Audit the extracted text against the keyword list
                    bool containsKeywords = AuditText(extractedText, keywords);

                    // Output the results
                    Console.WriteLine($"Image: {imagePath} - Contains Keywords: {containsKeywords}");
                }
            }
        }

        // Method to audit extracted text against a list of keywords (as in gist)
        static bool AuditText(string text, List<string> keywords)
        {
            foreach (string keyword in keywords)
            {
                if (text.Contains(keyword, StringComparison.OrdinalIgnoreCase))
                {
                    return true;
                }
            }
            return false;
        }
    }
}

U kunt het rapporteren en filteren verbeteren terwijl u dezelfde OCR-core houdt.

3.a Filter meerdere beeldtypen

// Replace the single GetFiles with this multi-pattern approach
string[] patterns = new[] { "*.jpg", "*.jpeg", "*.png", "*.tif", "*.tiff", "*.bmp" };
var imageFiles = new List<string>();
foreach (var pattern in patterns)
    imageFiles.AddRange(Directory.GetFiles(imageDirectory, pattern, SearchOption.TopDirectoryOnly));

3.b Het vastleggen van welke sleutelwoorden overeenkomt / vermist

// After OCR:
var matched = new List<string>();
var missing = new List<string>();

foreach (var k in keywords)
    (extractedText.IndexOf(k, StringComparison.OrdinalIgnoreCase) >= 0 ? matched : missing).Add(k);

Console.WriteLine($"Image: {Path.GetFileName(imagePath)} | Matched: [{string.Join(", ", matched)}] | Missing: [{string.Join(", ", missing)}]");

3.c Schrijf een CSV-rapport

string reportPath = Path.Combine(imageDirectory, "audit-report.csv");
bool writeHeader = !File.Exists(reportPath);

using (var sw = new StreamWriter(reportPath, append: true))
{
    if (writeHeader)
        sw.WriteLine("Image,ContainsKeywords,Matched,Missing");

    sw.WriteLine($"\"{Path.GetFileName(imagePath)}\",{matched.Count > 0},\"{string.Join(";", matched)}\",\"{string.Join(";", missing)}\"");
}

Stap 4 – Run van PowerShell of Batch

Maak een eenvoudige PowerShell runner run-audit.ps1:

# Adjust paths as needed
$solutionRoot = "C:\Path\To\ImageArchiveKeywordAudit"
$imageDir     = "C:\Path\To\ImageArchive"

# Build and run
dotnet build "$solutionRoot" -c Release
& "$solutionRoot\bin\Release\net8.0\ImageArchiveKeywordAudit.exe"

Optioneel: Als u het programma wijzigt om argumenten te accepteren, draai het als:ImageArchiveKeywordAudit.exe "C:\Images" "C:\keywords.txt"

Stap 5 — Schema herhaalde audits (Windows Task Scheduler)

Gebruik schtasks Dagelijks op 2am:

schtasks /Create /TN "ImageKeywordAudit" /TR "\"C:\Path\To\ImageArchiveKeywordAudit\bin\Release\net8.0\ImageArchiveKeywordAudit.exe\"" /SC DAILY /ST 02:00

Log output naar bestand door het bevel in een .cmd die redirect stdout/stderr:ImageArchiveKeywordAudit.exe >> C:\Path\To\Logs\audit-%DATE%.log 2>&1

Beste praktijken

  • Houd een canonische keywordbron. Houd uw lijst in Git of een CMDB; kwartaal beoordelen.
  • Normaliseren OCR-tekst. Trim whitespace, unify hyphens en Unicode look-alikes vóór matching.
  • Tune prestaties. Batch door mappen; toevoegen van paralleliteit alleen na het meten van I/O en CPU.
  • Kwaliteit in, kwaliteit uit. Rein scans (deskew/denoise) verbeteren aanzienlijk match tarieven.
  • Audit scope. Overweeg afzonderlijke keyword sets per collectie (bijv. “landscape”, “product” en “forms”).
  • Traceability. Behoud CSV-rapporten met timestamps voor het veranderen van geschiedenis en snelle diffing.

Troubleshooting

  • Vuite OCR-uitgang: Controleer beeldoriëntie en contrast; probeer een ander formaat (*.png, *.tif).
  • False negatieven: Voeg plural/stem varianten of synoniemen toe aan uw lijst (bijv. “beach”, “Beaches”).
  • Throughput problemen: Limit concurrerende runs; vermijd het scannen van netwerkonderdelen over langzame links.

More in this category