介绍一个轻量的OCR工具,本地识别,支持网络部署
今天在小众软件上看到一个新的 github 项目介绍
试用了一下发现效果不错,平时也经常用到 ocr ,但是都是在线的,如果有敏感信息不太好使用在线 ocr 工具,这个正好解决了我的问题。下面给出安装教程和一些坑的解决方法。
安装
环境要求
我是在自己的CentOS云服务器上部署的。理论上所有Linux通用。
要求:
1 | 1. python 3.6 (3.6坑最少,后面遇到的坑基本都是python版本过高带来的) |
克隆代码
1 | git clone https://github.com/ouyanghuiyu/chineseocr_lite --depth=1 |
国内的 jj 下载 github 上的文件非常慢。加一个 –depth=1 可以只下载最新文件,不需要历史版本信息,大大减少了下载大小。国外 jj 请随意。
编译
编译软件环境
首先要安装编译所需要的软件
1 | yum groupinstall "Development Tools" |
gcc 版本问题
如果你使用的是CentOS或者 gcc 版本为低版本(如4.8,可以使用gcc -v 查看版本号),需要将gcc升级到更高版本再进行下一步编译,否则会报错。具体操作请看这里
python相关
安装 python3 可以看我之前的文章
安装运行所需要的包:
1 | python3 -m pip install -r requirements.txt |
开始编译
和官网的教程无异:
1 | cd chineseocr_lite |
使用
如果上面编译没有红色报错,那么就可以使用了。
开放端口
使用之前请确保开启了外网访问你指定端口的权限。
测试能否运行
开放端口后就可以测试
1 | cd chineseocr_lite ## 进入chineseocr目录 |
此时访问 http://你的ip:8080/ocr 出现下列画面即可:
注册成为服务,长期运行
找到 python3 位置
1 | which python3 |
记录上面的地址,待会会用到
记录程序目录
在chineseocr_lite 目录下执行
1 | pwd |
测试一下能否运行:
1 | /usr/local/bin/python3 /root/chineseocr_lite/app.py 8026 |
注册为服务
1 | nano /etc/systemd/system/chineseocr_lite.service |
粘贴如下内容,然后ctrl+o保存,ctrl+x退出:
1 | [Unit] |
保存后执行如下代码,查看运行状态:
1 | systemctl start chineseocr_lite |
此时访问之前的地址,应该就可以启动了,同时这个服务也会开机启动。
配合nginx或者caddy使用
只需要将上面的
1 | /usr/local/bin/python3 /root/chineseocr_lite/app.py 8026 |
然后在nginx或者caddy中代理为本地端口即可:
以caddy为例:
1 | https://ocr.pakro.top { |
然后访问 https://ocr.pakro.top/ocr 即可(这个地址不可访问)
坑,及如何解决
如果 安装的不是python3.6版本而是跟我一样是更高版本比如3.8版本,那么你有可能会遇到如下几个问题,主要还是因为web没有支持3.6以上版本造成的,所以最好的方法是安装python3.6版本。
RuntimeError: generator raised StopIteration
修改 /usr/local/lib/python3.8/site-packages/web/utils.py 文件
找到错误代码行数,将
1 | yield next(seq) |
修改为:
1 | try: |
/usr/local/lib/python3.8/site-packages/web/debugerror.py:214 - execution of ‘Constant’ statements is denied
修改 chineseocr_lite 目录下的app.py 文件,添加如下两句
1 | from web.template import ALLOWED_AST_NODES |
AttributeError: ‘StaticApp’ object has no attribute ‘directory’
修改 /usr/local/lib/python3.8/site-packages/web/httpserver.py (修改为你的版本,或者看错误信息,有给出文件位置)
找到
1 | self.start_response = start_response |
Segmentation fault
gcc版本过低的错误,升级gcc版本即可,具体请参考:升级gcc
注意事项
这个项目仍在开发中,有许多调试代码。建议不要将服务随意的暴露在公网中,或者不要传播,否则会有被入侵的风险。