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;
}
}
}
Stap 3 – Uitbreiden van de audit (optional but recommended)
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.