解放双手!用GLM-OCR自动提取图片文字,Python调用教程
解放双手!用GLM-OCR自动提取图片文字,Python调用教程
1. 引言:告别手动输入的烦恼
每天面对大量图片中的文字信息,你是否还在手动输入?商品截图中的价格信息、文档照片中的关键内容、表格数据的整理录入——这些重复性工作不仅耗时耗力,还容易出错。
现在,有了GLM-OCR,这一切都可以自动化完成。这是一个基于先进多模态架构的OCR模型,专门为复杂文档理解而设计。它不仅能准确识别文字,还能理解表格结构、识别数学公式,真正实现"图片变文字"的智能转换。
本文将手把手教你如何快速部署GLM-OCR,并通过Python代码轻松调用其强大功能。无需深厚的技术背景,跟着步骤操作,30分钟内就能让AI为你自动处理图片文字。
2. 环境准备与快速部署
2.1 系统要求与前置准备
在开始之前,请确保你的系统满足以下基本要求:
- 操作系统:Linux(推荐Ubuntu 18.04+)或Windows WSL
- Python版本:3.8或更高版本
- 内存:至少8GB RAM
- 存储空间:10GB可用空间(用于模型文件)
- 网络连接:需要下载模型文件(约2.5GB)
如果你计划使用GPU加速(推荐),还需要:
- 显卡:NVIDIA GPU,至少4GB显存
- CUDA:11.7或更高版本
2.2 一键启动服务
GLM-OCR提供了极其简单的部署方式。打开终端,执行以下命令:
# 进入项目目录
cd /root/GLM-OCR
# 启动服务
./start_vllm.sh
首次运行时会自动下载模型文件,这个过程可能需要1-2分钟,具体取决于你的网络速度。完成后,你会看到服务成功启动的提示信息。
验证服务是否正常运行: 打开浏览器,访问 http://localhost:7860,如果看到GLM-OCR的Web界面,说明服务已成功启动。
3. Web界面快速体验
在深入代码之前,我们先通过Web界面直观感受GLM-OCR的能力。
3.1 界面功能概览
GLM-OCR的Web界面简洁易用,主要包含三个功能区:
- 图片上传区:支持拖拽或点击上传PNG、JPG、WEBP格式图片
- 任务选择区:提供文本识别、表格识别、公式识别三种模式
- 结果展示区:实时显示识别结果,支持复制和导出
3.2 三步完成文字提取
让我们用一个实际例子来体验完整流程:
第一步:准备测试图片 找一张包含文字的图片,比如:
- 书籍或文档的一页
- 商品标签或价格牌
- 手写笔记或备忘录
第二步:上传并选择任务
- 点击上传按钮选择图片
- 在任务类型中选择"Text Recognition"(文本识别)
- 点击"开始识别"按钮
第三步:查看并使用结果 几秒钟后,识别结果就会显示在右侧区域。你可以:
- 直接复制文字内容
- 检查识别准确率
- 如果需要,重新调整图片后再次识别
通过这个简单体验,你应该已经感受到GLM-OCR的强大能力。接下来,我们将学习如何通过编程方式调用这些功能。
4. Python API调用详解
4.1 安装必要依赖
在开始编写代码前,需要安装必要的Python包:
pip install gradio_client requests pillow
这些包的作用分别是:
gradio_client:用于与GLM-OCR服务通信requests:处理HTTP请求pillow:处理图片文件
4.2 基础调用代码
下面是一个最简单的Python调用示例:
from gradio_client import Client
# 创建客户端实例,连接到本地服务
client = Client("http://localhost:7860")
# 调用文本识别功能
result = client.predict(
image_path="path/to/your/image.png", # 替换为你的图片路径
prompt="Text Recognition:", # 指定任务类型
api_name="/predict" # 使用预测API
)
print("识别结果:")
print(result)
这段代码做了三件事:
- 建立与本地GLM-OCR服务的连接
- 指定要识别的图片路径
- 请求文本识别服务并获取结果
4.3 处理不同类型的内容
GLM-OCR支持多种内容类型的识别,只需更改prompt参数:
# 表格识别
table_result = client.predict(
image_path="path/to/table.png",
prompt="Table Recognition:", # 改为表格识别
api_name="/predict"
)
# 公式识别
formula_result = client.predict(
image_path="path/to/formula.png",
prompt="Formula Recognition:", # 改为公式识别
api_name="/predict"
)
4.4 完整实用示例
下面是一个更加完整的示例,包含错误处理和结果处理:
import os
from gradio_client import Client
from PIL import Image
import time
class GLMOCRClient:
def __init__(self, server_url="http://localhost:7860"):
self.client = Client(server_url)
self.retry_count = 3
self.retry_delay = 2 # 重试延迟秒数
def recognize_text(self, image_path, max_retries=None):
"""识别图片中的文字"""
retries = max_retries or self.retry_count
for attempt in range(retries):
try:
# 验证图片文件存在
if not os.path.exists(image_path):
raise FileNotFoundError(f"图片文件不存在: {image_path}")
# 调用识别服务
result = self.client.predict(
image_path=image_path,
prompt="Text Recognition:",
api_name="/predict"
)
return {
'success': True,
'text': result,
'error': None
}
except Exception as e:
if attempt == retries - 1: # 最后一次尝试也失败
return {
'success': False,
'text': None,
'error': str(e)
}
time.sleep(self.retry_delay)
return {
'success': False,
'text': None,
'error': '未知错误'
}
# 使用示例
if __name__ == "__main__":
# 创建客户端实例
ocr_client = GLMOCRClient()
# 识别单张图片
result = ocr_client.recognize_text("example.png")
if result['success']:
print("识别成功!")
print("提取的文字内容:")
print(result['text'])
else:
print(f"识别失败:{result['error']}")
这个示例增加了错误重试机制、文件存在性检查等功能,更加健壮实用。
5. 实战应用案例
5.1 批量处理图片文件
在实际工作中,我们经常需要处理大量图片。下面是一个批量处理的示例:
import glob
from concurrent.futures import ThreadPoolExecutor
def batch_process_images(image_folder, output_file="results.txt"):
"""批量处理文件夹中的所有图片"""
client = GLMOCRClient()
# 获取所有图片文件
image_files = glob.glob(f"{image_folder}/*.png") + \
glob.glob(f"{image_folder}/*.jpg") + \
glob.glob(f"{image_folder}/*.webp")
results = []
# 使用线程池并行处理
with ThreadPoolExecutor(max_workers=3) as executor:
future_to_file = {
executor.submit(client.recognize_text, img_file): img_file
for img_file in image_files
}
for future in future_to_file:
img_file = future_to_file[future]
try:
result = future.result()
if result['success']:
results.append(f"文件: {img_file}\n结果:\n{result['text']}\n{'-'*50}")
else:
results.append(f"文件: {img_file}\n错误: {result['error']}\n{'-'*50}")
except Exception as e:
results.append(f"文件: {img_file}\n异常: {str(e)}\n{'-'*50}")
# 保存结果到文件
with open(output_file, 'w', encoding='utf-8') as f:
f.write('\n'.join(results))
print(f"处理完成!共处理 {len(image_files)} 张图片")
return results
# 使用示例
batch_process_images("./images", "extracted_texts.txt")
5.2 与现有系统集成
GLM-OCR可以轻松集成到现有系统中:
def integrate_with_existing_system(image_path, system_callback=None):
"""
将OCR功能集成到现有系统中
system_callback: 识别完成后的回调函数
"""
client = GLMOCRClient()
# 执行OCR识别
result = client.recognize_text(image_path)
if result['success']:
extracted_text = result['text']
# 如果提供了回调函数,调用它
if system_callback:
system_callback(extracted_text)
# 这里可以添加其他处理逻辑
# 比如存入数据库、发送通知等
return extracted_text
else:
# 处理识别失败的情况
print(f"OCR识别失败: {result['error']}")
return None
# 示例回调函数
def save_to_database(text):
"""模拟保存到数据库"""
print(f"将文本保存到数据库: {text[:50]}...")
# 使用示例
integrate_with_existing_system("document.png", save_to_database)
6. 常见问题与解决方案
6.1 服务连接问题
问题:无法连接到GLM-OCR服务 解决方案:
# 检查服务是否正常运行
import requests
def check_service_status(port=7860):
try:
response = requests.get(f"http://localhost:{port}", timeout=5)
return response.status_code == 200
except:
return False
if not check_service_status():
print("服务未启动,请先运行 ./start_vllm.sh")
6.2 图片处理问题
问题:图片太大或格式不支持 解决方案:
from PIL import Image
import os
def preprocess_image(image_path, max_size=(1024, 1024)):
"""预处理图片:调整大小并转换为支持格式"""
try:
with Image.open(image_path) as img:
# 调整大小(保持比例)
img.thumbnail(max_size)
# 转换为RGB(处理可能有的透明度通道)
if img.mode in ('RGBA', 'LA'):
background = Image.new('RGB', img.size, (255, 255, 255))
background.paste(img, mask=img.split()[-1])
img = background
elif img.mode != 'RGB':
img = img.convert('RGB')
# 保存为JPG格式
output_path = os.path.splitext(image_path)[0] + "_processed.jpg"
img.save(output_path, "JPEG", quality=95)
return output_path
except Exception as e:
print(f"图片预处理失败: {e}")
return image_path # 返回原路径尝试直接处理
6.3 性能优化建议
如果处理速度较慢,可以尝试以下优化:
# 使用缓存避免重复处理相同图片
from functools import lru_cache
@lru_cache(maxsize=100)
def cached_recognize(image_path):
"""带缓存的识别函数"""
client = GLMOCRClient()
return client.recognize_text(image_path)
# 批量处理时适当调整并发数
# 根据你的硬件配置调整max_workers
def optimized_batch_process(image_files, max_workers=2):
with ThreadPoolExecutor(max_workers=max_workers) as executor:
results = list(executor.map(cached_recognize, image_files))
return results
7. 总结与下一步建议
通过本教程,你已经掌握了使用GLM-OCR进行图片文字提取的完整流程。从环境部署到Python调用,从基础使用到高级应用,现在你应该能够:
- ✅ 快速部署GLM-OCR服务
- ✅ 通过Web界面体验文字识别功能
- ✅ 使用Python代码调用OCR API
- ✅ 处理批量图片文件
- ✅ 集成到现有系统中
- ✅ 解决常见问题并进行性能优化
下一步学习建议
- 深入探索高级功能:尝试表格识别和公式识别功能,了解它们在不同场景下的应用
- 性能调优:根据你的具体需求,调整并发数和预处理策略
- 错误处理增强:实现更完善的错误处理和重试机制
- 结果后处理:添加自然语言处理步骤,对识别结果进行清洗和结构化
GLM-OCR只是一个开始,现在你可以将更多时间和精力放在更有价值的工作上,让AI帮你处理重复性的文字提取任务。
获取更多AI镜像
想探索更多AI镜像和应用场景?访问 CSDN星图镜像广场,提供丰富的预置镜像,覆盖大模型推理、图像生成、视频生成、模型微调等多个领域,支持一键部署。
更多推荐


所有评论(0)