数据采集就怕遇到图片,只能看不能复制怎么办。手动将文字提取出来,要耗费很大的工作量。例如下图,某楼盘的一房一价表,怎么样发现单价低位的房子?光凭肉眼很难发现吧,能否让计算机进行文字的识别,然后再对这些数值型信息进行数据分析。
首先把图片中的单价提取出来,
进而生成图像:
用python就可以实现,采用现在流行的OCR图像识别。主要思路是使用机器学习模式,通过已有图片手动训练出一个图像识别模型,具体步骤如下:
一、将图片预处理,更方便计算机识别
(一)把图像灰化
使用open-cv库对图片进行处理。
使用灰化后的图片,如下图,排除干扰信息,能让识别更加稳定。
(二)把图片分割
将图片分割成小方块,一是提高识别精度,二是方便将数据储存为表格形式。可以设定好参数,根据坐标系把图片裁剪成一个个小方块,如下图,储存为jpg格式。
二、建立图像识别模型
(一)将分割好的小方块图片合并成tiff文件
下载
jTessBoxEditor
,打开
jTessBoxEditor.jar
,使用
tools
下的
merge tiff
工具,将图片合并成
tiff
文件。
(二)使用已有模型对
tiff
文件进行初识别
下载并安装
tesseract
,并配置好环境变量,将
Tesseract-OCR
和
tessdata
的路径加入到环境变量下的path下面。Tesseract自带图像识别的模型,例如中文简体汉字识别模型
chi_sim.traineddata
,英文识别模型
eng.traineddata
,这些模型可以网上下载,放到
tessdata
里面即可使用。
然后进入tiff所在文件夹。在命令窗口,输入:
tesseract ***.tif *** -l +++ -psm 7 batch.nochop makebox
,按回车生成
box
文件。其中
***
为
tif
的文件名,
+++
为要生成的
traindata
的文件名。
(三)使用
jTessBoxEditor
对
tiff
和
box
文件进行调整
打开
jTessBoxEditor.jar
,在
box editor
中的open按钮,打开要编辑的tif文件。编辑之后保存,生成box文件。保存在同一个文件夹里。
(四)使用tiff和box文件生成模型
在tiff和box的文件中,在命令窗口输入以下代码,最终生成模型(traindata文件)
上述脚本也可以写在bat文件中,运行脚本来生成traindata,最终仅需要将traindata复制到tessdata里面,即可使用该模型。
三、应用图像识别模型
安装完,训练完模型之后,就要在python中使用模型了。安装pytesseract,找到
pytesseract.py
文件,打开编辑,将其中的
“tesseract_cmd = 'tesseract'”
,改成
tesseract
的安装路径(如
C:\Program Files\Tesseract-OCR\\tesseract
)。
因为模型是采用灰化后的图片训练的,所以在识别时也要使用灰化。
四、优化图像识别模型
在使用中,如果有错误,可以存下来,加入训练库,优化图像识别模型。在一般是识别错误的图片,积攒一阵子后。累积做成tif文件。注意:同类错误选择几个记号了,训练库尽量小而精。
作者:杨炳,心理学者在银行写代码。
赞 赏 作 者
用 Python 从零开始实现简单遗传算法
5分钟掌握 Python 随机爬山算法
5分钟完全读懂关联规则挖掘算法
点击下方阅读原文加入
社区会员
数据采集就怕遇到图片,只能看不能复制怎么办。手动将文字提取出来,要耗费很大的工作量。例如下图,某楼盘的一房一价表,怎么样发现单价低位的房子?光凭肉眼很难发现吧,能否让计算机进行文字的识别,...
文章目录
Python
基础之
图像识别
1. 获取屏幕截图2. 识别图像3. 自动点赞程序
1. 获取屏幕截图
我们控制鼠标的操作,不能盲目的
进行
,所以我们需要监控屏幕上的内容,从而决定要不要
进行
对应的操作, pyautogui 提供了一个方法screenshot(),可以返回一个Pillow的image对象;
这里有三个常用函数:
im = pyautogui.screenshot():返回屏幕的截图,是一个Pillow的image对象
im.getpixel((500, 500))
朋友需要一个工具,将图片中的文字提取出来。我帮他在网上找了一些
OCR
的应用,都不好用。所以准备自己研究,写一个Web APP供他使用。
OCR
1,全称Optical character recognition,或者optical character reader,中文译名叫做光学文字识别。它是把图像文件中的手写文本,打印文本转换为机器编码文本的一种方法。
OCR
技术广泛用于识别打印纸张中的文字数据 — 比如护照,支票,银行声明,收据,统计表单,邮件等。
OCR
的早期版本,需要对图片中的每个文字都
进行
训练,一次只能作用于一种字体。高级的版本增加了很大的识别率,可以同时识别现在很多流行的字体,支持不
这里
图像识别
,涉及到
python
3.9.1和
python
3.6.4。
之所以着重提及
python
版本,是因为代码使用了tensorflow。而网上找到的相关代码都是tensorflow1.x.x,而现在都是2.x.x。为了配合tensorflow的使用,我就多安装了
python
3.6。英文官网和中文官网都在这了,有兴趣研究的可以去看看升级前后的差别。环境配置:win10 + TensorFlow1.12.0 + pycharm +
python
3.6.4。
网上找到的代码基本都是TensorFlow1的,虽
图像分类,即通过图像内容的不同将图像划分为不同的类别,
该技术二十世纪九十年代末提出,并命名为基于图像内容的图像分类(Content- Based ImageClassific- ation, CEIC)算法概念,
基于内容的图像分类技术不需要对图像的语义信息
进行
人工标注,
而是通过计算机提取图像中所包含的特征,并对特征
进行
处理和分析,得出分类结果。
常用的图像特征有图像颜色、纹理、灰度等信息。而图像分类过程中,
提取的特征要求不.
python
实现
ocr
在这个阶段主要准备整个小程序的结构,既然要实现
ocr
,那么输入就是一张图片,而图片这里采用屏幕截图的方式获得,输出是文字,这里采用搜狗的
ocr
接口,我们把截好的图片传到搜狗
ocr
接口中,然后把返回的文字作为输出即可。
由于想做一个小程序,所以要为程序做GUI,这里采用tkinter编制GUI界面。
界面主要就准备一个窗体,里面有菜单,给出
OCR
功能。