当前位置: 首页 > news >正文

python在不同的软件里都能识别吗_技术教程:2个Python程序识别图片和pdf上的文字!...

实例一:先减少背景杂音,再做图片文字识别

为了提高识别率,先用opencv-python对扫描的图片做预处理(减少背景杂音),然后调用pytesseract识别图片上的文字。处理方式就是:

1、将图片的颜色模式转成灰度模式,再用OTSU做二值化处理

2、将处理结果保存成临时图片文件

3、调用pytesseract识别临时图片上的文字,识别完毕后删掉临时图片

选择要识别文字的图片调用tkinter打开图形化对话窗口,tkinter是python内置模块,可直接引进不必安装。对tkinter不做太多解释,只是借助它的功能函数打开对话窗口。引入内置os的功能函数删除临时文件。

提高图片文字的识别率和正确率是个大话题,跟图片上文字的背景有关系,跟图片分辨率有关系,跟识别用的字库的识别能力也有关系(字库可以训练),牵扯的技术手段很多。除了减少背景杂音外,还有一些预处理工作我们也可以做,比如把图片上有文字的部分截取下来识别(效果很明显);把图片上的文字分成一小段一小段识别,甚至分成一个一个字符来识别……有兴趣的朋友可以自己研究。

实例二:识别pdf上的文字

识别pdf上的文字分几步进行:

1、引入wand模块,把pdf文件转成图片序列,通过序列的索引可以获得pdf的每一页。

2、遍历这个图片序列,把序列的每一页变成wand图片对象,转成灰度模式(简单预处理下,以提高识别度),接下来本应添加进图像列表req_image中,但却遇到一个问题:

PyOCR模块做图片文字识别的功能函数的形参只接收pillow的Image模块打开的图片PIL.Image.open(),不接受wand图形对象,PIL.Image.open()也不接收wand图片对象。当然可以wand图像对象保存成图片文件,然后PIL.Image.open()打开这个图片文件。

有个更快的处理方法,不用硬盘(硬盘慢)做媒介用缓存(buffer):先用wand图片对象的make_blob把图片转成二进制数据流,把二进制数据流放入列表req_image中。

3、遍历列表req_image,ByteIO()读取二进制数据流,返回值可以被PIL.Image.open()接受。接下去就可以调用PyOCR模块的功能函数做图片文字转换了。

4、将识别结果放进列表final_text,用pprint模块的pprint()显示出来。pprint,pretty print顾名思义,输出结果规整好看一些。

相关文章:

  • du -sh 如何找到最大的文件夹_Linux上查找最大文件的 3 种方法
  • python **参数为什么放在最后面_求大神帮忙看一下,在运行时为啥只保留了最后一张图片...
  • cdn jquery怎么没有提示_jQuery终端模拟器——基于web的终端
  • printf 指针地址_C语言零基础入门-指针-03
  • python有颜色进度条库_wxPython实现带颜色的进度条
  • python字典的一些操作_python 字典的一些操作
  • git 如何重新登录github_GitHub多账号管理
  • 解决python脚本连接终止问题_paramiko:自动终止远程启动的进程
  • eclipse ide for c/c++_重拾《 两周自制脚本语言 》- Eclipse插件实现语法高亮
  • eclipse启动springboot项目_教程:Systemctl启动SpringBoot项目
  • 非管理员用户使用iis_(七)使用管理员身份新增使用用户
  • php制作万年历的步骤_Excel 制作偶像万年历
  • 循环buffer的实现_用PHP实现高并发服务器
  • 统计一行文本的单词个数_【我爱背单词】从300万单词中给你一份3000英语新闻高频词汇...
  • hbase查询语句_Phoenix+Hbase二级索引
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 2018天猫双11|这就是阿里云!不止有新技术,更有温暖的社会力量
  • CentOS7 安装JDK
  • eclipse(luna)创建web工程
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • MySQL常见的两种存储引擎:MyISAM与InnoDB的爱恨情仇
  • nfs客户端进程变D,延伸linux的lock
  • Quartz初级教程
  • Vue 重置组件到初始状态
  • 产品三维模型在线预览
  • 分享自己折腾多时的一套 vue 组件 --we-vue
  • 关于springcloud Gateway中的限流
  • 规范化安全开发 KOA 手脚架
  • 记一次和乔布斯合作最难忘的经历
  • 近期前端发展计划
  • 如何设计一个比特币钱包服务
  • 问:在指定的JSON数据中(最外层是数组)根据指定条件拿到匹配到的结果
  • mysql面试题分组并合并列
  • raise 与 raise ... from 的区别
  • 阿里云ACE认证之理解CDN技术
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​批处理文件中的errorlevel用法
  • !!java web学习笔记(一到五)
  • # include “ “ 和 # include < >两者的区别
  • (0)Nginx 功能特性
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (附源码)ssm航空客运订票系统 毕业设计 141612
  • (附源码)基于SSM多源异构数据关联技术构建智能校园-计算机毕设 64366
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • (三十五)大数据实战——Superset可视化平台搭建
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (一)基于IDEA的JAVA基础1
  • (中等) HDU 4370 0 or 1,建模+Dijkstra。
  • (转)Java socket中关闭IO流后,发生什么事?(以关闭输出流为例) .
  • (转)ObjectiveC 深浅拷贝学习