Distância entre pontos em openCV

Baseado na geometria analítica com o plano cartesiano podemos estabelecer a distância entre os pontos A e B. Verificamos que a distância entre os pontos A e B é a hipotenusa do triângulo retângulo, que pode ser calculada aplicando o Teorema de Pitágoras.

Baseado na teoria de Pitágoras, a distância entre dois pontos é:Então, para calcularmos a ditância entre os prontos (1, 2) and (5, 7) devemos:

Abaixo as funções para retornar a distrancia entre dois pontos utilizando a strutura cvPoint da biblioteca opencv.

float icvDistanceL2_32s( CvPoint pt1, CvPoint pt2 )
{
 int dx = pt2.x - pt1.x;
 int dy = pt2.y - pt1.y;
 return cvSqrt( (float)(dx*dx + dy*dy));
}

float  icvDistanceL2_32f( CvPoint2D32f pt1, CvPoint2D32f pt2 )
{
 float dx = pt2.x - pt1.x;
 float dy = pt2.y - pt1.y;
 return cvSqrt( (float)(dx*dx + dy*dy));
}

Viva Pitágoras

Acessibilidade: eViacam disponível no openSUSE 11.3

Acessibilidade não é puro altruísmo, e sim preocupar-se com o próximo com inteligência e visão mercadológica. Neste documento disponível no Viva o Linux e na Wiki pt-opensuse.org, veremos como disponibilizar uma interface para interpretar os movimentos da face e convertê-los em movimentos e ações para o cursor do mouse com o pacote eViacam agora disponível no openSUSE.

Google anuncia chamadas telefônicas dentro do Gmail.

Não sou de replicar post, mas este eu não resisti… ”

O Google tem tornado o Gmail cada vez mais social. Primeiro adicionou a possibilidade de os usuários conversarem via texto (bate-papo) por dentro do próprio webmail. Depois veio a possibilidade, via Labs, de o usuário enviar SMS aos amigos sem sair do Gmail. Por último, a empresa permitiu, através de um plugin, que os usuários do serviço de e-mail pudessem conversar via voz e vídeo.

Mas a empresa não para de inovar e acaba de lançar, inicialmente aos usuários dos Estados Unidos, a possibilidade de efetuarem ligações telefônicas diretamente do Gmail.

O novo sistema, que exige a instalação de um plugin, funciona de maneira semelhante ao Skype e permite que os usuários do webmail efetuem ligações nacionais e internacionais a um custo muito baixo.

Para se ter uma idéia do valor, o minuto da ligação dos Estados Unidos para Alemanha, Chine e Japão não passa de US$ 0,02. Para o Brasil, o custo é de US$ 0,04 para telefones fixos, e de US$ 0,15 para telefones móveis. O Google promete ligações para os Estados Unidos e Canadá de graça até o final do ano.

Os usuários do Google Voice que efetuarem as chamadas a partir do Gmail serão identificados pelos seus respectivos números do serviço. Além disso, será possível, também, o recebimento de ligações do Google Voice diretamente no Gmail.

Inicialmente, a nova funcionalidade não estará disponível para o Google Apps.”

Fonte: http://googlediscovery.com

Atitude de um jedi.

Neste mundo proprietário, forte o lado negro da força é. Todo Jedi  da Ordem (openSUSE, Fedora, Ubuntu, Slackware e outros) devem carregar consigo sempre uma ferramenta para combater o lado sombrio da força.  Meu sabre de luz foi criado com o comando abaixo:

$ dd if=/path/to/iso/openSUSE-11.2-KDE4-LiveCD-i686.iso of=/dev/sdb  bs=4M;sync
 

Sincronismo em thread

Que vergonha… não criei sincronismo ao capturar o frame do buffer na biblioteca libhaircapture  (derivado da correria para entreta de um projeto, mas não justifica… ). Ao capturar a imagem, a falta de sincronimo pode gera um quadro com  metade do frame atual e a outra metade do frame anterior.

O erro foi constatado graças ao Stage (o Luiz Fernando) que trabalha na NETi, pois os seus testes exaustivos acabou demonstrando esta falha (foi mal…). Poderia implementar a técnica de semáforo, mas um simples mutex é o suficiente para sincronizar e resolver o problema. Para quem deseja fazer uma prova de conceito, abaixo um código básico.

#include <stdio.h>
#include <unistd.h>
#include <pthread.h>

pthread_mutex_t r3_mutex=PTHREAD_MUTEX_INITIALIZER;

void* print(void )
{
   pthread_mutex_lock(&r3_mutex);
   printf("Aguarando 10 segundos dentro thread. 2\n");
   sleep(10);
   pthread_mutex_unlock(&r3_mutex);
   printf("Thread finalizada.\n");
   pthread_exit(NULL);
}

int main (int argc, char** argv)
{
   pthread_t threads;

   pthread_create(&threads, NULL, (void *(*)(void *))print, NULL);
   printf("Aguarando 2 segundos (sleep fora da thread). \n");
   sleep(2);
   printf("Aguarando 10 segundos restante (sleep dentro da thread). \n");
   pthread_mutex_lock(&r3_mutex);
   printf("Realmente constatada, thread finalizada.\n");
   printf("Processando algo... \n");
   pthread_mutex_unlock(&r3_mutex);
   printf("Process main finalizado\n");

   return 0;
}

Guias rápidos e manuais para o openSUSE 11.3 (Português)

A equipe de tradução brasileira do openSUSE, está feliz em anunciar o lançamento da tradução da documentação do openSUSE 11.3 em pt_BR dos seguintes guias/manuais:

  • Guia Rápido do Novell AppArmor
  • Guia Rápido de Instalação
  • Guia Rápido do KDE
  • Guia Rápido do GNOME
  • Manual de Inicialização

Estes foram atualizados de suas respectivas versões 11.2 para 11.3.
Além disso estamos orgulhosos de incluir nesta lista a tradução do seguinte manual

  • Guia do Usuário GNOME

Com mais de 100 páginas dá uma boa visão da área de trabalho GNOME.

Todos os manuais/guias estão disponíveis em: http://code.google.com/p/opensuse-startup-pt-br/downloads/list

Agradecemos a todos que colaboraram na tradução, em especial a Ísis Binder por sua monstruosa colaboração.