You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

API调用场景下EasyOCR创建Reader实例触发UnicodeEncodeError问题求助

解决EasyOCR在Flask+Nginx环境下初始化时的UnicodeEncodeError

我之前也碰到过一模一样的问题,核心原因是EasyOCR下载模型时输出的进度条包含Unicode字符,而Flask服务进程的标准输出编码不是UTF-8,导致编码报错。下面给你几个可行的解决方案:

方案1:关闭EasyOCR的初始化进度条(最快捷)

直接在创建Reader实例时添加verbose=False参数,彻底跳过进度条的Unicode输出:

import easyocr
# 关闭进度条,避免下载时的终端输出触发编码错误
oocr = easyocr.Reader(['en'], verbose=False)

这个方法直接绕过了编码问题,因为不会再打印带█的进度条了,适合快速解决问题。

方案2:确保服务进程的环境变量正确传递

你之前设置的PYTHONIOENCODING=utf8可能没生效,因为终端的环境变量不会自动继承给Nginx/Flask的后台进程。需要在服务配置里显式设置:

  • 如果用systemd管理Flask服务:在你的.service配置文件中添加一行:
    Environment=PYTHONIOENCODING=utf8
    
    然后重启服务:sudo systemctl daemon-reload && sudo systemctl restart your-flask-service
  • 如果用uWSGI部署:在uWSGI的配置文件(比如app.ini)中添加:
    env = PYTHONIOENCODING=utf8
    
    重启uWSGI服务即可。

方案3:提前下载模型,避免运行时触发下载流程

先在服务器的Python环境中手动运行一次初始化代码,让EasyOCR把模型下载到本地:

import easyocr
# 触发模型下载,完成后退出即可
reader = easyocr.Reader(['en'])

默认模型会存在~/.EasyOCR/model目录下,你也可以通过model_storage_directory参数指定自定义路径:

reader = easyocr.Reader(['en'], model_storage_directory='/opt/easyocr-models')

之后在API代码中使用相同的model_storage_directory参数,服务运行时就不会再触发下载,自然也不会有进度条输出了。

问题根源分析

当你直接在终端运行脚本时,终端的标准输出默认是UTF-8编码,支持█这类Unicode字符;但Flask+Nginx部署时,服务进程的标准输出可能被重定向到日志文件或Nginx的管道,此时默认编码可能被设置为ASCII,导致打印Unicode字符时抛出UnicodeEncodeError。而终端设置的环境变量不会自动传递给后台服务进程,所以需要在服务配置中显式指定编码。

内容的提问来源于stack exchange,提问作者Darkstar Dream

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 17:14:09