rhel6 无管理员权限,无网络,OCR开发环境配置
还是银行ocr的任务,保密要求很高,没有网络,没有管理员权限,在redhat6.7系统上部署开发环境,包括python计算环境,opencv, tensorflow, ctpn, leptonica, tesseract。
1. 非管理员断网安装rpm包
$HOME = /home/cuizhou/usr 代替管理员时的/usr
把下载好的 .rpm包放到/home/cuizhou。可以在有网的机器上用
yum install --downloadonly <package-name> -d path_to_save
提前下载好。也可以在网上下包,redhat6 可用的 rpm 资源列表:http://mirrors.163.com/centos/6/os/x86_64/Packages/
解压:
rpm2cpio ***.rpm |cpio -idvm
默认安装到 $HOME下的$HOME/usr/local
中,也可以用 -relocate指定路径-
添加环境变量 ~/.bashrc:
export LD_LIBRARY_PATH = $HOME/usr/local/lib:$HOME/usr/local/lib64:$LD_LIBRARY_PATH
export PATH=$PATH:$HOME/usr/bin
2. Python 环境
断网就算了,还没root权限,pip不好使了,直接anaconda全家桶吧,顺便conda建立个虚拟环境,在虚拟环境里想配置啥配置啥,想装啥装啥,搞坏了就删了虚拟环境再建一个。conda这个东西不仅可以配python的包,rhel6上面编译环境版本太老,用conda来个大换血。
-
Anaconda 安装:
- 如果是python2,就用5.1版本及以上的anaconda,因为conda的版本是4.4,支持
conda install --download-only 下载离线包的命令
。 安装到 /home/cuizhou/anaconda2。 - 环境变量 ~/.bashrc:
export PATH="/home/cuizhou/anaconda2/bin:$PATH"
alias pythonana="$HOME/anaconda2/bin/python"
- 如果是python2,就用5.1版本及以上的anaconda,因为conda的版本是4.4,支持
-
创建虚拟环境:
- 用conda创建虚拟环境需要网络,离线创建的方法是克隆本地已有的环境:
conda env list
conda create -n ocrenv --clone /home/cuizhou/anaconda2
source activate ocrenv
deactivate orcenv
conda remove --prefix=path_to_env --all
- 虚拟环境默认路径:
../anaconda2/env/
- 用conda创建虚拟环境需要网络,离线创建的方法是克隆本地已有的环境:
-
conda离线安装:
conda install --download-only <package-name>
,会同时下载依赖包到默认路径/anaconda2/pkgs
中把包考到断网的电脑的
/anaconda/pkgs/
里,然后激活虚拟环境离线安装:
conda install --offline <package-name>
如果提示依赖包和已安装的版本冲突:
查询下包名和版本号:
conda list | grep <pkg-name>
删了它:
conda remove --offline <pkg-name>==version
- 如果加了
--offline
conda还是提示现有的channel里找不到可用的资源
试试
conda install --offline <pkg-name> --channel=file:///home/cuizhou/...
- 如果还是找不到,那就按照依赖关系一个一个来安装本地包
conda install /home/cuizhou/**.tar.gz
- Opencv, tensorflow 全都用conda安装解决,tensorflow会遇到依赖包版本冲突,依赖关系如下:
- backports
- pbr
- mock
- html5
- bleach
- Markdown
- protobuf
- tensorboard
backports.weakref: 1.0rc1-py27_0
libprotobuf: 3.5.1-h6f1eeef_0
markdown: 2.6.11-py27_0
mock: 2.0.0-py27h0c0c831_0
pbr: 3.1.1-py27hf64632f_0
protobuf: 3.5.1-py27hf484d3e_0
tensorflow: 1.3.0-0
tensorflow-base: 1.3.0-py27h0dbb4d0_1
tensorflow-tensorboard: 1.5.1-py27hf484d3e_0- 遇到import tensorflow:no such module named tensorflow,去 condo list|grep 上面的依赖包,看看那些没装,或者版本错了,保险一点,把依赖全卸了重装tf。
-
如果conda解决不了的包,想用pip:
- pip下载包的默认路径:
~/.cache/pip
- conda虚拟环境中已经有pip,先联网下载需要的安装包
pip search opencv
- 只下载不安装:
pip install <包名> -d <目录>
- pip9.0新的download命令
pip download -d <des dir> -b <build dir> --python-version
- pip下载包的默认路径:
3. ctpn编译
- cpu 编译cptn:https://github.com/eragonruan/text-detection-ctpn/issues/43
- 要注意在环境用加入numpy路径,然后运行python setup.py build:
export C_INCLUDE_PATH=/home/cuizhou1/anaconda2/lib/python2.7/site-packages/numpy/core/include
- cython版本要从0.27换到0.24
4. leptonica编译
cmake -D CMAKE_INSTALL_PREFIX=/home/cuizhou/usr/local ..
-
环境变量,给出
leptonic.pc
所在路径:export PKG_CONFIG_PATH=/home/cuizhou/usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
-
遇到的问题:
不支持 std c++ 11:rhel6 自带gcc版本太低,安装gcc 4.8.5
libstdc++.so.6找不到某版本的
CXXABI
或者GLIBC
:
去
/usr/lib64
或者/home/cuizhou/anaconda2/lib
或者刚才安装的gcc目录/usr/local/lib
下,找到/libstdc++.so.6
, 查看支持的版本:strings /usr/lib64/libstdc++.so.6 | grep GLIBC
strings /usr/lib64/libstdc++.so.6 | grep CXXABI
如果在虚拟环境中安装了gcc 4.8.5,那添加gcc环境变量:
export LD_LIBRARY_PATH=/home/cuizhou1/anaconda2/envs/ocr/lib:$LD_LIBRARY_PATH
- 虚拟环境中,tensorflow是使用anaconda自带的gcc的(~/.anaconda2/lib/libstdc++.so.6),编译ctpn也运行无错。为了编译leptonica,安装了 gcc4.8.5,此时import tensorflow 会找不到CXXABI1.3.9,因为tensorflow 此时用的是gcc2.8.5的libstdc++.so.6。
解决办法:在虚拟环*先安装gcc4.8.5,或者将gcc4.8.5安装到另一个虚拟环境v1中。在虚拟环境v2中编译ctpn时指定gcc:
export CC=~/anaconda2/envs/ocr/bin/gcc
export CXX=~/anaconda2/envs/ocr/bin/g++
5. tesseract 编译
- 安装 autoconf , libtool, autoconf-archive
- 安装 libpng, libjpeg, libtiff,这些库找不到的话,leptonica编译后会报 Not Found ,从源码安装指定路径编译,或者有权限可以yum安装devel版,带头文件,leptonica 如果找不到,就在CMakeLists中指定INCLUDE_PATH和LD_LIBRARY_PATH,还找不到就
ldd leptonic.so
看看链接到哪里去了