1. 获取百度识字API

由于百度提供了免费的图片识字API,而且非常好用,所以直接使用百度的api来进行识字。

首先在百度AI开放平台注册一个账号,网址http://ai.baidu.com/,注册完之后进入右上角控制台,点击->"文字识别"

点击“创建应用”

创建一个识字的应用,接口选择“文字识别”,然后下面填个人,描述随便写一些

然后再应用主页中可以看到申请到的API key和Secret Key,该接口一天可以每天调用50000次,完全可以满足我们个人的需求

2. 调用百度API

拿到API_KEY和SECRET_KEY后获取token,然后通过token和接口来对图片进行识字,这里使用本地tmp.png作为目标图片进行识别。代码如下,想用的直接复制就好

baidu.py

"""

baidu.py

"""

import requests

import base64

API_KEY = '你的API_KEY'

SECRET_KEY = '你的SECRET_KEY'

def get_access_token():

# 获取token值

# client_id 为官网获取的API_KEY, client_secret 为官网获取的SECRET_KEY

host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=' + \

'client_credentials&client_id=' + API_KEY + \

'&client_secret=' + SECRET_KEY

response = requests.get(host)

access_token = response.json()['access_token']

return access_token

access_token = get_access_token()

def img2word():

# 将图片中的文字识别出来

global access_token

request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic"

# 二进制方式打开图片文件

f = open('./tmp.png', 'rb')

img = base64.b64encode(f.read())

params = {"image":img}

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)

print(response.json())

ret = [x['words'] for x in response.json()['words_result']]

return ret

3. 实现截图功能

识字部分已经完成,接下实现截图功能,我们想要像微信里面截图那样可以选中区域进行截图,代码如下

scrshoot.py

"""

scrshoot.py

"""

from PIL import ImageGrab

import tkinter

import ctypes

class CTkPrScrn:

def __init__(self):

self.__start_x, self.__start_y = 0, 0

self.__scale = 1

self.__win = tkinter.Tk()

self.__win.attributes("-alpha", 0.1) # 设置窗口半透明

self.__win.attributes("-fullscreen", True) # 设置全屏

self.__win.attributes("-topmost", True) # 设置窗口在最上层

self.__width, self.__height = self.__win.winfo_screenwidth(), self.__win.winfo_screenheight()

# 创建画布

self.__canvas = tkinter.Canvas(self.__win, width=self.__width, height=self.__height, bg="white")

self.__win.bind('', self.xFunc1) # 绑定鼠标左键点击事件

self.__win.bind('', self.xFunc1) # 绑定鼠标左键点击释放事件

self.__win.bind('', self.xFunc2) # 绑定鼠标左键点击移动事件

self.__win.bind('', lambda e: self.__win.destroy()) # 绑定Esc按键退出事件

user32 = ctypes.windll.user32

gdi32 = ctypes.windll.gdi32

dc = user32.GetDC(None)

widthScale = gdi32.GetDeviceCaps(dc, 8) # 分辨率缩放后的宽度

heightScale = gdi32.GetDeviceCaps(dc, 10) # 分辨率缩放后的高度

width = gdi32.GetDeviceCaps(dc, 118) # 原始分辨率的宽度

height = gdi32.GetDeviceCaps(dc, 117) # 原始分辨率的高度

self.__scale = width / widthScale

print(self.__width, self.__height, widthScale, heightScale, width, height, self.__scale)

self.__win.mainloop() # 窗口持久化

def xFunc1(self, event):

# print(f"鼠标左键点击了一次坐标是:x={g_scale * event.x}, y={g_scale * event.y}")

if event.state == 8: # 鼠标左键按下

self.__start_x, self.__start_y = event.x, event.y

elif event.state == 264: # 鼠标左键释放

if event.x == self.__start_x or event.y == self.__start_y:

return

im = ImageGrab.grab((self.__scale * self.__start_x, self.__scale * self.__start_y,

self.__scale * event.x, self.__scale * event.y))

imgName = 'tmp.png'

im.save(imgName)

print('保存成功')

self.__win.update()

self.__win.destroy()

self.__win.quit()

def xFunc2(self, event):

# print(f"鼠标左键点击了一次坐标是:x={self.__scale * event.x}, y={self.__scale * event.y}")

if event.x == self.__start_x or event.y == self.__start_y:

return

self.__canvas.delete("prscrn")

self.__canvas.create_rectangle(self.__start_x, self.__start_y, event.x, event.y, outline='red', tag="prscrn")

# 包装画布

self.__canvas.pack()

if __name__ == '__main__':

prScrn = CTkPrScrn()

4. tkiner实现简单UI

通过tk库简单实现一个窗口用于截图和显示文本,同时可以复制文本

front.py

"""

front.py

"""

import tkinter as tk

from baidu import img2word

from scrshoot import CTkPrScrn

def center_window(root, width, height):

# 将window设置在屏幕中间

screenwidth = root.winfo_screenwidth()

screenheight = root.winfo_screenheight()

size = '%dx%d+%d+%d' % (width, height, (screenwidth - width)/2, (screenheight - height)/2)

root.geometry(size)

def srcandserach():

global root, text_words

CTkPrScrn()

words = ' '.join(img2word())

print(words)

text_words.delete(0.0,tk.END)

text_words.insert(tk.INSERT,words)

root.update()

ft = ('Arial', '12') # 字体大小

root = tk.Tk()

root.title('识字搜索')

center_window(root, 800,300)

# 截图按钮

button_scr = tk.Button(root, text="截图", font=ft, command=srcandserach)

text_words = tk.Text(root, width=80,height=10, font=ft)

button_scr.grid(row=0, column=0)

text_words.grid(row=1, column=0)

root.mainloop()

5. 工具展示

识字ui

点击截图识字,可以识别出截图的文字信息,大功告成啦~

原文链接:https://blog.csdn.net/blowfire123/article/details/112079583

python androidhelper 语音识字_Python实现截图AI文字识字小工具相关推荐

  1. python说话语音代码_Python文字转换语音,让你的文字会「说话」,抠脚大汉秒变撒娇萌妹...

    APP 也有文字转换为语音的功能,虽然听起来很别扭,但是基本能解决长辈们看不清文字或者眼睛疲劳,通过文字转换为语音来获取信息. 我们用 Python 能否实现文字转语音呢,可以的,百度有个语音接口,可 ...

  2. python识别汉字笔画_Python识别图片中的文字

    Python识别图片中的文字 一.前言 不知道大家有没有遇到过这样的问题,就是在某个软件或者某个网页里面有一篇文章,你非常喜欢,但是不能复制.或者像百度文档一样,只能复制一部分,这个时候我们就会选择截 ...

  3. python人机对战_Python实现的人机对战小游戏——剪刀、石头、布

    各版本程序工程叙述:获取双方对战人员名单 实现一次对战 根据对战结果评输赢 实现多次对战 实现最终结果的评判 版获取双方对战人员名单 涉及知识点:print()向控制台输出信息 input()从键盘录 ...

  4. 【Python】实现键盘鼠标动作录制和执行的小工具

    突发奇想做一个可以实现鼠标键盘操作录制,并可以回放操作的小工具.依托于pynput模块来实现鼠标键盘的控制,tkinter来实现图形界面的绘制.分为以下几个步骤: 一 录制(记录过程,并将用户的操作保 ...

  5. 截图如何转成文字?分享截图转文字的小技巧给你们

    随着科技的发展,人们在工作.学习.生活中需要处理的大量文本信息,使得文字转换变得非常必要.截图转文字功能的出现,可以让大家更加方便快捷地将图片中的文本信息转换为可编辑的文字格式.那大家知道截图如何转文 ...

  6. CodePNG - 把代码片段变成漂亮截图的免费在线小工具

    今天分享款简单实用的粘贴代码生成漂亮图片的在线工具,打开就能用,访问速度快,值得 mark 常用. 关于 CodePNG CodePNG 是一款支持将你的代码变成漂亮截图的在线工具,由开发者 Henr ...

  7. 【python开源项目】推荐一款prize万能抽奖小工具发布

    请确保您的电脑安装了python和pip工具,下面使用pip安装并使用rxq工具. 第一步 安装与使用 prize 打开任意终端或者CMD pip install prize #或者这个:pip in ...

  8. 基于Python命令行的NBA文字直播小工具

    NBA季后赛正在进行中,无奈要上班,不能看视频直播.而文字直播页面又有太多广告之类的东西,所以花半天时间,用Python 3搞一个基于命令行的文字直播,看着清爽,又不容易被领导发现.效果如图所示: 图 ...

  9. [python运维] 使用python3制作一个mysql压测小工具!

    ​​0x01 argparse模块​​ ​ argparse是Python 标准库中推荐的命令行解析模块,他可以实现给出参数提示和接收用户输入的参数,类似linux的命令行功能:​ [root@yun ...

最新文章

  1. 计算机应用基础课程是过程化考试吗,基于能力的计算机应用基础课程过程化考核标准构建与实施...
  2. 如何使用dmidecode命令查看硬件信息
  3. 使用Ubuntu 12.04作为日常电脑环境
  4. websocket 代理tcp_netty实现websocket请求实战
  5. 读再多书都没觉得自己变强?试试我这“5年陈”的方法
  6. [剑指offer]面试题第[2]题[JAVA][替换空格][函数][字符串]
  7. error: L6235E: More than one section matches selector - cannot all be FIRST/LAST.
  8. linux下printf函数为什么不加\n就不能输出相关的内容 ?
  9. java实时推送goeasy_JAVA Web实时消息后台服务器推送技术---GoEasy
  10. ALFA机器视觉深度学习外观检测自学习人工智能软件——ocr字符检测
  11. 基于java网络版坦克大战游戏
  12. 毫米波雷达技术及应用大解析
  13. 一维信号的频域特征分析python
  14. vcs的加密protect
  15. 【宏基因组学】微生物宏基因组学论文摘要集锦
  16. 如何利用迅雷来下载百度云文件?(此方法只适用于大文件需要启动百度网盘的客户端这种情况)...
  17. 5-1 厘米换算英尺英寸 (15分) PTA
  18. Linux最常用命令50条【呕心沥血呐,望用之取之】
  19. Git Please tell me who you are
  20. linux 批量解压.7z脚本

热门文章

  1. 【HJLL-E3/A数字式零序电流继电器】
  2. python-docx表格设置实线_如何使用python docx设置单元格边框
  3. 如何在sql server 2005 中安装northwind 和 pubs 数据库
  4. Excel中的散点图这么强大,学习了!
  5. C语言入门项目——BMI指数计算器
  6. AWS中国区域发布财务管理服务 让客户更经济高效地使用云服务
  7. 手机摄像头驱动_摄像头马达厂持续扩产背后大揭秘
  8. Python实战HSV颜色模型——提取像素点并判断像素点颜色
  9. 学习日志day46(2021-09-10)(1、使用富文本编辑器simditor)
  10. 探寻企业app开发的特色功能和技术特点