5

我目前正在使用 Tika 从上传到我在 AWS Elastic Beanstalk 上运行的 Rails 应用程序(运行 Ruby 2.2 的 64 位 Amazon Linux 2016.03 v2.1.2)上的文件中提取文本。我也想索引扫描的图像,所以我需要安装 Tesseract。

我可以通过像这样从源代码安装它来让它工作,但它增加了 10 分钟的部署到新实例的时间。有没有更快的方法来做到这一点?

.ebextensions/02-tesseract.config

packages:
  yum:
    autoconf: []
    automake: []
    libtool: []
    libpng-devel: []
    libtiff-devel: []
    zlib-devel: []

container_commands:
  01-command:
    command: mkdir -p install
    cwd: /home/ec2-user
  02-command:
    command: cp .ebextensions/scripts/install_tesseract.sh /home/ec2-user/install/
  03-command:
    command: bash install/install_tesseract.sh
    cwd: /home/ec2-user

.ebextensions/scripts/install_tesseract.sh

#!/usr/bin/env bash

cd_to_install () {
  cd /home/ec2-user/install
}

cd_to () {
  cd /home/ec2-user/install/$1
}

if ! [ -x "$(command -v tesseract)" ]; then
  # Add `usr/local/bin` to PATH
  echo 'pathmunge /usr/local/bin' > /etc/profile.d/usr_local.sh
  chmod +x /etc/profile.d/usr_local.sh

  # Install leptonica
  cd_to_install
  wget http://www.leptonica.org/source/leptonica-1.73.tar.gz
  tar -zxvf leptonica-1.73.tar.gz
  cd_to leptonica-1.73
  ./configure
  make
  make install
  rm -rf /home/ec2-user/install/leptonica-1.73.tar.gz
  rm -rf /home/ec2-user/install/leptonica-1.73

  # Install tesseract ~ the jewel of Odin's treasure room
  cd_to_install
  wget https://github.com/tesseract-ocr/tesseract/archive/3.04.01.tar.gz
  tar -zxvf 3.04.01.tar.gz
  cd_to tesseract-3.04.01
  ./autogen.sh
  ./configure
  make
  make install
  ldconfig
  rm -rf /home/ec2-user/install/3.04.01.tar.gz
  rm -rf /home/ec2-user/install/tesseract-3.04.01

  # Install tessdata
  cd_to_install
  wget https://github.com/tesseract-ocr/tessdata/archive/3.04.00.tar.gz
  tar -zxvf 3.04.00.tar.gz
  cp /home/ec2-user/install/tessdata-3.04.00/eng.* /usr/local/share/tessdata/
  rm -rf /home/ec2-user/install/3.04.00.tar.gz
  rm -rf /home/ec2-user/install/tessdata-3.04.00
fi
4

1 回答 1

13

简短的回答

.ebextensions/02-tesseract.config

commands:
  01-libwebp:
    command: "yum --enablerepo=epel --disablerepo=amzn-main -y install libwebp"
  02-tesseract:
    command: "yum --enablerepo=epel -y install tesseract"

长答案

我不熟悉非 Ubuntu 包管理器或 ebextensions,所以经过一番挖掘,我发现在稳定的EPEL存储库中可以在 Amazon Linux 上安装预编译的二进制文件。

第一个障碍是弄清楚如何使用 EPEL 存储库。最简单的方法是使用命令enablerepo上的选项。yum

这让我们在这里:

yum --enablerepo=epel install tesseract

接下来,我必须解决这个依赖错误:

[root@ip-10-0-1-193 ec2-user]# yum install --enablerepo=epel tesseract
Loaded plugins: priorities, update-motd, upgrade-helper
951 packages excluded due to repository priority protections
Resolving Dependencies
--> Running transaction check
---> Package tesseract.x86_64 0:3.04.00-3.el6 will be installed
--> Processing Dependency: liblept.so.4()(64bit) for package: tesseract-3.04.00-3.el6.x86_64
--> Running transaction check
---> Package leptonica.x86_64 0:1.72-2.el6 will be installed
--> Processing Dependency: libwebp.so.5()(64bit) for package: leptonica-1.72-2.el6.x86_64
--> Finished Dependency Resolution
Error: Package: leptonica-1.72-2.el6.x86_64 (epel)
           Requires: libwebp.so.5()(64bit)
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

我在这里找到了解决方案

仅添加 epel 存储库并不能解决问题,因为 amzn-main 存储库中的软件包似乎推翻了 epel 存储库中的软件包。如果 amzn-main repo 中的 libwebp 包被排除在外,它应该可以工作

Tesseract 安装在amzn-mainrepo 中有一些依赖项。这就是为什么我首先libwebp使用--disablerepo=amzn-main.

yum --enablerepo=epel --disablerepo=amzn-main install libwebp
yum --enablerepo=epel install tesseract

最后,您可以使用以下选项在 Elastic Beanstalk 上安装 yum 包

.ebextensions/02-tesseract.config

commands:
  01-libwebp:
    command: "yum --enablerepo=epel --disablerepo=amzn-main -y install libwebp"
  02-tesseract:
    command: "yum --enablerepo=epel -y install tesseract"

幸运的是,这也是在 Elastic Beanstalk 上安装 Tesseract 的最简单方法!

于 2016-06-28T02:07:18.700 回答