前人栽树后人乘凉,以不造轮子为由

使用百度的图片识字功能,实现了一个上万次使用量的脚本。

  系统:win10

  Python版本:python3.8.6

  pycharm版本:pycharm 2021.1.2(Professional Edition)

 完整代码下载:Baidu_Ocr.py-Python

一、获取百度智能云token

百度智能云登录后找到人工智能界面下的文字识别->管理界面创建应用文字识别。

创建应用完成后记录下,后台界面提供的AppID、API key、Secret Key的信息

接下来根据 官方提供的文档获取使用Token

# encoding:utf-8
import requests
# client_id 为官网获取的AK, client_secret 为官网获取的SK
host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=wgEHks0l6MCpalbs3lPuFX1U&client_secret=Z4Rn4ghBx9k06fUYPmSEIRbCFvWFxLyQ'
response = requests.get(host)
if response:
print(response.json()['access_token'])

二、百度借口调用

使用获取后token调用百度接口对图片进行识别提取文字

# encoding:utf-8

import requests
import base64
'''
通用文字识别(高精度版)
'''
request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic"
# 二进制方式打开图片文件
f = open('图片.png', 'rb')
img = base64.b64encode(f.read())
params = {"image":img}
# 获取后的Token的调用
access_token = '24.0d99efe8a0454ffd8d620b632c58cccc.2592000.1639986425.282335-24065278'
request_url = request_url + "?access_token=" + access_token
headers = {'content-type': 'application/x-www-form-urlencoded'}
response = requests.post(request_url, data=params, headers=headers)
if response:
print (response.json())

获取后的token为json格式的数据

此处步骤我们可以看出识别后的文件是以json的格式返回的所以要想达到取出文字的效果就需要对json格式的返回值进行解析

三、搭建窗口化的程序以便于使用

实现窗口可视化的第三方类库是Tkinter。可在终端输入 pip install tkinter 自行下载安装

导入tkinter模块包 构建我们的可视化窗口,要是实现的功能有截图识别文字,中英文分离,文字识别后自动发送给剪切板

from tkinter import *
# 创建窗口
window = Tk()
# 窗口名称
window.title('qcc-tnw')
# 设置窗口大小
window.geometry('400x600')
# 窗口标题设置
l=Label(window,text='百度API调用', bg='green', fg='white', font=('Arial', 12), width=30, height=2)
l.pack()
# 设置文本接收框
E1 = Text(window,width='100',height='100')
# 设置操作Button,单击运行文字识别 "window窗口,text表示按钮文本,font表示按钮本文字体,width表示按钮宽度,height表示按钮高度,command表示运行的函数"
img_txt = Button(window, text='文字识别', font=('Arial', 10), width=15, height=1)
# 设置操作Button,单击分割英文
cut_en = Button(window, text='英文分割', font=('Arial', 10), width=15, height=1)
# 设置操作Button,单击分割中文
cut_cn = Button(window, text='中文分割', font=('Arial', 10), width=15, height=1)
# 参数anchor='nw'表示在窗口的北偏西方向即左上角
img_txt.pack(anchor='nw')
cut_en.pack(anchor='nw')
cut_cn.pack(anchor='nw')
# 使得构建的窗口始终显示在桌面最上层
window.wm_attributes('-topmost',1)
window.mainloop()

四、实现截图的自动保存

通过上述对百度接口的解析发现接口是不支持提取剪切板中的文件的

所以通过PIL库截取的图片从剪切板保存到本地,在调用百度的接口实现图片中文字的识别

PIL的安装 终端输入 pip install PIL

from PIL import ImageGrab

#取出剪切板的文件保存至本地

image = ImageGrab.grabclipboard()
s= 'xxx.png'
image.save(s)
#百度接口调用
request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic"
f = open(s, 'rb')
img = base64.b64encode(f.read())
params = {"image": img}
access_token = '24.ee0e97cbc00530d449464a563e628b8d.2592000.1640228774.282335-24065278'
request_url = request_url + "?access_token=" + access_token
headers = {'content-type': 'application/x-www-form-urlencoded'}
response = requests.post(request_url, data=params, headers=headers)
for i in response.json()['words_result']:
print(i['words'])

完成后可以使用qq或微信等的截图功能截图并运行程序

五、将识别到的文字输出显示在窗口文本框中并将文字发送到剪切板

if response:
for i in response.json()['words_result']:
# 接受识别后的文本
E1.insert("insert", i['words'] + '\n')
E1.pack(side=LEFT)
# 将识别后的文字写入剪切板
pyperclip.copy(E1.get("1.0","end"))

六、提取识别后文字中的中(英)文

此处的判断相对简单将 if len(''.join(re.findall(r'[A-Za-z]', i['words'])))<1: 中的‘<’改为‘>’即为中文

E1.delete('1.0','end')
for i in response.json()['words_result']:
#判断是否存在英文
if len(''.join(re.findall(r'[A-Za-z]', i['words'])))<1:
#将识别正则过滤后的文本在文本框中显示
E1.insert("insert", i['words'] + '\n')
E1.pack(side=LEFT)
#复制到剪切板
pyperclip.copy(E1.get("1.0", "end"))

最后将方法封装为函数形式传递至我们定义好的窗口按钮中

# 设置操作Button,单击运行文字识别  "window窗口,text表示按钮文本,font表示按钮本文字体,width表示按钮宽度,height表示按钮高度,command表示运行的函数"
img_txt = Button(window, text='文字识别', font=('Arial', 10), width=15, height=1,command=img_all)
# 设置操作Button,单击分割英文
cut_en = Button(window, text='英文分割', font=('Arial', 10), width=15, height=1,command=img_en)
# 设置操作Button,单击分割中文
cut_cn = Button(window, text='中文分割', font=('Arial', 10), width=15, height=1,command=img_cn)
# 参数anchor='nw'表示在窗口的北偏西方向即左上角
img_txt.pack(anchor='nw')
cut_en.pack(anchor='nw')
cut_cn.pack(anchor='nw')
window.wm_attributes('-topmost',1)
Auto Copied
Auto Copied

Python实战:截图识别文字,过万使用量版本!(附源码!!)的更多相关文章

  1. Python的开源人脸识别库:离线识别率高达99.38%(附源码)

    Python的开源人脸识别库:离线识别率高达99.38%(附源码) 转https://cloud.tencent.com/developer/article/1359073   11.11 智慧上云 ...

  2. C# 30分钟完成百度人脸识别——进阶篇(文末附源码)

    距离上次入门篇时隔两个月才出这进阶篇,小编惭愧,对不住关注我的卡哇伊的小伙伴们,为此小编用这篇博来谢罪. 前面的准备工作我就不说了,注册百度账号api,创建web网站项目,引入动态链接库引入. 不了解 ...

  3. 用python的TK模块实现猜成语游戏(附源码)

    说明:本游戏使用到的python模块有tkinter,random,hashlib:整个游戏分为四个窗口,一个进入游戏的窗口.一个选关窗口.一个游戏进行窗口和一个游戏结束的窗口. 源码有两个主要的py ...

  4. python爬虫-淘宝商品密码(图文教程附源码)

    今天闲着没事,不想像书上介绍的那样,我相信所有的数据都是有规律可以寻找的,然后去分析了一下淘宝的商品数据的规律和加密方式,用了最简单的知识去解析了需要的数据. 这个也让我学到了,解决问题的方法不止一个 ...

  5. Python爬虫实战,完整的思路和步骤(附源码)

    前言 小的时候心中总有十万个为什么类似的问题,今天带大家爬取一个问答类的网站. 本堂课使用正则表达式对文本类的数据进行提取,正则表达式是数据提取的通用方法. 环境介绍: python 3.6 pych ...

  6. 一张图片在Python操作下的4种玩法(附源码)

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 作者:黄伟呢 1.利用python绘制一个小猪佩奇 turtle库是一个很 ...

  7. 摸鱼人常备5个Python迷你项目,玩一整天不是问题(附源码)

    大家好鸭,我是小熊猫 在使用Python的过程中,我最喜欢的就是Python的各种第三方库,能够完成很多操作. 下面就给大家介绍5个通过Python构建的项目,以此来学习Python编程. 一.石头剪 ...

  8. 【Storm】Storm实战之频繁二项集挖掘(附源码)

    一.前言 针对大叔据实时处理的入门,除了使用WordCount示例之外,还需要相对更深入点的示例来理解Storm,因此,本篇博文利用Storm实现了频繁项集挖掘的案例,以方便更好的入门Storm. 二 ...

  9. selenium实战:窗口化爬取*宝数据(附源码链接)

    完整代码&火狐浏览器驱动下载链接:https://pan.baidu.com/s/1pc8HnHNY8BvZLvNOdHwHBw 提取码:4c08 双十一刚过,想着某宝的信息看起来有些少很难做 ...

随机推荐

  1. 搭建Mac+Java+appium+IOS真机自动化环境

    一.安装前环境准备 1.确保电脑已经有homebrew(包管理器)  下载链接[https://brew.sh/]   2.通过 brew 安装node.js brew install node 安装 ...

  2. CompleteFuture实现简单的任务编排实践

    CompleteFuture实现简单的任务编排实践 一:前言 ​ CompleteFuture是java8 新提供的API,是对函数式编程思想的体现,提供了很多的对于函数式编程支持.不止有同步处理功能 ...

  3. vue3双向数据绑定原理_demo

    <!DOCTYPE html> <head> <meta charset="UTF-8" /> <meta name="view ...

  4. 4.19——数组双指针——26. 删除有序数组中的重复项 & 27. 删除有序数组中的重复项II & 80. 删除有序数组中的重复项 II

    第一次做到数组双指针的题目是80: 因为python的List是可以用以下代码来删除元素的: del List[index] 所以当时的我直接用了暴力删除第三个重复元素的做法,大概代码如下: n = ...

  5. 2021 从零开始学Git【新版本Git - 8000字详细介绍】

    我写的这篇文章,主要是记录自己的学习过程,也希望帮助读者少踩坑(比如不同版本可能命令不兼容等).本文面向git零基础初学者,建议读者按照文中命令自己全部操作一遍(注意运行环境). 我的运行环境:win ...

  6. 【数据结构与算法Python版学习笔记】树——利用二叉堆实现优先级队列

    概念 队列有一个重要的变体,叫作优先级队列. 和队列一样,优先级队列从头部移除元素,不过元素的逻辑顺序是由优先级决定的. 优先级最高的元素在最前,优先级最低的元素在最后. 实现优先级队列的经典方法是使 ...

  7. Sequence Model-week2编程题1-词向量的操作【余弦相似度 词类比 除偏词向量】

    1. 词向量上的操作(Operations on word vectors) 因为词嵌入的训练是非常耗资源的,所以ML从业者通常 都是 选择加载训练好 的 词嵌入(Embedding)数据集.(不用自 ...

  8. the Agiles Scrum Meeting 1

    会议时间:2020.4.9 20:00 1.每个人的工作 今天已完成的工作 前端 学习JavaScript.Vue.ElementUI相关知识 issues:预习任务-前端:JavaScript 预习 ...

  9. 认识spring security

    在一个系统中认证和授权是常有的事情,现在比较流行的框架有spring security.shiro等等.他们都能很好的帮助我们完成认证和授权的功能.那么假如说让我们自己完成一个登录那么应该大致的流程是 ...

  10. linux环境下redis安装(redis伪集群搭建)

    redis在linux环境下搭建 1.创建目录 [root@192 local]# mkdir /usr/local/redis 2.下载redis,并解压 [root@192 local]# wge ...