# coding=utf-8
#非黑即白--谷歌OCR光学字符识别 # 颜色的世界里,非黑即白。computer表示深信不疑。
# 今天研究一下OCR光学识别庞大领域中的众多分支里的一个开源项目的一个包-tesseract。
#
# 能让机器识别图片是无数工程师梦寐以求的事
# 任何物体只有成功转为二进制才有可能被机器识别,而识别是做出一系列智能行为的前提
#
# 下面以一张验证码为例梳理一下机器识别的思路:
#
# 准备工作:
# 1、取到图片地址,在线转化为图片流或者下载到本地
# 2、PIL, pytesseract 两个包,其实主要用他们中各一个函数,前者是用Image将图片做像素级处理,以便后者用image_to_string将图片转化为字符串
# 3、图像基础知识:RGB所代表的红绿蓝色域均为0-255,三色叠加0代表黑色,255代表白色,区间值即为灰度
#
# 流程:
# 1、读取图片转为Image函数的对象
# 2、转化为灰度图(即黑白图片),进行二值化(强化黑白)
# 3、坐标系去除噪点,继续强化黑白
# 4、转化为字符串(涉及到分割、识别,image_to_string自动做了) from PIL import Image
from pytesseract import image_to_string # 接收图片地址,和int类型的灰度值作为阈值,返回黑白图
def parse(img_address, g):
img = Image.open(img_address)
# 转化为灰度图
imgL = img.convert('L')
# imgL.show()
img_load = imgL.load()
print(imgL.size)
# 遍历宽与高中的每一个像素并依据阈值判断,进行二值化
for y in range(imgL.size[1]):
for x in range(imgL.size[0]):
# 阈值就是寻找灰度的平衡点
# 小于阈值的数就是向黑色靠拢,直接赋值为黑,大于阈值即向255靠拢,直接赋值为白
if img_load[x, y] <= g:
img_load[x, y] = 0
else:
img_load[x, y] = 255
return imgL # 擦除噪点,对L模式下的图处理
# x,y 像素点坐标
# g 阈值(0-255之间的灰度值)
# n 强度(周围有几个符合阈值的像素点才留下)
def wipe_spot(img, x, y, g, n):
count = 0
if img[x - 1, y + 1] == g:
count += 1
if img[x, y + 1] == g:
count += 1
if img[x + 1, y + 1] == g:
count += 1
if img[x - 1, y] == g:
count += 1
if img[x + 1, y] == g:
count += 1
if img[x + 1, y - 1] == g:
count += 1
if img[x, y - 1] == g:
count += 1
if img[x + 1, y - 1] == g:
count += 1
if count < n:
img[x, y] = 255 # 示例
imgl = parse("D://1111.jpg", 150)
imgload = imgl.load()
for y in xrange(imgl.size[1]):
for x in xrange(imgl.size[0]):
if imgload[x, y] == 0:
wipe_spot(imgload, x, y, 0, 1)
imgl.show()
print image_to_string(imgl).replace(' ', '')

非黑即白--谷歌OCR光学字符识别的更多相关文章

  1. Ocrad.js – JS 实现 OCR 光学字符识别

    Ocrad.js 相当于是 Ocrad 项目的纯 JavaScript 版本,使用 Emscripten 自动转换.这是一个简单的 OCR (光学字符识别)程序,可以扫描图像中的文字回文本. 不像 G ...

  2. 6 个优秀的开源 OCR 光学字符识别工具

    转自:http://sigvc.org/bbs/thread-870-1-1.html 纸张在许多地方已日益失宠,无纸化办公谈论40多年,办公环境正限制纸山的生成.而过去几年,无纸化办公的概念发生了显 ...

  3. 开源OCR光学字符识别

    纸张在 许多地方已日益失宠,无纸化办公谈论40多年,办公环境正限制纸山的生成.而过去几年,无纸化办公的概念发生了显着的转变.在计算机软件的帮助 下,包含大量重要管理数据和资讯的文档可以更方便的以电子形 ...

  4. IT行业新名词--透明手机/OCR(光学字符识别)/夹背电池

    透明手机 机身设计的一大关键部分是可替换玻璃的使用,利用导电技术,在看不到线路的环境下,让LED发光. 这样的玻璃内含液晶分子,对于内容的显示则是通过电流对分子的刺激来实现.当手机断电后,分子位置会随 ...

  5. [Xcode 实际操作]七、文件与数据-(22)使用OCR光学字符识别技术识别银行卡号码

    目录:[Swift]Xcode实际操作 本文将演示如何使用光学字符识别技术,识别信用卡上的卡号. OCR技术是光学字符识别的缩写(Optical Character Recognition), 是通过 ...

  6. OCR光学字符识别--STN-OCR 测试

    1.同文章中建议的使用ubuntu-python隔离环境,真的很好用 参照:http://blog.topspeedsnail.com/archives/5618启动虚拟环境:source env/b ...

  7. text recognizer (OCR) Engine 光学字符识别

    https://github.com/tesseract-ocr/tesseract/wiki https://github.com/UB-Mannheim/tesseract/wiki C:\Use ...

  8. OCR技术(光学字符识别)

    什么是OCR? OCR英文全称是optical character recognition,中文叫光学字符识别.它是利用光学技术和计算机技术把印在或者写在纸上的 文字读取出来,并转换成一种计算机能够接 ...

  9. 【OCR技术系列一】光学字符识别技术介绍

    注:此篇内容主要是综合整理了光学字符识别 和OCR技术系列之一]字符识别技术总览,详情见文末参考文献 什么是 OCR? OCR(Optical Character Recognition,光学字符识别 ...

随机推荐

  1. python函数名称空间

    一.命名空间概念 命名空间(name space),若变量x=1,1存放在内存中,命名空间是存放名字x.x与1绑定关系的地方.命名空间分三种: locals:函数内的名称空间,包括局部变量和形参 gl ...

  2. [SCOI2010] 连续攻击问题

    题目 Description lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一 ...

  3. 深入解读 Js 中的面向对象编程

    前言:今天看了一篇文章觉得很不错,所以给大家分享一下,也许很多人都看过面向对象编程甚至写过这样博客,觉得面向对象编程就那样,没啥好说的,那可能是因为你对这方面知识已经了解,可以选择性跳过.那如果有更通 ...

  4. 【Python】 迭代器&生成器

    迭代器 任何一个类,只要其实现了__iter__方法,就算是一个可迭代对象.可迭代对象的__iter__方法返回的对象是迭代器,迭代器类需要实现next方法.一般来说,实现了__iter__方法的类肯 ...

  5. 大数据 --> 淘宝异构数据源数据交换工具 DataX

    淘宝异构数据源数据交换工具 DataX DataX是什么? DataX是一个在异构的数据库/文件系统之间高速交换数据的工具,实现了在任意的数据处理系统(RDBMS/Hdfs/Local filesys ...

  6. java.lang的详细解读

    软件包    java.lang 提供java编程语言实现程序设计的基础类 接口摘要 1> appendable  提供被添加char序列和值的对象 2>charSquence char值 ...

  7. React demo:express、react-redux、react-router、react-roter-redux、redux-thunk(二)

    上一篇杂七杂八说了下express部分的,现在开始进入正题. 接下去的顺序,就是项目从零开始的顺序(思路方向). [actions定义] 如图,目录页,有4部分的内容,所以以下几个actions是需要 ...

  8. 从零部署Spring boot项目到云服务器(准备工作)

    自己的博客终于成功部署上线了,回过头来总结记录一下整个项目的部署过程! 测试地址:47.94.154.205:8084 注:文末有福利! 一.Linux下应用Shell通过SSH连接云服务器 //ss ...

  9. Android中的layout_gravity和gravity的区别

    在Android的布局中,除了padding和margin容易弄混之外,还有layout_gravity和gravity.按照字面意思来说,layout_gravity就是相对于layout来设置的. ...

  10. C语言博客作业—指针

    一.PTA实验作业 题目1: 求出数组中最大数和次最大数 1. 本题PTA提交列表 2. 设计思路 定义max表示范围数组中的最大数(初值设为a[0]),z表示找到的元素在数组中的位置: 定义指针*b ...