EasyOCR实战:三步搞定图片文字识别

张开发
2026/6/1 2:15:55 15 分钟阅读
EasyOCR实战:三步搞定图片文字识别
1. 为什么选择EasyOCR第一次接触图片文字识别时我试过不少OCR工具但要么配置复杂要么识别率感人。直到遇到EasyOCR才发现原来文字识别可以这么简单。这个基于Python的开源库最大的特点就是名副其实——真的非常easy相比传统OCR工具需要手动调整参数、处理图像预处理等繁琐步骤EasyOCR实现了开箱即用。我实测过各种场景从清晰的印刷体到潦草的手写笔记从电脑截图到手机随手拍的路牌识别效果都相当稳定。最让我惊喜的是它对中文的支持很多OCR工具对中文识别效果不佳但EasyOCR专门优化了中文模型。如果你需要快速实现以下场景EasyOCR会是个不错的选择提取图片中的文字内容比如扫描的文件、截图识别照片中的路牌、招牌等文字信息批量处理大量图片中的文字开发需要OCR功能的小工具2. 环境准备与安装2.1 安装Python环境虽然EasyOCR号称简单但基础环境还是要准备好的。建议使用Python 3.7及以上版本我实测3.8和3.9最稳定。新手可以直接安装Anaconda它集成了Python和常用的科学计算库。安装完Python后强烈建议创建一个虚拟环境python -m venv easyocr_env source easyocr_env/bin/activate # Linux/Mac easyocr_env\Scripts\activate # Windows2.2 安装EasyOCR及其依赖EasyOCR依赖于PyTorch所以安装顺序很重要。先安装PyTorchpip install torch torchvision torchaudio然后安装EasyOCR本体pip install easyocr这里有个小坑要注意如果你的电脑有NVIDIA显卡可以安装CUDA版本的PyTorch来加速识别。但如果没有显卡或者不想折腾直接用CPU版本也没问题日常使用完全够用。安装完成后可以简单验证下import easyocr print(easyocr.__version__)3. 模型下载与配置3.1 自动下载vs手动下载第一次使用EasyOCR时它会自动下载需要的模型文件。但实测发现自动下载有几个问题国内下载速度慢容易中断不便于管理模型版本我推荐手动下载模型。官方模型仓库提供了各种语言的识别模型中文用户主要需要这两个文本检测模型craft_mlt_25k中文识别模型zh_sim_g2下载后解压放到指定目录Windows:C:\Users\你的用户名\.EasyOCR\modelLinux/Mac:~/.EasyOCR/model3.2 语言包选择技巧EasyOCR支持80种语言但并不是所有语言都需要下载。根据我的经验中文用户简体中文(ch_sim)英文(en)组合最实用如果需要识别繁体中文可以加zh_tra其他语言按需添加避免下载不必要的模型这里有个容易混淆的点代码中使用的语言代码和模型文件名并不完全一致。比如代码中的ch_sim对应模型文件zh_sim_g2代码中的en对应模型文件english_g24. 三步实现文字识别4.1 第一步初始化Reader核心代码其实就两行reader easyocr.Reader([ch_sim,en]) # 指定语言初始化时可以配置很多参数但新手先用默认值就好。几个实用的参数gpuFalse强制使用CPU如果没有显卡model_storage_directory自定义模型路径download_enabledFalse禁用自动下载适合已经手动下载模型的情况4.2 第二步调用readtext方法识别图片文字的核心方法是readtext()它支持三种输入方式方式1直接传文件路径result reader.readtext(test.png)方式2传入OpenCV读取的图像import cv2 img cv2.imread(test.png) result reader.readtext(img)方式3传入文件字节流with open(test.png,rb) as f: img f.read() result reader.readtext(img)我平时最常用第一种方式简单直接。第二种方式适合已经用OpenCV处理图像的场景第三种则适合网络下载的图片。4.3 第三步解析识别结果readtext()返回的是一个列表每个元素代表一个识别到的文字区域包含三个部分文字区域的四个顶点坐标用于绘制边框识别到的文字内容识别置信度0~1之间例如输出([[[151, 101], [195, 101], [195, 149], [151, 149]], 西, 0.9816301184856115)我们可以这样处理结果for detection in result: print(f文字: {detection[1]}, 置信度: {detection[2]:.2f})如果想可视化识别结果可以用OpenCV绘制边框import cv2 img cv2.imread(test.png) for detection in result: top_left tuple(map(int, detection[0][0])) bottom_right tuple(map(int, detection[0][2])) cv2.rectangle(img, top_left, bottom_right, (0,255,0), 2) cv2.imwrite(result.jpg, img)5. 实战技巧与避坑指南5.1 提升识别准确率的方法用过一段时间后我总结出几个提升识别率的小技巧图片预处理很重要适当调整对比度和亮度对模糊图片可以先进行锐化文字区域最好占图片的主要部分调整识别参数result reader.readtext(image, decoderbeamsearch, # 使用beam search解码 beamWidth5, # 增大beam width contrast_ths0.3, # 对比度阈值 adjust_contrast0.7 # 对比度调整系数 )分区域识别对于复杂版面的图片可以先用OpenCV检测文字区域然后分块识别。5.2 常见问题解决问题1模型下载失败解决方案手动下载模型放到正确目录检查网络连接特别是能否访问GitHub问题2识别结果乱码确认是否正确指定了语言参数检查图片质量特别是文字是否清晰问题3识别速度慢尝试减小图片尺寸使用GPU加速如果有NVIDIA显卡关闭不需要的语言模型5.3 性能优化建议处理大量图片时有几个优化点复用Reader实例避免重复初始化使用多线程/多进程处理对图片进行批量预处理根据实际需求选择适当的模型大小6. 扩展应用场景除了基本的文字识别EasyOCR还可以做很多有趣的事情场景1文档数字化批量处理扫描的PDF或图片提取文字内容保存为可编辑文档。场景2车牌识别配合OpenCV的车牌检测可以实现简单的车牌识别系统。场景3菜单翻译出国旅游时拍照识别外文菜单实时翻译。场景4社交媒体监控自动识别图片中的文字内容用于舆情监控或内容审核。我在实际项目中发现结合其他工具可以发挥更大价值。比如用Pillow进行图像预处理用Google Translate API做实时翻译用Flask搭建一个简单的OCR服务接口。

更多文章