【python实用小脚本-38】自动打字神器:用Python解放你的双手!
这个自动打字神器的代码真是太有用了!它不仅可以帮助我们快速将屏幕上的文字转换成键盘输入,还可以通过扩展应用到更多场景,比如批量数据录入和实时翻译输入。有了这个工具,再也不用手动一个字一个字地敲了,简直是打字界的福音!需要完整的源码,请在评论区留言,或私信我。
自动打字神器:用Python解放你的双手!
大家好呀!今天给大家带来一个超级实用的小工具——自动打字神器!你有没有遇到过这样的场景:需要把屏幕上的文字复制下来,但又不想手动一个字一个字地敲?或者在做数据录入的时候,手都快抽筋了?别担心,我最近发现了一个用Python编写的神奇代码,它可以帮你轻松解决这些问题,简直就是打字界的“救星”!
这个代码的核心功能是通过屏幕截图和光学字符识别(OCR)技术,把屏幕上的文字自动转换成键盘输入。听起来是不是很神奇?接下来,我就带大家深入了解一下这个代码的奥秘,看看它是怎么实现这个功能的。
核心代码解析
首先,我们来看看代码的核心部分——AutoTyper
类。这个类就像是一个指挥官,控制着整个自动打字的过程。
class AutoTyper:
clickCount = 0 # 记录点击次数
pCords = [0, 0, 0, 0] # 保存截图区域的坐标
defined = False # 标记是否已经定义了截图区域
pImage = None # 保存截图的图像
这里定义了一些基本的变量,用来记录用户操作的状态。比如clickCount
用来记录用户点击屏幕的次数,pCords
用来保存截图区域的坐标。
接下来是area_select
方法,这个方法允许用户通过鼠标点击来定义截图区域。
def area_select():
print('Click twice to define TEXT window') # 提示用户点击两次定义区域
def on_click(x, y, button, pressed):
if pressed: # 如果鼠标按下
print('({0}, {1})'.format(x, y)) # 打印点击的坐标
if AutoTyper.clickCount == 0: # 第一次点击
AutoTyper.pCords[0] = x
AutoTyper.pCords[1] = y
elif AutoTyper.clickCount == 1: # 第二次点击
AutoTyper.pCords[2] = x
AutoTyper.pCords[3] = y
AutoTyper.defined = True # 标记区域已定义
print('')
AutoTyper.clickCount = 0 # 重置点击次数
return False
AutoTyper.clickCount += 1
with ms.Listener(on_click=on_click) as listener: # 监听鼠标点击
listener.join()
这个方法通过监听鼠标事件,让用户可以通过点击两次来定义一个矩形区域。第一次点击记录左上角坐标,第二次点击记录右下角坐标。
然后是capture
方法,它负责截取用户定义的屏幕区域并保存为图像。
def capture():
if AutoTyper.defined: # 如果已经定义了区域
AutoTyper.pImage = ImageGrab.grab(bbox=(AutoTyper.pCords[0], # 截取定义的区域
AutoTyper.pCords[1],
AutoTyper.pCords[2],
AutoTyper.pCords[3]))
else:
print('please define an area to OCR before trying to print') # 提示用户先定义区域
这里使用了ImageGrab
模块来截取屏幕上的图像,并保存到pImage
变量中。
最后是output
方法,它将OCR识别到的文字通过键盘模拟输入到目标位置。
def output(delaytime: float):
try:
paraString = pytesseract.image_to_string(AutoTyper.pImage) # OCR识别图像中的文字
except SystemError:
print('\n Error while processing your image, please retry.') # 如果出错,提示用户
return False
length = len(paraString) # 获取文字长度
for i in range(length): # 模拟键盘输入每个字符
keyboard.press(paraString[i])
keyboard.release(paraString[i])
time.sleep(delaytime) # 每次输入之间延迟一段时间
这个方法通过pytesseract
库将图像中的文字识别出来,然后使用keyboard
库模拟键盘输入,把文字输入到目标位置。
基于代码的扩展应用
这个代码本身已经很实用了,但我们可以在此基础上进行扩展,让它在更多场景下发挥作用。比如:
场景一:批量录入数据
假设你有一堆表格数据需要录入到一个系统中,手动输入太麻烦了。我们可以扩展代码,让它能够批量处理多个截图区域的文字并输入。
class BatchAutoTyper(AutoTyper):
regions = [] # 保存多个截图区域的坐标
def add_region(self):
print('Click twice to add a TEXT window')
self.area_select()
self.regions.append(self.pCords) # 将定义的区域坐标保存起来
def batch_capture_and_output(self, delaytime: float):
for region in self.regions: # 遍历所有定义的区域
self.pCords = region # 设置当前区域
self.capture() # 截取图像
self.output(delaytime) # 输出文字
在这个扩展中,我们增加了一个regions
列表来保存多个截图区域的坐标,并通过add_region
方法让用户可以添加多个区域。然后通过batch_capture_and_output
方法依次处理每个区域的文字并输入。
场景二:实时翻译输入
如果你在看外文资料,想把屏幕上的文字翻译后输入到翻译软件中,我们可以结合翻译API来实现这个功能。
import requests
class TranslatorAutoTyper(AutoTyper):
def translate_and_output(self, delaytime: float, target_lang='zh'):
self.capture() # 截取图像
try:
paraString = pytesseract.image_to_string(self.pImage) # OCR识别文字
except SystemError:
print('\n Error while processing your image, please retry.')
return False
# 调用翻译API
url = "https://api.mymemory.translated.net/get?q={}&langpair=en|{}".format(paraString, target_lang)
response = requests.get(url)
if response.status_code == 200:
translated_text = response.json()['responseData']['translatedText']
length = len(translated_text)
for i in range(length): # 模拟键盘输入翻译后的文字
keyboard.press(translated_text[i])
keyboard.release(translated_text[i])
time.sleep(delaytime)
else:
print('Translation failed')
在这个扩展中,我们通过调用一个在线翻译API,将OCR识别到的文字翻译成目标语言,然后模拟键盘输入翻译后的文字。
总结
这个自动打字神器的代码真是太有用了!它不仅可以帮助我们快速将屏幕上的文字转换成键盘输入,还可以通过扩展应用到更多场景,比如批量数据录入和实时翻译输入。有了这个工具,再也不用手动一个字一个字地敲了,简直是打字界的福音!
需要完整的源码,请在评论区留言,或私信我。
更多推荐
所有评论(0)