专栏首页搬运代码吧Python实现实时截图文字内容识别OCR 图片内容转文本

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"])

至此,两种截图文字内容识别也就说完了,其实没啥太大的代码量,主要是搞清楚如何使用,回想当年手机识别在转发的日子,自己真是蠢到家了。

本文分享自微信公众号 - 搬运代码吧(MoveCode),作者:Jingjie

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-01-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 线性回归

    本部分为自己学习部分机器学习算法中的一部分笔记及感想,我的方向和机器学习无关,可能对一些问题分析的并不准确,有问题欢迎一起探讨商榷。由于这是第一篇推文,因此首先...

    啤酒单恋小龙虾
  • 双指针 || 0167 两数之和

    因为数组已经排好序,我们可以采用方向相反的双指针来寻找这两个数字,一个初始指向最 小的元素,即数组最左边,向右遍历;一个初始指向最大的元素,即数组最右边,向左遍...

    啤酒单恋小龙虾
  • Python获取B站视频弹幕 简单处理

    之前看到了网上有人做过一些up的B站弹幕数据可视化,感觉还挺有意思,于是自己就动手做着玩了一下(没有做可视化)。祝福武汉,祝福中国!

    啤酒单恋小龙虾
  • 鸿海公布新任董事名单,郭台铭依旧位列其中

    郭台铭的第二次退休计划暂时看来是泡汤了。5月10日晚间,鸿海公布了新任董事候选名单,郭台铭依旧位列其中。并且,此次公告并未披露董事长的人选。

    镁客网
  • 信息

    用户1733462
  • 随机森林概览:创建,使用和评估

    决策树在训练集中的表现较好,但是因其不具有灵活性而在其他外部数据中的表现略差。由许多决策树组成的随机森林更具有灵活性,从而较大地提高了准确预测的能力。

    王诗翔呀
  • Python通过多帧静态图像制作GIF动态图像

    下面的代码可以把多个png图像文件合并为一个GIF动态图像文件,如果无法正常执行的话,除了需要使用pip安装pillow和images2fig扩展库之外,很可能...

    Python小屋屋主
  • listview动态获取数据

    1.主Activity 1 public class MainActivity extends Activity { 2 3 private ...

    xiangzhihong
  • Android开发实现ListView异步加载数据的方法详解

    本文实例讲述了Android开发实现ListView异步加载数据的方法。分享给大家供大家参考,具体如下:

    砸漏
  • Android蓝牙开发(一)之打开蓝牙和设备搜索

    https://blog.csdn.net/huangliniqng/article/details/82185635

    黄林晴

扫码关注云+社区

领取腾讯云代金券