2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > python通过鼠标键盘监听自动桌面截图调用百度文字识别工具

python通过鼠标键盘监听自动桌面截图调用百度文字识别工具

时间:2022-04-15 00:34:34

相关推荐

python通过鼠标键盘监听自动桌面截图调用百度文字识别工具

垃圾代码,没有优化,重点是能直接运行,修改也方便

from pynput import mouse,keyboardfrom collections import dequeimport threading,time,os,sys# 导入需要的模块from aip import AipOcrimport tkinter as tkimport pyautoguifrom PIL import Image# 导入pynput模块中的mouse模块from tkinter import messageboximport pyperclipfrom tkinter import ttkimport tkinter.messagebox as msgboximport tkinter.filedialog as filedialogfrom tkinter import filedialogfrom pynput.mouse import Controllerfrom threading import Threadimport win32clipboardfrom io import BytesIO# 调用百度识别文字,请在此输入账号APP_ID = ''API_KEY = ''SECRET_KEY = '''''1.说明:1.0.tcy shanghai /8/28 测试平台windows7 python3.7 pycharm2.11.1. 一个鼠标监听器是一个线程。所有的回调将从线程调用。1.2. 任何地方调用pynput.mouse.Listener.stop,mouse.Listener.StopException或从回调中返回False来停止监听器。2.用途:1.1.本函数主要用作鼠标监听1.2.实现鼠标监听暂停启动停止;停止和销毁后不能再进行鼠标监听,暂停后可 3.技术要点1.1.采用鼠标监听内部的线程挂起,当暂停时鼠标不起左右,恢复后又正常工作。''''''这段代码定义了一个名为MouseClass的类,该类继承自threading.Thread。该类有三个方法:on_move、on_click和on_scroll,分别是鼠标移动、鼠标点击和鼠标滚动的事件处理程序。run方法启动一个mouse.Listener,监听鼠标事件并调用相应的事件处理程序。mouse_pause方法设置一个标志来暂停鼠标线程,mouse_resume方法设置标志来恢复线程。总的来说,这段代码提供了一种监听鼠标事件并暂停/恢复监听线程的方法。'''class MouseClass1(threading.Thread):def __init__(self, *args, **kwargs):super(MouseClass1, self).__init__(*args, **kwargs)self.mouse_listion=mouse.Listener()self.__mouse_run_flag_=True # 用于暂停鼠标线程不挂起self.__mouse_destroy_flag_=True #True鼠标监听不退出def on_move(self,x, y ):print("Pointer moved to {0} {1}".format((x,y),time.ctime()))if not self.__mouse_destroy_flag_: #false鼠标监听停止return False# 注意:不要返回True,否则不能够暂停等功能def on_click(self,x, y , button, pressed):print('{0} at{1}'.format('Pressed' if pressed else 'Released',(x, y)))#凸轮键松开鼠标监控停止if pressed:self.按下触发(x,y)else:self.弹起触发(x,y)if (not self.__mouse_destroy_flag_) or (not pressed): #false鼠标监听停return Falsedef on_scroll(self,x, y ,dx, dy):print('Scrolled {0} at {1}'.format( 'down' if dy <0 else 'up',(x, y)))if not self.__mouse_destroy_flag_: #false鼠标监听停止return Falsedef run(self):while 1:with mouse.Listener( no_move = self.on_move,on_click = self.on_click,on_scroll = self.on_scroll,suppress=not self.__mouse_run_flag_) as self.mouse_listion:self.mouse_listion.join()if not self.__mouse_destroy_flag_:breakdef mouse_pause(self):self.__mouse_run_flag_ = Falseprint('鼠标暂停...;当前线程==>%s ;线程数量==%d\n' % (threading.current_thread().name, threading.activeCount()))def mouse_resume(self):self.__mouse_run_flag_=Trueprint('鼠标恢复...;当前线程==>%s ;线程数量==%d\n' % (threading.current_thread().name, threading.activeCount()))def mouse_destroy(self):self.__mouse_destroy_flag_=False # 鼠标监听停止self.__mouse_run_flag_ = True# print('鼠标监听停止;当前线程==>%s ;线程数量==%d\n' %(# threading.current_thread().name, threading.activeCount()))def 截屏裁剪(self,zb):img = Image.open("screenshot4.png")try:if zb[0][0]!=zb[1][0] and zb[0][1]!= zb[1][1]: if zb[1][0] > zb[0][0]:cropped = img.crop((zb[0][0], zb[0][1], zb[1][0], zb[1][1])) # (left, upper, right, lower)else:cropped = img.crop((zb[1][0], zb[1][1], zb[0][0], zb[0][1])) # (left, upper, right, lower)cropped.save("screenshot1.png")# 获取桌面路径desktop_path = os.path.join(os.path.expanduser("~"), "Desktop")# 保存截屏图片到桌面cropped.save(desktop_path+r"\screenshot1.png")print('裁剪成功。')# 截屏裁剪信号# with open("截屏裁剪信号.txt", "w") as f:#f.write("1")# 关闭画图软件os.system("taskkill /f /im mspaint.exe")os.system(r'screenshot1.png')finally:print("错误执行")# msgbox.showinfo("提示", "截屏成功!")def 按下触发(self,x,y):global zb1# 鼠标点击时触发zb2=[]print('鼠标按下在 ({0}, {1})'.format(x, y))zb1=[x,y]# print(zb1)def 弹起触发(self,x,y):print('鼠标弹起在 ({0}, {1})'.format(x, y))# print(x, y)zb2=[x,y]# print(zb2)zb=[zb1,zb2] print(zb)if zb[0][0]!=zb[1][0] and zb[0][1]!= zb[1][1]: self.截屏裁剪(zb)self.mouse_destroy()class MouseClass(threading.Thread):def __init__(self, *args, **kwargs):super(MouseClass, self).__init__(*args, **kwargs)self.mouse_listion=mouse.Listener()self.__mouse_run_flag_=True # 用于暂停鼠标线程不挂起self.__mouse_destroy_flag_=True #True鼠标监听不退出def on_move(self,x, y ):print("Pointer moved to {0} {1}".format((x,y),time.ctime()))if not self.__mouse_destroy_flag_: #false鼠标监听停止return False# 注意:不要返回True,否则不能够暂停等功能def on_click(self,x, y , button, pressed):print('{0} at{1}'.format('Pressed' if pressed else 'Released',(x, y)))#凸轮键松开鼠标监控停止if pressed:self.按下触发(x,y)else:self.弹起触发(x,y)if (not self.__mouse_destroy_flag_) or (not pressed): #false鼠标监听停return Falsedef on_scroll(self,x, y ,dx, dy):print('Scrolled {0} at {1}'.format( 'down' if dy <0 else 'up',(x, y)))if not self.__mouse_destroy_flag_: #false鼠标监听停止return Falsedef run(self):while 1:with mouse.Listener( no_move = self.on_move,on_click = self.on_click,on_scroll = self.on_scroll,suppress=not self.__mouse_run_flag_) as self.mouse_listion:self.mouse_listion.join()if not self.__mouse_destroy_flag_:breakdef mouse_pause(self):self.__mouse_run_flag_ = Falseprint('鼠标暂停...;当前线程==>%s ;线程数量==%d\n' % (threading.current_thread().name, threading.activeCount()))def mouse_resume(self):self.__mouse_run_flag_=Trueprint('鼠标恢复...;当前线程==>%s ;线程数量==%d\n' % (threading.current_thread().name, threading.activeCount()))def mouse_destroy(self):self.__mouse_destroy_flag_=False # 鼠标监听停止self.__mouse_run_flag_ = Trueprint('鼠标监听停止;当前线程==>%s ;线程数量==%d\n' %(threading.current_thread().name, threading.activeCount()))def 截屏裁剪(self,zb):# 获取屏幕尺寸screen_width, screen_height = pyautogui.size()# 截屏screenshot = pyautogui.screenshot()# 剪切图片screenshot.save('screenshot.png')img = Image.open("screenshot.png")print('截屏成功。')# print(img.size)try:if zb[0][0]!=zb[1][0] and zb[0][1]!= zb[1][1]: if zb[1][0] > zb[0][0]:cropped = img.crop((zb[0][0], zb[0][1], zb[1][0], zb[1][1])) # (left, upper, right, lower)else:cropped = img.crop((zb[1][0], zb[1][1], zb[0][0], zb[0][1])) # (left, upper, right, lower)cropped.save("screenshot1.png")print('裁剪成功。')# text=调用百度识别文字('screenshot1.png')# pyperclip.copy(text)finally:print("错误执行")# msgbox.showinfo("提示", "截屏成功!")def 调用百度识别文字(self,图片):# pip install baidu-aip# pip install chardet# 如果安装后还是无法解决问题,可以尝试更新pip并重新安装:# pip install --upgrade pip# pip install chardet# from aip import AipOcr# 配置好百度AI开放平台client = AipOcr(APP_ID, API_KEY, SECRET_KEY)# 读取图片def get_file_content(filePath):with open(filePath, 'rb') as fp:return fp.read()# 定义参数变量options = {'detect_direction': 'true','language_type': 'CHN_ENG',}# 调用通用文字识别接口result = client.basicGeneral(get_file_content(图片), options)# print(result)# 提取所有words的值,并用回车键连接words = '\n'.join([item['words'] for item in result['words_result']])# 输出结果print(words)return words# 调用百度识别文字('2.png')# zb=[[0,0],[1000,1000]]def 按下触发(self,x,y):global zb1# 鼠标点击时触发zb2=[]print('鼠标按下在 ({0}, {1})'.format(x, y))zb1=[x,y]# print(zb1)def 弹起触发(self,x,y):print('鼠标弹起在 ({0}, {1})'.format(x, y))# print(x, y)zb2=[x,y]# print(zb2)zb=[zb1,zb2] print(zb)if zb[0][0]!=zb[1][0] and zb[0][1]!= zb[1][1]: self.截屏裁剪(zb)self.mouse_destroy()time.sleep(0.2)text=''text=self.调用百度识别文字('screenshot1.png')# text='查看状态:未查看。识别结果为:\n'+textwith open('文字识别结果.txt', 'w') as f:f.write(text)# 关闭文件f.close()# 文字显示在输入框# input_entry.insert(0, text)# msgbox.showinfo("提示", "截屏成功!")def 截屏裁剪(zb):# 获取屏幕尺寸screen_width, screen_height = pyautogui.size()# 截屏screenshot = pyautogui.screenshot()# 剪切图片screenshot.save('screenshot.png')img = Image.open("screenshot.png")print('截屏成功。')print(zb)try:if zb[0][0]!=zb[1][0] and zb[0][1]!= zb[1][1]: if zb[1][0] > zb[0][0]:cropped = img.crop((zb[0][0], zb[0][1], zb[1][0], zb[1][1])) # (left, upper, right, lower)else:cropped = img.crop((zb[1][0], zb[1][1], zb[0][0], zb[0][1])) # (left, upper, right, lower)cropped.save("screenshot1.png")print('裁剪成功。')text=调用百度识别文字('screenshot1.png')pyperclip.copy(text)finally:print("错误执行")# msgbox.showinfo("提示", "截屏成功!")def 调用百度识别文字(图片):# pip install baidu-aip# pip install chardet# 如果安装后还是无法解决问题,可以尝试更新pip并重新安装:# pip install --upgrade pip# pip install chardet# from aip import AipOcr# 配置好百度AI开放平台client = AipOcr(APP_ID, API_KEY, SECRET_KEY)# 读取图片def get_file_content(filePath):with open(filePath, 'rb') as fp:return fp.read()# 定义参数变量options = {'detect_direction': 'true','language_type': 'CHN_ENG',}# 调用通用文字识别接口result = client.basicGeneral(get_file_content(图片), options)# print(result)# 提取所有words的值,并用回车键连接words = '\n'.join([item['words'] for item in result['words_result']])# 输出结果print(words)return words# 调用百度识别文字('2.png')# zb=[[0,0],[1000,1000]]def 键盘监听(坐标1执行,坐标2执行):# mouse = Controller()def on_press(key):if key == keyboard.Key.shift:坐标1执行()elif key == keyboard.Key.caps_lock:坐标2执行()# print("退出键盘监听")listener.stop()def on_release(key):pass# 创建键盘监听器并注册按下和释放事件的回调函数with keyboard.Listener(on_press=on_press, on_release=on_release) as listener:listener.join()# 键盘监听() def mouse_test1():# 启动监控器。km1=MouseClass1()# print(功能选择)km1.start()def mouse_test():# 启动监控器。km=MouseClass()# print('1.Start runing...')km.start()def ui():# 创建UIroot = tk.Tk()root.title("截屏工具")# root.geometry("400x300")# 将窗口设置为始终置顶root.attributes("-topmost", True)# 创建输入框input_frame = ttk.Frame(root)input_frame.pack(pady=10)input_label = ttk.Label(input_frame, text="输入框:")input_label.pack(side="left")input_entry = ttk.Entry(input_frame, width=30)input_entry.pack(side="left")def 键盘操作():# 调用记事本程序打开文本文件def 坐标1执行():global zb1# 鼠标点击时触发zb2=[]mouse = Controller()zb1 = mouse.positionzb1=[zb1[0],zb1[1]]# print(zb1[1],'坐标1执行',zb1[0],)print('鼠标按下在 ({0}, {1})'.format(zb1[0],zb1[1]))def 坐标2执行():# ---------------------mouse = Controller()zb2 = mouse.positionx=zb2[0]y=zb2[1]# print(zb1[1],'坐标1执行',zb1[0],)zb2=[x,y]# print(zb2)zb=[zb1,zb2] # print(zb)print('鼠标按下在 ({0}, {1})'.format(x,y))print("退出键盘监听")if zb[0][0]!=zb[1][0] and zb[0][1]!= zb[1][1]: # 截屏裁剪(zb)# 截屏screenshot = pyautogui.screenshot()# 剪切图片screenshot.save('screenshot.png')img = Image.open("screenshot.png")print('截屏成功。')print(zb)try:if zb[0][0]!=zb[1][0] and zb[0][1]!= zb[1][1]: if zb[1][0] > zb[0][0]:cropped = img.crop((zb[0][0], zb[0][1], zb[1][0], zb[1][1])) # (left, upper, right, lower)else:cropped = img.crop((zb[1][0], zb[1][1], zb[0][0], zb[0][1])) # (left, upper, right, lower)cropped.save("screenshot1.png")print('裁剪成功。')text=调用百度识别文字('screenshot1.png')pyperclip.copy(text)finally:print("错误执行")# msgbox.showinfo("提示", "截屏成功!")time.sleep(0.2)text=''text=调用百度识别文字('screenshot1.png')# text='查看状态:未查看。识别结果为:\n'+textwith open('文字识别结果.txt', 'w') as f:f.write(text)# 关闭文件f.close()# -----------------------------------def threadFunc():with open('文字识别结果.txt', 'w') as f:f.write('') 键盘监听(坐标1执行,坐标2执行)for i in range(60):time.sleep(0.5)# 循环体代码# 打开文件并逐行读取内容f = open('文字识别结果.txt', 'r')text = f.read()f.close()if text!='' :input_entry.delete(0, tk.END)input_entry.insert(0, text)# print("耗时:", i*0.5)tsh="识别完成!耗时:"+str(i*0.5)+'秒'msgbox.showinfo("提示",tsh )breakthread = Thread(target=threadFunc)thread.start()save_button = ttk.Button(root, text="键盘选取", command=键盘操作)save_button.pack(pady=10)# 鼠标选取def start():# 功能选择='文字识别'with open('文字识别结果.txt', 'w') as f:f.write('') mouse_test() for i in range(60):time.sleep(0.5)# 循环体代码# 打开文件并逐行读取内容f = open('文字识别结果.txt', 'r')text = f.read()f.close()if text!='' :input_entry.delete(0, tk.END)input_entry.insert(0, text)# print("耗时:", i*0.5)tsh="识别完成!耗时:"+str(i*0.5)+'秒'msgbox.showinfo("提示",tsh )breakstart_button = ttk.Button(root, text="鼠标选取", command= start)start_button.pack(pady=10)# 创建复制按钮def copy():# 把输入框的文字设置为剪切板内容root.clipboard_clear()root.clipboard_append(input_entry.get())msgbox.showinfo("提示", "复制成功!")copy_button = ttk.Button(root, text="复制", command=copy)copy_button.pack(pady=10)# 创建保存按钮def save():def print_message1():# 调用记事本程序打开文本文件os.system('notepad.exe 文字识别结果.txt')thread1 = threading.Thread(target=print_message1)thread1.start()# thread1.join()save_button = ttk.Button(root, text="文字查看", command=save)save_button.pack(pady=10)def jp():# 等待3秒# time.sleep(1)# 截屏screenshot = pyautogui.screenshot()# 获取桌面路径desktop_path = os.path.join(os.path.expanduser("~"), "Desktop")screenshot.save("screenshot.png")# 保存截屏图片到桌面screenshot.save(desktop_path+r"\screenshot.png")# 文字显示在输入框input_entry.delete(0, tk.END)input_entry.insert(0, "截屏成功并保存到桌面!")msgbox.showinfo("提示", "截屏成功并保存到桌面!")save_button = ttk.Button(root, text="截屏保存", command=jp)save_button.pack(pady=10)def 查看截屏():# C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Accessories\# from time import sleepdef threadFunc():# 调用第三方图片编辑软件打开图片os.system(r'%windir%\system32\mspaint.exe screenshot.png')# print('子线程 结束')thread = Thread(target=threadFunc)thread.start()def 裁剪截屏():# 打开截屏图片查看截屏()time.sleep(2)screenshot = pyautogui.screenshot()# 获取桌面路径desktop_path = os.path.join(os.path.expanduser("~"), "Desktop")截屏处理图片="screenshot4.png"screenshot.save(截屏处理图片)mouse_test1()save_button2 = ttk.Button(root, text="裁剪截屏", command=裁剪截屏)save_button2.pack(pady=10)# 创建查看按钮def 截屏裁剪():screenshot = pyautogui.screenshot()# 获取桌面路径desktop_path = os.path.join(os.path.expanduser("~"), "Desktop")screenshot.save("screenshot.png")# 保存截屏图片到桌面screenshot.save(desktop_path+r"\screenshot.png")裁剪截屏()save_button = ttk.Button(root, text="截屏裁剪", command=截屏裁剪)save_button.pack(pady=10)# 创建查看按钮def 查看截图():# C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Accessories\from threading import Thread# from time import sleepdef threadFunc():# 调用第三方图片编辑软件打开图片os.system(r'%windir%\system32\mspaint.exe screenshot1.png')# print('子线程 结束')thread = Thread(target=threadFunc)thread.start()save_button = ttk.Button(root, text="查看截图", command=查看截图)save_button.pack(pady=10)save_button = ttk.Button(root, text="查看截屏", command=查看截屏)save_button.pack(pady=10)# 创建查看按钮def 打开截图工具():# C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Accessories\from threading import Thread# from time import sleepdef threadFunc():# 调用第三方图片编辑软件打开图片os.system(r'%windir%\system32\SnippingTool.exe')# print('子线程 结束')thread = Thread(target=threadFunc)thread.start()save_button = ttk.Button(root, text="打开截图", command=打开截图工具)save_button.pack(pady=10)# 定义按钮点击事件def 使用方法():使用方法提示='''键盘选取:屏鼠标移到屏幕的左上角,按'shift'键,获取识别范围的起点。鼠标一下,屏幕的右下角按'caps lock'键(字母大小写转换键),选取识别范围的终点,等待得到结果。鼠标选取。直接拖动鼠标选范围。'''messagebox.showinfo("提示", 使用方法提示)# 创建按钮button9 = tk.Button(root, text="使用方法", command=使用方法)# 将按钮添加到主窗口button9.pack()root.mainloop()def main():#运行模拟器ui()main()

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。