INSTALL.txt 8.36 KB
#	OCR Server 1.0.1 - (c) Agencia Nacional de Telecomunicacoees
#
#	This script monitors a set of input directories for PDF files
#	once a new file is detected, it is processes through tesseract OCR
#	in order to generate a new file with a hidden searchable text layer
#
#	It may be distributed under the conditions of the LGPL v2.1 license.
#
#	Author: Guilherme Chehab 
#
#	Version History:
#	0.1	Initial single server version
#	0.2	Check if page already has the html hidden layer, if so, ignore it
#	0.3	Solved issues about various image enconding types
#	0.4	Added a postnormalization step to ensure all output pdf pages have
#		the same size and orientations as the original files
#	0.5	Used input file renaming as a way to sync multiple parallel instances,
#		that way, it is minimized the risk of same file being OCRed multiple times.
#	0.6	Added a default handler for unknown image encoding using jpeg encoding	
#	0.7	Solved an issue with files with more than 1000 pages
#	1.0	First release version
#	1.0.1	Solving error when file has no images
#
#	TODO: 	- Changes get_imgs and OCR processing to enable pages with more than one image -- it
#		would not work on previous versions that assumed #pages = #imgs. Version 1.1 counts them
#		diferently but does not treat it adequately
#
#	Check software requirements on the comments bellow
#
#	To configure input dirs change @BASE_DIRS and @SUB_DIRS variables
#
#
# O servidor OCR depende dos seguintes componentes:
# - Perl 5.10.1, com seguintes módulos:
#	- File::Find::Rule
#	- File::Basename
#	- File::Copy
#	- File::Path
#	- File::Touch
#	- Sys::Syslog
#	- Sys::Hostname
#	- IPC::Open3
#	- IO::Select
#	- POSIX
# - Tesseract-ocr 3.05, com dicionários inglês e português
# - Pdftk 2.02
# - Poppler-utils 0.42.0
# - Cpdf 2.1
# - ImageMagick 6.7.2-7
#	
# Na ausência deles na distribuição do sistema operacional, o uso de versões antigas desses componentes podem comprometer o correto funcionamento do sistema
# Dessa forma, pode ser necessário compilar os componentes faltantes, assim como as bibliotecas necessárias para o seu correto funcionamento.
# Esse arquivo contem informações quanto aos procedimentos para instalar e configurar o sistema pressupondo o pior caso, qual seja, a necessidade de compilação dos componentes.
#
## ATENÇÃO: se algum componente abaixo não estiver disponível no repositório padrão para o Linux utilizado, deve-se proceder com a compilação da versão mais recente do componente disponibilizado em outros repositórios para que seja instalado no Linux a ser utilizado.
#
# Configure o script, alterando as variáveis no arquivo '/usr/local/bin/ocr':
#
#	    @BASE_DIRS:	Lista de diretórios base para a busca de arquivos --> cada diretório base irá ter sua própria instância do script 
#	    @SUB_DIRS:		Subdiretórios de entrada, saída, backup do arquivos originais, temporário e de arquivos com erro
#	    $MAX_FILES:	Número máximo de arquivos a serem processados simultaneamente por diretório de entrada (default: 2)
#	    $MAX_PGS:		Número máximo de páginas que podem ser processadas simultanemante por arquivo de entrada (default: no. de CPUs)
#	 Essas variáveis controlam o número máximo de instâncias de processos simultâneas = Num. de diretorios X MAX_FILES X MAX_PGS.
#	 Recomenda-se que o equipamento tenha em torno de 1,5 GB de RAM para cada core de CPU de forma a evitar swap. Se isso não for possível, pode ser reduzido o número de processos ou arquivos simultâneos.
#	 A configuração do servidor pode ser dimensionada com base no tempo desejado para processamento de grandes arquivos (> 100 páginas). Cada página tem sua própria thread de processamento, até o limite de $MAX_PGS, cujo default é o no. de cores de CPU. Em média cada página demora em torno de 18 segundos em uma CPU Xeon E5 4670@2.6GHz. Assim, com 16 CPUs, o desempenho agregado é em torno de 1,2 segundos por página.
#
#	 Para operação multi instância, basta instalar quantos servidores forem necessários e eles podem ter acesso aos mesmos diretórios de entrada que podem ser compartilhamentos SAMBA/CIFS/Windows ou NFS.
#
#
# -----------------------  COMPILAÇÃO dos pré requisitos (obs.: os comandos de devem ser executados como root)
#
#
# Compilando os pré-requisitos: máquina de COMPILAÇÃO APENAS 
#
# RedHat 6.7:
yum -y install autoconf make gcc-java gcc gcc-c++ subversion pkg-config automake libtool yasm cmake git libgcj
yum -y install libtiff-devel libpng-devel openjpeg-devel libjpeg-turbo-devel giflib-devel libwebp-devel zlib-devel libicu-devel pango-devel cairo-devel fontconfig-devel gettext-devel
cd /tmp
wget http://www.itzgeek.com/msttcore-fonts-2.0-3.noarch.rpm
rpm -Uvh msttcore-fonts-2.0-3.noarch.rpm
rm -f msttcore-fonts-2.0-3.noarch.rpm

# Ubuntu 14.04 Server:
apt-get install build-essential cmake libtool yasm pkg-config subversion git libgcj14 
apt-get install libtiff-dev libpng-dev libopenjpeg-dev libjpeg8-dev libjpeg-turbo8-dev libjpeg-dev libgif-dev zlib1g-dev libicu-dev libpango1.0-dev libcairo2-dev libfontconfig1-dev libgettextpo-dev
apt-get install 
apt-get install ttf-mscorefonts-installer

# Ambas plataformas:
cd /usr/local/src

for i in \
	https://github.com/tesseract-ocr/langdata.git \
	https://github.com/DanBloomberg/leptonica.git \
	https://github.com/libav/libav.git  \
	https://github.com/tesseract-ocr/tessdata.git \
	https://github.com/tesseract-ocr/tesseract.git \
	git://git.freedesktop.org/git/poppler/poppler.git \
	git://git.freedesktop.org/git/poppler/test.git \
	https://github.com/Flameeyes/unpaper.git \
	https://github.com/ocaml/ocaml.git \
	https://gitlab.camlcity.org/gerd/lib-findlib.git \
	https://github.com/johnwhitington/camlpdf.git \
	https://github.com/johnwhitington/cpdf-source.git \
; do git clone $i; done

wget https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/pdftk-2.02-src.zip
unzip pdftk-2.02-src.zip
rm -f pdftk-2.02-src.zip

# Tesseract, versão 3.05-dev ou superior
# Bibliotecas para o Tesseract: Leptonica e Libav
cd leptonica && ./autobuild && ./configure && make -j 8 all install && cd ..

cd libav && ./configure --enable-sram && make -j8 all install && cd ..

# Tesseract
cd tesseract && ./autogen.sh && ./configure && make -j 8 all install && cd ..
cp -avR tessdata/* /usr/local/share/tessdata/

# cpdf, versão 2.1 ou superior
cd ocaml && ./configure && make world.opt && make install && cd ..
mkdir -p /usr/local/man/man5
cd lib-findlib  && ./configure && make all && make install && cd ..
cd camlpdf && sed -i.bak s/\(uint32\)/\(uint32_t\)/g flatestubs.c && make && make install && cd ..
cd cpdf-source && make all && make install && cp cpdf /usr/local/bin && cd ..

# pdftk, versão 2.02 ou superior
cd pdftk-2.02-dist/pdftk && make -f Makefile.Redhat all install && cd ../..

# poppler-utils, versão 0.42.0 ou superior
cd poppler && ./autogen.sh && LIBOPENJPEG_LIBS=-l/usr/local/lib/libopenjp2.so LIBOPENJPEG_CFLAGS=-I/usr/local/include ./configure --enable-libopenjpeg=openjpeg2 && make  all install && cd ..

# -----------------------  INSTALAÇÃO (obs.: os comandos de devem ser executados como root)

## Comandos adicionais para configuração do módulo:
	
# Criação do usuário
adduser ocr

# Copie os arquivos ocr ocr-init* para o /home/ocr e, conforme o sistema operacional
cp /home/ocr/ocr /usr/local/bin
cp /home/ocr/ocr-init-rh /etc/init.d/ocr (OU) 
cp /home/ocr/ocr-init-Ubuntu /etc/init/ocr

# Auto start (RedHat 6.7)
chkconfig --add ocr
chkconfig --level 2345 ocr on

# Auto start (Ubuntu 14.04)
update-rd.d ocr defaults

# Create pkg
cd /home/ocr
tar cvozf pkg-ocr.tgz /usr/local/bin /usr/local/lib* /usr/local/man/ /usr/local/sbin/ /usr/local/share/ /usr/local/etc /usr/local/include/ /home/ocr/ocr* /etc/init.d/ocr /etc/rc*.d/*ocr
su

# Copie o pacote para os outros servidores e extraia com:
cd /
tar xovzf pkg-ocr.tgz

# Instalando pré-requisitos RUNTIME em servidores adicionais

# Redhat 6.7
yum -y install perl-File-Find-Rule-Perl perl-File-Touch libtiff libpng openjpeg-libs libjpeg-turbo giflib zlib libicu pango cairo fontconfig ImageMagick gettext libwebp
yum -y install libtiff libpng openjpeg libjpeg-turbo giflib libwebp zlib libicu pango cairo fontconfig gettext 

# Ubuntu 14.04
apt-get install  libfile-find-rule-perl libfile-find-rule-perl-perl libtiff5 libpng12-0 libopenjpeg2 libjpeg-turbo8 libgif4 zlib1g libicu52 libpango1.0-0 libcairo2 fontconfig imagemagick gettext libwebp5 # libgcj14 
apt-get install libtiff5 libpng12-0 libopenjpeg2 libjpeg8 libjpeg-turbo8 libjpeg8 zlib1g libpango1.0-0 libcairo2 libfontconfig1 libgettextpo0

# Inicie o serviço com
service ocr start