在Quciker中配置动作完成快捷键本地调取大模型完成任务
·
背景描述:
本文承接我写的另一篇博客https://blog.csdn.net/Codefengfeng/article/details/158808221?spm=1001.2014.3001.5501,在本地部署好大模型PaddleOCR-VL-1.5后,由于本人很懒,想要实现快捷键调取模型完成OCR功能。最后大致实现的效果是:按下快捷键ctr+1选中目标区域,后台会自动调取大模型执行OCR任务把结果写到剪切板,这时开发者只需快捷键ctr+v即可粘贴识别的内容。上面这段话简单描述为:ctr+1截图,ctr+v粘贴文字~
操作:
阶段一:编写py脚本
在E:\PaddleDeploy 目录下新建一个quicker_ocr.py,该脚本的作用是调取大模型完成OCR任务并标准输出结果供Quicker抓取,代码放在下面。
import requests
import cv2
import base64
import sys
# ====== 核心配置区 ======
LAYOUT_URL = "http://localhost:8001/analyze_layout"
VLM_URL = "http://localhost:8000/v1/chat/completions"
# ========================
def main():
# 1. 接收 Quicker 传过来的图片路径参数
if len(sys.argv) < 2:
print("未接收到图片路径参数")
return
image_path = sys.argv[1]
img = cv2.imread(image_path)
if img is None:
print("图片读取失败,请检查路径")
return
# 强制绕过系统的科学上网代理
proxies = {"http": None, "https": None}
# 2. 请求版面分析 (Port 8001)
try:
with open(image_path, "rb") as f:
res_layout = requests.post(LAYOUT_URL, files={"file": f}, proxies=proxies)
if res_layout.status_code != 200:
print(f"版面分析异常: 状态码 {res_layout.status_code}")
return
layout_data = res_layout.json()
except Exception:
print("无法连接到 8001 端口,请检查 Docker 服务是否启动")
return
regions = layout_data.get("regions", [])
if not regions:
regions = [{"bbox": [0, 0, img.shape[1], img.shape[0]], "type": "Text"}]
final_results = []
# 3. 循环切割区域,调用 0.9B 大模型 (Port 8000)
for region in regions:
x1, y1, x2, y2 = region["bbox"]
region_type = region["type"]
crop_img = img[int(y1):int(y2), int(x1):int(x2)]
# 【防御机制】:动态压缩长边至 960,防止视觉 Token 溢出导致 vLLM 崩溃
max_size = 960
h, w = crop_img.shape[:2]
if max(h, w) > max_size:
scale = max_size / max(h, w)
crop_img = cv2.resize(crop_img, (int(w * scale), int(h * scale)))
_, buffer = cv2.imencode('.jpg', crop_img, [int(cv2.IMWRITE_JPEG_QUALITY), 85])
img_base64 = base64.b64encode(buffer).decode('utf-8')
prompt = "请精准识别这张图中的所有文字。"
if region_type == "Table":
prompt = "请识别图中的表格,并以 Markdown 格式严格输出。"
payload = {
"model": "/models/PaddleOCR-VL",
"messages": [
{
"role": "user",
"content": [
{"type": "text", "text": prompt},
{"type": "image_url", "image_url": {"url": f"data:image/jpeg;base64,{img_base64}"}}
]
}
],
"temperature": 0.0
}
try:
# 加入 timeout=120 允许大模型预热
res_vlm = requests.post(VLM_URL, json=payload, proxies=proxies, timeout=120)
if res_vlm.status_code == 200:
text = res_vlm.json()["choices"][0]["message"]["content"]
final_results.append(text.strip())
else:
final_results.append(f"[大模型识别异常: 状态码 {res_vlm.status_code}]")
except Exception:
final_results.append("[大模型识别超时或连接断开]")
# 4. 只打印纯净的识别结果,供 Quicker 抓取
print("\n\n".join(final_results))
if __name__ == "__main__":
main()
阶段二:Quicker中搭建动作
- Step1。创建新动作。
打开 Quicker 面板,在空白处右键 -> 选择 新建动作 -> 动作类型选择 组合动作,会进入一个动作设置界面。


- Step2。添加动作"屏幕截图"。在左侧搜索框中搜索"屏幕截图",双击一下出现图3中所示配置界面,按照我的参数配置即可。

- Step3。添加动作"写入图片文件"。在左侧搜索框中搜索后双击,进入图4中所示配置界面,按照我的参数配置即可。(这个文件路径相当于中转站,每次截图都会覆盖这一个文件,不占用硬盘空间)

- Step4。添加动作"运行或打开"。在左侧搜索框中搜索后双击,进入图5中所示配置界面,按照我的参数配置即可。这里我要做些参数说明:1.路径这里选择的是安装Anaconda时的资源配置路径,相当于给指令选定解释器(配置过anaconda+pycharm的同学应该熟悉);2.参数这里包含两部分,前半部分是脚本,后半部分是刚刚截图的路径;3.stdout输出,是一个标准输出,负责接受python脚本运行吐出来的文字(print结果)

- Step5。添加动作"写入剪切板"。在左侧搜索框中搜索后双击,进入图6中所示配置界面,按照我的参数配置即可。这里选择的变量就是在上一步中创建的Stdout输出变量。

- Step6。给动作设置一下外观与描述,然后点击"保存“即可(Step6可不做,只是对美有追求的技术员会做)。找不到好看的图标推荐去阿里的矢量图标库找,网址https://www.iconfont.cn/

- Step7。给这个组合动作设置一个快捷键。右键点击生成好的OCR动作,“信息” -> “设置快捷键”,去里面配置快捷键即可(我设置成了ctr+1)。

- Step7。大模型预热。第一次使用设置好的快捷键调用大模型进行OCR识别时,可能显示模型连接已超时,这不是没做好配置问题,而是启动前需要做个预热。首先确保Docker Desktop中开启了大模型服务,然后
去Powershell中用脚本(我的是test_ocr.py)跑一遍OCR识别任务把大模型"热”起来,这时再ctr+1就能正常得到OCR输出了
至此,大功告成!!!!
后面再想使用高精度OCR,此时你打开Docker Desktop启动大模型,然后快乐地:ctr+1截图,ctr+v粘贴文字~
更多推荐

所有评论(0)