:
以前是用QQ破图,但是QQ需要把图片发送出去,再打开图片长按才能识别成文字。
一直想弄个小工具,截图后来剪贴板就自动变成文字,方便粘贴 。所以就折腾了这个。
:
由于我的服务器上已经部署了TesseractOCR,所以识图部分就通过 requests.post 交给服务器去完成的。
TesseractOCR服务器部署简要说明(涉及的文件软件,在下载地址中都有)
1 安装 tesseractOCR (EXE)软件,并配置环境变量。
2 安装 apache 服务器(我用的是xmapp)。
3 把压缩包中的 TesseractOCR (PHP)放到 apache 服务器生成的htdocs 文件夹中去,然后就可以使用 http://www.xxxxx.com /TesseractOCR 这个API了,好外是没有限制,准确度也行,而且方便自己所有相关的应用访问。
*:python本身也可以直接使用TesseractOCR
:
打开软件后按住鼠标选定要识别的区域,松开鼠标就可以去粘贴识别出来的内容了。
右键可以中止操作。
老规则,上源码:
下载地址: 链接:https://pan.baidu.com/s/1e8N-GbYuYMnWwNZrO6xGPw?pwd=4fds 提取码:4fds



打包后文件有点大呢python不提议打包
from PIL import ImageGrab
import tkinter
import requests
import base64
from io import BytesIO
import json
import pyperclip
import math
import os
class PScreenWindow:
def __init__(self):
self._sx, self._sy = 0, 0
self._win = tkinter.Tk()
self._win.attributes("-alpha", 0.6) # 设置窗口半透明
self._win.attributes("-fullscreen", True) # 设置全屏
self._win.attributes("-topmost", True) # 设置窗口在最上层
self._width, self._height = self._win.winfo_screenwidth(
), self._win.winfo_screenheight()
self._screenImage = ImageGrab.grab()
self._screenImage.save("temp.png", format='PNG')
self._tempImage = tkinter.PhotoImage(file="temp.png")
# 创建画布
self._canvas = tkinter.Canvas(
self._win, width=self._width, height=self._height, highlightthickness=0, borderwidth=0)
self._canvas.create_image(
self._width*0.5, self._height*0.5, image=self._tempImage)
self._canvas.create_rectangle(
0, 0, self._width, self._height, fill='black', outline='', tag="bg")
self._canvas.pack(fill="both")
self._win.bind('<Button-1>', self.mouseEvent) # 绑定鼠标左键点击事件
self._win.bind('<Button-3>', self.mouseEvent) # 绑定鼠标右键点击事件
self._win.bind('<ButtonRelease-1>', self.mouseEvent) # 绑定鼠标左键点击释放事件
self._win.bind('<B1-Motion>', self.mouseMove) # 绑定鼠标左键点击移动事件
# 绑定Esc按键退出事件
self._win.bind('<Escape>', lambda e: self.exit())
self._win.mainloop() # 窗口持久化
def exit(self):
try:
os.remove('temp.png')
except:
pass
self._win.destroy()
print("操作完成")
def getDistance(self, x1, y1, x2, y2):
return math.sqrt((x1-x2)**2+(y1-y2)**2)
def sortPoint(self, x1, y1, x2, y2):
return [min(x1, x2), min(y1, y2), max(x1, x2), max(y1, y2)]
def mouseEvent(self, event):
print(event.state, event.num)
if (event.num == 3):
self.exit()
return
if event.state == 8: # 鼠标左键按下
self._sx, self._sy = event.x, event.y
self._canvas.delete("bg")
elif event.state == 264: # 鼠标弹起
d = self.getDistance(self._sx, self._sy, event.x, event.y)
if d < 20:
return
x1, y1, x2, y2 = self.sortPoint(
self._sx, self._sy, event.x, event.y)
self._canvas.create_text(
(x1+x2)*0.5, (y1+y2)*0.5, text="识别中...", font=("微软雅黑", 16), fill='red')
img = self._screenImage.crop(
(x1, y1, x2, y2))
outBuffer = BytesIO()
img.save(outBuffer, format='PNG')
byteData = outBuffer.getvalue()
imgBase64 = base64.b64encode(byteData).decode('ascii')
# print(imgBase64)
url = "http://www.xxxxxxxx.cn/TesseractOCR/"
data = {"type": "ocr", "img": imgBase64}
headers = {'Content-Type': 'application/x-www-form-urlencoded'}
res = requests.post(url=url, data=data, headers=headers)
content = res.text
# print("识别结果:", content)
if content.startswith(u'ufeff'):
content = content.encode('utf8')[3:].decode('utf8')
try:
data = json.loads(content)
if (data.get("code") == "1"):
pyperclip.copy(data.get("text"))
else:
pyperclip.copy("ocr fail")
except Exception as e:
pyperclip.copy(str(e))
self.exit()
def mouseMove(self, event):
d = self.getDistance(self._sx, self._sy, event.x, event.y)
if d < 20:
return
x1, y1, x2, y2 = self.sortPoint(self._sx, self._sy, event.x, event.y)
rectPoints = {"left": [0, 0, x1, self._height], "top": [x1, 0, x2, y1], "right": [
x2, 0, self._width, self._height], "bottom": [x1, y2, x2, self._height]}
for key in rectPoints:
self._canvas.delete(key)
ltx, lty, rbx, rby = rectPoints[key]
self._canvas.create_rectangle(
ltx, lty, rbx, rby, fill='black', outline='', tag=key)
self._canvas.delete("border")
self._canvas.create_rectangle(
x1, y1, x2, y2, fill='', outline='red', tag="border")
if __name__ == '__main__':
psw = PScreenWindow()
© 版权声明
文章版权归作者所有,未经允许请勿转载。如内容涉嫌侵权,请在本页底部进入<联系我们>进行举报投诉!
THE END


















- 最新
- 最热
只看作者