尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

GLM-OCR基础教程:3步快速部署与Python爬虫数据提取实战

GLM-OCR基础教程:3步快速部署与Python爬虫数据提取实战 GLM-OCR基础教程3步快速部署与Python爬虫数据提取实战你是不是经常遇到这样的场景看到一个网页上有大量有用的文字信息比如产品参数、新闻内容或者表格数据但网站偏偏不提供下载手动复制粘贴又慢又容易出错或者你拿到了一些图片格式的文档里面的文字没法直接复制只能干瞪眼今天要聊的GLM-OCR就是专门解决这类问题的利器。它是一款开源的文字识别工具简单说就是能把图片里的文字“读”出来变成你可以编辑和处理的文本。更棒的是现在我们可以把它部署在云端再配合Python爬虫就能轻松实现网页信息的自动化抓取和识别。这篇教程我就手把手带你走一遍。从零开始在星图GPU平台上把GLM-OCR跑起来再到写一个Python脚本让它自动抓网页、识文字、存数据。整个过程非常直接哪怕你之前没怎么接触过OCR或者爬虫跟着做也能搞定。1. 环境准备与快速部署万事开头难但这次开头特别简单。我们不需要在本地电脑上折腾复杂的Python环境或者CUDA驱动一切都在云端完成。1.1 注册与资源准备首先你需要有一个星图平台的账号。这个过程和注册任何一个普通网站没什么区别按照提示填写邮箱、设置密码就行几分钟就能完成。登录之后关键一步是领取或者确保你有可用的GPU资源。GLM-OCR在处理图片时有GPU加速会快很多。在星图平台新用户通常会有一些免费的体验资源足够我们完成这个教程。你可以在“资源中心”或类似页面查看你的GPU时长确认它处于“可用”状态就行。1.2 一键部署GLM-OCR镜像这是最核心的一步但操作上却是最简单的。在星图平台找到“镜像广场”或“应用市场”。在搜索框里输入“GLM-OCR”你应该能很快找到对应的开源镜像。它的介绍页面通常会写明版本信息和基本功能。点击“部署”或“创建实例”按钮。这时平台会弹出一个配置页面。配置页面看起来选项不少但我们需要关注的只有几个实例名称给你这个“云端机器”起个名字比如“my-ocr-service”方便自己识别。GPU规格选择最基础的GPU型号即可例如“RTX 4090”或类似选项对于我们的测试和轻量使用完全够用。镜像选择系统应该已经自动选中了刚才搜索到的GLM-OCR镜像确认一下版本无误。网络与存储保持默认设置通常不需要改动。其他高级设置比如自定义端口、环境变量在第一次部署时可以先跳过。最后点击“确认部署”或“立即创建”。平台会开始拉取镜像并启动实例这个过程需要一两分钟喝口水等待一下就好。1.3 验证服务是否启动成功实例状态变成“运行中”后点击进入它的详情页。我们需要找到服务的访问方式。通常GLM-OCR这类镜像会提供一个Web界面比如一个简单的交互页面和一个更重要的API接口地址。API地址看起来像http://你的实例IP:端口号。你可以在实例的“访问方式”或“服务地址”栏目找到它。怎么验证它真的在工作呢最简单的方法就是把这个API地址直接粘贴到浏览器的地址栏里访问一下。如果返回了一些JSON格式的信息比如{“status”: “ok”, “message”: “GLM-OCR service is running”}或者是一个简单的欢迎页面那就说明服务已经成功启动了。至此你的专属OCR识别引擎就已经在云端待命了。接下来我们就要学习怎么指挥它干活。2. 认识GLM-OCR它能做什么在动手写代码之前我们先花几分钟了解一下GLM-OCR的基本能力这样用起来心里更有底。本质上它是一个接收图片、返回文字的工具。你给它一张包含文字的图片它就能把图片里的文字内容识别出来以结构化的文本比如字符串、段落还给你。它特别擅长处理印刷体文字比如截图、扫描文档、宣传海报上的文字识别准确率在大多数场景下都相当不错。它通常通过一个HTTP API来提供服务。这意味着你不需要在代码里导入复杂的库只需要像访问一个普通网页一样向某个特定的网址就是刚才部署得到的API地址发送一张图片它就会把识别结果传回来。这个API的调用格式也很简单。最常见的是使用一个/predict或/ocr这样的路径。你需要发送一个POST请求并把图片数据放在请求里。服务器处理完后会返回一个JSON对象里面就包含了识别出的文本、文字在图片中的位置边框坐标等信息。听起来是不是和用搜索引擎差不多只不过我们“搜索”的是图片里的文字信息。有了这个基础认识我们就可以进入最有趣的环节——让它和爬虫联动起来。3. Python爬虫与OCR联动实战现在我们来搭建一个自动化流程用爬虫获取网页上的图片然后用GLM-OCR识别图片中的文字最后把结果保存下来。我会用一个模拟的场景来演示你可以轻松替换成你自己的目标网站。3.1 项目初始化与依赖安装在你的本地电脑上新建一个文件夹比如叫web_ocr_scraper。然后打开命令行进入这个文件夹创建一个新的Python虚拟环境这是个好习惯可以避免包版本冲突python -m venv venv # 激活虚拟环境 # Windows: venv\Scripts\activate # Mac/Linux: source venv/bin/activate激活虚拟环境后安装我们需要的Python库pip install requests pillow beautifulsoup4requests用来发送HTTP请求既用于爬虫抓取网页也用于调用OCR的API。pillow(PIL)一个强大的图像处理库这里我们主要用它来打开和保存图片。beautifulsoup4用来解析HTML网页轻松地从中提取出图片链接。3.2 第一步编写网页图片抓取脚本我们写一个函数它的任务是访问一个网页并把网页里所有的图片下载到本地。这里我们以一个图片网站为例。import os import requests from bs4 import BeautifulSoup from urllib.parse import urljoin def download_images_from_url(url, save_dirdownloaded_images): 从指定URL下载所有图片到本地文件夹 # 创建保存图片的目录 if not os.path.exists(save_dir): os.makedirs(save_dir) try: # 1. 获取网页内容 headers { User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 } response requests.get(url, headersheaders) response.raise_for_status() # 检查请求是否成功 html_content response.text # 2. 解析HTML找到所有图片标签 soup BeautifulSoup(html_content, html.parser) img_tags soup.find_all(img) downloaded_paths [] for i, img_tag in enumerate(img_tags): # 获取图片的src链接 img_url img_tag.get(src) if not img_url: continue # 处理相对路径拼接成完整URL full_img_url urljoin(url, img_url) try: # 3. 下载图片 img_data requests.get(full_img_url, headersheaders).content # 生成一个本地文件名 file_extension os.path.splitext(full_img_url)[1] or .jpg filename fimage_{i}{file_extension} filepath os.path.join(save_dir, filename) # 4. 保存图片到本地 with open(filepath, wb) as f: f.write(img_data) print(f已下载: {filename}) downloaded_paths.append(filepath) except Exception as e: print(f下载图片失败 {full_img_url}: {e}) return downloaded_paths except Exception as e: print(f处理网页失败: {e}) return [] # 测试一下这个函数 if __name__ __main__: # 替换成你想抓取的任何包含图片的网页地址 test_url https://example.com image_files download_images_from_url(test_url) print(f总共下载了 {len(image_files)} 张图片。)注意在实际使用时请务必将test_url替换成目标网站地址并遵守该网站的robots.txt协议和相关使用条款避免对服务器造成压力。3.3 第二步调用GLM-OCR API识别文字图片下载好了现在轮到GLM-OCR出场。我们写另一个函数负责把图片发送给云端服务并取回识别结果。import base64 def ocr_image_via_api(image_path, api_base_url): 将本地图片发送到GLM-OCR API进行识别 # 构造完整的API端点这里假设是 /predict api_endpoint f{api_base_url.rstrip(/)}/predict try: # 1. 读取图片文件并编码为base64一种常见的API传输方式 with open(image_path, rb) as image_file: image_data base64.b64encode(image_file.read()).decode(utf-8) # 2. 准备请求数据 payload { image: image_data, # 有些API可能需要其他参数如 language, detail_level 等 # 请根据你部署的GLM-OCR镜像的具体API文档调整 } # 3. 发送POST请求 headers {Content-Type: application/json} response requests.post(api_endpoint, jsonpayload, headersheaders, timeout30) response.raise_for_status() # 4. 解析返回的JSON结果 result response.json() # 返回的结果结构可能包含 text, boxes 等字段 # 例如{text: 识别出的文字内容, confidence: 0.98} return result except requests.exceptions.RequestException as e: print(f调用OCR API失败 ({image_path}): {e}) return None except Exception as e: print(f处理图片时发生错误 ({image_path}): {e}) return None # 测试单张图片识别 if __name__ __main__: # 替换成你部署GLM-OCR后得到的真实API地址 YOUR_API_BASE_URL http://你的实例IP:端口号 test_image downloaded_images/image_0.jpg # 假设这是刚才下载的图片 ocr_result ocr_image_via_api(test_image, YOUR_API_BASE_URL) if ocr_result: print(识别结果:, ocr_result.get(text, No text field found)) # 你可以根据API实际返回的结构打印更多信息比如文字框位置关键点你需要把YOUR_API_BASE_URL替换成你在第1步部署成功后得到的那个真实地址。另外不同版本的GLM-OCR镜像其API的请求格式和返回字段可能略有不同最好能参考一下该镜像的说明文档。3.4 第三步整合流程与数据保存最后我们把前两步串联起来形成一个完整的自动化脚本并把识别出的文字保存到文件里比如一个CSV表格方便后续分析。import csv import time def main_scraping_and_ocr_pipeline(target_url, api_url, output_csvocr_results.csv): 主流程抓图 - OCR识别 - 保存结果 print(开始网页图片抓取...) image_paths download_images_from_url(target_url) if not image_paths: print(未下载到任何图片流程终止。) return print(f开始对 {len(image_paths)} 张图片进行OCR识别...) all_results [] for img_path in image_paths: print(f正在处理: {os.path.basename(img_path)}) result ocr_image_via_api(img_path, api_url) if result: # 整理结果这里我们简单保存图片名和识别出的文本 # 你可以根据需要保存更多信息如置信度、坐标等 record { image_filename: os.path.basename(img_path), recognized_text: result.get(text, ), source_url: target_url, process_time: time.strftime(%Y-%m-%d %H:%M:%S) } all_results.append(record) else: print(f - {os.path.basename(img_path)} 识别失败。) # 为了避免对API服务器造成过大压力可以添加短暂延迟 time.sleep(0.5) # 将结果保存到CSV文件 if all_results: fieldnames [image_filename, recognized_text, source_url, process_time] with open(output_csv, w, newline, encodingutf-8-sig) as csvfile: writer csv.DictWriter(csvfile, fieldnamesfieldnames) writer.writeheader() writer.writerows(all_results) print(f所有识别完成结果已保存至: {output_csv}) else: print(没有成功的识别结果可保存。) # 运行完整流程 if __name__ __main__: TARGET_WEBSITE https://example.com # 你的目标网站 GLM_OCR_API http://你的实例IP:端口号 # 你的OCR服务地址 main_scraping_and_ocr_pipeline(TARGET_WEBSITE, GLM_OCR_API)运行这个脚本你就会得到一个ocr_results.csv文件用Excel或文本编辑器打开里面整齐地记录着每张图片的名字和识别出的文字内容。一个简单的网页信息自动化提取工具就诞生了。4. 常见问题与实用技巧第一次跑通整个流程你可能会遇到一些小麻烦。这里我总结几个常见的情况和解决办法。问题一调用OCR API时返回连接错误或超时。检查首先确认你的云实例状态是“运行中”而不是“已停止”。然后在本地电脑的浏览器里再次尝试访问那个API地址看是否能打开。如果打不开可能是网络配置问题检查实例的安全组或防火墙规则确保你部署时开放的端口比如7860、8080是允许访问的。尝试有时候公网IP会变去实例详情页确认一下最新的访问地址。问题二识别结果乱码或准确率不高。调整图片OCR的识别效果很大程度上取决于图片质量。尝试在发送前对图片进行一些预处理比如使用PIL库将图片转为灰度图、增加对比度或进行二值化处理往往能提升识别效果。from PIL import Image, ImageEnhance def preprocess_image_for_ocr(image_path): img Image.open(image_path) # 转为灰度图 img img.convert(L) # 增强对比度 enhancer ImageEnhance.Contrast(img) img enhancer.enhance(2.0) # 增强因子可调整 processed_path image_path.replace(.jpg, _processed.jpg) img.save(processed_path) return processed_path查看日志如果GLM-OCR服务提供了日志查看功能可以看看有没有报错信息有时是模型加载的问题。问题三爬虫被网站屏蔽了。模拟浏览器在爬虫请求头headers里加入更完整的浏览器信息并合理设置请求间隔time.sleep。使用Session对于需要登录或有多步操作的网站使用requests.Session()来保持会话状态。遵守规则始终是最重要的。控制抓取频率避免给目标网站服务器带来负担。让脚本更健壮的小技巧异常处理像示例代码中那样用try...except包裹可能出错的网络请求和文件操作。进度提示在处理大量图片时打印当前进度让你知道脚本还在正常运行。结果去重如果连续抓取可以考虑对识别出的文本进行简单的去重避免保存过多重复信息。5. 总结走完这一趟你会发现将GLM-OCR这样的AI工具与Python爬虫结合起来思路其实非常直接就是把原本需要人眼去看、手动去复制的事情拆解成“获取图片”和“识别图片”两个自动化步骤。在星图平台上部署GLM-OCR镜像省去了本地配置环境的繁琐让你能立刻获得一个稳定、带GPU加速的识别服务。而Python爬虫部分requests和BeautifulSoup的组合足够应对大多数静态网页的抓取需求。这个简单的实战项目就像一个模板你可以基于它做很多扩展。比如识别电商网站的商品详情图、抓取并识别PDF报告里的图表、甚至是对接实时监控截图进行分析。关键在于理解每个环节在做什么然后根据你的具体需求去调整和强化。希望这篇教程能帮你打开一扇门看到用自动化工具处理信息的高效与乐趣。接下来就试着用这套方法去解决你实际工作中遇到的那个“复制粘贴”难题吧。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。
返回列表