今天在小众软件上看到一个新的 github 项目介绍
试用了一下发现效果不错,平时也经常用到 ocr ,但是都是在线的,如果有敏感信息不太好使用在线 ocr 工具,这个正好解决了我的问题。下面给出安装教程和一些坑的解决方法。
安装
环境要求
我是在自己的CentOS云服务器上部署的。理论上所有Linux通用。
要求:
1. python 3.6 (3.6坑最少,后面遇到的坑基本都是python版本过高带来的)
2. opencv-python (最新版本即可)
3. "Development Tools"
4. pytorch (最新版本即可,有GPU就安装GPU版本,云服务器一般都没有)
克隆代码
git clone https://github.com/ouyanghuiyu/chineseocr_lite --depth=1
cd chineseocr_lite
国内的 jj 下载 github 上的文件非常慢。加一个 –depth=1 可以只下载最新文件,不需要历史版本信息,大大减少了下载大小。国外 jj 请随意。
编译
编译软件环境
首先要安装编译所需要的软件
yum groupinstall "Development Tools"
## 其他Linux发行版的开发者工具安装请自行百度。
python3 -m pip install opencv-python-headless
## 没有gui界面的请安装headless版本,否则会报错。有GUI的去掉-headless安装即可
python3 -m pip install torch==1.4.0+cpu torchvision==0.5.0+cpu -f https://download.pytorch.org/whl/torch_stable.html
## 截止2020-03-23日我安装的最新版本,也可以自行去官网获取最新版本下载链接
gcc 版本问题
如果你使用的是CentOS或者 gcc 版本为低版本(如4.8,可以使用gcc -v 查看版本号),需要将gcc升级到更高版本再进行下一步编译,否则会报错。具体操作请看这里
python相关
安装 python3 可以看我之前的文章
安装运行所需要的包:
python3 -m pip install -r requirements.txt
开始编译
和官网的教程无异:
cd chineseocr_lite
cd psenet/pse
rm -rf pse.so
make
使用
如果上面编译没有红色报错,那么就可以使用了。
开放端口
使用之前请确保开启了外网访问你指定端口的权限。
测试能否运行
开放端口后就可以测试
cd chineseocr_lite ## 进入chineseocr目录
python app.py 8080 ## 8080端口号,可以设置任意端口,国内服务器请避开80 443 8080端口
此时访问 http://你的ip:8080/ocr 出现下列画面即可:
注册成为服务,长期运行
找到 python3 位置
which python3
记录上面的地址,待会会用到
记录程序目录
在chineseocr_lite 目录下执行
pwd
## 后面加上/app.py
测试一下能否运行:
/usr/local/bin/python3 /root/chineseocr_lite/app.py 8026
注册为服务
nano /etc/systemd/system/chineseocr_lite.service
粘贴如下内容,然后ctrl+o保存,ctrl+x退出:
[Unit]
Description=ChineseOCR Lite
After=network.target
[Service]
Type=simple
WorkingDirectory=/root/chineseocr_lite ## 改为你的程序目录
ExecStart=/usr/local/bin/python3 /root/chineseocr_lite/app.py 8026 # 修改为刚刚测试的代码
Restart=on-failure
[Install]
WantedBy=multi-user.target
保存后执行如下代码,查看运行状态:
systemctl start chineseocr_lite
systemctl status chineseocr_lite
systemctl enable chineseocr_lite
此时访问之前的地址,应该就可以启动了,同时这个服务也会开机启动。
配合nginx或者caddy使用
只需要将上面的
/usr/local/bin/python3 /root/chineseocr_lite/app.py 8026
## 改为
/usr/local/bin/python3 /root/chineseocr_lite/app.py 127.0.0.1:8026
然后在nginx或者caddy中代理为本地端口即可:
以caddy为例:
https://ocr.pakro.top {
gzip
tls 你的邮件地址
proxy / localhost:8026 {
websocket
header_upstream -Origin
}
}
然后访问 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 文件
找到错误代码行数,将
yield next(seq)
修改为:
try:
yield next(seq)
except StopIteration:
return
/usr/local/lib/python3.8/site-packages/web/debugerror.py:214 - execution of ‘Constant’ statements is denied
修改 chineseocr_lite 目录下的app.py 文件,添加如下两句
from web.template import ALLOWED_AST_NODES
ALLOWED_AST_NODES.append('Constant')
AttributeError: ‘StaticApp’ object has no attribute ‘directory’
修改 /usr/local/lib/python3.8/site-packages/web/httpserver.py (修改为你的版本,或者看错误信息,有给出文件位置)
找到
self.start_response = start_response
## 在下一行添加
self.directory = os.getcwd()
Segmentation fault
gcc版本过低的错误,升级gcc版本即可,具体请参考:升级gcc
注意事项
这个项目仍在开发中,有许多调试代码。建议不要将服务随意的暴露在公网中,或者不要传播,否则会有被入侵的风险。