这里测试的大模型主打一个免费,阿里通义灵码免费,ollama免费。
实际举例-阿里通义灵码极大提高编程效率
以实际使用为例验证极大提高编程效率
做一个屏幕截图OCR Python程序
一.系统配置:
win10 anaconda3 python10以上虚拟环境,vs code 和 通义灵码插件最新版本,有一个ollama加载大模型的环境,大模型是llama3.2-vision:11b。
二.向通义灵码提出正确需求。
在vs code系统左下角,通义系统的对会话框向通义灵码提问。
1.提问:
python编程,在win11系统截屏,截屏方式鼠标选取矩形方框,将选取的方框形成图片文件,将文件传给大模型,
利用大模型做ocr,做文字识别.对大模型的访问方式参照ocr_test0302.py文件的内容。
你可以将程序写入你自己定义的python文件。
通义灵码回答:
为了实现你的需求,我们需要编写一个Python脚本,该脚本能够截取屏幕上的矩形区域,将截取的图像保存为文件,
然后使用大模型进行OCR文字识别。
我们可以使用pyautogui
库来截取屏幕,并使用你提供的ocr_test0302.py
文件中的逻辑来调用大模型。
以下是完整的Python脚本:
import pyautogui
import base64
from ollama import Client
# 初始化大模型客户端
client = Client(
host='http://192.168.0.37:11434',
headers={
'x-some-header': 'some-value'}
)
def encode_image(image_path: str) -> str:
with open(image_path, "rb") as image_file:
encoded_string = base64.b64encode(image_file.read()).decode("utf-8")
return f"data:image/jpeg;base64,{encoded_string}"
def capture_screen_region():
print("请在接下来的5秒内选择屏幕上的矩形区域...")
pyautogui.sleep(5) # 等待5秒,让用户选择区域
x, y, width, height = pyautogui.prompt(text='输入矩形区域的坐标(x, y, width, height)', title='选择区域', default='0, 0, 100, 100').split(',')
x, y, width, height = int(x), int(y), int(width), int(height)
screenshot = pyautogui.screenshot(region=(x, y, width, height))
screenshot_path = "screenshot.png"
screenshot.save(screenshot_path)
return screenshot_path
def perform_ocr(image_path: str):
system_prompt = """Convert the provided image into Markdown format. Ensure that all content from the page is included, such as headers, footers, subtexts, images (with alt text if possible), tables, and any other elements.
Requirements:
- Output Only Markdown: Return solely the Markdown content without any additional explanations or comments.
- No Delimiters: Do not use code fences or delimiters like \`\`\`markdown.
- Complete Content: Do not omit any part of the page, including headers, footers, and subtext.
"""
response = client.chat(
model='llama3.2-vision:11b',
messages=[
{
'role': 'user',
'content': system_prompt,
'images': [image_path],
}
],
)
return response.message.content
if __name__ == "__main__":
image_path = capture_screen_region()
markdown_content = perform_ocr(image_path)
print(markdown_content)
说明:
- 屏幕截取:使用
pyautogui
库来截取屏幕上的矩形区域。用户需要在5秒内选择屏幕上的区域,并输入该区域的坐标(x, y, width, height)。 - 图像编码:将截取的图像保存为文件,并使用
encode_image
函数将其编码为Base64格式。 - 大模型调用:使用
ollama
库中的Client
类来调用大模型进行OCR文字识别。 - 输出结果:将大模型返回的Markdown格式内容打印出来。
安装依赖:
确保安装了pyautogui
库,可以使用以下命令安装:
pip install pyautogui
这样,你就可以通过运行这个脚本来截取屏幕上的矩形区域,并使用大模型进行OCR文字识别了。
问题分析:
我对程序测试,很不靠谱,撇了一眼程序
有如下片段
def capture_screen_region():
print("请在接下来的5秒内选择屏幕上的矩形区域...")
pyautogui.sleep(5) # 等待5秒,让用户选择区域
这很不靠谱。
2 提问:不能要求使用者输入选择区域,应该是两次点按鼠标,选择区域。
阿里灵码又是疯狂输出:
有如下片段:
def capture_screen_region():
print("请在接下来的5秒内点击屏幕上的两个点来选择矩形区域...")
pyautogui.sleep(5) # 等待5秒,让用户点击
# 获取第一次点击位置
first_click = pyautogui.position()
print(f"第一次点击位置: {first_click}")
# 获取第二次点击位置
second_click = pyautogui.position()
print(f"第二次点击位置: {second_click}")
不好用,原因是现代程序都是事件驱动的,没有必须顺序执行的。
3.提问:你选择矩形框还不是win的习惯性操作,最流行的做法是按住鼠标左键,不松开,移动鼠标,松开左键,完成矩形框区域的选择。
阿里灵码又是疯狂输出:但这次还是
print("请按住鼠标左键并拖动来选择矩形区域...")
# 等待鼠标左键按下
while not pyautogui.mouseDown(button='left'):
pass
# 获取鼠标按下位置
start_x, start_y = pyautogui.position()
print(f"鼠标按下位置: ({start_x}, {start_y})")
# 等待鼠标左键释放
while pyautogui.mouseDown(button='left'):
pass
# 获取鼠标释放位置
end_x, end_y = pyautogui.position()
print(f"鼠标释放位置: ({end_x}, {end_y})")
不是win程序的使用习惯。
4 提问:在pyautogui中,按下左键和释放是同样的调用方式? 【注释,看程序,两次使用 while pyautogui.mouseDown(button='left'):】
阿里灵码又是疯狂输出:
这次有如下代码,应该是前进了一步
def on_click(x, y, button, pressed):
nonlocal start_x, start_y, end_x, end_y
if button == mouse.Button.left:
if pressed:
start_x, start_y = x, y
print(f"鼠标按下位置: ({start_x}, {start_y})")
else:
end_x, end_y = x, y
print(f"鼠标释放位置: ({end_x}, {end_y})")
return False # 停止监听
# 创建鼠标监听器
with mouse.Listener(on_click=on_click) as listener:
listener.join()
至此程序可以运行,并在控制台返回识别的文本。
我一共提问4次。编码的基本框架有了,下面就是细化了。
这个过程用时半个小时,效率极高。
一般的程序员调试都不止30分钟。
现在这个程序是控制台程序,没有界面,我用灵码插件加界面一共用了2小时,小伙伴们可以一起来试试。