sábado, 30 de maio de 2009

Orkut da sala em PEOO

Possível projeto de PEOO por mim, Jeff Safadão e Wayne.

Eu fico com a parte de expressões regulares (regexp), o Wayne com a parte de banco de dados (BD) e o Safadão com a interface com o usuário.

A gente vai falar com o professor sobre esse projeto, ainda mais porque ele contém várias partes (regexp, interface gráfica, acesso com direito a modificação a BD genérico xml, teoria dos grafos, AAA [Authentication, Authorization and Accounting])

Segue aí abaixo

ps.: "distância amíguica"-> distância em quantidade de amigos; é 0 pra
se mesmo e infinito pra quem num tem rede social compatível

Ela seria composta da seguinte maneira:
a- nela existiriam dois tipos de objetos: pessoas e mensagens
(possivelmente no futuro comunidade, mas não vêm ao caso)
b- o objeto pessoa teria os seguintes atributos:
--> um nickname/email como uma string (chave primária; deve ser
única para cada pessoa) (PRIVADO)
--> uma senha (extremamente PRIVADO)
--> um nome "normal" como uma string ASCII (chave secundária; pode
repetir com o de outra pessoa; nome normal como "Jefferson Quesado
Neto"; "Jefferson Rodrigo Safadao"; "Raul srto. Ue1ne")
--> uma lista de amigos (um vetor com apontadores de pessoas =p se
você quiser tirar a graça de procurar pelo amigo; um vetor com as
chaves primárias dos amigos =D se você quiser programar um BD mais
simples)
--> uma lista das mensagens escritas
--> uma lista das mensagens recebidas
c- o objeto pessoa poderia fazer as seguintes ações (ou "ter os
seguintes métodos", só que só mais pro final do curso de PEOO):
--> procurar por um nome em uma dada "distância amíguica" (aqui onde
entra regexp, só que só depois de uma teoria dos grafos fudida)
--> escrever uma mensagem (aqui entra um banco de dados mais fudido
do que se poderia imaginar)
--> deletar uma mensgem (banco de dados ainda mais escroto! atenção
que apenas o escritor ou o destinatário poderiam apagar mensagens)
--> pedir pra ser adicionado (o velho "me add aí, má!"; banco de
dados FUDEROSOOOOO)
--> aceitar ou recusar pedidos de adicionamento (alguém tá vendo BD
com brain fuck de novo?)
--> excluir a própria conta (oh my gosh! it's database brain rape)
--> convidar uma pessoa de fora (por isso o email; mas nosso
programa AINDA não vai ter a capacidade de mandar emails por questões
técnicas e têmpicas e ricárdicas)
--> mudar o nome comum (BD...)
--> mudar a senha (puts, se fudeu Raul!, tem muita coisa de BD)
d- o objeto mensagem não poderia fazer nada, mas teria os seguintes atributos:
--> o escritor (a chave primária do escritor)
--> o destinatário (a chave primária do destinatário)
--> corpo da mensagem (com limite de alguns caracteres, para evitar
que pessoas mal intencionadas ataquem o BD com overflood de
informações)
e- mais um detalhe do objeto mensagem:
==> ele deve ser identificado da seguinte maneira (ou
modo de construção da chave primária):
==> {nickname/email do
escritor}.{nickname/email do destinatário}.{um número com o "peso" da
string de mensagem}.{um número sequencial}
==> admitindo sistemas de nicks: se eu (jeffque)
mandar a mensagem "atchim" para o Safadão (saf_rodrigo), a chave
primária da mensagem começaria assim ("header" da mensagem):
"jeffque.saf_rodrigo.630"
o último item só seria definido depois de ver se
existisse alguma outra mensagem com esse header...
se existissem outras três mensagens com esse mesmo
header, essa mensagem teria a chave primária como sendo:
"jeffque.saf_rodrigo.630.0004"
ou algo assim
f- a pessoa teria que se logar para fazer essas coisas, aí entra a
parte de interface gráfica:
--> no começo, pediria login e senha (login, nesse caso, seria a
chave primária da pessoa)
--> após receber o login e a senha, entra em contato com o banco de
dados e pergunta se são compatíveis
--> se não são, volta pra tela de login e dá um alerta que não
acertou a senha ou que o login é incorreto
--> se acertou, começa a brincadeira:
==> abre a tela de apresentação, dizendo se e quais pessoas
pediram pra ser adicionadas
==> abre uma aba com os recados recebidos (tela base)
==> abre uma aba com a lista de amigos (tela base)
==> abre uma aba de pesquisa (tela base)
==> abre uma aba para visualizar o próprio perfil (tela base)
--> além da tela de apresentação, existem mais alguns tipos de tela:
==> tela de recados:
>>> mostra uma certa quantidade de recados
>>> dá opções pra ir pras mensagens mais antigas ou mais recentes
>>> se a pessoa que estiver acessando essa página for
escritor/destinatário da mensagem, mostra a opção "excluir"
>>> opção de enviar recado
=======++++=====
muito cuidado com isso, pois deve impedir
usuários maliciosos de sobrecarregarem o
BD com mensagens muito grandes!!
=======++++=====
==> tela de pessoa:
>>> aba para adicionar/excluir amigo (ou nada, caso seja a
própria pessoa vendo o próprio perfil)
>>> aba para acessar recados
>>> aba para acessar lista de amigas
==> tela de pesquisa:
>>> aba para definir a "distância amíguica" de pesquisa
>>> canto para colocar o nome de pesquisa
=======++++=====
nesse caso, esse nome de pesquisa
seria substituído por uma regexp de um outro
BD (o BD com as possíveis "miss-spelling" de nomes)

possivelmente, aceitar um matching parcial de regexp
com string de nome
=======++++=====
>>> se já fez a pesquisa, mostrar quais pessoas achou
(ordenando por grau de parentesco) como se contivesse uma "tela de
lista de amigos" abaixo da tela de pesquisa
==> tela de lista de amigos:
>>> uma simples listagem com os nomes (e hyperlinks pro
"perfil" delas, claro)

quinta-feira, 7 de maio de 2009

Biometria: Processamento de imagens capturadas em leitores de impressão digital

A impressão digital é composta de linhas formadas pelas elevações da pele. A comparação por impressão digital é um método utilizado a mais de mil anos como forma de identificação de usuários. É uma característica única entre os seres humanos, inclusive entre irmão gêmeos univitelinos. Formada ainda quando feto, a impressão digital acompanha a pessoa por toda a sua existência sem apresentar grandes mudanças. Extraindo os pontos característicos ou ponto de minúcias de uma impressão digital, um papiloscopista ou sistemas computadorizados podem identificar pessoas utilizando cálculos bastantes confiáveis. 
São vários os tipos de impressões digitais, abaixo algumas imagens de diferentes digitais: 


Grande parte dos algoritmos trabalham com o princípio de extração dos pontos de minúcias ou
 pontos característicos. Após a extração são calculados a relação entre as distâncias destes pontos, cada algoritmo possui a sua base de cálculo, seja por análise dos pontos entre si ou por
 agrupamentos de pontos para análise de semelhanças de triângulos com os ângulos internos. 



Na primeira fase, extrai-se a imagem do sensor como na imagem abaixo:

Aplicando a extração de filtro de gabor, a linha da impressão digital é realçada com a cor preta. 

Na próxima etapa a imagem já esta binarizada (branco e preto), as linhas foram reduzidas a um único pixel de largura. 

Agora ficou fácil detectar os pontos de minúcias. Fazendo um exame de cada pixel na imagem, se houver um pixel branco sem vizinhos significa que encontramos um ponto terminal. Caso um ponto branco possua 3 pontos vizinhos, significa que encontramos uma bifurcação. 

Veja o resultado abaixo: 


Agora o próximo passo a ser implementado em termos de desenvolvimento é a comparação dos pontos de minúcias para obter o índice de similaridade entre duas impressões digitais.