Produto: Webscan Relatório II Programas desenvolvidos, testados e documentados Sérgio Oliveira Campos Contrato N : 2008/000514
Sumário 1 Introdução 1 2 Bibliotecas Utilizadas 2 2.1 Reconhecimento de Texto - Tesseract-OCR........... 2 2.2 Exposição de métodos - Django................. 2 2.2.1 Processamento de requisições Web........... 2 2.3 Geração de PDF - Reportlab................... 2 2.4 Interface Web - JQuery...................... 3 3 Modularização 5 3.1 Lista de diretórios e arquivos................... 5 3.2 Módulo Daemon......................... 6 3.2.1 Descrição de arquivos................... 6 3.3 Módulo UI............................. 9 4 Considerações Finais 11 5 Glossário 12 Lista de Figuras 1 Mapeamento de URL's - urls.py................. 3 2 Action geradora de PDF's - pdf.py............... 4 3 Procura de scanners disponíveis................. 9 4 Digitalizando página em um novo documento.......... 10 5 Mensagem de sucesso e lista de páginas digitalizadas..... 10 Lista de Tabelas I
1 Introdução Na segunda fase do projeto webscan foi realizada a atividade de codicação. Para que esta etapa fosse realizada com sucesso algumas mudanças foram feitas na documentação apresentada no relatório I. Estas mudanças serão descritas neste relatório porém estarão mais detalhadas no relatório III. Neste documento serão apresentados e descritos os principais pontos necessários para o entendimento do código fonte do produto, tais como estrutura de diretórios e algoritmos utilizados. 1
2 Bibliotecas Utilizadas 2.1 Reconhecimento de Texto - Tesseract-OCR O reconhecimento de texto em imagens digitalizadas é parte fundamental do projeto webscan, pois somente com o uso desta tecnica é possível se gerar documentos com páginas indexáveis. Após pesquisar diversas bibliotecas (pesquisa apresentada no relatório I) a biblioteca escolhida foi a Tesseract-OCR 1, que atualmente possui código aberto e é mantida por um grande grupo. 2.2 Exposição de métodos - Django O framework Python adotado para a exposição HTTP da lib webscan foi Django, pois além proporcionar recursos para um desenvolvimento ágil de aplicações Web ele ainda facilita a organização do código fonte de aplicações deste tipo. A separação de interesses sugerida nesse framework possui uma nomenclatura sutilmente diferente da nomenclatura comumente adotada por vários frameworks de aplicações Web. Ao invés do conhecido MVC (Model View and Controller) utiliza-se MTV (Model Template and View) assim o elemento `View' do MVC chama-se `Template' no MTV e o `Controller' do MVC chama-se `View' no MTV, dos quais o webscan utiliza apenas o elemento `View'. Consulte a documentação ocial 2 para informações detalhadas sobre Django. 2.2.1 Processamento de requisições Web As requisições Web são mapeadas para uma 'View' através do arquivo urls.py. Nesse arquivo podemos congurar expressões regulares que identi- cam cada uma das urls e associam a uma determinada função de callback (View). O código abaixo é um trecho do arquivo urls.py do módulo server do webscan: 2.3 Geração de PDF - Reportlab A biblioteca utilizada para geração de PDF foi a reportlab. O código-fonte abaixo implementa a ação que gera um documento PDF apartir da imagem proviniente de um pipeline e seu respectivo texto OCR, se disponível. 1 http://code.google.com/p/tesseract-ocr 2 http://docs.djangoproject.com/en/dev/ 2
Figura 1: Mapeamento de URL's - urls.py 2.4 Interface Web - JQuery O módulo UI, o qual é implementada a interface do projeto, utiliza-se apenas de tecnologias web client-side tais como HTML, Javascript e CSS. A utilização destas tecnologias, teoricamente, viabilizam a execução deste artefato em qualquer plataforma que possua um navegador web compatível com elas, porém esbarrando no problema de compatibilidade e adoção dos padrões internacionais W3C e ECMA. Para que estes problemas fossem reduzidos a biblioteca JQuery 3 foi utilizada. Em seu núcleo, a JQuery, implementa wrappers para os diferentes métodos e detalhes implementados por cada navegador, cando assim responsável por garantir a compatibilidade do Javascript nos navegadores mais utilizados. 3 http://www.jquery.com 3
Figura 2: Action geradora de PDF's - pdf.py 4
3 Modularização 3.1 Lista de diretórios e arquivos webscan -- ui -- index.html -- jquery-1.2.6.js `-- scanner.js `-- daemon -- setup.py `-- webscan -- init.py -- lib -- init.py -- conf -- init.py `-- global_settings.py -- contrib -- init.py -- action -- init.py -- ocr.py `-- pdf.py `-- wrapper -- Sane.py `-- init.py `-- core -- init.py -- action.py -- driver_wrapper.py -- scanners -- init.py `-- scanners.py -- type.py `-- user.py `-- server -- init.py `-- django -- init.py -- example -- init.py -- manage.py -- settings.py `-- urls.py -- urls.py -- utils.py 5
`-- views -- init.py -- scanner.py `-- user.py 3.2 Módulo Daemon Este módulo é responsável pela interface com drivers dos scanners, execução de ações, escrita de arquivos em discos além de expor todos os métodos relevantes como webservices. Todos os webservices utilizados retornam JSON e estão preparados para serem executados através de chamadas cross-domain 4. 3.2.1 Descrição de arquivos Os arquivos init.py são inicializadores de pacotes padrões na linguagem python e por este motivo não serão detalhados neste documento. Maiores detalhes sobre o funcionamento de pacotes em python podem ser encontrados na documentação ocial da linguagem 5. setup.py Arquivo de instalação do projeto. Neste arquivo são definidos os metadados utilizados para a geração de pacotes e instalação do software. Este arquivo segue o padrão setuptools. webscan/ Diretório que contém todo o código-fonte do módulo daemon. Este diretório é utilizado apenas para manter separação entre os arquivos de instalação e dos arquivos fonte. webscan/lib/ Contém tudo o que for utilizado por servidores para a execução das tarefas de escaneamento e escrita em disco. webscan/lib/conf/ Contém o arquivo de configuração default. webscan/lib/conf/global_settings.py 4 http://en.wikipedia.org/wiki/cross_domain_solutions 5 http://docs.python.org/tutorial/modules.html#packages 6
Arquivo de configuração default. webscan/lib/contrib/ Diretório que pode vir a receber arquivos externos acopláveis ao sistema(como plugins). webscan/lib/contrib/action/ Contém as ações padrões que podem ser aplicadas em imagens sucessivamente. webscan/lib/contrib/action/ocr.py Ação que extrai conteúdo textual das imagens. webscan/lib/contrib/action/pdf.py Ação responsável pela geração de PDF's a partir de imagens. Pode ser utilizada em conjunto com a ação ocr para gerar documentos indexáveis. webscan/lib/contrib/wrapper/ Local onde ficam todos os wrappers para drivers e especificações de quando eles devem ser utilizados. webscan/lib/contrib/wrapper/sane.py Wrapper para os drivers sane. Utilizado em sistemas posix. webscan/lib/contrib/wrapper/twain.py Wrapper para os drivers Twain. Utilizado nas plataformas Windows. webscan/lib/core/ Núcleo do sistema responsável pelo processamento de ações, imagens, além de prover classes abstratas para criação de ações e wrappers. webscan/lib/core/action.py Instruções responsáveis pelo processamento de ações. 7
webscan/lib/core/driver_wrapper.py Classe abstrata para a construção de um wrapper. webscan/lib/core/type.py Estruturas de dados utilizadas no projeto. webscan/lib/core/user.py Rotinas criadas para tratar do espaço de usuário, incluindo grupos de imagens e escrita em disco. webscan/lib/core/scanners/ Implementa o singleton coleção de scanners. webscan/lib/core/scanners/scanners.py Funções utilizadas pela coleção de scanners. webscan/server/ Espaço reservado para implementação de métodos para a exposição da API, via HTTP. webscan/server/django/ Aplicação Django criada para expor os métodos do projeto via HTTP. webscan/server/django/urls.py Arquivo de mapeamento de URL's para funções (views). webscan/server/django/utils.py Funções utilizadas por mais de uma view. webscan/server/django/example/ Instância exemplo da aplicação Django. webscan/server/django/example/manage.py 8
Arquivo criado, automaticamente, ao se criar um projeto Django. webscan/server/django/example/settings.py Arquivo de configuração de um projeto Django. webscan/server/django/example/urls.py Arquivo base de mapeamento de urls. Default em projetos Django. webscan/server/django/views/ Métodos wrappers utilizados para chamar funções do webscan.lib e modificar as saídas para formatos esperados pelo Django. webscan/server/django/views/scanner.py Implementa os wrappers necessários à implementação, dos métodos do objeto scanner utilizando Django. webscan/server/django/views/user.py Implementa os wrappers das funções relacionadas diretamente ao usuários do sistema. 3.3 Módulo UI O módulo UI implementa a interface web utilizada para fazer chamadas assíncronas ao módulo daemon. Este módulo é composto apenas por arquivos Javascript e HTML e utiliza a biblioteca Jquery apresentada na seção 2. Segue abaixo algumas capturas de tela da interface desenvolvida. Figura 3: Procura de scanners disponíveis 9
Figura 4: Digitalizando página em um novo documento Figura 5: Mensagem de sucesso e lista de páginas digitalizadas 10
4 Considerações Finais Ao aliar as informações apresentadas neste documento, documentação interna (de código) e documentações ociais das bibliotecas de terceiros, utilizadas na implementação do webscan, futuros desenvolvedores têm as informações necessárias para dar continuidade e manutenção no projeto. O código fonte do produto, incluindo sua respectiva documentação interna, pode ser encontrado no CD que acompanha este relatório e também no repositório do projeto Interlegis: http://repositorio.interlegis.gov.br/digidoc/branches/1.0/. Apesar da versão 1.0 do projeto ter sido entregue o projeto terá continuidade como software livre e seu código-fonte atualizado poderá ser baixado através do repositório do Google Code 6 ou pelo link (svn:externals) presente no repositório interlegis: http://repositorio.interlegis.gov.br/digidoc/trunk/. 6 http://webscan.googlecode.com/trunk/ 11
5 Glossário UI: Interface Gráca (Inglês: User Interface). Wrapper: Design pattern utilizado para modicar a entrada ou saída de um método ou função. Web Service: Tecnica utilizada para promover a interoperabilidade entre aplicações utilizando uma rede. URL: Endereço de uma página web (Inglês: Uniform Resource Locator). PDF: Formato de documento portável (Inglês: Portable Document Format). CSS: Liguagem utilizada para geração de estilos em documentos HTML. W3C: Entidade responsável pela normatização de tecnologias web. ECMA: Organização de normatização responsável pela especicação do ECMA script. OCR: Reconhecimento optico de caracteres (Inglês: Optical Character Recognition. Daemon: Software executado de maneira oculta para o usuário. Twain: Biblioteca que gerência drivers de scanners em Windows. Sane: Biblioteca que gerência drivers de scanners em Linux. 12