EmguCV学习笔记 VB.Net 12.3 OCR

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。

EmguCV是一个基于OpenCV的开源免费的跨平台计算机视觉库,它向C#和VB.NET开发者提供了OpenCV库的大部分功能。

教程VB.net版本请访问: EmguCV学习笔记 VB.Net 目录-CSDN博客

教程C#版本请访问: EmguCV学习笔记 C# 目录-CSDN博客

笔者的博客网址:https://blog.csdn.net/uruseibest

教程配套文件及相关说明以及如何获得pdf教程和代码,请移步: EmguCV学习笔记

学习VB.Net知识,请移步: vb.net 教程 目录_vb中如何用datagridview-CSDN博客

学习C#知识,请移步: C# 教程 目录_c#教程目录-CSDN博客

12.3 OCR

EmguCV中使用Tesseract类 进行文字识别。

Tesseract类的构造函数:

Public Sub New (

dataPath As String,

language As String,

mode As OcrEngineMode,

Optional whiteList As String = Nothing,

Optional enforceLocale As Boolean = true

)

参数说明:

  1. dataPath:存放语言识别模型文件的目录,该目录必须是tessdata。
  2. language:要用来识别的语言,例如简体中文是chi_sim.traineddata,英文是eng.traineddata。如果需要识别的内容包含多种语言,那么这里需要使用加号连接,如:chi_sim+eng,将加载简体中文和英语。需要注意的是,加载额外的语言将影响速度和准确性。
  3. mode:OCR引擎模式。这是一个OcrEngineMode枚举,它包含四个成员:TesseractOnly:速度最快;LstmOnly:精度最好,但是速度慢;TesseractLstmCombined:速度和精度比较平衡;Default:自动选择上述三种引擎。
  4. whiteList:用于指定OCR的白名单。例如,指定"1234567890"仅识别数字。请注意,白名单目前只适用于OcrEngineModel.OEM_TESSERACT_only
  5. enforceLocale:指定是否强制使用特定的区域设置。当设置为 True 时,Tesseract将强制使用特定的区域设置,这意味着它将使用与指定区域设置相关的语言模型和字典进行文本识别。例如,如果您希望在美国使用 Tesseract,可以将 enforceLocale 参数设置为 True,并将区域设置设置为 "en_US"。这样,Tesseract 将使用与美国英语相关的语言模型和字典进行文本识别,从而提高识别准确性。相反,如果将 enforceLocale 参数设置为 False,Tesseract 将不会强制使用特定的区域设置,而是使用默认的区域设置进行文本识别。

具体操作步骤:

经过构造函数后,通过SetImage方法传入需要OCR的图像,Recognize方法识别图像,但是该方法不会直接返回结果,而是通过GetUTF8Text方法获得识别出的字符串,或者通过GetCharacters方法获得Tesseract.Character结构数组,Tesseract.Character结构包含了识别出的字符串和字符串所在的区域坐标。

【代码位置:frmChapter12】Button4_Click

'OCR识别

Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click

'使用中文

Dim ocr As New Tesseract("C:\learnEmgucv\tessdata", "chi_sim", OcrEngineMode.LstmOnly)

'如果中英文都要使用,那么使用加号连接。但不要超过2个语言。

'Dim ocr As New Tesseract("C:\learnEmgucv\tessdata", "chi_sim+eng", OcrEngineMode.LstmOnly)

Dim m As New Mat("C:\learnEmgucv\ocr2.jpg", ImreadModes.Color)

ImageBox1.Image = m

'设置需要识别文字的图像

ocr.SetImage(m)

'识别

ocr.Recognize()

'获得识别结果

Dim textout As String

textout = ocr.GetUTF8Text

Console.WriteLine(textout)

'标记识别区域

Dim charout() As Tesseract.Character

charout = ocr.GetCharacters

For i As Integer = 0 To charout.Length - 1

CvInvoke.Rectangle(m, charout(i).Region, New MCvScalar(0, 0, 255), 1)

Next

ImageBox2.Image = m

End Sub

输出结果如下图所示:

图12-4 OCR获得图像中的文字

需要注意的是,识别结果和传入的图像质量有关系,请在识别前做好图像处理。

相关推荐
张人玉11 分钟前
WPF 数据绑定与转换器详解
c#·wpf·light
主宰者16 分钟前
WPF CalcBinding简化判断逻辑
c#·.net·wpf
这张生成的图像能检测吗23 分钟前
(综述)基于深度学习的制造业表面缺陷检测图像合成方法综述
人工智能·计算机视觉·图像生成·工业检测·计算机图像学
AI纪元故事会8 小时前
【计算机视觉目标检测算法对比:R-CNN、YOLO与SSD全面解析】
人工智能·算法·目标检测·计算机视觉
音视频牛哥9 小时前
SmartMediaKit:如何让智能系统早人一步“跟上现实”的时间架构--从实时流媒体到系统智能的演进
人工智能·计算机视觉·音视频·音视频开发·具身智能·十五五规划具身智能·smartmediakit
音视频牛哥10 小时前
超清≠清晰:视频系统里的分辨率陷阱与秩序真相
人工智能·机器学习·计算机视觉·音视频·大牛直播sdk·rtsp播放器rtmp播放器·smartmediakit
就是有点傻11 小时前
使用PaddleOCRSharp大模型精选文字识别
c#
LeonDL16811 小时前
【通用视觉框架】基于C#+Winform+OpencvSharp开发的视觉框架软件,全套源码,开箱即用
人工智能·c#·winform·opencvsharp·机器视觉软件框架·通用视觉框架·机器视觉框架
数据的世界0112 小时前
技术变革:为何C#与.NET是未来的开发方向
java·c#·.net
大龄Python青年12 小时前
C#快入教程:Linux安装.NET
linux·c#·.net