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中logging模块的用法实例
Sep 29 Python
在Python中使用matplotlib模块绘制数据图的示例
May 04 Python
Python扫描IP段查看指定端口是否开放的方法
Jun 09 Python
小议Python中自定义函数的可变参数的使用及注意点
Jun 21 Python
Python文件和流(实例讲解)
Sep 12 Python
Python实现随机选择元素功能
Sep 14 Python
Android基于TCP和URL协议的网络编程示例【附demo源码下载】
Jan 23 Python
Python将文字转成语音并读出来的实例详解
Jul 15 Python
Django框架自定义模型管理器与元选项用法分析
Jul 22 Python
django框架基于queryset和双下划线的跨表查询操作详解
Dec 11 Python
如何利用pygame实现打飞机小游戏
May 30 Python
python内置模块之上下文管理contextlib
Jun 14 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
首页四格,首页五格For6.0(GBK)(UTF-8)[12种组合][9-18][版主安装测试通过]
2007/09/24 PHP
thinkphp验证码显示不出来的解决方法
2014/03/29 PHP
将PHP程序中返回的JSON格式数据用gzip压缩输出的方法
2016/03/03 PHP
CI框架(CodeIgniter)实现的导入、导出数据操作示例
2018/05/24 PHP
php语法检查的方法总结
2019/01/21 PHP
添加到收藏夹代码(兼容几乎所有的浏览器)
2007/01/09 Javascript
jquery在项目中做复选框时遇到的一些问题笔记
2013/11/17 Javascript
jQuery页面加载初始化常用的三种方法
2014/06/04 Javascript
JavaScript通过function定义对象并给对象添加toString()方法实例分析
2015/03/23 Javascript
详解JavaScript中shift()方法的使用
2015/06/09 Javascript
Position属性之relative用法
2015/12/14 Javascript
微信小程序 倒计时组件实现代码
2016/10/24 Javascript
js中的面向对象入门
2017/03/06 Javascript
JS实现微信摇一摇原理解析
2017/07/22 Javascript
JS实现json对象数组按对象属性排序操作示例
2018/05/18 Javascript
vue-cli脚手架搭建的项目去除eslint验证的方法
2018/09/29 Javascript
微信小程序带动画弹窗组件使用方法详解
2018/11/27 Javascript
vue ssr 实现方式(学习笔记)
2019/01/18 Javascript
微信小程序移动拖拽视图-movable-view实例详解
2019/08/17 Javascript
Vue页面跳转传递参数及接收方式
2020/09/09 Javascript
Vite和Vue CLI的优劣
2021/01/30 Vue.js
vue-router路由懒加载及实现的3种方式
2021/02/28 Vue.js
[49:40]2018DOTA2亚洲邀请赛小组赛 A组加赛 TNC vs Newbee
2018/04/03 DOTA
在Python中操作文件之seek()方法的使用教程
2015/05/24 Python
python sys,os,time模块的使用(包括时间格式的各种转换)
2018/04/27 Python
Python正则表达式和re库知识点总结
2019/02/11 Python
PyCharm搭建Spark开发环境实现第一个pyspark程序
2019/06/13 Python
python求平均数、方差、中位数的例子
2019/08/22 Python
通过实例了解python property属性
2019/11/01 Python
python字符串的index和find的区别详解
2020/06/20 Python
HTML5 device access 设备访问详解
2018/05/24 HTML / CSS
英国户外服装、鞋类和设备的领先零售商:Millets
2020/10/12 全球购物
群众路线对照检查材料思想汇报怎么写
2014/09/18 职场文书
授权委托书
2015/01/28 职场文书
电影建党伟业观后感
2015/06/01 职场文书
《别在吃苦的年纪选择安逸》读后感3篇
2019/11/30 职场文书