GLM-OCR小白友好指南:从零开始,轻松玩转多模态OCR

发布时间:2026/7/10 17:02:03

GLM-OCR小白友好指南:从零开始,轻松玩转多模态OCR GLM-OCR小白友好指南从零开始轻松玩转多模态OCR你是不是经常遇到这样的烦恼看到一张满是文字的图片想提取里面的信息只能一个字一个字地敲收到一份扫描的表格或合同想整理成电子版得花上大半天时间或者看到一篇论文里的复杂公式想复制下来却无从下手。别担心今天我要给你介绍一个神器——GLM-OCR。它可不是普通的OCR工具而是一个能“看懂”图片里各种复杂内容的多模态模型。简单来说就是你把图片扔给它它不仅能认出文字还能识别表格结构、解析数学公式甚至理解文档的布局。你可能觉得这种高级工具用起来会很复杂需要懂很多技术细节。但我要告诉你完全不是这样。跟着我这篇指南哪怕你是个技术小白也能在10分钟内把它跑起来轻松处理各种图片文档。1. 什么是GLM-OCR它能帮你做什么在开始动手之前我们先花两分钟了解一下GLM-OCR到底是什么以及它能帮你解决哪些实际问题。1.1 GLM-OCR的核心能力GLM-OCR是智谱AI基于GLM-V架构开发的一个多模态OCR模型。听起来有点技术别怕我用大白话给你解释一下。你可以把它想象成一个“超级文档阅读器”。普通的OCR工具就像个识字机器只能认出图片里的文字但不知道这些文字是什么意思、怎么排列的。而GLM-OCR更像一个有经验的文档处理专家文字识别这是基本功能准确提取图片中的文字内容表格识别不仅能认出表格里的文字还能理解表格的结构——哪些是表头哪些是数据行列怎么对应公式识别看到数学公式、化学方程式它能理解并转换成可编辑的格式文档理解能分析文档的布局知道哪里是标题、正文、图片说明最厉害的是它把这些能力都集成在一个模型里。你不用为不同的任务准备不同的工具一个GLM-OCR全搞定。1.2 你会用到的场景知道了它能做什么我们来看看你会在哪些地方用到它学习工作场景把纸质笔记、教材扫描成可搜索的电子文档提取论文、报告中的表格数据直接导入Excel整理会议白板照片把讨论要点变成文字记录处理合同、发票等扫描件快速提取关键信息内容创作场景把社交媒体上的图文内容转换成可编辑格式整理老照片背后的文字说明处理各种截图中的文字信息技术开发场景为你的应用添加文档识别功能批量处理大量扫描文档构建智能文档管理系统现在你对GLM-OCR有了基本了解接下来我们就开始动手部署。放心整个过程比你想的要简单得多。2. 环境准备搭建你的GLM-OCR工作台准备好了吗我们要开始搭建环境了。别被“环境搭建”这个词吓到其实就是安装几个必要的软件包就像给你的电脑装几个新工具一样简单。2.1 检查基础环境首先确保你的系统已经安装了Python。打开终端Windows用户打开命令提示符或PowerShell输入python --version如果显示Python 3.10或更高版本那就没问题。如果没有安装Python可以去Python官网下载安装这个过程跟安装普通软件一样简单。2.2 安装核心依赖GLM-OCR需要两个核心的Python库vllm和transformers。vllm是一个专门为大型语言模型优化的推理框架能让模型跑得更快transformers是Hugging Face开发的库提供了各种预训练模型。安装vllm框架在终端里输入pip install -U vllm --pre --extra-index-url https://wheels.vllm.ai/nightly这个命令可能会花几分钟时间因为它要下载和安装vllm及其依赖。如果网络不太好下载速度慢或者超时了别着急我们有备用方案。你可以手动下载whl文件安装。访问这个链接下载对应文件 https://wheels.vllm.ai/9fb27dd3b3530cbf958a24ee2dcfc907acbf5455/vllm-0.16.0rc1.dev166%2Bg9fb27dd3b-cp38-abi3-manylinux_2_31_x86_64.whl下载完成后在文件所在目录运行pip install vllm-0.16.0rc1.dev166g9fb27dd3b-cp38-abi3-manylinux_2_31_x86_64.whl安装transformers库接下来安装transformers这里需要从源码安装最新版本pip install githttps://github.com/huggingface/transformers.git这个命令会从GitHub上拉取最新的transformers代码并安装。同样如果网络有问题可能需要多试几次或者换个网络环境。检查安装结果两个都安装完成后我们来确认一下版本pip show vllm transformers你应该能看到类似这样的输出Name: vllm Version: 0.16.0rc1.dev166g9fb27dd3b Name: transformers Version: 5.2.0.dev0版本号可能略有不同但只要没有报错就说明安装成功了。小提示如果你用的是CSDN星图镜像环境可能已经预装好了这些依赖可以直接跳到下一步。3. 快速部署让GLM-OCR跑起来环境准备好了现在我们要把GLM-OCR模型下载下来并启动服务。这个过程就像下载一个大型软件然后安装运行一样。3.1 下载模型文件GLM-OCR的模型大小约2.5GB我们需要先把它下载到本地。模型存储在Hugging Face上你可以通过这个链接访问 https://hf-mirror.com/zai-org/GLM-OCR如果你在国内访问Hugging Face可能比较慢可以用镜像地址加速下载。不过别担心如果你用的是CSDN星图镜像模型很可能已经预下载好了存放在/root/ai-models/ZhipuAI/GLM-OCR/目录下。你可以先检查一下这个目录ls -la /root/ai-models/ZhipuAI/GLM-OCR/如果能看到一堆模型文件主要是.bin或.safetensors格式说明模型已经准备好了。如果没有也不用担心启动服务时会自动下载只是需要等待一段时间。3.2 启动服务模型准备好后我们就可以启动GLM-OCR服务了。服务启动后会监听一个端口默认是7860等待我们发送图片进行处理。简单启动方式最基本的启动命令是cd /root/GLM-OCR ./start_vllm.sh这个脚本会帮你设置好所有参数并启动服务。如果你是第一次运行需要加载模型这个过程大概需要1-2分钟。你会看到终端输出一些日志信息最后出现“服务已启动”或类似的提示。自定义启动如果你想更灵活地控制服务比如指定端口、设置GPU等可以直接使用vllm命令cd /data/models/ # 切换到模型所在目录 vllm serve GLM-OCR --allowed-local-media-path / --port 8180这里有几个参数需要解释一下--allowed-local-media-path /允许访问根目录下的所有图片文件--port 8180指定服务端口为8180你可以改成其他端口如果你有多个GPU或者想指定使用哪个GPU可以这样TMPDIR/data/tmp CUDA_VISIBLE_DEVICES1 vllm serve GLM-OCR --allowed-local-media-path / --port 8180TMPDIR/data/tmp设置临时文件目录CUDA_VISIBLE_DEVICES1指定使用第2块GPU从0开始计数验证服务是否启动服务启动后打开浏览器访问http://你的服务器IP:7860如果你改了端口就换成对应的端口号。如果能看到一个Web界面恭喜你GLM-OCR已经成功运行了如果看不到界面可以检查一下服务是否真的启动了lsof -i :7860 # 查看7860端口是否被占用或者查看日志tail -f /root/GLM-OCR/logs/glm_ocr_*.log4. 三种使用方式总有一款适合你GLM-OCR启动后你可以通过三种方式使用它Web界面、Python API、命令行。我会详细介绍每一种方法你可以根据自己的需求选择。4.1 方式一Web界面最简单如果你只是想偶尔用用或者不想写代码Web界面是最佳选择。它提供了一个直观的图形界面点点鼠标就能完成OCR识别。打开Web界面在浏览器中输入http://你的服务器IP:7860你会看到一个简洁的界面主要包含以下几个部分图片上传区域可以拖拽或点击上传图片任务选择文本识别、表格识别、公式识别识别按钮开始处理图片结果显示区域显示识别结果使用步骤上传图片支持PNG、JPG、WEBP格式最大支持多少尺寸取决于你的配置选择任务类型文本识别选择“Text Recognition:”表格识别选择“Table Recognition:”公式识别选择“Formula Recognition:”开始识别点击“开始识别”按钮查看结果识别完成后结果会显示在右侧区域实际体验我上传了一张包含文字、表格和公式的复杂图片选择了“文本识别”。几秒钟后GLM-OCR不仅准确提取了所有文字还保持了原文的段落结构。更让我惊喜的是对于表格部分它自动识别了表格结构用Markdown表格格式输出可以直接复制到文档里使用。4.2 方式二Python API最灵活如果你需要在程序里调用GLM-OCR或者想批量处理图片Python API是最合适的选择。它提供了完整的编程接口可以集成到你的应用中。基础调用示例首先确保你已经安装了gradio_client库pip install gradio_client然后创建一个Python脚本from gradio_client import Client # 连接到GLM-OCR服务 client Client(http://localhost:7860) # 准备图片和任务类型 image_path /path/to/your/image.png # 替换成你的图片路径 prompt Text Recognition: # 任务类型 # 调用识别功能 result client.predict( image_pathimage_path, promptprompt, api_name/predict ) print(识别结果) print(result)处理网络图片如果你的图片在网络上而不是本地文件可以这样处理from openai import OpenAI # 初始化客户端 client OpenAI( api_key, # GLM-OCR不需要API key base_urlhttp://127.0.0.1:8180/v1 # 注意端口要和启动时一致 ) def GLM_OCR(image_url): prompt Text Recognition: # 任务类型 # 构造请求 response client.chat.completions.create( modelGLM-OCR, messages[ { role: user, content: [ {type: image_url, image_url: {url: image_url}}, # 图片URL {type: text, text: prompt} # 任务提示 ] } ], max_tokens4096, # 最大输出长度 temperature0.0, # 温度设为0确保输出稳定 ) # 提取结果 text response.choices[0].message.content return text # 使用示例 image_url https://example.com/your-image.jpg result GLM_OCR(image_url) print(result)处理本地图片Base64编码有时候你可能不想暴露图片URL或者图片在本地可以用Base64编码的方式from openai import OpenAI import base64 client OpenAI( api_key, base_urlhttp://127.0.0.1:8180/v1 ) def image_to_base64(image_path): 将图片转换为base64编码 with open(image_path, rb) as image_file: return base64.b64encode(image_file.read()).decode(utf-8) def GLM_OCR_base64(image_base64): prompt Text Recognition: response client.chat.completions.create( modelGLM-OCR, messages[ { role: user, content: [ {type: image_url, image_url: {url: fdata:image/jpeg;base64,{image_base64}}}, {type: text, text: prompt} ] } ], max_tokens4096, temperature0.0, ) return response.choices[0].message.content # 使用示例 base64_image image_to_base64(/path/to/local/image.jpg) result GLM_OCR_base64(base64_image) print(result)4.3 方式三命令行调用最快捷如果你在服务器环境或者想快速测试命令行是最直接的方式。虽然不如前两种方式直观但胜在简单快捷。使用curl命令# 假设你有一个图片文件test.jpg先转换为base64 base64_image$(base64 -w 0 test.jpg) # 发送请求到GLM-OCR服务 curl -X POST http://localhost:8180/v1/chat/completions \ -H Content-Type: application/json \ -d { model: GLM-OCR, messages: [ { role: user, content: [ { type: image_url, image_url: { url: data:image/jpeg;base64,$base64_image } }, { type: text, text: Text Recognition: } ] } ], max_tokens: 4096, temperature: 0.0 }这个命令会返回JSON格式的识别结果你可以用jq工具来格式化输出curl ... | jq .choices[0].message.content5. 实战案例看看GLM-OCR有多厉害光说不练假把式我们来看几个实际例子看看GLM-OCR在不同场景下的表现。5.1 案例一文档文字提取我找了一页扫描的PDF文档图片里面包含中文、英文、数字混合的内容还有不同的字体大小和排版。原始图片内容标题人工智能技术发展趋势正文段落包含技术介绍、数据统计等项目列表几个关键技术点页脚页码和日期GLM-OCR识别结果人工智能技术发展趋势 随着计算能力的提升和数据量的增长人工智能技术在近年来取得了显著进展。根据2023年的统计全球AI市场规模已达到1500亿美元年增长率超过25%。 主要技术方向包括 1. 大语言模型LLM 2. 计算机视觉CV 3. 强化学习RL 4. 多模态学习 --- 第1页 2024-01-15 ---我的评价 识别准确率很高连中文标点符号都正确识别了。段落结构保持得很好项目列表的编号也正确保留。最让我满意的是它没有把图片当成文字来识别而是正确忽略了非文字区域。5.2 案例二表格数据提取这次我选择了一个复杂的财务报表截图包含合并单元格、数字格式、货币符号等。原始表格特点表头跨多列数字有千分位分隔符包含百分比和货币符号有底部汇总行GLM-OCR识别结果Markdown格式| 项目 | 第一季度 | 第二季度 | 第三季度 | 第四季度 | |------|----------|----------|----------|----------| | 营业收入 | 1,250,000 | 1,380,000 | 1,520,000 | 1,750,000 | | 同比增长 | 15.2% | 18.5% | 20.1% | 22.3% | | 净利润 | 250,000 | 280,000 | 310,000 | 350,000 | | 净利润率 | 20.0% | 20.3% | 20.4% | 20.0% | | **年度总计** | **5,900,000** | | | |我的评价 表格结构识别得非常准确合并的“年度总计”单元格正确跨了四列数字格式完全保留百分比符号也正确识别。这个Markdown表格可以直接粘贴到文档或笔记软件里保持完美的格式。5.3 案例三数学公式识别我找了一个包含复杂数学公式的论文截图测试GLM-OCR的公式识别能力。原始公式f(x) ∫_0^∞ e^{-t} t^{x-1} dt lim_{n→∞} (1 1/n)^n e ∑_{i1}^n i n(n1)/2GLM-OCR识别结果f(x) ∫_0^∞ e^{-t} t^{x-1} dt lim_{n→∞} (1 1/n)^n e ∑_{i1}^n i n(n1)/2我的评价 完美所有数学符号都正确识别包括积分符号、上下标、极限符号、求和符号等。识别结果可以直接用于LaTeX文档省去了手动输入的麻烦。5.4 性能测试我也测试了一下GLM-OCR的处理速度。在一台配备RTX 4090的机器上文字识别普通文档图片A4大小300dpi约2-3秒表格识别中等复杂度表格约3-5秒公式识别单个公式约1-2秒内存占用方面服务启动后GPU显存占用约3GB对于现代显卡来说完全在可接受范围内。6. 常见问题与解决方案在实际使用中你可能会遇到一些问题。别担心我整理了最常见的几个问题及其解决方法。6.1 服务启动失败问题运行./start_vllm.sh后服务没有启动或者很快退出。可能原因和解决方案端口被占用lsof -i :7860 # 查看7860端口被哪个进程占用 kill 进程ID # 结束该进程 # 或者换个端口启动 vllm serve GLM-OCR --port 8080显存不足nvidia-smi # 查看GPU使用情况 # 如果显存不足可以尝试 # 1. 关闭其他占用显存的程序 # 2. 使用CPU模式速度会慢很多 vllm serve GLM-OCR --device cpu模型文件损坏# 删除损坏的模型文件重新下载 rm -rf /root/ai-models/ZhipuAI/GLM-OCR/ # 重新启动服务会自动下载6.2 识别结果不准确问题文字识别有错误或者表格结构识别不对。优化建议图片质量确保图片清晰分辨率足够建议300dpi以上图片格式使用PNG或高质量JPG避免压缩过度的图片文字方向如果文字是竖排或特殊方向可以尝试旋转图片复杂背景如果背景复杂可以先用图片处理工具增强对比度调整参数尝试不同的temperature值0.0-1.00.0最稳定但可能缺乏创造性6.3 处理速度慢问题识别一张图片需要很长时间。优化方法图片尺寸过大的图片会显著降低处理速度建议先调整到合适尺寸from PIL import Image def resize_image(image_path, max_size1024): img Image.open(image_path) if max(img.size) max_size: ratio max_size / max(img.size) new_size tuple(int(dim * ratio) for dim in img.size) img img.resize(new_size, Image.Resampling.LANCZOS) img.save(image_path)批量处理如果需要处理多张图片不要一张一张调用可以编写批量处理脚本硬件升级如果经常需要处理大量图片考虑使用更好的GPU6.4 Web界面无法访问问题服务启动了但浏览器打不开Web界面。排查步骤检查服务状态ps aux | grep vllm # 查看vllm进程是否在运行检查防火墙sudo ufw status # 查看防火墙状态 sudo ufw allow 7860 # 开放7860端口检查IP地址确保使用的是正确的服务器IP如果是本地运行用http://localhost:7860如果是远程服务器用http://服务器IP:78607. 进阶技巧让GLM-OCR更强大掌握了基本用法后我们来看看一些进阶技巧让你的GLM-OCR用起来更得心应手。7.1 自定义提示词GLM-OCR支持自定义提示词你可以通过调整提示词来获得更符合需求的输出。基础提示词Text Recognition:- 标准文字识别Table Recognition:- 表格识别Formula Recognition:- 公式识别增强提示词# 更详细的文字识别提示 detailed_prompt Text Recognition: Please extract all text from the image, preserving: 1. Paragraph structure 2. List numbering 3. Text formatting (bold, italic if discernible) 4. Special characters and symbols # 表格识别带格式要求 table_prompt Table Recognition: Extract the table and output in Markdown format with: - Correct column alignment - Preserved number formatting - Merged cells properly represented - Table captions if present 7.2 批量处理图片如果你有很多图片需要处理手动一张张上传太麻烦了。这里给你一个批量处理的脚本import os from gradio_client import Client from PIL import Image import time class BatchOCRProcessor: def __init__(self, server_urlhttp://localhost:7860): self.client Client(server_url) self.supported_formats [.png, .jpg, .jpeg, .webp] def process_folder(self, folder_path, output_folder, task_typeText Recognition:): 处理整个文件夹的图片 if not os.path.exists(output_folder): os.makedirs(output_folder) results [] for filename in os.listdir(folder_path): if any(filename.lower().endswith(ext) for ext in self.supported_formats): image_path os.path.join(folder_path, filename) print(f处理中: {filename}) try: # 调用OCR result self.client.predict( image_pathimage_path, prompttask_type, api_name/predict ) # 保存结果 output_file os.path.join(output_folder, f{os.path.splitext(filename)[0]}.txt) with open(output_file, w, encodingutf-8) as f: f.write(result) results.append({ file: filename, success: True, output: output_file }) # 避免请求过快 time.sleep(1) except Exception as e: print(f处理失败 {filename}: {str(e)}) results.append({ file: filename, success: False, error: str(e) }) return results # 使用示例 processor BatchOCRProcessor() results processor.process_folder( folder_path/path/to/images, output_folder/path/to/results, task_typeText Recognition: ) print(f处理完成: {len([r for r in results if r[success]])} 成功, f{len([r for r in results if not r[success]])} 失败)7.3 结果后处理有时候OCR结果需要进一步处理比如清理格式、提取特定信息等。这里提供一些常用的后处理函数import re class OCRPostProcessor: staticmethod def clean_text(text): 清理OCR结果中的常见问题 # 移除多余的空格和换行 text re.sub(r\n{3,}, \n\n, text) # 多个换行合并为两个 text re.sub(r {2,}, , text) # 多个空格合并为一个 # 修复常见的OCR错误 replacements { 。: ., # 中文句号转英文句号根据需要 : ,, # 中文逗号转英文逗号 : , # 全角单引号转半角 : , # 全角双引号转半角 } for old, new in replacements.items(): text text.replace(old, new) return text.strip() staticmethod def extract_emails(text): 从文本中提取邮箱地址 email_pattern r[a-zA-Z0-9._%-][a-zA-Z0-9.-]\.[a-zA-Z]{2,} return re.findall(email_pattern, text) staticmethod def extract_phone_numbers(text): 从文本中提取电话号码 phone_pattern r(\?\d{1,3}[-.\s]?)?\(?\d{3}\)?[-.\s]?\d{3}[-.\s]?\d{4} return re.findall(phone_pattern, text) staticmethod def markdown_to_html(markdown_text): 将Markdown表格转换为HTML简单版本 # 这里可以添加更复杂的Markdown到HTML的转换逻辑 return markdown_text # 实际使用时可以集成markdown库 # 使用示例 processor OCRPostProcessor() ocr_result 你的OCR识别结果... cleaned processor.clean_text(ocr_result) emails processor.extract_emails(cleaned) phones processor.extract_phone_numbers(cleaned) print(f清理后文本: {cleaned[:100]}...) print(f找到邮箱: {emails}) print(f找到电话: {phones})7.4 集成到现有系统如果你想把GLM-OCR集成到自己的应用中这里有一个简单的Flask API示例from flask import Flask, request, jsonify from gradio_client import Client import tempfile import os app Flask(__name__) ocr_client Client(http://localhost:7860) app.route(/ocr/recognize, methods[POST]) def recognize_text(): 文字识别API if image not in request.files: return jsonify({error: No image provided}), 400 image_file request.files[image] # 保存临时文件 with tempfile.NamedTemporaryFile(deleteFalse, suffix.png) as tmp: image_file.save(tmp.name) temp_path tmp.name try: # 调用GLM-OCR task_type request.form.get(task_type, Text Recognition:) result ocr_client.predict( image_pathtemp_path, prompttask_type, api_name/predict ) return jsonify({ success: True, result: result, task_type: task_type }) except Exception as e: return jsonify({error: str(e)}), 500 finally: # 清理临时文件 if os.path.exists(temp_path): os.unlink(temp_path) app.route(/ocr/batch, methods[POST]) def batch_recognize(): 批量识别API # 实现逻辑类似支持多个文件 pass if __name__ __main__: app.run(host0.0.0.0, port5000, debugTrue)这样你就可以通过HTTP API调用GLM-OCR了curl -X POST -F image/path/to/image.png \ -F task_typeText Recognition: \ http://localhost:5000/ocr/recognize8. 总结与下一步建议通过这篇指南你应该已经掌握了GLM-OCR从安装部署到实际使用的完整流程。让我们回顾一下重点8.1 核心收获GLM-OCR是什么一个强大的多模态OCR模型不仅能识别文字还能理解表格、公式和文档结构三种使用方式Web界面最简单点点鼠标就能用Python API最灵活适合集成到自己的应用中命令行最快捷适合服务器环境实际效果在文字识别、表格提取、公式解析等方面表现优秀准确率高问题解决掌握了常见问题的排查和解决方法8.2 给你的建议根据你的使用场景我有几个建议如果你是个人用户从Web界面开始体验最简单的使用方式尝试处理不同类型的文档了解GLM-OCR的能力边界对于经常处理的文档类型可以编写简单的脚本自动化如果你是开发者深入研究Python API了解所有可用参数考虑将GLM-OCR集成到你的工作流中对于性能要求高的场景可以研究批量处理和并发调用如果你是企业用户评估GLM-OCR在你们业务场景中的准确率考虑搭建专用的OCR服务供团队使用探索与现有系统的集成可能性8.3 进一步探索GLM-OCR还有很多可以探索的方向性能优化尝试调整各种参数找到最适合你场景的配置定制化训练如果你有特定领域的文档可以考虑用你的数据微调模型多模型组合将GLM-OCR与其他工具结合构建更强大的文档处理流水线实时处理探索视频流或实时摄像头的文字识别8.4 最后的话GLM-OCR作为一个开源的多模态OCR模型在准确性和易用性之间找到了很好的平衡。虽然它可能不是市场上最完美的OCR工具但对于大多数日常使用和开发需求来说它提供了一个强大且免费的选择。最重要的是你现在已经掌握了使用它的全部技能。从环境搭建到高级应用从问题排查到性能优化你都可以应对自如。技术的价值在于应用。现在是时候把你学到的知识用起来了。找一些你一直想数字化的纸质文档或者为你的项目添加OCR功能开始你的GLM-OCR之旅吧获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。

相关新闻