Python实现实时截图文字内容识别OCR 图片内容转文本
OCR
概述
一般大家都用过“OCR”文字提取工具,不知道大家有没有注意,最近QQ给表情包提供了OCR文字识别功能,只要你把有文字的表情包点开,一般QQ会把识别的文字内容显示在下面。大家用的比较多的一般都是手机端识别,电脑端用的比较少,我现在还记得之前写论文时,一边用手机拍照识别文字,一边在把识别好的文字发送到PC端,很麻烦。最近接触了pytesseract模块,一个文字识别模块,于是乎就想到了能否利用他进行文字识别(答案是肯定的,他本来就是干这个的,我在瞎扯凑字数)。
总体分为两种策略,方案一就是采用这个第三方模块,方案二采用了百度的通用字体识别接口。
结果展示
起初只是采用pytesseract模块去实现,结果如下,效果有点子差哦,会有不少错别字。
接着查了一下,发现百度有接口可以使用就研究了一下,效果好了很多,几乎没有错别字。效果很好
工程实现
工程实现大致分为:获取文字截图、读入文字截图、识别文字截图、打印结果。
获取文字截图,就是用我一直用的Snipaste,他的截图快捷键为“F1”,复制键为“Ctrl”+“C”。这两个快捷键需要出现在程序里所以说了一下。
图片读写就是采用PIL模块读写的。
图片文字识别就是采用两中国不同策略实现,后一种识别精确度高。
打印结果可以存储到本地,也可以直接在控制台打印。
实现方案一
方案一采用pytesseract实现。具体代码参下,就四行。
import pytesseract
from PIL import Image
text = pytesseract.image_to_string(Image.open("pic.png"), lang='chi_sim')
print(text)
这样写的话,需要你提前把文字截图存放好。若想直接截图就能用,则需要加上一些键盘操作代码,增加后的代码如下。
from PIL import Image
from PIL import ImageGrab
import keyboard
import pytesseract
import time
# 1.从屏幕上截取要识别的内容,由于我的截图存储快捷方式为F1和Ctrl+C,
# 所以参数如下,若采用其他截图方式,按照快捷方式修改参数即可
keyboard.wait(hotkey="f1")
keyboard.wait(hotkey="ctrl+c")
time.sleep(0.1)
# 2.将从屏幕获取到的截图存储到与py文件的同级目录下
image = ImageGrab.grabclipboard()
image.save("pic.png")
# 3.调用pytesseract识别图片上的内容并打印
text = pytesseract.image_to_string(Image.open("pic.png"), lang='chi_sim')
print(text)
方案一代码很短,但是需要配置的东西挺多的。
1、安装pytesseract
pip install pytesseract
2、安装Tesseract-OCR并进行相关配置(网上教程很多,我在这里就不赘述了)
注意事项:若出现下面这种错误(目前网上没有人这样解决,说的都贼麻烦)
Error opening data file \Tesseract-OCR\chi_sim.traineddata
就打开Python模块对应的py文件pytesseract.py,在第337行左右给config一个初始值即可。
其中F:\Tesseract-OCR\tessdata为你的tessdata路径。
实现方案二
方案二采用了百度API接口,利用百度API去处理,效果很好,但是需要用户去百度开放平台的文字识别下面去创建一个应用,好消息就是他每天有5000次免费机会。其中百度开放平台下的文字识别为:https://ai.baidu.com/ai-doc/OCR/zk3h7xz52
创建应用成功后你就会拥有一些参数,这些参数需要你填在代码里用于调用API。
具体的实现代码如下。
from PIL import Image
from PIL import ImageGrab
import keyboard
import pytesseract
import time
from aip import AipOcr
# 1.从屏幕上截取要识别的内容,由于我的截图存储快捷方式为F1和Ctrl+C,
# 所以参数如下,若采用其他截图方式,按照快捷方式修改参数即可
keyboard.wait(hotkey="f1")
keyboard.wait(hotkey="ctrl+c")
time.sleep(0.1)
# 2.将从屏幕获取到的截图存储到与py文件的同级目录下
image = ImageGrab.grabclipboard()
image.save("pic.png")
# 此处填写你的APP参数信息
APP_ID = 'APP ID'
API_KEY = 'API Key'
SECRET_KEY = 'Secret Key'
client = AipOcr(APP_ID, API_KEY, SECRET_KEY)
# 读取图片
with open("pic.png", 'rb') as f:
image = f.read()
# 调用百度API通用文字识别,提取图片中的内容
text = client.basicAccurate(image)
result = text["words_result"]
for i in result:
print(i["words"])
至此,两种截图文字内容识别也就说完了,其实没啥太大的代码量,主要是搞清楚如何使用,回想当年手机识别在转发的日子,自己真是蠢到家了。
- 回溯法算法框架
- 手机支付每天限额500块钱?“我刷你”和“你刷我”限额不一样
- 原始UDP封包发送
- Elasticsearch——Rest API中的常用用法
- strlen函数,strcat函数,strcpy函数,strncpy函数,strcmp函数
- Elasticsearch——多索引的使用
- 路由跟踪技术
- 手把手教你编写Logstash插件
- ping 实现设计---ICMP
- Elasticsearch增删改查 之 —— mget多文档查询
- Elasticsearch 之 数据索引
- AngularJS 国际化——Angular-translate
- MFC中注释含义
- Elasticsearch Span Query跨度查询
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- CentOs7下Zabbix安装教程——zabbix agent安装和前端配置
- CentOs7下Zabbix安装教程——zabbix server安装
- CentOs7下Zabbix安装教程——准备工作
- python:HTTP Error 505: HTTP Version Not Supported
- PYES异常: TypeError: 'NoneType' object is not callable
- 第十八篇 zabbix创建自定义报警媒介
- 原创|如果懂了HashMap这两点,面试就没问题了
- RTSP协议网络摄像头互联网直播开源流媒体平台
- RTSP协议网页无插件播放,匿名登录不显示设备资源如何解决?
- 设计模式~代理模式
- Linux工具入门:make工具与Makefile文件
- PF_RING的多种负载均衡方法
- 【拓展】686- 如何在 Web 上大规模生成 UUID
- Linux进程管理与性能监控
- 重学数据结构(一、线性表)