`
san_yun
  • 浏览: 2652901 次
  • 来自: 杭州
文章分类
社区版块
存档分类
最新评论

OCR学习记录

    博客分类:
  • PIL
 
阅读更多

最近对验证码识别做了一些研究,主要是OCR方向的,一些总结记录一下。识别CAPTCHA后面跟了很多参考文章都讲解的很详细了,做ORC不难,难点在于如何提高识别率。基本流程如下:

1.原图

2.预处理(去噪点)

3.标准化(灰度变换,二值化,归一化)

4.image segment(个人感觉这个比较难,有很多算法,比如垂直投影直方图,KNN,Color Filling)

5.提取特征

6.机器学习

7.识别

 

总之OCR是一个很有意思的研究课题,包含大量对计算机图形图像,机器学习,神经网络方面的研究,可以作为一个问题点来研究机器学习。网上已经有一个学习好的手写体样本库MNIST可供玩耍。附件另有一份是VSM向量空间模型理论的论文,清楚的讲解了如何计算两个对象之间的相似性。

 

 

0.PIL简单的API使用:

 

# -*- coding: utf-8 -*-
path = "/home/yunpeng/test4/data/4399/simple/8.png"

from PIL import Image,ImageDraw
im =Image.open(path)
im = im.convert('L')

#二值化
print 'img info:',im.format,im.size,im.mode
width,height = im.size
for x in xrange(width):
    for y in xrange(height):
        p= im.getpixel((x, y))
        if p>90:
            im.putpixel((x,y),255)
        else:
            im.putpixel((x,y),0)

#去头去尾
mlist = set([])
p = im.load()
for x in xrange(width):
    for y in xrange(height):
        p= im.getpixel((x, y))
        if p<200:
            mlist.add(x)

mlist = list(mlist)
left= mlist[:1][0]
right = mlist[len(mlist)-1:][0]

box = (left, 0, right, height)
im = im.crop(box)

width,height = im.size
ps = [0]*width

for x in xrange(width):
    for y in xrange(height):
        p= im.getpixel((x, y))
        if p==0:
            ps[x]=ps[x]+4
   
image = Image.new('RGB',(200,200),(255,255,255))  
draw = ImageDraw.Draw(image)
ps_width = len(ps)
for k in xrange(ps_width):
    source = (k,199)                 #起点坐标y=99, x=[0,1,2....]
    target = (k,199-ps[k])    #终点坐标y=255-a[x],a[x]的最大数值是200,x=[0,1,2....]
    draw.line([source, target], (100,100,100),1)

image.show()
im.show()
                        

 

 1.什么是灰度变换?

 

Photoshop里的灰度变换可以使R,G,B 3色按任何比例增强再混合。黑白图片的黑白变换叫灰度变换,彩色图片的色彩变换也叫灰度变换。
比如线性变换
可以用一个线性函数:f(x,y)=a'+(b'-a')/(b-a)×(f(x,y)-a)
f(x,y)代表一个象素
[a,b]是原始图像的灰度范围,[a',b']是变换后新图像的灰度范围
用这个线性函数分别对R,G,B分量进行变换可以起到单色增强的目的,然后再混合输出。
如果b'-a' > b-a ,则使得图像灰度范围增大,即对比度增大,图像会变得清晰
如果b'-a' < b-a ,则使得图像灰度范围缩小,即对比度减小。

PS: PIL可以通过im.convert('L')

2.什么是直方图?

直方图就是统计图像中像素点为某个颜色值的个数。

参考:

使用PIL计算直方图并显示

3.tesseract如何安装?

参考:

ubuntu安装tesseract 进行OCR识别

使用tesseract-ocr破解网站验证码

 

4. 参考资料

Python图像处理库(PIL)--基本概念和类库介绍
http://www.cnblogs.com/wei-li/archive/2012/04/19/2443281.html
http://www.cnblogs.com/wei-li/archive/2012/04/19/2456725.html
http://iysm.net/?tag=pil

用Python做图像处理:
http://blog.csdn.net/gzlaiyonghao/article/details/1852726

计算图像相似度——《Python也可以》之一
http://blog.csdn.net/gzlaiyonghao/article/details/2325027

10 行代码判定色*情*图片——Python 也可以系列之二
http://blog.csdn.net/gzlaiyonghao/article/details/3166735

用BP人工神经网络识别手写数字——《Python也可以》之三
http://blog.csdn.net/gzlaiyonghao/article/details/7109898

大规模识别相似图像的算法探讨(比较浅)
http://caocao.iteye.com/blog/149776

用PIL实现滤镜(一)——素描、铅笔画效果
http://blog.sina.com.cn/s/blog_5eeb1e2f0101axvi.html

图像处理之霍夫变换(直线检测算法)
http://blog.csdn.net/jia20003/article/details/7724530

python 简单图像处理(最详细1-16篇,包括细化,傅立叶变换,)
http://www.cnblogs.com/xianglan/category/272764.html

使用(ImageMagick+tesseract-ocr)实现图像验证码识别实例 (识别读比较高):
http://blog.csdn.net/mlks_2008/article/details/8052782

tesseract-ocr训练方法:
http://www.lixin.me/blog/2012/05/26/29536

OCR学习及tesseract的一些测试:
http://blog.csdn.net/viewcode/article/details/7784600

某网站验证码的识别笔记(去除背景色):
http://blog.csdn.net/bh20077/article/details/7041280

用imagemagick和tesseract-ocr破解简单验证码(ruby):
http://hooopo.iteye.com/blog/993538

使用 Python 构造神经网络(IBM Hopfield 网络可以重构失真的图案并消除噪声)
http://www.ibm.com/developerworks/cn/linux/l-neurnet/

常见验证码的弱点与验证码识别
http://drops.wooyun.org/tips/141

一种通用的去除文字图像中干扰线的算法:
http://wenku.baidu.com/view/63bac64f2b160b4e767fcfed.html

Decoding CAPTCHA’s:
http://www.boyter.org/decoding-captchas/

===================================================================
Tesseract OCR 训练和识别总结:
http://miphol.com/muse/2013/06/tesseract-ocr-1.html
http://miphol.com/muse/2013/05/tesseract-ocr.html

Tesseract-OCR 字符识别---样本训练(使用jTessBoxEditor工具,比较详细)
http://blog.csdn.net/firehood_/article/details/8433077

Tesseract-OCR引擎 入门
http://blog.csdn.net/xiaochunyong/article/details/7193744

Tesseract官方配置
http://tesseract-ocr.googlecode.com/svn-history/r725/trunk/doc/tesseract.1.html


粘连字符的图片验证码识别
http://wenku.baidu.com/view/343c200c581b6bd97f19ead9.html

字符扭曲粘连验证码识别技术研究
http://wenku.baidu.com/view/45896630580216fc700afd16.html

-----------------------------------------------------------------------
wiki:
http://zh.wikipedia.org/zh-cn/captcha
http://en.wikipedia.org/wiki/Image_segmentation

Python Module for Mean Shift Image Segmentation:
http://code.google.com/p/pymeanshift/

淘宝验证码:
http://pin.aliyun.com/get_img?identity=taoquan.taobao.com&sessionid=1381293634479

验证码识别工具-tesseract(最详细)
http://hilojack.sinaapp.com/?p=866

如何识别高级的验证码  鬼仔's Blog(最高级)
http://huaidan.org/archives/2085.html

浅谈OCR之Tesseract:
http://www.cnblogs.com/brooks-dotnet/archive/2010/10/05/1844203.html

tesseract-ocr使用方法总结:
http://hyhx2008.github.io/tesseract-ocrshi-yong-fang-fa-zong-jie.html

开源OCR引擎Tesseract
http://hi.baidu.com/lifulinghan/item/b59af9eb1d92282d5a7cfb69

使用tesseract-ocr破解网站验证码
http://grunt1223.iteye.com/blog/904313

breaking weak captcha in slightly more than 26 lines of groovy-code
http://www.kellyrob99.com/blog/2010/03/14/breaking-weak-captcha-in-slightly-more-than-26-lines-of-groovy-code/

tesseract-ocr3.02的用法详解(训练词库)
http://www.cnblogs.com/huyulin/p/3305563.html

关于tesseract-ocr3的训练和使用
http://www.cnblogs.com/zcsor/archive/2011/02/21/1959555.html

tesseract java api
http://stackoverflow.com/questions/13974645/using-tesseract-from-java

tesseract python api
http://code.google.com/p/pytesser/
https://github.com/rosarior/pytesser
https://code.google.com/p/pytesser/wiki/README

识别验证码,你有几分成功率?
http://aoingl.iteye.com/blog/1389232
http://ptlogin.4399.com/ptlogin/captcha.do?captchaId=captchaReq011404b815f6235726
http://www.andrew.cmu.edu/user/ericwu/parch/finalreport.html()

[1] L. von Ahn, M. Blum and J. Langford. Telling Humans and Computer Apart
Automatically[J], Comm. Of the ACM, 46(Aug. 2003), 57-60.
[2] K. Chellapilla, K. Larson, P. Simard and M. Czerwinski, Building Segmentation
Based Human-friendly Human Interaction Proofs[C], 2nd Int’l Workshop on Human Interaction Proofs, Springer-Verlag, LNCS 3517, 2005. 
[3] J. Yan and A. S. EI. Ahmad. Usability of CAPTCHAs - Or, Usability issues in
CAPTCHA design[C], the fourth Symposium on Usable Privacy and Security, Pittsburgh, USA, July 2008.
[4] K. Chellapilla, K. Larson, P. Simard, M. Czerwinski, Computers beat humans at
single character recognition in reading-based Human Interaction Proofs[C], In 2nd Conference on Email and Anti-Spam (CEAS’05), 2005.  
[5] J. Yan and A. S. El Ahmad. A Low-cost Attack on a Microsoft CAPTCHA[C], 15th
ACM Conference on Computer and Communications Security (CCS’08). Virginia, USA, Oct 27-31, 2008. ACM Press. 543-554. 
[6] Microsoft Corporation. Human Interaction Proof (HIP) - Technical and Market
Overview[J], 2006. Accessed in Jan 2011. 
[7] J. Yan and A. S. El Ahmad. Breaking Visual CAPTCHAs with Naive Pattern
Recognition Algorithms[C], in Proc. of the 23rd Annual Computer Security Applications Conference (ACSAC’07). FL, USA, Dec 2007. IEEE computer society. 279-291. 
[8] G. Mori and J. Malik. Recognizing Objects in Adversarial Clutter: Breaking a
Visual CAPTCHA[C], IEEE Conference on Computer Vision and Pattern Recognition(CVPR'03), Vol 1, June 2003, 134-141. 
[9] G. Moy, N. Jones, C. Harkless and R. Potter. Distortion estimation techniques in
solving visual CAPTCHAs[C], IEEE CVPR, 2004. 
[10] K. Chellapilla and P. Simard, Using Machine Learning to Break Visual Human
Interaction Proofs[M], Neural Information Processing Systems (NIPS), MIT Press, 2004.
[11] L. von Ahn, M.Blum, N. J. Hopper, and J. Langford, CAPTCHA: Using hard AI
problems for security[C]. Eurocrypt’2003.
[12] W. Zhang, J. Sun, and X. Tang. Cat head detection -how to effectively exploit shape and texture features[C]. In Proc. ECCV 2008, Part IV, LNCS 5305 (2008), 802–816.
[13] P. Golle. Machine learning attacks against the Asirra CAPTCHA[C]. In ACM
CCS’2008, 535-542.
[14] http://recaptcha.net/learnmore.html,2012-10-19。
[15] Elie Bursztein, Matthieu Martin, and John C. Mitchell. Text-based CAPTCHA
strengths and weaknesses[C]. 18th ACM conference,2011.
[16] Luis von Ahn, Benjamin Maurer, Colin McMillen, David Abraham, and Manuel
Blum, 2008. reCAPTCHA: Human- Based Character Recognition via Web Security Measures[J]. Science, 321(5895):1465-1468.
[17] 李颖,Web验证码生成和识别[D]。南京理工大学2008 研究生论文。
[18] Zeidenberg, Matthew. Neural Networks in Artificial Intelligence[M]. 1990: Ellis
Horwood Limited. 1990. ISBN 0-13-612185-3.
[19] 张淑雅,赵一鸣,赵晓宇等.认证码字符识别方法的研究[J].宁波大学学报:
理工版,2007,12(4):429-433.
[20] 潘大夫,汪渤.一种基于外部轮廓的数字验证码识别方法[J],微计算机信息:
测控自动化,2007,23(9-1):0256-0258.
[21] 贾磊磊,陈锡华,熊川,验证码的模糊识别[J],西昌学院学报:自然科学版,
2010,24(1):60-62 

分享到:
评论

相关推荐

    深度学习实战14(进阶版)-手写文字OCR识别,手写笔记也可以识别了

    手写的文稿在日常生活中较为常见,比如笔记、会议记录,合同签名、手写书信等,手写体的文字到处都有,所以针对手写体识别也是有较大的需求。目前手写体的识别相比印刷体识别率不是太高,主要有以下几个难点: 中文...

    OCR.rar_labview OCR_ocr labview_ocr labview

    1. OCR基本原理:OCR技术首先通过图像处理技术对输入的图像进行预处理,如灰度化、二值化、噪声消除等,然后使用模板匹配、特征提取或深度学习等方法识别图像中的字符。识别结果通常以ASCII码或Unicode编码的形式...

    AspriseOCR.zip

    7. **错误处理和日志记录**:AspriseOCR可能提供错误处理机制和日志记录功能,帮助开发者追踪和解决可能出现的问题。 在压缩包"AspriseOCR.zip"中,可能包含以下内容: - **AspriseOCR.dll**:这是主要的OCR库文件...

    OCR test report

    测试报告会详细记录每项测试的步骤、结果和分析,以评估OCR系统的性能并提出改进措施。 8. 后处理技术:为了进一步提升识别结果的质量,OCR系统往往配备后处理模块,如语言模型校正、上下文关联分析等,帮助纠正...

    jx-ocr前端开发笔记

    【标题】"jx-ocr前端开发笔记"指的是一个关于jx_ocr项目的前端开发学习资料,这通常涉及到使用JavaScript、HTML、CSS等技术在Web环境中实现OCR(Optical Character Recognition,光学字符识别)功能。OCR是将图像中...

    C# OCR识别 图片文字识别

    - `packages.config`:记录了项目所依赖的NuGet包,这里可能包含了Tesseract的.NET绑定。 - `Form1.cs`和`Form1.Designer.cs`:这是使用Windows Forms创建的用户界面代码,可能包含用于选择图片、显示识别结果和...

    Halcon OCR 训练读取

    在训练OCR模型时,通常需要大量包含目标字符的高质量图像作为输入,以便算法学习和理解这些字符的形状和特征。这些图像可以是单个字符的bmp图片,如`1.bmp`,它们代表了我们要训练OCR系统识别的字符样本。 `1.hdev`...

    OCR.rar_OCR_OCR Java_OCR images_images_java ocr

    在Java中实现OCR,通常会涉及到图像处理、模式识别和深度学习等复杂领域。这个"OCR.rar"压缩包包含了一个名为"OCR.java"的文件,这可能是一个简单的OCR处理类,用于读取、处理和识别图像中的文字。 首先,让我们...

    识别度较高的ocr文字识别软件源码

    总之,这个"识别度较高的OCR文字识别软件源码"为Java开发者提供了一个很好的学习和实践平台,不仅可以直接用于文字识别任务,也能作为深入理解OCR技术的实例。通过阅读和理解源码,开发者可以提升自己的技能,同时为...

    miniocr图片文字识别

    - 笔记整理:扫描手写笔记,转化为电子版。 - 翻译助手:快速提取外语书籍或网页上的文字,辅助翻译。 6. 扩展与进阶 miniocr虽然小巧实用,但其识别能力还有提升空间。随着深度学习技术的发展,如基于RNN(循环...

    ocr.rar_CSharp OCR _OCR_OCR CSharp_ocr 手写_字母识别

    6. **实际应用**:最后,尝试将这个OCR系统应用到实际场景,比如读取手写的笔记或者扫描的文档,以检验其在真实世界中的表现。 通过这个项目,你不仅可以掌握OCR技术,还能提升C#编程能力,同时对机器学习和图像...

    ocr智能识别文字软件

    例如,一张包含发票或笔记的照片,通过OCR软件可以快速提取其中的文字信息,便于进一步的数据处理和存储。这样,用户无需手动输入,极大地提高了工作效率。 三、OCR在PDF文件中的应用 对于PDF文档,特别是扫描版的...

    Ocr文字识别完成源码

    10. **错误处理与日志记录**:为了保证系统的稳定性和可维护性,源码中应该包含适当的错误处理机制和日志记录功能,以便于追踪和解决可能出现的问题。 总的来说,"Ocr文字识别完成源码"是一个综合性的项目,涵盖了...

    Pytorch学习记录分享13-OCR(Optical Character Recognition,光学字符识别)

    在本篇PyTorch学习记录中,我们将深入探讨OCR(Optical Character Recognition,光学字符识别)技术,并结合PyTorch框架进行实现。OCR是计算机视觉领域的一个重要分支,它的目标是从图像中检测并识别出可读的字符,...

    汉王ocr软件8.0

    - 笔记整理:将手写笔记拍照后通过OCR转为文本,方便整理和搜索。 - 表格数据提取:部分OCR软件还支持表格识别,有助于从报表和表格中提取数据。 综上所述,汉王OCR软件8.0是一款强大的文字识别工具,它结合了...

    OCR识别VC源代码

    这个源代码示例对于初学者来说是一个很好的学习资源,因为它展示了如何在VC++环境中集成和使用OCR功能,同时也为高级开发者提供了自定义和扩展OCR功能的基础。通过研究这个项目,读者可以深入理解OCR的工作原理,...

    c++ ocr 文字识别源码

    尽管此项目基于Office 2003的MODI组件,但现代OCR技术通常采用更先进的算法,如深度学习模型(如RNN、LSTM或Transformer),以及更高效的图像处理库(如OpenCV)。为了提升识别性能,可以考虑将MODI替换为这些现代...

Global site tag (gtag.js) - Google Analytics