python识别图像并提取文字的实现方法


Posted in Python onJune 28, 2019

前言

python图像识别一般基础到的就是tesseract了,在爬虫中处理验证码广泛使用。

安装

安装教程网上大都差不多,Windows下确实比较麻烦,涉及到各种路径、环境变量甚至与linux不同的路径分隔符,所以这里的安装是基于Centos7。

1. 依赖安装

yum install -y automake autoconf libtool gcc gcc-c++

2. 安装leptonica

Leptonica主要用于图像处理和图像分析

原则上所有的库文件都是可以直接用yum安装的,如果想要具体的某个版本,可以前往官方源下载对应版本然后按照对应方式编译

wget http://www.leptonica.org/source/leptonica-1.74.4.tar.gz
tar -zxvf leptonica-1.74.4.tar.gz
cd leptonica-1.74.4/
./configure
make && make install

3. 安装tesseract

其他各版本可以在这里下载并自行编译,也提供直接使用的文件。

yum install tesseract

4. 验证安装

tesseract --version

5. 语言包下载

前往tesseract-ocr/tessdata下载相应的语言包,然后将之移动到tessdata目录下,可以用whereis tesseract查看一下具体的目录,我的是/usr/share/tesseract/tessdata/mv *.traineddata /usr/local/share/tessdata/

6. 查看目前已下载的语言

tesseract --list-langs

使用

# tesseract
Usage:
 tesseract --help | --help-psm | --help-oem | --version
 tesseract --list-langs [--tessdata-dir PATH]
 tesseract --print-parameters [options...] [configfile...]
 tesseract imagename|stdin outputbase|stdout [options...] [configfile...]

OCR options:
 --tessdata-dir PATH  Specify the location of tessdata path.
 --user-words PATH   Specify the location of user words file.
 --user-patterns PATH Specify the location of user patterns file.
 -l LANG[+LANG]    Specify language(s) used for OCR.
 -c VAR=VALUE     Set value for config variables.
            Multiple -c arguments are allowed.
 --psm NUM       Specify page segmentation mode.
 --oem NUM       Specify OCR Engine mode.
NOTE: These options must occur before any configfile.

语法

tesseract imagename outputbase [-l lang] [-psm pagesegmode] [configfile...]
  • imagename:图片名字
  • outputbase:指定输出,如果希望直接输出而不是保存到文件,那么就使用 stdout,否则这个参数将会作为保存结果的文件的前缀
  • -l指定语言文件,默认使用英文
  • tesseract --print-parameters:查看更多参数信息
  • 使用-c指定单项参数的值或者将配置写入配置文件放在命令最后(支持多个配置文件)
  • psm 识别图像的方式

0:定向脚本监测(OSD)

1: 使用OSD自动分页

2 :自动分页,但是不使用OSD或OCR(Optical Character Recognition,光学字符识别)

3 :全自动分页,但是没有使用OSD(默认)

4 :假设可变大小的一个文本列。

5 :假设垂直对齐文本的单个统一块。

6 :假设一个统一的文本块。

7 :将图像视为单个文本行。

8 :将图像视为单个词。

9 :将图像视为圆中的单个词。

10 :将图像视为单个字符。

python中使用

Tesseract安装完成后可以很方便的被Python调用,但是需要pillow和pytesseract的支持。

python中转换

image_to_data(image, lang=None, config='', nice=0, output_type=Output.STRING)
  • image Object,由Tesseract处理的图像的PIL Image/NumPy数组
  • lang String,Tesseract语言代码字符串
  • config String,任何其他配置字符串,例如:config='--psm 6'
  • 语言文件可以叠加,用“+”隔开
  • 我们也可以在这里进行tessdata路径的设置,跟在config里面即可
  • 更多配置包括config和psm都和tesseract类似

实例:

流程: 打开图片,配置,转换,可以通过Image的open或者cv2的imread打开图片,之后对图片进行对比度增强,降噪等处理,效果会好一些。

from PIL import Image
import pytesseract
class Languages:
  CHS = 'chi_sim'
  ENG = 'eng'
def img_to_str(image_path, lang=Languages.ENG):
  return pytesseract.image_to_string(Image.open(image_path), lang)
print(img_to_str('pic/numu.png', lang=Languages.ENG))
print(img_to_str('pic/pro.png', lang=Languages.ENG))

python识别图像并提取文字的实现方法

python识别图像并提取文字的实现方法

总结

简单的文本识别效果还是不错的,但是设计到多空行、符号等,识别效果就不是太好了,准确度方面可以通过对字库的训练达到想要的效果,之后对获取到的文本利用诸如re等各种库进行操作,其实应用还蛮广泛的。2. 但是它在验证码方面的话效果还是不错的,验证码的话tesserocr也是比较方面的.

识别中文可能会出现编码错误,这也是识别上的漏洞之一了,网上大佬们所说的改变文本的编码似乎并不能解决问题,所以对长文本图片处理还是不太建议直接转换。

图文处理也可以借鉴一些各平台的API,百度、腾讯、美团都有支持.

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python数据预处理之将类别数据转换为数值的方法
Jul 05 Python
Android基于TCP和URL协议的网络编程示例【附demo源码下载】
Jan 23 Python
Python实现从log日志中提取ip的方法【正则提取】
Mar 31 Python
Python中数组,列表:冒号的灵活用法介绍(np数组,列表倒序)
Apr 18 Python
Python学习笔记之open()函数打开文件路径报错问题
Apr 28 Python
python生成多个只含0,1元素的随机数组或列表的实例
Nov 12 Python
对pytorch网络层结构的数组化详解
Dec 08 Python
python检测IP地址变化并触发事件
Dec 26 Python
Python学习笔记之函数的定义和作用域实例详解
Aug 13 Python
浅析PEP570新语法: 只接受位置参数
Oct 15 Python
Django如何与Ajax交互
Apr 29 Python
python神经网络 tf.name_scope 和 tf.variable_scope 的区别
May 04 Python
python3射线法判断点是否在多边形内
Jun 28 #Python
python opencv 批量改变图片的尺寸大小的方法
Jun 28 #Python
python如何实现代码检查
Jun 28 #Python
python射线法判断一个点在图形区域内外
Jun 28 #Python
Python OpenCV之图片缩放的实现(cv2.resize)
Jun 28 #Python
如何使用Python 打印各种三角形
Jun 28 #Python
python射线法判断检测点是否位于区域外接矩形内
Jun 28 #Python
You might like
PHP编程中八种常见的文件操作方式
2006/11/19 PHP
PHP中单引号与双引号的区别分析
2014/08/19 PHP
PHP命令行脚本接收传入参数的三种方式
2014/08/20 PHP
深入理解PHP之源码目录结构与功能说明
2016/06/01 PHP
php版微信返回用户text输入的方法
2016/11/14 PHP
PHP之多条件混合筛选功能的实现方法
2019/10/09 PHP
js下获得客户端操作系统的函数代码(1:vista,2:windows7,3:2000,4:xp,5:2003,6:2008)
2011/10/31 Javascript
『jQuery』名称冲突使用noConflict方法解决
2013/04/22 Javascript
jquery封装的对话框简单实现
2013/07/21 Javascript
js获取select标签的值且兼容IE与firefox
2013/12/30 Javascript
JS 弹出层 定位至屏幕居中示例
2014/05/21 Javascript
js style动态设置table高度
2014/10/21 Javascript
Node.js和MongoDB实现简单日志分析系统
2015/04/25 Javascript
js实现简洁的TAB滑动门效果代码
2015/09/06 Javascript
Bootstrap基本组件学习笔记之input输入框组(9)
2016/12/07 Javascript
JS实现的走迷宫小游戏完整实例
2017/07/19 Javascript
Vue实现拖放排序功能的实例代码
2019/07/08 Javascript
Angular5整合富文本编辑器TinyMCE的方法(汉化+上传)
2020/05/26 Javascript
python修改字典内key对应值的方法
2015/07/11 Python
python3使用PyMysql连接mysql数据库实例
2017/02/07 Python
Python PyQt5实现的简易计算器功能示例
2017/08/23 Python
django允许外部访问的实例讲解
2018/05/14 Python
python3学习之Splash的安装与实例教程
2018/07/09 Python
python覆盖写入,追加写入的实例
2019/06/26 Python
解决Python二维数组赋值问题
2019/11/28 Python
python pip安装包出现:Failed building wheel for xxx错误的解决
2019/12/25 Python
postman和python mock测试过程图解
2020/02/22 Python
css3选择器基本介绍
2014/12/15 HTML / CSS
CSS3 RGBA色彩模式使用实例讲解
2016/04/26 HTML / CSS
人事科岗位职责范本
2014/03/02 职场文书
村级个人对照检查材料
2014/08/22 职场文书
爱的教育读书笔记
2015/06/26 职场文书
围城读书笔记
2015/06/26 职场文书
java基础——多线程
2021/07/03 Java/Android
Apache POI的基本使用详解
2021/11/07 Servers
使用canvas仿Echarts实现金字塔图的实例代码
2021/11/11 HTML / CSS