Liberação de Acesso ao Restaurante Universitário

Para controlar o acesso das pessoas ao Restaurante Universitário (R.U.), foram instaladas catracas eletrônicas com o objetivo de registrar de forma on-line o acesso ao R.U. Para gerenciar a liberação/negação do giro da catraca fisicamente, foi desenvolvido um aplicativo desktop que libera o acesso aos usuários pagantes bem como para os discentes com bolsa auxílio alimentação ou residência.

Para o aplicativo desktop funcionar corretamente, deve-se instalar o mesmo na máquina do usuário que irá gerenciar o acesso das pessoas ao R.U bem como configurar corretamente a catraca (ver como configurar no tópico “Passos para instalação do sistema de Catraca/Digital”). O público que acessa o R.U. é bem diversificado, em geral é composto por:

O software que gerencia o controle de acesso ao R.U. pode liberar o acesso de duas maneiras:

  1. Automáticamente através da digital dos próprios alunos. Ou seja, o software verifica de forma on-line se o discente pode ter acesso a refeição daquele dia/horário em particular.
  2. Manualmente através de comando realizado pelo operador do sofware de acordo com o tipo de pessoa que está acessando o R.U naquele momento.

Descrição do Caso de Uso

Cadastro de Pessoas

Como foi descrito acima, esse caso de uso funciona basicamente fazendo autenticação de digitais. Obviamente é necessário ser realizado um cadastro de digitais entre a comunidade da universidade para que possa existir uma base de digitais. Para isso, foi criado um aplicativo que realiza essa função específica. Para mais detalhes acesse a especificação do aplicativo de Cadastro de Pessoas.

Estrutura de implementação

Para desenvolver esse caso de uso foi utilizado como principal ferramenta o Netbeans, que permitiu prototipar/gerar a interface gráfica de forma rápida. Os outros softwares e tecnologias utilizadas no desenvolvimento desse caso de uso estão detalhados abaixo (todos os SDKS estão disponíveis em \\10.3.128.50\Sistemas\Catraca):

Aplicando Licença do Software da Griaule

O software da Griaule por default é instalado com licença de 90 dias. Para aplicar a licença, pode usar o software Licence Manager 2008 que gerencia as licenças de forma gráfica no Windows. Ele gera um key de acordo com o PC e aplica a licença.

OBS: quando a licença é aplicado no PC, é gerado um arquivo GrFingerLicenseAgreement.txt. Porém, o software da Griaule não remove o GrFingerLicenseAgreement.txt antigo (que corresponde a versão trial de 90 dias). É necessário remover o arquivo GrFingerLicenseAgreement.txt antigo para que a licença passe a funcionar corretamente.

Reconhecimento da Digital

O reconhecimento de digital é realizado através do SDK da Griaule. Esse SDK possui muitas características, entre elas existe a identificação um-para-muitos ilimitada. Ou seja, uma digital capturada pode ser analisada com lista de outras digitais existentes.

Para reconhecimento da digital pela aplicação, o SKD trabalha seguindo o seguinte fluxo:

  1. Inicia capturando a imagem do leitor biométrico,
  2. É extraido um template dessa imagem,
  3. Esse template é utilizado para se comparar com algum outro template existente (no banco de dados, por exemplo) assim é possível verificar se a digital capturada pelo leitor bate com alguma outra existente.
  4. Esse fluxo é repetido enquanto a aplicação estiver funcionando.

A nível de código Java, para fazermos uma aplicação trabalhar capturando digitais através do leitor usando o SDK da Griaule, devemos implementar as interfaces:

Classe Descrição
IStatusEventListener Interface responsável por receber eventos do sensor de digital, ou seja, quando o usuário insere o dedo no dispositivo.
IImageEventListener Esta interface é responsável por receber receber as imagens adquiridas pelo sensor.
IFingerEventListener Esta é a interface responsável por receber eventos de status do sensor.

O JavaDoc completo está disponível no site da Grialue.

A nível de implementação, seria semelhante ao exemplo abaixo:

public class CapturaDigital implements IStatusEventListener, IImageEventListener, IFingerEventListener {

    public void onSensorPlug(String arg0) {
    }

    public void onSensorUnplug(String arg0) {
    }

    public void onImageAcquired(String arg0, FingerprintImage arg1) {
    }

    public void onFingerDown(String arg0) {
    }

    public void onFingerUp(String arg0) {
    }

}

Uma vez obtida a digital do sensor, é possivel comparar o que foi capturado pelo sensor com outras digitais existentes. O exemplo abaixo mostra como comparar uma digital extraída com uma lista de digitais armazenada em uma Collection.

    /**
     * Realiza a comparação da digital extraída com as digitais que estão na coleção
     * em memória
     *
     * @param digitalExtraidaSensor
     * @return
     * @throws Exception
     */
    public DiscenteDTO identify(byte[] digitalExtraidaSensor) throws Exception {

        DiscenteDTO discenteLocalizadoByDigital = null;
        try {
           MatchingContext fingerprintSDK = new MatchingContext();
        } catch (GrFingerJavaException e1) {
            throw new Exception(e1);
        }

        Template template = new Template(digitalExtraidaSensor);
        fingerprintSDK.prepareForIdentification(template);

        for ( DiscenteDTO discenteDTO : digitaisDiscentesTurmaAberta ) {
            for ( byte[] digital : discenteDTO.getDigitais() ) {

                Template referenceTemplate = new Template(digital);
                boolean matched = fingerprintSDK.identify(referenceTemplate);

                if (matched) {
                    discenteLocalizadoByDigital = discenteDTO;
                    break;
                }
            }
        }
        fingerprintSDK.destroy();
        return discenteLocalizadoByDigital;
    }

Esse fluxo pode ser analisado em mais detalhes no Diagrama de Sequencia abaixo:

Para as aplicações desenvolvidas em Java e para rodar no Windows com suporte ao Microsoft Fingerprint Reader, os seguintes arquivos devem ser distribuídos junto ao aplicativo:

Classes Módulo Desktop - Sistema do R.U.

Classe Descrição
default.EasyInner Classe fornecida pela TopData que possui uma lista de comandados pré-definidos que podem disparar eventos na catraca eletrônica
default.EasyInnerOnLine Essa classe implementa os comandos que serão enviados a catraca eletrônica. Os comandos que podem ser enviados são definidos na classe EasyInner
default.FormLiberacao Tela utilizada para acionar o giro da catraca. Tela utilizada pelo operador do software para liberar o acesso das pessoas sem precisar utilizada a digital
default.FormPrincipal Tela principal que exibe o discente identificado, os dias de alimentação que o mesmo tem direito, etc. Uma vez essa tela aberta automaticamente ela ativa o leitor de digital de forma a ler o dedo inserido.
default.Main Usado para startar a aplicação, abre o a tela de Login.
default.TelaLoginRU Primeira tela que é aberta solicitando os dados do usuário para abrir a tela principal do sistema.
default.TipoRefeicaoRU Classe que contém os tipos de refeição.
default.UsuarioLogado Usuário que representa localmente o usuário que está logado no aplivativo.
default.UtilDigital Classe utilitária que possui vários métodos “listeners”. Utilizada para interagir com o leitor de digital do sistema do R.U.
br.ufrn.sigaa.assistencia.remoto.DiasAlimentacaoDTO Classe DTO que possui o discente, os dias de alimentação permitidos, tipo de bolsa, etc.
br.ufrn.sigaa.assistencia.remoto.DiscenteAcessoDuplicadoRUException Classe de exceção que é disparada quando discente tenta fazer acesso inválido ao R.U.
br.ufrn.sigaa.assistencia.remoto.IdentificacaoController Interface que possui os métodos que serão implementados pela classe que fará a comunicação remota através do Spring Remote.
br.ufrn.sigaa.assistencia.remoto.PessoaDTO Classe DTO que representa uma pessoa.
br.ufrn.sigaa.assistencia.remoto.SistemasDelegate Classe delegate que possui os métodos fazem as chamada remotas ao servidor.
br.ufrn.sigaa.assistencia.remoto.applicationContext.xml Arquivo XML utilizado pelo Spring para fazer a comunicação remota entre Desktop-Servidor

Acionamento eletrônico da catraca

Para a liberação da catraca, é necessário usar os comandos fornecedios pela DLL do EasyInner. Como pode ser visto na classe abaixo existem quatro métodos relacionados a liberação da catraca:

public class EasyInner {
      ...

       public native int LiberarCatracaEntrada(int Inner);
	public native int LiberarCatracaSaida(int Inner);
	public native int LiberarCatracaEntradaInvertida(int Inner);
	public native int LiberarCatracaSaidaInvertida(int Inner);

       ...
}
Classe Descrição
LiberarCatracaEntrada Libera a entrada no sentido padrão configurado de fábrica.
LiberarCatracaSaida Libera a saída no sentido padrão configurado de fábrica.
LiberarCatracaEntradaInvertida Libera a entrada no sentido oposto padrão configurado de fábrica.
LiberarCatracaSaidaInvertida Libera a saída no sentido oposto padrão configurado de fábrica.

A nível de implementação, existe uma classe que “escuta” os eventos da catraca, como pode ser visto no código abaixo:

public class EasyInnerOnLine implements Runnable {
...

   case ESTADO_LIBERA_GIRO_CATRACA:
   Ret = Inner.LiberarCatracaEntrada(InnerTemp.Numero);

...
}

Instalação do ambiente de desenvolvimento para trabalhar com a catraca/módulo de desenvolvimento

Como deve ser feito para instalar o software que irá trabalhar com a catraca bem como com o reconhecimento da digital do aluno.

1 - Instalação dos softwares

2 - Configurar a Catraca

3 - Copiar todos os arquivos do SDK da Griaule (que foi instalada na máquina) da pasta 'bin' (…\Griaule\FingerPrint\bin) para a pasta 'system32' do windows (…\windows\system32)

4 - Copiar o arquivo '\Sistemas\Catraca\GRIAULE\GRIAULE\grfingerjava.jar' da máquina '\\10.3.128.50' para a pasta 'ext' do java (…\java\jre1.6.0-05\lib\ext).

5 - Copiar a pasta 'Sistemas\Catraca\AcessoRUDesktop' com o sistema desktop da máquina '\\10.3.128.50' para o computador que vai utiliza o software.

Instalação do Griaule no Linux 32 bits

O software da Griaule e o leitor Microsoft Fingerprint funciona em Linux 32 bits. Foi testado com sucesso na versão 9.10 do Ubuntu. Para instalar no Linux, os passos são:

  1. Instalar Griaule normalmente através do .jar (Fingerprint_SDK_Java_2009_Installer.jar)
  2. Instalar pacote scanbuttond (sudo aptitude install scanbuttond)
  3. Conectar o leitor Fingerprint na porta USB e localizar onde o dispositivo foi montado no sistema através do terminal usado “lsusb”
  4. Dá permissão leitura/escrita no dispositivo montado dentro de /dev/bus/usb.
    • Exemplo: se o dispositivo foi montado em /dev/bus/usb/007/003 deve-se fazer: chmod 777 003
  5. Startar o app Java (ChamadaBiometrica, por exemplo) para que o aplicativo carregue as libs do Griaule, dessa forma o leitor Fingerprint será ativado (ficando com a luz de captura acesa).

OBS: o app deve apontar para o diretório /bin do diretorio de instalação da Griaule (-Djava.library.path=“/home/seu_usuario/Griaule/Fingerprint SDK Java 2009/bin”), caso contrario lançará a exceção: “Exception in thread “AWT-EventQueue-0” java.lang.UnsatisfiedLinkError: no grfingerjava in java.library.path”

Telas do Sistema - Sistema do R.U.

Tela de login no sistema de RU

Tela principal

Tela de liberação da catraca

Principais Regras de Negócio

Classes Persistentes e Tabelas Envolvidas

Classe Tabela
Sem classe persistente. comum.public.identificacao_pessoa
Sem classe persistente. sigaa.sae.registro_acesso_ru
Sem classe persistente. sigaa.sae.tipo_liberacao_catraca

Obs.:

Plano de Teste

Sistema: Desktop - Liberação de acesso a catraca

Módulo: SAE

Link(s): executar o arquivo AcessoRU.jar

Usuário: joilsonabrantes

Papel que usuário deve ter: CONTROLADOR_ACESSO_RESTAURANTE

Cenários de Teste

Se o discente ainda não possuir, deve-se cadastra-lo através do aplicativo de Cadastro de Pessoas (é necessário ter Webcam e leitor de digital no PC).

Uma vez esse discente possuindo digital, deve-se solicitar uma Bolsa Auxílio de Alimentação ou Residência para o mesmo pelo SIGAA, através do portal do SAE.

É necessário que a Bolsa Auxílio esteja com status “DEFERIDA E CONTEMPLADA”, bem como ter os dias de alimentação que o discente irá usufruir desse benefício.

Dados para o Teste