References:
http://stackoverflow.com/questions/33588262/tesseract-ocr-on-aws-lambda-via-virtualenv
-
Launch an Amazon Linux AMI instance
-
Connect to the instance and generate an AWS Lambda Package
# system libs
sudo yum -y update
sudo yum -y upgrade
sudo yum -y groupinstall "Development Tools"
# tesseract / leptonica / pillow dependencies
sudo yum -y install gcc gcc-c++ make autoconf aclocal automake libtool \
libjpeg-devel libpng-devel libtiff-devel zlib-devel \
libzip-devel freetype-devel lcms2-devel libwebp-devel \
tcl-devel tk-devel
# install leptonica
cd ~
mkdir leptonica
cd leptonica
wget http://www.leptonica.org/source/leptonica-1.74.1.tar.gz
tar -zxvf leptonica-*.tar.gz
cd leptonica-*
./configure
make
sudo make install
# install tesseract
cd ~
git clone --branch 4.00.00alpha https://github.com/tesseract-ocr/tesseract.git
cd tesseract
./autogen.sh
./configure --enable-debug
LDFLAGS="-L/usr/local/lib" CFLAGS="-I/usr/local/include" make
sudo make install
# create a python virtual env
virtualenv ~/tfenv
source ~/tfenv/bin/activate
# Install pillow
pip install pillow
# Install cython
pip install cython
# Install tesserocr
pip install tesserocr
# prepare the zip package
cd ~
mkdir lambda-tesseract
cd lambda-tesseract
cp /usr/local/bin/tesseract .
mkdir lib
cp /usr/local/lib/libtesseract.so.4 lib/
cp /usr/local/lib/liblept.so.5 lib/
cp /lib64/librt.so.1 lib/
cp /lib64/libz.so.1 lib/
cp /usr/lib64/libpng12.so.0 lib/
cp /usr/lib64/libjpeg.so.62 lib/
cp /usr/lib64/libtiff.so.5 lib/
cp /lib64/libpthread.so.0 lib/
cp /usr/lib64/libstdc++.so.6 lib/
cp /lib64/libm.so.6 lib/
cp /lib64/libgcc_s.so.1 lib/
cp /lib64/libc.so.6 lib/
cp /lib64/ld-linux-x86-64.so.2 lib/
cp /usr/lib64/libjbig.so.2.0 lib/
cp -r ~/tesseract/tessdata/ tessdata
cp -r ~/tfenv/lib/python2.7/site-packages/* .
cp -r ~/tfenv/lib64/python2.7/site-packages/* .
mkdir tessdata
wget https://github.com/tesseract-ocr/tessdata/raw/master/eng.traineddata -O tessdata/eng.traineddata
# Create lambda_function.py file (see example below)
# lambda_function.py
import tesserocr
import PIL.Image
import io
from base64 import b64decode
def lambda_handler(event, context):
binary = b64decode(event['image64'])
image = PIL.Image.open(io.BytesIO(binary))
text = tesserocr.image_to_text(image)
return {'text' : text}
# zip the package
cd ~
zip -r lambda-tesseract.zip lambda-tesseract --exclude *.pyc
- You may then copy the zip package to your computer and upload it to S3
scp -i key.pem ec2-user@AWS_EC2_INSTANCE_IP:~/lambda-tesseract.zip .
-
Use the zip url in S3 to configure AWS Lambda.
-
Create an environment variable with key "TESSDATA_PREFIX" and leave the value empty.
-
You can test the function with a test.json file like this:
{
"image64": "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\nFKUoP//Z\n"
}
It should print 1234567890.
Hey I was very tempted to try this one out but opted for this EC2 + Docker that generates zip files using shell scripts to compile the libraries and dependencies, over here. It's very straightforward and reproducible.