rhel6 无管理员权限,无网络,OCR开发环境配置

时间:2021-06-21 20:08:10

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"
  • 创建虚拟环境:

    • 用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 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

    • 如果加了--offlineconda还是提示现有的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

3. ctpn编译

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看看链接到哪里去了