基于Python+PyQt5開發(fā)一個AI智能截圖解答工具
前言
最近我折騰了一個特別實用的小工具:一個 AI 智能截圖解答應(yīng)用。
它可以隨時在屏幕上框選任意區(qū)域,自動識別截圖里的內(nèi)容(包括數(shù)學(xué)題、截圖里的文字、甚至接口報錯日志),然后直接給出 AI 解答或解釋。整個工具是基于 Python + PyQt5 + OpenAI 多模態(tài) API 開發(fā)的,目前已經(jīng)能滿足日常學(xué)習(xí)、工作中的快速截圖+解答需求。
文章里我會把完整的實現(xiàn)思路拆開講清楚,順便放一個能直接運行的 Demo 代碼模塊,你想二次開發(fā)成自己的小應(yīng)用也完全沒問題。
這個小工具能做什么?
我先簡單說說它的功能,避免大家誤會這只是一個“帶界面的 ChatGPT”。
這個應(yīng)用的特點其實非常硬核:
1. 任意區(qū)域截圖
像 QQ 截圖一樣,按快捷鍵后拖個框就能截圖,不用切換窗口,不用復(fù)制到剪貼板。
2. 多模態(tài)識別 + 自動答題
把截圖丟到模型里,模型會自動識別文字、公式、圖形,再給出解答。
可以輕松應(yīng)對:
- 數(shù)學(xué)選擇題、填空題
- 英語閱讀理解
- 截圖里的報錯日志
- UI 圖設(shè)計稿解釋
- 表格、代碼截圖
- 論文截圖里的公式
3. Markdown 渲染 + 數(shù)學(xué)公式渲染
不再是生硬的一段純文本,而是完全可以展示:
- 標題
- 代碼塊
- 數(shù)學(xué)公式(LaTeX)
- 列表、引用等結(jié)構(gòu)化內(nèi)容
4. 簡單易用的 GUI
基于 PyQt5 做了一個很輕量的界面:
- 輸入 API Key
- 選擇模型
- 自定義提示詞
- 點擊截圖
- 自動返回渲染后的答案
你甚至可以把它打包成 exe,發(fā)給同事、同學(xué)、家人都能用。
實際使用場景舉幾個例子
場景 1:學(xué)生黨 —— 一鍵截圖數(shù)學(xué)題自動解答
比如你做題做到某道解析看不懂,直接一個截圖,AI 自動識別題目并給出詳細步驟,非常爽。
場景 2:程序員 —— 截報錯日志讓 AI 幫你定位問題
你寫項目總會遇到那種密密麻麻的 stack trace,復(fù)制粘貼又麻煩。
截一下:
TypeError: object NoneType can't be used in 'await' expression
AI 就會告訴你:
- 出錯的原因
- 哪一行觸發(fā)
- 可能的修復(fù)方式
你甚至能加自定義 prompt:
解釋得更口語化一點
用我的代碼風(fēng)格回答
給 3 種修復(fù)方案,不要廢話
場景 3:運營/設(shè)計 —— 看不懂 UI 素材的內(nèi)容
直接截圖 → AI 自動解說界面布局。
場景 4:閱讀英文說明書
看到一段英文標注、英語圖片,懶得敲字就截圖,讓 AI 翻譯并總結(jié)。
總之,場景有很多,你肯定能找到屬于自己的用法。
給你一個可跑的最小 Demo:截圖 + 模型識別 + 顯示結(jié)果
下面的代碼就是一個簡化版 Demo,可直接運行,它包含:
- PyQt GUI
- 截圖選區(qū)
- 多模態(tài) API 調(diào)用
- 顯示結(jié)果
你可以先跑通,再往上疊加自己的 UI 和功能。
Demo 代碼
運行前需要安裝依賴:
pip install PyQt5 Pillow openai
main.py
import sys
from PyQt5.QtWidgets import (
QApplication, QWidget, QPushButton,
QVBoxLayout, QTextBrowser, QLabel
)
from PyQt5.QtGui import QPixmap, QGuiApplication
from PyQt5.QtCore import Qt, QRect
from openai import OpenAI
import base64
class ScreenCapture(QWidget):
"""一個簡單的截圖區(qū)域選擇工具"""
def __init__(self):
super().__init__()
self.begin = None
self.end = None
self.setWindowOpacity(0.3)
self.setWindowState(Qt.WindowFullScreen)
self.setWindowFlag(Qt.FramelessWindowHint)
def paintEvent(self, event):
from PyQt5.QtGui import QPainter, QPen
qp = QPainter(self)
qp.setPen(QPen(Qt.red, 2))
qp.drawRect(QRect(self.begin, self.end))
def mousePressEvent(self, event):
self.begin = event.pos()
self.end = self.begin
self.update()
def mouseMoveEvent(self, event):
self.end = event.pos()
self.update()
def mouseReleaseEvent(self, event):
self.close()
def get_rect(self):
return QRect(self.begin, self.end).normalized()
class App(QWidget):
def __init__(self):
super().__init__()
self.client = OpenAI(api_key="你的API Key")
self.setWindowTitle("AI 截圖解答 Demo")
self.resize(600, 500)
layout = QVBoxLayout()
self.btn = QPushButton("截圖并解答")
self.btn.clicked.connect(self.capture_screen)
self.result = QTextBrowser()
self.result.setPlaceholderText("截圖后的結(jié)果會顯示在這里…")
layout.addWidget(self.btn)
layout.addWidget(self.result)
self.setLayout(layout)
def capture_screen(self):
# 啟動截圖工具
cap = ScreenCapture()
cap.show()
cap.exec_() if hasattr(cap, "exec_") else None # 兼容性調(diào)用
rect = cap.get_rect()
screenshot = QGuiApplication.primaryScreen().grabWindow(0)
cropped = screenshot.copy(rect)
# 保存臨時文件
save_path = "temp.png"
cropped.save(save_path)
# 調(diào)用多模態(tài)模型
with open(save_path, "rb") as f:
img_data = base64.b64encode(f.read()).decode("utf-8")
response = self.client.chat.completions.create(
model="gpt-4o-mini",
messages=[
{"role": "system", "content": "請識別圖片內(nèi)容并進行解釋或解答"},
{"role": "user", "content": [
{"type": "input_image", "image_base64": img_data}
]}
]
)
answer = response.choices[0].message["content"]
self.result.setMarkdown(answer)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = App()
window.show()
sys.exit(app.exec_())
代碼解析(重點講一下關(guān)鍵部分)
1. 截圖選區(qū)的實現(xiàn)
核心用的是 PyQt 的全屏透明窗體:
self.setWindowOpacity(0.3) self.setWindowState(Qt.WindowFullScreen) self.setWindowFlag(Qt.FramelessWindowHint)
鼠標拖拽過程動態(tài)繪制矩形:
qp.drawRect(QRect(self.begin, self.end))
這是和 QQ 截圖基本一致的思路,簡單干凈。
2. 截圖抓取并裁剪
PyQt 有現(xiàn)成的接口:
screenshot = QGuiApplication.primaryScreen().grabWindow(0) cropped = screenshot.copy(rect)
這樣你能拿到用戶框選區(qū)域的確切像素內(nèi)容。
3. 多模態(tài) API 調(diào)用
使用 OpenAI API 時需要注意:
多模態(tài)輸入格式為:
{"type": "input_image", "image_base64": img_data}
模型可以自由換成:
gpt-4ogpt-4o-miniqwen-vl-plusglm-4v- 兼容 OpenAI 格式的任何第三方推理
完全可以讓用戶自己在 GUI 里配置。
4. Markdown 輸出 + 數(shù)學(xué)公式
QTextBrowser 原生支持 Markdown,渲染體驗不錯。
你想加 LaTeX 數(shù)學(xué)公式的話,可以加上:
- MathJax(嵌入 WebEngineView)
- Katex
- PyMarkdown + MathRender
打造一個“AI 題解助手”完全不是夢。
實際運行效果會怎樣?
用戶點擊“截圖并解答” → 選框 → 等幾秒 → 頁面自動渲染答案。
比如你截一段數(shù)學(xué)題,展示:
已知函數(shù) f(x)=x2+1,求 f(3)
模型回答會變成:
### 解題步驟 1. 將 x = 3 代入函數(shù) 2. f(3) = 32 + 1 = 9 + 1 = 10 **最終答案:10**
非常清爽。
你可以把這個 Demo 升級成什么?
下面是一些擴展功能,我自己做過或正在準備做的:
熱鍵觸發(fā)截圖(不打開窗口)
比如按下 Ctrl+Shift+A 就能截圖。
任務(wù)欄常駐圖標
雙擊圖標即可截圖。
自定義 Prompt 面板
比如:
- 解題請用步驟 + 公式
- 遇到英文請翻譯
- 對代碼截圖自動輸出修復(fù)建議
使用本地模型
比如:
- llava
- minicpm-v
- qwen2-vl
支持 OpenAI 函數(shù)格式即可替換。
輸出到剪貼板
方便你粘貼到 Word、微信、Notion。
總結(jié)
這個 Python + PyQt5 的 AI 截圖解答工具,雖然是一個小項目,但它結(jié)合了多模態(tài)模型、截圖交互、Markdown 渲染等功能,真正能提高效率。
你完全可以把它變成:
- AI 數(shù)學(xué)作業(yè)助手
- AI 網(wǎng)頁內(nèi)容總結(jié)工具
- AI 報錯診斷助手
- AI 論文 PDF 截圖解析助手
- AI 代碼截圖解釋工具
以上就是基于Python+PyQt5開發(fā)一個AI智能截圖解答工具的詳細內(nèi)容,更多關(guān)于Python PyQt5AI智能截圖解答的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python使用函數(shù)輔助工具簡化開發(fā)提高效率
這篇文章主要為大家介紹了Python使用函數(shù)輔助工具簡化開發(fā)提高效率,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2024-01-01
Python實現(xiàn)批量設(shè)置圖片背景為透明
我們?nèi)粘I钪兄谱鱌PT等教學(xué)資源時,需要批量去除圖片背景,就可以使用 Python 的 rembg 庫,下面我們就來看看如何操作rembg實現(xiàn)批量設(shè)置圖片背景為透明吧2024-11-11
Python 實現(xiàn)數(shù)據(jù)庫(SQL)更新腳本的生成方法
當(dāng)我們需要準備更新腳本的使用,不小心會忘記改動了哪里,所以小編試著用Python來實現(xiàn)自動的生成更新腳本,具體操作方法,大家參考下本文吧2017-07-07
python自動腳本的pyautogui入門學(xué)習(xí)
這篇文章主要介紹了python自動腳本的pyautogui入門學(xué)習(xí),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04

