欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 产业 > 【秣厉科技】LabVIEW工具包——OpenCV 教程(7):dnn实战之文字识别

【秣厉科技】LabVIEW工具包——OpenCV 教程(7):dnn实战之文字识别

2025/3/21 23:36:45 来源:https://blog.csdn.net/VIRobotics_MR/article/details/146254152  浏览:    关键词:【秣厉科技】LabVIEW工具包——OpenCV 教程(7):dnn实战之文字识别

文章目录

  • 前言
  • 一、手写数字识别
    • 1. Net 实现方式
    • 2. Model 实现方式
  • 二、通用字符识别
    • 1. 文字检测
    • 2. 文字识别
  • 总结


前言

  1. 需要下载安装OpenCV工具包的朋友,请前往 此处 ;
  2. 系统要求:Windows系统,LabVIEW>=2018,兼容32位和64位。

一、手写数字识别

手写数字识别(mnist数据集)参考工程:https://github.com/jinay1991/LeNet-MNIST/tree/master

1. Net 实现方式

参考工具包附带的范例:examples/Molitec/OpenCV/dnn/Net_1 (TF_mnist).vi

  • 范例提供的 frozen_graph.pb 模型文件,需要用 TensorFlow 载入,所以把 new.vi 切换到 “readNetFromTensorflow” 模式;
  • 网络输入格式是 28 * 28 的单通道图片(灰度),预处理后的 Blob 形状为(1 * 1 * 28 * 28);
  • 网络输出(1 * 10)的二维Blob,10个数字分别代表识别结果为 0~9 的概率;

范例实现过程如下图所示。

在这里插入图片描述

在这里插入图片描述


2. Model 实现方式

Model 类同样位于 dnn 模块。Model 是一个基类,根据不同的应用情景,衍生出一系列子类:

Model
ClassificationModel
DetectionModel
KeypointsModel
SegmentationModel
TextDetectionModel
TextRecognitionModel
TextDetectionModel_DB
TextDetectionModel_EAST

函数选板如下图。子目录下的函数,是子类私有方法。外部的是共有方法。

在这里插入图片描述

使用 Model 类实现手写数字识别,参考范例:examples/Molitec/OpenCV/dnn/Model_1 (Classification_mnist).vi

  • 插入一个 Net 类的 new.vi,切换到 “readNetFromTensorflow”模式,载入模型到 Net 对象(与上文一样);
  • 插入一个 Model 类的 new.vi ,切换模式到 “ClassificationModel - From Net”,输入上述 Net 对象,创建ClassificationModel子类;
    (切换到 “From file” 模式,可以直接从文件载入模型。但遇到 Model 不支持的文件类型时,可以请 Net 代劳)
  • 插入 Model 类共有方法 setInputSize.vi ,设置 size 为 (28 * 28);
  • 使用 blobFromImage 处理之后,还需要 reshape 成(28 * 28)的二维Mat,以满足Model的输入要求;
  • 插入 ClassificationModel 子类的私有方法 CM_classify.vi ,输入上述的二维Mat,运行后输出结果簇result;
  • 插入一个 Model 类的 delete.vi ,销毁对象。

完整过程如下图。

在这里插入图片描述

在这里插入图片描述


二、通用字符识别

本例将用到 Model 的两个子类:TextDetectionModel 和 TextRecognitionModel,即 文字检测 + 文字识别。

参考范例:examples/Molitec/OpenCV/dnn/Model_2 (TextDetection_and_TextRecognition).vi

1. 文字检测

文字检测的任务,是获取一张图片中存在文字的区域,返回多个(旋转)矩形的ROI范围。

TextDetectionModel 的两个子类 TextDetectionModel_DB 和 TextDetectionModel_EAST 都可以实现这个功能。

Google 提供了 DB 和 EAST 模型,可供下载使用:

- DB_IC15_resnet50.onnx:
url: https://drive.google.com/uc?export=dowload&id=17_ABp79PlFt9yPCxSaarVc_DKTmrSGGf
sha: bef233c28947ef6ec8c663d20a2b326302421fa3
recommended parameter setting: -inputHeight=736, -inputWidth=1280;
description: This model is trained on ICDAR2015, so it can only detect English text instances.- DB_IC15_resnet18.onnx:
url: https://drive.google.com/uc?export=dowload&id=1vY_KsDZZZb_svd5RT6pjyI8BS1nPbBSX
sha: 19543ce09b2efd35f49705c235cc46d0e22df30b
recommended parameter setting: -inputHeight=736, -inputWidth=1280;
description: This model is trained on ICDAR2015, so it can only detect English text instances.- DB_TD500_resnet50.onnx:
url: https://drive.google.com/uc?export=dowload&id=19YWhArrNccaoSza0CfkXlA8im4-lAGsR
sha: 1b4dd21a6baa5e3523156776970895bd3db6960a
recommended parameter setting: -inputHeight=736, -inputWidth=736;
description: This model is trained on MSRA-TD500, so it can detect both English and Chinese text instances.- DB_TD500_resnet18.onnx:
url: https://drive.google.com/uc?export=dowload&id=1sZszH3pEt8hliyBlTmB-iulxHP1dCQWV
sha: 8a3700bdc13e00336a815fc7afff5dcc1ce08546
recommended parameter setting: -inputHeight=736, -inputWidth=736;
description: This model is trained on MSRA-TD500, so it can detect both English and Chinese text instances.- EAST:
Download link: https://www.dropbox.com/s/r2ingd0l3zt8hxs/frozen_east_text_detection.tar.gz?dl=1
This model is based on https://github.com/argman/EAST

本例将使用 DB_IC15_resnet18.onnx 这个模型,它只能检测英文字符。如需检测中文,请下载其他合适的模型。

  • 插入一个 Model 类的 new.vi ,切换模式到 “TextDetectionModel_DB - From file”,输入模型路径;
  • 插入多个 TextDetectionModel_DB 子类的私有方法 TDM_DB_set.vi ,通过切换模式,设置不同的参数;
    (BinaryThreshold=0.1 ,PolygonThreshold=0.3 ,UnclipRatio=2 ,MaxCandidates=200)
  • 插入一个 Model 类共有方法 setInputParams.vi ,设置预处理参数;
    (该模型输入尺寸为 1280 * 736 ,BGR通道采用不同的均值进行归一化)
  • 插入一个 TextDetectionModel 子类的私有方法 TDM_detectTextRectangles.vi ,直接输入彩色图片,无需预处理( Model 内部会根据setInputParams的参数自动进行预处理),运行后输出检测结果;
  • 插入一个 Model 类的 delete.vi ,销毁对象。

完整过程如下图。输出的 results 簇包含两项:旋转矩形列表 + 置信度列表。其中的矩形坐标都是基于原图片的,所以如果你要做可视化的话,绘图之前不需要再做尺度转化了。

在这里插入图片描述

在这里插入图片描述


2. 文字识别

文字识别的任务,是从一个包含文字的图像切片中,提取文字内容。这通常要以文字检测作为前提任务。

使用 Model 的子类 TextRecognitionModel 实现文字识别功能。

Google 提供了文字识别模型,以及相应的字符集,可供下载使用:

crnn.onnx:
url: https://drive.google.com/uc?export=dowload&id=1ooaLR-rkTl8jdpGy1DoQs0-X0lQsB6Fj
sha: 270d92c9ccb670ada2459a25977e8deeaf8380d3,
alphabet_36.txt: https://drive.google.com/uc?export=dowload&id=1oPOYx5rQRp8L6XQciUwmwhMCfX0KyO4b
parameter setting: -rgb=0;
description: The classification number of this model is 36 (0~9 + a~z).The training dataset is MJSynth.crnn_cs.onnx:
url: https://drive.google.com/uc?export=dowload&id=12diBsVJrS9ZEl6BNUiRp9s0xPALBS7kt
sha: a641e9c57a5147546f7a2dbea4fd322b47197cd5
alphabet_94.txt: https://drive.google.com/uc?export=dowload&id=1oKXxXKusquimp7XY1mFvj9nwLzldVgBR
parameter setting: -rgb=1;
description: The classification number of this model is 94 (0~9 + a~z + A~Z + punctuations).The training datasets are MJsynth and SynthText.crnn_cs_CN.onnx:
url: https://drive.google.com/uc?export=dowload&id=1is4eYEUKH7HR7Gl37Sw4WPXx6Ir8oQEG
sha: 3940942b85761c7f240494cf662dcbf05dc00d14
alphabet_3944.txt: https://drive.google.com/uc?export=dowload&id=18IZUUdNzJ44heWTndDO6NNfIpJMmN-ul
parameter setting: -rgb=1;
description: The classification number of this model is 3944 (0~9 + a~z + A~Z + Chinese characters + special characters).The training dataset is ReCTS (https://rrc.cvc.uab.es/?ch=12).

本例使用模型 crnn_cs.onnx 和字符集 alphabet_94.txt,只能识别英文。如需中文,可使用 crnn_cs_CN.onnx 和 alphabet_3944.txt 。

  • 插入一个 Model 类的 new.vi ,切换模式到 “TextRecognitionModel - From file”,输入模型路径;
  • 插入一个 TextRecognitionModel 私有方法 TRM_setDecodeType.vi,输入参数 CTC-greedy;
  • 插入一个 TextRecognitionModel 私有方法 TRM_setVocabulary.vi,输入字符集数组;
  • 插入一个 Model 共有方法 setInputParams.vi ,设置预处理参数;
    (该模型输入尺寸为 100 * 32 ,BGR通道采用相同的均值 127.5 进行归一化)
  • 插入一个 TextRecognitionModel 私有方法 TRM_recognize.vi ,切换成 single 模式,每次只识别一个图像切片;
  • 将上述文字检测的结果,用For循环展开,对原图片进行ROI切片,依次输入到 TRM_recognize.vi ,同样无需预处理。每一次循环,得到一个字符串;
  • 插入一个 Model 类的 delete.vi ,销毁对象。

完整过程如下图。其中,boxPoints 函数提取旋转矩形的四个点坐标,boundingRect 函数计算点集的最小矩形边界,二者结合就把 “旋转矩形” 变成了 “最小外接矩形”,从而方便对图像进行ROI提取。二者都位于imgproc选板。

在这里插入图片描述


工具包附带的范例,结合了文字检测+文字识别,并做了可视化处理。效果如下图:

在这里插入图片描述

在这里插入图片描述


总结

  1. 本系列博文作为LabVIEW工具包—OpenCV的教程,将以专栏的形式陆续发布和更新。
  2. 对工具包感兴趣的朋友,欢迎下载试用:秣厉科技 - LabVIEW工具包 - OpenCV
  3. 各位看官有什么想法、建议、吐槽、批评,或新奇的需求,也欢迎留言讨论。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词