【印刷字符识别】OCR键盘数字+字母识别【含Matlab源码 807期】

这篇具有很好参考价值的文章主要介绍了【印刷字符识别】OCR键盘数字+字母识别【含Matlab源码 807期】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。
🍎个人主页:海神之光
🏆代码获取方式:
海神之光Matlab王者学习之路—代码获取方式
⛳️座右铭:行百里者,半于九十。

更多Matlab仿真内容点击👇
Matlab图像处理(进阶版)
路径规划(Matlab)
神经网络预测与分类(Matlab)
优化求解(Matlab)
语音处理(Matlab)
信号处理(Matlab)
车间调度(Matlab)

⛄一、OCR简介

1 什么是OCR技术?
OCR英文全称是Optical Character Recognition,中文叫做光学字符识别。它是利用光学技术和计算机技术把印在或写在纸上的文字读取出来,并转换成一种计算机能够接受、人又可以理解的格式。文字识别是计算机视觉研究领域的分支之一,而且这个课题已经是比较成熟了,并且在商业中已经有很多落地项目了。

2 OCR技术的分类
2.1 按主题划分:手写体识别和印刷体识别。
(1)印刷体大多都是规则的字体,技术上的难点是,在印刷过程中字体很可能变得断裂或者墨水粘连,使得OCR识别异常困难。当然这些都可以通过一些图像处理的技术帮他尽可能的还原,进而提高识别率。总的来说,单纯的印刷体识别在业界已经能做到很不错了,但说100%识别是肯定不可能的,但是说识别得不错那是没毛病。

(2)手写体识别一直是OCR界一直想攻克的难关,但是时至今天,识别难度还是很大。为什么手写体识别这么难识别?因为人类手写的字往往带有个人特色,每个人写字的风格基本不一样,虽然人类可以读懂你写的文字,但是机器缺很难。印刷体一般都比较规则,字体都基本就那几十种,机器学习这几十种字体并不是一件难事,但是手写体,每个人都有一种字体的话,那机器该学习多少字体啊?这就是难度所在。
【印刷字符识别】OCR键盘数字+字母识别【含Matlab源码 807期】,Matlab图像处理(进阶版),matlab
2.2 按识别的内容来分类
对于我们国人来说主要分成三类:汉字、英文字母、阿拉伯数字。识别数字是最简单了,毕竟要识别的字符只有0~9,而英文字母识别要识别的字符有26个(如果算上大小写的话那就52个),而中文识别,要识别的字符高达数千个因为汉字的字形各不相同,结构非常复杂(比如带偏旁的汉字)如果要将这些字符都比较准确地识别出来,是一件相当具有挑战性的事情。但是,并不是所有应用都需要识别如此庞大的汉字集,比如车牌识别,我们的识别目标仅仅是数十个中国各省和直辖市的简称,难度就大大减少了。当然,在一些文档自动识别的应用是需要识别整个汉字集的,所以要保证识别的整体的识别还是很困难的。

3 OCR流程
【印刷字符识别】OCR键盘数字+字母识别【含Matlab源码 807期】,Matlab图像处理(进阶版),matlab
判断页面上的文本朝向,因为我们得到的这页文档往往都不是很完美的,很可能带有倾斜或者污渍,那么我们要做的第一件事就是进行图像预处理,做角度矫正和去噪。
对文档版面进行分析,进每一行进行行分割,把每一行的文字切割下来,最后再对每一行文本进行列分割,切割出每个字符,将该字符送入训练好的OCR识别模型进行字符识别,得到结果。
对其进行识别结果的矫正和优化,比如我们可以设计一个语法检测器,去检测字符的组合逻辑是否合理。比如,考虑单词Because,我们设计的识别模型把它识别为8ecause,那么我们就可以用语法检测器去纠正这种拼写错误,并用B代替8并完成识别矫正。这样子,

整个OCR流程就走完了。从大的模块总结而言,一套OCR流程可以分为:
版面分析 -> 预处理-> 行列切割 -> 字符识别 -> 后处理识别矫正
从上面的流程图可以看出,要做字符识别并不是单纯一个OCR模块就能实现的(如果单纯的OCR模块,识别率相当低),都要各个模块的组合来保证较高的识别率。

⛄二、部分源代码

%-----------------------------------------
% 键盘字符识别
%----------------------------------------
warning off %执行时有时会出现警告,关掉警告
clc, close all, clear all %clc清空命令行窗口;close all关闭所有的Figure窗口;clear all清除工作空间的所有变量,(函数,和MEX文件)
% 读入图像
imagen=imread(‘7.jpg’);%结尾加分号可是读取的数据直接保存进变量,不用显示在命令行窗口
% 显示图像
figure,imshow(imagen);%主要是为了防止imshow自动覆盖了当前的figure窗口,如果imshow前面加上了figure可以另取一个独立的figure窗口来显示图像
title(‘输入图像’)
% 转换为灰度图像
if size(imagen,3)3 %返回m第三个维度的长度,并赋值给num,如果m的维度等于3则返回1。 判断图片是否为真彩图(Truecolor image)。图像数据分成两类:一类是真彩图,对应的三维数组,其中前两维为图像的高度和宽度,第三维则分别为RGB(红绿蓝)三种基色的值,所以长度必然为3。
imagen=rgb2gray(imagen);%I = rgb2gray(RGB),意思是将真彩色图像RGB转换为灰度强度图像I 。
end
% 二值化
%图像二值化( Image Binarization)就是将图像上的像素点的灰度值设置为0或255,也就是将整个图像呈现出明显的黑白效果的过程。在数字图像处理中,二值图像占有非常重要的地位,图像的二值化使图像中数据量大为减少,从而能凸显出目标的轮廓。
g_max=double(max(max(imagen))); %G3是个二维,max(G3)是对G3的每一列求最大,(max(max(G3)))就是求二维G3中最大的数
g_min=double(min(min(imagen))); %在自然中每一种颜色都有一个值,通常由RGB(即红、绿、蓝三原色)按比例混合就会得到各种不同的颜色。阈值处理图片是对颜色进行特殊处理的一种方法。
T=round(g_max-(g_max-g_min)/3);%round的功能为四舍五入 %最佳阈值二值化,灰度的最大值减去(最大值与最下值的1/3梯度)。详细说,阈值是一个转换临界点,不管你的图片是什么样的彩色,它最终都会把图片当黑白图片处理,也就是说你设定了一个阈值之后,它会以此值作标准,凡是比该值大的颜色就会转换成白色,低于该值的颜色就转换成黑色,所以最后的结果是,你得到一张黑白的图片。
[a,b]=size(imagen);%imagen为三维,a为imagen的第一维,b为imagen的第二维
imagen=im2bw(imagen,T/256);%把灰度图像变为二值图像,T/256作为参考值,如果imagen大于imagen*(T/256),则为255,反之为0。BW = im2bw(I, level),level范围为(0,1)
figure,imshow(imagen);
title(‘分割后图像’)
% 删除小面积对象
imagen = bwareaopen(imagen,150);%BW2 = bwareaopen(BW,P,conn),删除二值图像BW中面积小于P的对象,默认情况下conn使用8邻域。消除0.
figure,imshow(imagen);
title(‘删除小面积对象后’)
%储存图像矩阵
word=[ ];
re=imagen;
%载入模板
load templates
global templates %global定义全局变量,在不同的m文件中值都是一样,但是在不同的m文件中,都需要定义。
% 计算模板文件中的字母数
num_letras=size(templates,2);
while 1%ctrl+c退出正在运行
%分行
[fl re]=lines(re);%(re)表示输入图像,fl第一行并且裁掉四周无用边,re剩余行并且裁掉四周无用边
imgn=fl;%将第一行的数据复制给中间变量imgn
%-----------------------------------------------------------------
% 标记和计数连接的组件
[L Ne] = bwlabel(imgn);%[L,num] = bwlabel(BW,n)这里num返回的就是BW中连通区域的个数。返回一个和BW大小相同的L矩阵。n的值为4或8,表示是按4连通寻找区域,还是8连通寻找,默认为8
for n=1:Ne
[r,c] = find(L
n);
% 提取字母
n1=imgn(min®:max®,min©:max©);% min®行到max®行,min©行到max©行
% 调整字母大小(相同大小的模板)
img_r=imresize(n1,[42 24]);%对图形进行缩放
%-------------------------------------------------------------------
% 调用fcn将图像转换为文本
letter=read_letter(img_r,num_letras);%将图片中字母提取出来并经过缩放后的数据,将与数据库中作对比后相似的字符写出来
% 字母连接
word=[word letter];
end
function letter=read_letter(imagn,num_letras)
%计算模板和输入图像之间的相关性,其输出是包含字母的字符串
% “imagn”的大小必须为42 x 24像素
% Example:
% imagn=imread(‘D.bmp’);
% letter=read_letter(imagn)
global templates
comp=[ ];
for n=1:num_letras
sem=corr2(templates{1,n},imagn);%分块矩阵调用,用{};corr2()是求两个矩阵相似度的函数,两个矩阵越相似,值越大,最大为1。(有时为相同时为NaN)
comp=[comp sem];%矩阵相加
end
vd=find(compmax(comp));%comp=[1 2 3 4 5 6 7 8];vd=find(compmax(comp));返回值vd =8
%------------*-
letter=[A B C D E F G H I J K L M…
N O P Q R S T U V W X Y Z];%一般在编辑器里一行代码太长写不下了,用…表示续行,下一行的代码和上一行是连着的。但在字符串里不能这样。
number=[one two three four five…
six seven eight nine zero];
character=[letter number];
templates=mat2cell(character,42,[24 24 24 24 24 24 24 …%数字后面换行空格加三点,字母后面换行不用空格加三点
24 24 24 24 24 24 24 …
24 24 24 24 24 24 24 …
24 24 24 24 24 24 24 …
24 24 24 24 24 24 24 24]);%mat2cell矩阵啊分块函数,在mat2cell函数中,有三个参数,第一个参数是想要分解的矩阵,第二个和第三个参数一般都是集合的形式,表示分解的尺度。
save (‘templates’,‘templates’)%直接在文件夹中生成templates目录。前面那个templates是是文件名。

⛄三、运行结果

【印刷字符识别】OCR键盘数字+字母识别【含Matlab源码 807期】,Matlab图像处理(进阶版),matlab
【印刷字符识别】OCR键盘数字+字母识别【含Matlab源码 807期】,Matlab图像处理(进阶版),matlab
【印刷字符识别】OCR键盘数字+字母识别【含Matlab源码 807期】,Matlab图像处理(进阶版),matlab
【印刷字符识别】OCR键盘数字+字母识别【含Matlab源码 807期】,Matlab图像处理(进阶版),matlab

⛄四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1]周曼,刘志勇,鲁乾鹏,施方展,王得磊,杨鲁江.基于OCR的数字仪表自动识别在工业现场中的应用[J].仪器仪表用户. 2021,28(01)

3 备注
简介此部分摘自互联网,仅供参考,若侵权,联系删除

🍅 仿真咨询
1 各类智能优化算法改进及应用

生产调度、经济调度、装配线调度、充电优化、车间调度、发车优化、水库调度、三维装箱、物流选址、货位优化、公交排班优化、充电桩布局优化、车间布局优化、集装箱船配载优化、水泵组合优化、解医疗资源分配优化、设施布局优化、可视域基站和无人机选址优化

2 机器学习和深度学习方面
卷积神经网络(CNN)、LSTM、支持向量机(SVM)、最小二乘支持向量机(LSSVM)、极限学习机(ELM)、核极限学习机(KELM)、BP、RBF、宽度学习、DBN、RF、RBF、DELM、XGBOOST、TCN实现风电预测、光伏预测、电池寿命预测、辐射源识别、交通流预测、负荷预测、股价预测、PM2.5浓度预测、电池健康状态预测、水体光学参数反演、NLOS信号识别、地铁停车精准预测、变压器故障诊断

3 图像处理方面
图像识别、图像分割、图像检测、图像隐藏、图像配准、图像拼接、图像融合、图像增强、图像压缩感知

4 路径规划方面
旅行商问题(TSP)、车辆路径问题(VRP、MVRP、CVRP、VRPTW等)、无人机三维路径规划、无人机协同、无人机编队、机器人路径规划、栅格地图路径规划、多式联运运输问题、车辆协同无人机路径规划、天线线性阵列分布优化、车间布局优化

5 无人机应用方面
无人机路径规划、无人机控制、无人机编队、无人机协同、无人机任务分配

6 无线传感器定位及布局方面
传感器部署优化、通信协议优化、路由优化、目标定位优化、Dv-Hop定位优化、Leach协议优化、WSN覆盖优化、组播优化、RSSI定位优化

7 信号处理方面
信号识别、信号加密、信号去噪、信号增强、雷达信号处理、信号水印嵌入提取、肌电信号、脑电信号、信号配时优化

8 电力系统方面
微电网优化、无功优化、配电网重构、储能配置

9 元胞自动机方面
交通流 人群疏散 病毒扩散 晶体生长

10 雷达方面
卡尔曼滤波跟踪、航迹关联、航迹融合文章来源地址https://www.toymoban.com/news/detail-824939.html

到了这里,关于【印刷字符识别】OCR键盘数字+字母识别【含Matlab源码 807期】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python检测密码是否符合要求,大小写字母数字长度等密码必须包含超过8个字符,且不超过16个字符。密码必须包含至少一个数字、一个大写字母和一个小写字母。密码必须包含多个非字母数字字符。

    要使密码更强大,它需要满足以下四个规则: . 密码必须包含超过8个字符,且不超过16个字符。“ 提示:查找密码字符串的长度,您应该使用len()方法。 密码必须包含至少一个数字、一个大写字母和一个小写字母。 密码必须包含多个非字母数字字符。 第一种方式是使用函

    2024年02月05日
    浏览(32)
  • 【语音识别】DTW MFCC 0-9数字语音识别(带面板)【含GUI Matlab源码 385期】

    💥💥💞💞欢迎来到Matlab研究室博客之家💞💞💥💥 ✅博主简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,Matlab项目合作可私信。 🍎个人主页:Matlab研究室 🏆代码获取方式: Matlab研究室学习之路—代码获取方式(包运行) ⛳️座右铭:行百里者,半于九十;

    2024年03月09日
    浏览(31)
  • 汇编语言(Assembly Language)习题:键盘输入一个字符串,试将其中的小写字母转换为大写字母,其它字符保持不变。

    前置知识:汇编语言常用系统功能调用(如果懂直接跳过看题目详解) 格式: 功能:从键盘输入字符的ASCII码送入寄存器AL中,并送显示器显示。 格式: 功能:将DL寄存器中的字符送显示器显示,如果DL中为〈CTRL〉+〈BREAK〉的ASCII码,则退出。 格式: 功能:将DL寄存器中的字

    2024年02月03日
    浏览(28)
  • 【Python】【OpenCV】OCR识别(三)——字符识别

    通过上一篇博客,我们成功将有角度的图片进行“摆正”,接下来我们来提取图片中的文字。 我们使用Tesseract来处理图片并提取文字,相关下载安装请参考:Python下Tesseract Ocr引擎及安装介绍 - 黯然销魂掌2015 - 博客园 (cnblogs.com) 同时我们需要下载第三方Lib——pytesseract,使用

    2024年02月02日
    浏览(31)
  • 【halcon】halcon字符识别——OCR

    OCR(Optical Character Recongnition)光学字符识别。 halcon 的OCR,提供了几种方式,我们应该如何选择? 自动文本阅读器(find_text) 手动文本阅读器(find_text) 自己分割再识别 只需要指定一段字符的区域,然后指定一些参数,他就能自动识别!非常标准化的流程。

    2024年02月09日
    浏览(30)
  • Mac键盘部分数字键和字母键失灵,无法使用怎么办?

    使用MacBook的小伙伴有时候会遇到一下问题: 1. 键盘按了没反应 2. 字母键盘(u、i、o、j、k)和数字键盘(7、8、9)键失灵 3. caps lock键不亮了 不用担心,来教大家当遇到这种情况应该怎么解决! 键盘按了没反应 检验:重启再试试,在登录界面看是否能输入密码或开机后按

    2024年02月11日
    浏览(34)
  • Halcon图像的 OCR 识别&训练字符

    处理图像使得数字或是字母为白底黑字-创建字符识别句柄-识别-清除句柄        算子:read_ocr_class_mlp( : : FileName : OCRHandle) 示例:read_ocr_class_mlp (\\\'Document_0-9A-Z_NoRej.omc\\\', OCRHandle) \\\'Document_0-9A-Z_NoRej.omc\\\'(输入控制参数):输入识别类型 OCRHandle(输出控制参数): 输出识别句

    2024年02月12日
    浏览(27)
  • python判断字符是否为数字或字母

    str_1 = “1234” str_2 = “Abcd” str_3 = “123Abdc” #用isdigit函数判断是否数字 print(str_1.isdigit()) Ture print(str_2.isdigit()) False print(str_3.isdigit()) False #用isalpha判断是否字母 print(str_1.isalpha()) False print(str_2.isalpha()) Ture print(str_3.isalpha()) False #isalnum判断是否数字和字母的组合 print(str_1.isaln

    2023年04月08日
    浏览(43)
  • 使用深度学习识别英文字母和数字

    在本教程中,我们将使用深度学习技术来识别包含英文字母和数字的图像。我们将使用Python和TensorFlow来构建和训练模型,并使用OpenCV来处理图像。 步骤 1: 准备数据集 首先,我们需要准备一个包含英文字母和数字的数据集。我们将从网上下载一个包含样本图像的数据集,并将

    2024年04月10日
    浏览(29)
  • OCR字符识别:选择合适的图像裁剪方式

          OCR字符识别是一项重要的技术,可以将图片中的文本内容转化为可编辑的文字。在实际应用中,常常需要对大量的图片进行识别操作,比如身份证信息批量识别。本文将介绍一种选择合适的图像裁剪方式来提高OCR字符识别的准确性与效率。 一、API接口概述 挖数据平台

    2024年02月02日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包