整体思路

1、[截图](https://blog.csdn.net/weixin_44343083/article/details/112252207)
2、图片压缩(百度的ocr要求图片小于4M)
3、调用百度ocr的函数进行文字识别

代码要申请百度ocr接口才能实现
百度ocr接口申请教程

代码展示

写完后只是粗略地测试了一下,可能会有一点bug。如果有bug及代码修改方式希望能告知一下,谢谢!!!

from PIL import Image, ImageGrab
from aip import AipOcr
from tkinter import Tk, Button, Canvas
from ctypes import windll
from win32clipboard import OpenClipboard, EmptyClipboard, SetClipboardData, CloseClipboard
from win32con import CF_DIB,CF_UNICODETEXT
from io import BytesIOdef send_to_clipboard(clip_type, data):#将数据传入剪贴板OpenClipboard()EmptyClipboard()SetClipboardData(clip_type, data)CloseClipboard()def photo_compression(im):#图片压缩width, height = im.sizewhile width * height > 4000000: #该数值压缩后的图片大概 两百多kwidth = width // 2height = height // 2e_img = im.resize((width, height), Image.BILINEAR)return e_imgdef ocr(im,choice):#使用百度OCR进行文字识别,支持jpg、jpeg、png、bmp格式APP_ID = '**********'API_KEY = '**********'SECRECT_KEY = '**********'#这三个自己去百度AI上申请client = AipOcr(APP_ID, API_KEY, SECRECT_KEY)output = BytesIO()im.convert("RGB").save(output, "BMP")data = output.getvalue()output.close()if choice == 1:result = client.basicGeneral(data)elif choice == 2:result = client.basicAccurate(data)out = ''#print(result.get('words_result'))for text in result.get('words_result'):out+=text.get('words')+'\n'#print(out)send_to_clipboard(CF_UNICODETEXT,out)class CTkPrScrn:def __init__(self):self.start_x, self.start_y = 0, 0self.end_x, self.end_y = 0, 0self.on_x, self.on_y = 0, 0self.scale = 1self.WIN = Tk()self.WIN.attributes("-alpha", 0.5)  # 设置窗口半透明self.WIN.attributes("-fullscreen", True)  # 设置全屏self.WIN.attributes("-topmost", True)  # 设置窗口在最上层self.width, self.height = self.WIN.winfo_screenwidth(), self.WIN.winfo_screenheight()# 创建画布self.canvas = Canvas(self.WIN, width=self.width, height=self.height, bg="gray")self.WIN.bind('<Button-1>', self.xFunc1)  # 绑定鼠标左键点击事件self.WIN.bind('<ButtonRelease-1>', self.xFunc2)  # 绑定鼠标左键点击释放事件self.WIN.bind('<B1-Motion>', self.xFunc3)  # 绑定鼠标左键点击移动事件self.WIN.bind('<Escape>', lambda e: self.WIN.destroy())  # 绑定Esc按键退出事件self.button_yes = Button(self.WIN, text='√', fg='green',command=self.event_yes)#确认截图按钮self.button_no = Button(self.WIN, text='×', fg='red',command=self.event_no)#重新截图按钮#self.button_yes.bind('<Button-1>',self.screenGrab)#self.button_no.bind('<Button-1>',self.canvas.delete("prscrn"))user32 = windll.user32gdi32 = windll.gdi32dc = 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}")# print(event.state)self.on_x, self.on_y = event.x, event.ydef xFunc2(self, event):  # 鼠标左键释放if event.x == self.start_x or event.y == self.start_y:returnelse:self.end_x, self.end_y = event.x, event.yself.button_yes.pack()self.button_no.pack()# print(self.end_y,self.height)if self.end_y >= self.height - 100:self.button_yes.place(x=self.end_x - 25, y=self.end_y - 35)self.button_no.place(x=self.end_x - 50, y=self.end_y - 35)else:self.button_yes.place(x=self.end_x - 20, y=self.end_y + 5)self.button_no.place(x=self.end_x - 45, y=self.end_y + 5)def xFunc3(self, event):# print(f"鼠标左键点击了一次坐标是:x={self.scale * event.x}, y={self.scale * event.y}")self.start_x, self.start_y = self.on_x, self.on_yif event.x == self.start_x or event.y == self.start_y:returnself.canvas.delete("prscrn")self.canvas.create_rectangle(self.start_x, self.start_y, event.x, event.y,fill='white', outline='red', tag="prscrn")# 包装画布self.canvas.pack()def event_yes(self):self.WIN.update()self.WIN.destroy()im = ImageGrab.grab((self.scale * self.start_x, self.scale * self.start_y,self.scale * self.end_x, self.scale * self.end_y))#print(self.__start_x,self.__end_x)#im.show()ocr(photo_compression(im),1)def event_no(self):self.canvas.delete("prscrn")self.button_yes.place_forget()self.button_no.place_forget()self.button_yes.pack_forget()self.button_no.pack_forget()if __name__ == '__main__':prScrn = CTkPrScrn()

[Python]利用百度AI的ocr实现屏幕内区域文字识别相关推荐

  1. 小福利,通过python利用百度ai实现图片识别

    大家好,我是天空之城,今天给大家带来小福利,通过python利用百度ai实现图片识别.有兴趣加qq群,纯学习,1098016198. 至于api接口的APP_ID ,API_KEY ,SECRECT_ ...

  2. python利用百度AI进行图片识别与分类

    python利用百度AI进行图片识别与分类 声明 此博客纯属记录我学习的过程,是本人的一次大作业,如果程序中有问题或者有更好的实现方法希望各位前辈多多指点 背景 大多数人的相册都是乱七八糟的,动物的照 ...

  3. Python利用百度AI提取图片中的文字信息

    Python利用百度AI提取图片中的文字信息 安装百度AI : pip install baidu-aip 到https://console.bce.baidu.com/ai/创建文字识别应用,获取A ...

  4. python 利用百度AI实现文字识别(cv2 + aip module)

    python 利用百度AI实现文字识别(cv2 + aip module) (该案例将利用cv2,aip等模块,详细的安装以及使用的方法将在后文进行简单的介绍.) 一.KNN算法的简介(机器学习算法之 ...

  5. 九十三、Python使用百度云接口API实现截图,文字识别和语音合成

    @Author:Runsen @Date:2020/7/13 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏 ...

  6. Python利用百度AI平台实现人脸识别

    前言 百度AI平台提供的接口十分丰富,对于做项目来说,百度是一个很好的开放平台.本文利用百度提供的接口来实现人脸识别,而且可以无限制调用.博客参考人脸识别-Python-SDK 安装 pip inst ...

  7. Python利用百度AI库颜值分析(包括脸型情绪颜值打分)

    导入库 from aip import AipFace import base64 import time from PIL import Image,ImageDraw,ImageFont from ...

  8. 百度AI攻略:手写文字识别

    1.功能描述: 支持对图片中的手写中文.手写数字进行检测和识别,针对不规则的手写字体进行专项优化,识别准确率可达90%以上 2.平台接入 具体接入方式比较简单,可以参考我的另一个帖子,这里就不重复了: ...

  9. python利用百度AI 人脸识别(不用access_token)

    最近几天做项目要用人脸识别,因为以前用的都是c++,所以用python很不习惯弄了好久,现在差不多弄好了,就记录一下吧,希望可以帮到有需要的人. 我看到网上很多代码都有用access_token,刚开 ...

最新文章

  1. 查询表中的所有字段名
  2. 成人高考报计算机还是学前教育,成人高考读什么专业比较好 三大热门专业
  3. POJ - 1236 Network of Schools
  4. 2020最值得学习的12款python-web开发框架大盘点
  5. mac系统jmeter生成html报告,jmeter5.1.1 生成html报告
  6. 使用Cloud SQL的Google App Engine全文搜索
  7. python实现文字转语音的合成
  8. 余额 微信钱包图片_微信红包技巧:关闭这个功能,不上传身份证也能正常使用!...
  9. Pandas 处理 dummy variable
  10. oracle+gsm安装,针对Oracle的10G版本提升SCOTT为DBA脚本!
  11. Kafka Streams简介: 让流处理变得更简单
  12. Insufficient space for shared memory file 解决办法
  13. 设计java每行输出5个数_程序设计入门—Java语言 第五周作业
  14. wc 统计文件字节数、字符数、单词数
  15. 从微软重返诺基亚:Juha Alakarhu是何许人也?
  16. 纽约比加州时间早3个小时 - 送给自己
  17. element tabs 的基础类型下划线不显示
  18. 架构设计:系统间通信(36)——Apache Camel快速入门(上)
  19. SpringBoot如何正确控制bean的加载顺序
  20. echarts贵州地图展示自定义贵安新区

热门文章

  1. YOLOv3论文全文完整理解翻译
  2. 国外成熟的程序交易系统的思路 z
  3. 日活4亿的抖音,为何没能孵化出第二个拼多多?
  4. 计算机专业有何特长怎么填写,计算机专业简历怎么写
  5. 程序员的职业发展规划
  6. vscode 返回上次编辑处和跳转到引用
  7. TM1652控制-2
  8. mysql tsa_为DB2 pureScale升级补丁包,按流程升级RSCT,TSA,GPFS和DB2等
  9. 解决win10开机出现C:\WIndows\system32\config\systemprofile\Desktop不可用 问题
  10. mac定时执行python_mac下定时执行python程序(附不执行解决方案).md