# .NET Core怎么使用C#扫描并读取图片中的文字 ## 引言 在当今数字化时代,光学字符识别(OCR)技术已成为从图像中提取文本信息的重要手段。无论是扫描文档、识别车牌还是处理照片中的文字,OCR都能发挥关键作用。本文将详细介绍如何在.NET Core中使用C#实现图片文字的扫描与读取。 ## 准备工作 ### 1. 环境要求 - .NET Core 3.1或更高版本 - Visual Studio 2019/2022或VS Code - NuGet包管理器 ### 2. 安装必要的NuGet包 推荐使用以下OCR库: ```bash Install-Package Tesseract Install-Package System.Drawing.Common
dotnet new console -n OcrDemo cd OcrDemo
Tesseract是一个开源的OCR引擎,支持多种语言:
using Tesseract; using System.Drawing; var tessDataPath = @"tessdata"; // 训练数据路径 var imagePath = @"sample.png"; using (var engine = new TesseractEngine(tessDataPath, "eng", EngineMode.Default)) { using (var img = Pix.LoadFromFile(imagePath)) { using (var page = engine.Process(img)) { Console.WriteLine("识别结果:"); Console.WriteLine(page.GetText()); Console.WriteLine($"置信度: {page.GetMeanConfidence()}"); } } }
支持PNG、JPG等常见格式:
Bitmap ToBitmap(byte[] imageBytes) { using (var ms = new MemoryStream(imageBytes)) { return new Bitmap(ms); } }
Bitmap PreprocessImage(Bitmap original) { // 转换为灰度图 var grayScale = new Bitmap(original.Width, original.Height); using (var g = Graphics.FromImage(grayScale)) { var colorMatrix = new ColorMatrix(new float[][] { new float[] {.3f, .3f, .3f, 0, 0}, new float[] {.59f, .59f, .59f, 0, 0}, new float[] {.11f, .11f, .11f, 0, 0}, new float[] {0, 0, 0, 1, 0}, new float[] {0, 0, 0, 0, 1} }); using (var attributes = new ImageAttributes()) { attributes.SetColorMatrix(colorMatrix); g.DrawImage(original, new Rectangle(0, 0, original.Width, original.Height), 0, 0, original.Width, original.Height, GraphicsUnit.Pixel, attributes); } } return grayScale; }
using (var page = engine.Process(img, PageSegMode.Auto)) { // 获取逐行文本 using (var iter = page.GetIterator()) { iter.Begin(); do { Console.WriteLine(iter.GetText(PageIteratorLevel.TextLine)); } while (iter.Next(PageIteratorLevel.TextLine)); } }
下载对应语言的训练数据(.traineddata文件)到tessdata目录:
// 使用中文识别 var engine = new TesseractEngine(tessdataPath, "chi_sim", EngineMode.Default);
using System; using Tesseract; using System.Drawing; using System.IO; class Program { static void Main(string[] args) { const string tessDataPath = @"./tessdata"; const string imagePath = "invoice.jpg"; try { using (var engine = new TesseractEngine(tessDataPath, "eng+chi_sim", EngineMode.LstmOnly)) { using (var img = Pix.LoadFromFile(imagePath)) { using (var page = engine.Process(img, PageSegMode.Auto)) { Console.WriteLine("识别结果:"); Console.WriteLine(page.GetText()); Console.WriteLine("\n置信度统计:"); Console.WriteLine($"平均置信度: {page.GetMeanConfidence():P0}"); } } } } catch (Exception ex) { Console.WriteLine($"错误: {ex.Message}"); } } }
var client = new ComputerVisionClient(new ApiKeyServiceClientCredentials(key)) { Endpoint = endpoint }; var results = await client.RecognizePrintedTextInStreamAsync(true, imageStream);
通过本文介绍的方法,您可以在.NET Core应用中轻松集成OCR功能。实际应用中建议: - 根据场景选择合适的OCR引擎 - 对图像进行适当的预处理 - 处理异常情况和边缘案例
注意事项:Tesseract对训练数据有依赖,商业应用需注意AGPL许可证限制。生产环境建议考虑商业OCR解决方案。
扩展阅读: - Tesseract文档 - .NET System.Drawing最佳实践 “`
(全文约1280字,可根据需要调整具体细节)
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。