(文通科技OCR刘飞)申请入驻搜狐公众平台
OCR(OpticalCharacterRecognition,光学字符识别)指的是利用光学设备拍摄或...
OCR (Optical Character Recognition,光学字符识别)指的是利用光学设备拍摄或者扫描文本文档上的字符信息,通过与纸面明暗差确定字符形状,然后利用字符识别技术转化为计算机文本信息的过程。 即,针对印刷体字符,采用光学的方式将纸质文档中的文字转换成为黑白点阵的图像文件,并通过识别软件将图像中的文字转换成文本格式,供文字处理软件进一步编辑加工的技术。如何除错或利用辅助信息提高识别正确率,是OCR最重要的课题,ICR(Intelligent Character Recognition)的名词也因此而产生。衡量一个OCR系统性能好坏的主要指标有:拒识率、误识率、识别速度、用户界面的友好性,产品的稳定性,易用性及可行性等。
一、OCR文字提取介绍
文字提取是指将待识别的文字,从其所在的行中单独地提取出来。本系统中采用投影法进行文字提取。具体实现过程为,先考察文字行投影,选取阈值,确定行边界之后,提取每个文字行,再对每行文字进行列投,选取阈值,获取得到文字边界之后再提取出文字。首先,提取出行文字,对处理后的文字行垂直列扫描,记录每文字行中像素值为1(白像素)的个数,考察各列的扫描值:若扫描中该列白像素个数的和为零或者是小于阈值thresh,则可认为此处是字符的间隙;若相邻间隙之间黑色区域的宽度大于设定的字间阈值widththresh,小于阈值widththresh或者明显小于其前面分割得到的字符宽度,则认为该部分是文字中的偏旁部首,将于下一个相邻部首区域合并;若相邻间隙区域的宽度小于阈值Widththresh,高度明显小于其前面分割字符的高度,则可认为此区域为噪声块,将其做删除处理;若切割宽度大于阈值Widththresh,则在该区域内重新调整切分阈值cut,并结合前后的切分区域进行二次切分和区域合并处理。
二、OCR的应用
1、大规模文本文字信息数字化
我国中文古籍浩如烟海,由于纸质文档保存文字信息容易受到温度、空气氧化、虫蛀等等非人为控制原因的影响而产生字体模糊、变形、纸质发黄、脆化,使得识别率降低,所以古籍数字化是一个刻不容缓的项目。
2、在智能交通处罚系统中的应用 在智能交通系统ITS的违章处罚信息中,最重要的是要知道车牌号,也就是对车牌号的识别。因为违规车牌号是交管部门处罚违章者的依据,因此捕捉到清晰的车牌号是智能交通系统ITS的违章处罚信息中最重要的一步。采取措其工作流程为:通过安装在路面上方的摄像头采集到违章车辆图像,然后经过图像的预处理提取到车牌号码,利用计算机相关技术以及数字图像处理技术将获得的图像信息进行处理、分析,最后获得实时的违规、违章的机动车辆的信息,进行实时的信息发布、交通处罚等相关工作。不过由于外界环境的干扰,比如说大雾天气,或者镜头、牌照沾染灰尘等原因,使得获取的大部分车牌图像都是较为模糊的。
3、在办公室自动化图像应用 在现实的工作、学习过程中都需要阅读、转手大量的纸质文档材料,由于传真、复印等环节导致获取的文本质量的急剧下降导致识别率降低,所以在办公自动化处理中低质量的文本占很大部分。 综上所述OCR技术在信息化时代发挥的作用是巨大的。
三、OCR实例步骤
1、创建训练文件
1.1、分割字符
dev_close_window()
read_image(Image,'F:/学习资料/Halcon工程/ocr-train.bmp') get_image_size(Image, Width, Height)
dev_open_window(0, 0, Width, Height, 'black', WindowHandle) dev_display(Image)
threshold(Image, Region, 0, 100)
connection(Region, ConnectedRegions)
sort_region (ConnectedRegions, SortedRegions, 'upper_left', 'true', 'column') count_obj(SortedRegions, Number) for Index := 1 to Number by 1 dev_clear_window()
select_obj(SortedRegions, SingleWord, Index) dev_display(SingleWord) stop() endfor
1.2、文字分类标识
words:=['a','b','c','d','e','f','g']
1.3、创建训练文件 TrainFile:='words.trf'
dev_set_check('~give_error') delete_file(TrainFile)
dev_set_check('~give_error')
1.4、将图像字符与字符标识关联,保存到训练图像中
var script = document.createElement('script'); script.src = 'http://static.pay.baidu.com/resource/baichuan/ns.js'; document.body.appendChild(script);
for i:=1 to Number by 1
select_obj(SortedRegions, SingleWord, i)
append_ocr_trainf(SingleWord,Image,words[i-1],TrainFile) endfor
2、训练OCR
2.1、确定字体文件名 FontFile:='words.omc' *2.2得到字符标识名
read_ocr_trainf_names(TrainFile, CharacterNames, CharacterCount)
2.3、确定神经网络隐藏层节点数 NumHidden:=20
2.4、创建神经网络分类器
create_ocr_class_mlp(8, 10, 'constant', 'default', CharacterNames, 80, 'none', 10, 42, OCRHandle) 2.5、训练神经网络
trainf_ocr_class_mlp(OCRHandle, TrainFile, 200, 1, 0.01, Error, ErrorLog)
2.6、保存训练结果
write_ocr_class_mlp(OCRHandle, FontFile) *2.6清除句柄
clear_ocr_class_mlp(OCRHandle)
3、识别文字
3.1、读入图像
dev_close_window()
read_image(Image,'F:/学习资料/Halcon工程/ocr-read.bmp') get_image_size(Image, Width, Height)
dev_open_window(0, 0, Width, Height, 'black', WindowHandle) dev_display(Image)
3.2、对齐文字
text_line_orientation(Image, Image, 25, rad(-45), rad(45), OrientationAngle) rotate_image(Image, ImageRotate, -OrientationAngle/rad(180)*180, 'constant')
4、分割文字
threshold(ImageRotate, TestWordsRegion, 0,100) connection(TestWordsRegion, TestSingleWords)
select_shape (TestSingleWords, SelectedRegions, 'area', 'and', 80, 500)
sort_region (SelectedRegions, TestWordsSortedRegions, 'upper_left', 'true', 'column') count_obj(TestWordsSortedRegions, Number) read_ocr_class_mlp(FontFile, OCRHandle1)
do_ocr_multi_class_mlp(TestWordsSortedRegions, ImageRotate, OCRHandle1, Class, Confidence) for Index := 1 to Number by 1 * dev_display(ImageRotate)
select_obj(TestWordsSortedRegions, ObjectSelected, Index) dev_display(ObjectSelected)
disp_message(WindowHandle, Class[Index-1], 'image', 12, 20*Index, 'green', 'true') stop()
var cpro_psid ="u2572954"; var cpro_pswidth =966; var cpro_psheight =120;
endfor
clear_ocr_class_mlp (OCRHandle1)
关注 OCR狮子
微信扫一扫关注公众号