<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Bit a Bit &#187; Computação</title>
	<atom:link href="http://www.bitabit.eng.br/categorias/academico/computacao-disciplinas/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.bitabit.eng.br</link>
	<description>O Blog da Engenharia de Computação da POLI-USP</description>
	<lastBuildDate>Wed, 11 Jan 2012 16:12:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1.3</generator>
		<item>
		<title>Fusion4D &#8211; Interface Natural e Imersiva para Manipulação de Objetos 3D</title>
		<link>http://www.bitabit.eng.br/2012/01/03/fusion4d/</link>
		<comments>http://www.bitabit.eng.br/2012/01/03/fusion4d/#comments</comments>
		<pubDate>Tue, 03 Jan 2012 12:07:19 +0000</pubDate>
		<dc:creator>Roberto Sonnino, Coop10</dc:creator>
				<category><![CDATA[Coop11]]></category>
		<category><![CDATA[Destaques]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[TCC]]></category>
		<category><![CDATA[Visão Computacional]]></category>
		<category><![CDATA[interface humano-computador]]></category>
		<category><![CDATA[interface multimodal]]></category>
		<category><![CDATA[interface natural]]></category>
		<category><![CDATA[kinect]]></category>
		<category><![CDATA[realidade aumentada]]></category>
		<category><![CDATA[realidade virtual]]></category>

		<guid isPermaLink="false">http://www.bitabit.eng.br/?p=2420</guid>
		<description><![CDATA[Fusion4D é uma interface inovadora que utiliza óculos 3D e o Kinect para permitir ao usuário interagir com objetos 3D como se estivessem realmente em suas mãos, podendo movê-los, girá-los, aumentá-los, explodi-los em detalhes e até mesmo vê-los como seriam no passado e no futuro. Assim, a interface transmite ao usuário a sensação de imersão total em uma realidade [...]]]></description>
			<content:encoded><![CDATA[<p>Fusion4D é uma interface inovadora que utiliza óculos 3D e o Kinect para permitir ao usuário interagir com objetos 3D como se estivessem realmente em suas mãos, podendo movê-los, girá-los, aumentá-los, explodi-los em detalhes e até mesmo vê-los como seriam no passado e no futuro. Assim, a interface transmite ao usuário a sensação de imersão total em uma realidade aumentada.</p>
<p>Para utilizá-la é simples: o usuário só precisa usar óculos 3D, comandos de voz e as mãos para manipular os objetos. Além disso, todo o sistema usa apenas dispositivos de baixo custo, como o Kinect, e não requer o uso de monitores especiais para a exibição da imagem 3D, ficando ao alcance de todos.</p>
<p><iframe width="560" height="315" src="http://www.youtube.com/embed/FjgHWp4PGew" frameborder="0" allowfullscreen></iframe></p>
<h2>Aplicações</h2>
<p>O Fusion4D foi desenvolvido como opção de manipulação direta para o atlas anatômico VIDA, do Laboratório de Tecnologias Interativas da Escola Politécnica (Interlab). Este atlas é destinado a aulas de anatomia que usam uma grande quantidade de modelos e órgãos reais, o que torna difícil e caro manter os laboratórios. O projeto representa uma alternativa para complementar o estudo através de peças anatômicas e livros dereferência. Existe ainda o potencial para seu uso fora do ambiente do laboratório, permitindo aos estudantes a visualização dos modelos 3D em casa ou em outras situações de ensino a distância.</p>
<p>Além da aplicação no projeto VIDA para ensino da medicina, o Fusion4D poderá ser usado para outras aplicações médicas e educacionais, bem como em jogos, publicidade, engenharia, navegação em ambientes virtuais ou telepresença, entre outras áreas.</p>
<h2>Como funciona?</h2>
<p><a href="http://www.interlab.pcs.poli.usp.br/fusion4d/index_pt.html"><img src="http://www.bitabit.eng.br/wp-content/uploads/2012/01/como_funciona.jpg" alt="Imagem ilustrativa do funcionamento do projeto Fusion4D" title="Como funciona o Fusion4D" width="500" height="300" class="alignnone size-full wp-image-2425" /></a></p>
<p>O Fusion4D utiliza imagens 3D anaglifas e um dispositivo Kinect para detecção do esqueleto e captura de voz do usuário.  O usuário interage com o sistema usando comandos de voz em inglês. Tais comandos permitem que se selecione o objeto a ser manipulado e a maneira de interagir com ele.</p>
<h3>Comandos</h3>
<p>O comando &#8220;<em>grab</em>&#8221; seleciona um objeto e permite movimentar, rotacionar ou ampliar o objeto com as mãos até que o objeto seja solto pelo comando &#8220;<em>release</em>&#8220;.</p>
<p>O comando &#8220;<em>explode</em>&#8221; permite observar o objeto 3D em detalhes; o comando &#8220;<em>show label</em>&#8220; mostra uma etiqueta descritiva do objeto manipulado, e o comando &#8220;<em>change model</em>&#8220; permite escolher outros modelos disponíveis no sistema.</p>
<p>Finalmente, o comando &#8220;<em>time</em>&#8221; permite ver como o objeto seria no passado e no futuro movimentando a linha do tempo com uma das mãos. Se o usuário precisar de ajuda sobre o sistema, o comando &#8220;<em>help</em>&#8221; mostra uma lista de comandos de voz.</p>
<p>Este projeto foi desenvolvido como trabalho de formatura pelos alunos Keila Keiko Matsumura e Roberto Sonnino, formandos da turma de 2011 do Curso Cooperativo de Engenharia de Computação, e orientado pelos professores Dr. Romero Tori (orientador) e Dr. Ricardo Nakamura (coorientador), membros do Laboratório de Tecnologias Interativas da Escola Politécnica (Interlab).</p>
<p>Para mais informações do projeto e dos resultados obtidos e trabalhos futuros, acesse o site do <a title="Fusion4D" href="http://www.interlab.pcs.poli.usp.br/fusion4d/index_pt.html" target="_blank">Fusion4D</a>.</p>
<img src="http://www.bitabit.eng.br/?ak_action=api_record_view&id=2420&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.bitabit.eng.br/2012/01/03/fusion4d/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Recomendação de páginas utilizando dados de amigos do Facebook</title>
		<link>http://www.bitabit.eng.br/2011/12/22/recomendacao-de-paginas-utilizando-dados-de-amigos-do-facebook/</link>
		<comments>http://www.bitabit.eng.br/2011/12/22/recomendacao-de-paginas-utilizando-dados-de-amigos-do-facebook/#comments</comments>
		<pubDate>Fri, 23 Dec 2011 01:11:33 +0000</pubDate>
		<dc:creator>Wilson Leão Neto</dc:creator>
				<category><![CDATA[Aprendizado de máquina]]></category>
		<category><![CDATA[aprendizado de máquina]]></category>
		<category><![CDATA[filtragem colaborativa]]></category>
		<category><![CDATA[sistema de recomendação]]></category>

		<guid isPermaLink="false">http://www.bitabit.eng.br/?p=2401</guid>
		<description><![CDATA[Disclaimer: Este artigo tem caráter introdutório. Assim, se você já tiver um conhecimento do assunto, poderá apenas escaneá-lo.  Opiniões do que seria interessante ter como prioridade para abordagem em próximos artigos ou comentários sobre qual conteúdo ficou dúbio ou falho serão bem-vindos. Você já ouviu falar de sistema de recomendação? Já teve a curiosidade de [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #000000"><strong>Disclaimer</strong></span><span style="color: #000000">: Este artigo tem caráter introdutório. Assim, se você já tiver um conhecimento do assunto, poderá apenas escaneá-lo.  Opiniões do que seria interessante ter como prioridade para abordagem em próximos artigos ou comentários sobre qual conteúdo ficou dúbio ou falho serão bem-vindos.</span></p>
<p><span style="color: #000000">Você já ouviu falar de sistema de recomendação? Já teve a curiosidade de saber como funciona</span><span style="color: #000000">? Pois, então, prossiga na leitura.  Em especial, abordarei o tema utilizando terminologias e dados da rede social Facebook. </span></p>
<h3>Introdução</h3>
<p><span style="color: #000000">Você já ouviu falar de sistema de recomendação? Já teve a curiosidade de saber como funciona? Pois, então, prossiga na leitura. Em especial, abordarei o tema utilizando terminologias e dados da rede social Facebook.</span></p>
<p><span style="color: #000000">Por quê? O Facebook é uma rede social gigantesca e, provavelmente, quase todos os seus amigos possuem uma conta lá.<br />
</span></p>
<p><span style="color: #000000">Alguns sistemas, por exemplo o <a href="http://www.giveemthis.com/">GiveEmThis.com</a></span><span style="color: #000000">, propõem a utilização dos dados dos seus amigos para auxiliar a tarefa da compra de presentes. Podemos também citar a <a href="http://www.amazon.com/">Amazon</a></span><span style="color: #000000">, a qual possui iniciativa que utiliza dados sociais do Facebook para personalização de recomendações (<a href="http://mashable.com/2010/07/27/amazon-facebook-recommendations/">notícia no mashable</a>)</span><span style="color: #000000">. Hoje em dia, fala-se muito sobre sistemas de recomendação e, acredito, que você não deva passar um dia sem receber algum tipo de informação de algum sistema do gênero.</span></p>
<p><span style="color: #000000">No decorrer do artigo, apresentarei, de maneira geral, os conceitos e formas para o entendimento e desenvolvimento de um simples sistema de recomendação de páginas </span>(<span style="color: #000000"><em>likes)</em></span><span style="color: #000000"> utilizando os dados dos seus amigos do Facebook. Por simples, quero dizer não serão abordadas formas de como lidar com o fato de os dados serem esparsos; nem com o fato de estarmos mexendo com um grafo, por exemplo, podemos coletar dados do amigo do amigo do amigo; nem mesmo com fato de estarmos em um contexto social (laços de amizade). Nos restringiremos, assim, aos nossos amigos imediatos, ok? Se você entendeu pouco ou nada deste último parágrafo, não tem problema. Se tiver curiosidade, mande um e-mail. Além do mais, neste primeiro artigo, não entrarei em detalhes de como coletar os dados.</span></p>
<div id="attachment_2413" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/12/demo.png"><img class="size-medium wp-image-2413" src="http://www.bitabit.eng.br/wp-content/uploads/2011/12/demo-300x240.png" alt="" width="300" height="240" /></a><p class="wp-caption-text">Recomendação de páginas (no exemplo, página da banda AC/DC) utilizando likes de amigos</p></div>
<p><span style="color: #000000">Para quem não conhece a mecânica do Facebook: através </span><span style="color: #000000">dele é possível gostar de páginas, por exemplo, um usuário pode gostar (</span><span style="color: #000000"><em>like</em></span><span style="color: #000000">) da página de uma banda de rock. Porém, não há a opção negativa, ou seja, não gostar de alguma página explicitamente (</span><span style="color: #000000"><em>dislike</em></span><span style="color: #000000">)</span><span style="color: #000000">. Estes </span><span style="color: #000000"><em>likes</em></span><span style="color: #000000"> criam links entre os usuários e as páginas e podem ser utilizados para tarefas interessantes (além da tratada aqui), por exemplo, para segmentação de mercado. Na nova versão do <a href="https://developers.facebook.com/docs/beta/">OpenGraph</a> (que atualmente está em Beta) do Facebook</span><span style="color: #000000"> , é possível executar “ações” que ligam  usuários às páginas (e outros objetos), por exemplo, a Ana </span><span style="color: #000000"><em>comprou</em></span><span style="color: #000000"> o CD do ACDC. Mas isso é tema para artigo futuro.</span></p>
<h3>Filtragem Colaborativa</h3>
<p><span style="color: #000000">Imagine, agora, uma situação em que você esteja conversando com um amigo. Você sabe que ele gosta de seriados, filmes e bandas com as quais você também </span><span style="color: #000000">se identifica, ou seja, os seus gostos são similares. Nesta conversa, ele recomenda um filme que ele gosta, mas que você não conhece. Assim, por conhecer os gostos dele, você fica curioso em assistir ao filme. Este processo se repete diariamente em nossas vidas. Agora imagine o caso em que, ao invés de um amigo, estamos lidando com um grupo de amigos, cujos gostos são conhecidos, alguns mais similares e outros menos. Como poderemos filtrar recomendações destes amigos? </span></p>
<p lang="pt-BR"><span style="color: #000000">De maneira geral, para um simples sistema de recomendação que lide com objetos e usuários, os laços de amizade não importam. Neste artigo, também iremos ignorar os laços de amizade. Mas adianto que podemos desenvolver sistemas que exploram estes laços para obtenção de melhores recomendações personalizadas.</span></p>
<p><span style="color: #000000">Podemos abordar o problema com uma técnica que é conhecida, na literatura, por filtragem colaborativa baseada em usuários (tradução livre do inglês </span><span style="color: #000000"><em>user-based collaborative filtering</em></span><span style="color: #000000">). O termo ilustra o fato de vários usuários estarem colaborando para que o sistema filtre uma recomendação para você. Neste caso, para filtrar recomendações, o sistema explora a similaridade entre usuários  utilizando as ligações entre estes e os objetos. Existe, também, o caso em que a filtragem é baseada nos objetos (</span><span style="color: #000000"><em>item-based collaborative filtering</em></span><span style="color: #000000">), no qual, o sistema explora a similaridade entre os objetos utilizando as ligações entre usuários e objetos. Detalhes, vantagens e desvantagens das duas abordagens podem ser explorados em outro artigo.</span></p>
<h3>Definição do problema e modelagem dos dados</h3>
<p><span style="color: #000000">Na definição do problema, temos como objetivo desenvolver um recomendador de gostos (possíveis novas ligações entre você e uma página recomendada) baseado em gostos de outros usuários (ligações já existentes). A partir do Facebook, podemos obter dados dos usuários (você e amigos), das páginas e das ligações entre eles.</span></p>
<p><span style="color: #000000">Esses dados podem ser representados em uma matriz, na qual as linhas representam os usuários e as colunas representam os objetos. Nas células da matriz, 1 indica que o usuário (linha) desta célula gosta</span><span style="color: #000000"><em> </em></span><span style="color: #000000">do objeto (coluna), e 0 indica que o usuário não conhece o objeto ou que não gosta deste (discutiremos isto novamente).</span></p>
<div id="attachment_2402" class="wp-caption aligncenter" style="width: 285px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/12/matrizDados.png"><img class="size-full wp-image-2402  " src="http://www.bitabit.eng.br/wp-content/uploads/2011/12/matrizDados.png" alt="" width="275" height="237" /></a><p class="wp-caption-text">Matriz de Dados - exemplo com 5 usuários e 5 páginas, os testes foram feitos com 5 usuários e 250 páginas</p></div>
<h3>Cálculo de similaridades</h3>
<p><span style="color: #000000">Agora, o recomendador deve quantificar as similaridades entre você e seus amigos. Por exemplo, imagine que você goste de</span><span style="color: #000000"> 5 páginas, sua amiga Ana goste de 10, que vocês gostem de 3 em comum (interseção) e que, juntando todas as páginas que você e Ana gostem, temos 12 páginas (união). Podemos expressar a similaridade entre vocês dois pela razão entre o total de páginas em comum pelo total de páginas juntas, ou seja, a quantificação da similaridade seria de 3/12 (0.25). Se você conhece notação de conjuntos, fica como exercício traduzir o para ela.</span></p>
<p lang="pt-BR"><span style="color: #000000">Existem diversas formas de calcular a similaridade entre duas entidades. No caso, o coeficiente descrito é conhecido por <a href="http://en.wikipedia.org/wiki/Jaccard_index">coeficiente de similaridade de Jaccard</a></span><span style="color: #000000">. Podemos, por exemplo, calcular esse coeficiente utilizando <a href="http://en.wikipedia.org/wiki/Euclidean_distance">distância euclidiana</a></span><span style="color: #000000">, <a href="http://en.wikipedia.org/wiki/Correlation_and_dependence">correlação de Pearson</a></span><span style="color: #000000">, entre outras formas.</span></p>
<h3>Gerando recomendações</h3>
<p lang="pt-BR"><span style="color: #000000">Agora que temos uma maneira de quantificar as similaridades entre você e os seus amigos. Podemos, por curiosidade, obter uma lista dos amigos do usuário Alvo (usuário de testes) ordenada pelo coeficiente de similaridade utilizado. O usuário criado para os testes deste artigo possui 4 amigos (visualizar matriz de dados).</span></p>
<p style="text-align: center">&nbsp;</p>
<div id="attachment_2404" class="wp-caption aligncenter" style="width: 279px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/12/usuarios.png"><img class="size-full wp-image-2404 " src="http://www.bitabit.eng.br/wp-content/uploads/2011/12/usuarios.png" alt="" width="269" height="157" /></a><p class="wp-caption-text">Lista de amigos ordenados pelo coeficiente de similaridade (neste caso, coeficiente de Jaccard)</p></div>
<p lang="pt-BR"><span style="color: #000000">Observe os valores dos coeficientes. O valor final está no invervalo [0,1]. Os valores são baixos pois o total de elementos do conjunto de gostos derivados da união de duas pessoas é muito grande. O total de páginas que gostamos pode ser pouco comparado ao total existente (a matriz resultante da representação dos dados é esparsa). Por exemplo, Bob pode gostar de 206 páginas, enquanto você gosta de apenas 6, todas em comum com Bob. Então, o valor da similaridade calculado será baixo, mas como estamos calculando os valores em relação a você, o valor será alto para você. Para Bob, talvez este valor seja baixo mesmo, ou seja, talvez exista uma amiga Carla que goste de 30 objetos em comum com Bob, enquanto você gosta de apenas 6 (repare que o apenas é relativo). O zero do coeficiente indica que não há gostos em comum.</span></p>
<p><span style="color: #000000">Podemos, de imediato, dar uma olhada nos gostos do amigo que ficou em primeiro lugar e escolher aleatoriamente algo que não conhecemos. Mas, o recomendador pode fazer melhor. O resultado final pode ser obtido utilizando-se uma <a href="http://en.wikipedia.org/wiki/Weighted_mean">média ponderada</a></span><span style="color: #000000"> das páginas que ainda não conhecemos utilizando os coeficientes de similaridade dos nossos amigos como pesos. Os valores obtidos podem ser interpretados como a probabilidade de nós gostarmos do objeto em questão.</span></p>
<div class="wp-caption aligncenter" style="width: 543px"><a href="http://www.codecogs.com/eqnedit.php?latex=P(Like(Alvo,JN)) = \frac{\sum_{amigos} Like(amigo,JN)*sim(amigo,Alvo) }{\sum_{amigos}sim(amigo,Alvo)}" target="_blank"><img src="http://latex.codecogs.com/gif.latex?P(Like(Alvo,JN)) = \frac{\sum_{amigos} Like(amigo,JN)*sim(amigo,Alvo) }{\sum_{amigos}sim(amigo,Alvo)}" alt="" width="533" height="51" /></a><p class="wp-caption-text">Exemplo de cálculo da média ponderada para o usuário Alvo e página JovemNerd. Notações: sim(W,Z) representa o coeficiente de similaridade entre W e Z; Like(X, Y), expressa se X gosta da página Y.</p></div>
<p><span style="color: #000000">Para efetuar a média ponderada, utilizaremos tantos os 0s quanto os 1s associados a uma página.  No </span><span style="color: #000000"><em>like </em></span><span style="color: #000000">do Facebook, a escala encontrada é limitada, 0 ou 1, e nela, o valor de 0 não significa o contrário do valor 1, ou seja, 1 significa que gostamos, mas 0 pode significar que não conhecemos ou que não gostamos da página. Mesmo assim, o recomendador pode utilizar os 0s para amortizar a recomendação final. </span></p>
<p lang="pt-BR"><span style="color: #000000">Imagine que sua amiga Ana goste de uma página, que a similaridade entre vocês seja 0,1, que seu amigo Bob não goste desta página e que a similaridade entre vocês seja 0,8. Se não levarmos em consideração o 0 do Bob na média ponderada, o recomendador retornará 1 para a página em questão. Na verdade, o recomendador retornará 1 para todas as página que algum amigo seu goste e que você não conheça, pense um pouco. Se levarmos em consideração o 0 do Bob, que é muito similar a você, o recomendador amortizará o valor e retornará 0,1/0,9, aproximadamente 0,11, um valor baixo que expressa o fato de que se a Ana gosta e vocês não são tão similares, talvez você não goste mesmo.</span></p>
<p lang="pt-BR"><span style="color: #000000">Para a conta final, o recomendador calcula os coeficientes de similaridade entre você e seus amigos e armazena os valores. Então, para todos os 0s da sua linha na matriz (páginas que você não conheça), o recomendador realiza a média ponderada dos seus amigos: soma as similaridades dos amigos que gostam da página, divide pela soma total das similaridades e armazena onde encontrou o 0. Ao final, teremos valores inferidos pelo recomendador que expressam, baseando-se nos dados dos seus amigos, a probabilidade de vocês gostar das páginas que estavam com 0s.</span></p>
<p style="text-align: center">&nbsp;</p>
<div id="attachment_2405" class="wp-caption aligncenter" style="width: 280px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/12/paginas.png"><img class="size-full wp-image-2405 " src="http://www.bitabit.eng.br/wp-content/uploads/2011/12/paginas.png" alt="" width="270" height="182" /></a><p class="wp-caption-text">As 5 primeiras páginas recomendadas. </p></div>
<div class="wp-caption aligncenter" style="width: 432px"><a href="http://www.codecogs.com/eqnedit.php?latex=P(Like(Alvo,JN)) = \frac{0,063 @plus; 0,031}{0,063 @plus; 0,031 @plus; 0,020}\approx 0,825" target="_blank"><img class=" " src="http://latex.codecogs.com/gif.latex?P(Like(Alvo,JN)) = \frac{0,063 + 0,031}{0,063 + 0,031 + 0,020}\approx 0,825" alt="" width="422" height="41" /></a><p class="wp-caption-text">Cálculo para a página JovemNerd</p></div>
<h3>Considerações</h3>
<p lang="pt-BR"><span style="color: #000000">A abordagem que utilizamos é simples o bastante para que possamos entender os conceitos envolvidos e o que acontece por debaixo dos panos. Por ser simples, não recomendo a implementação desta abordagem em produção. Ela possui alguns problemas. </span></p>
<p><span style="color: #000000">A abordagem não é escalável</span><span style="color: #000000">. Imagine que o seu sistema possua 100 usuários com 300 amigos cada, assim, o recomendador terá que fazer as contas explicadas usuário por usuário e terá que fazer novamente assim que houver alguma mudança.</span></p>
<p lang="pt-BR"><span style="color: #000000">O recomendador pode ser alvo fácil de ataques. Imagine que criemos um usuário David, fazemos amizade com o usuário que queremos atacar e fazemos com que David goste de todas as páginas que o nosso usuário alvo goste, assim, o coeficiente de similaridade será alto. Em seguida, David é programado para gostar de uma página que temos interesse que o usuário alvo goste. Pronto, o recomendador colocará esta página em uma posição alta na lista dada a similaridade entre os dois usuários.</span></p>
<p><span style="color: #000000">O que acontece com usuários que não gostaram de nada ainda? Todos os coeficientes de similaridades serão nulos pois não possuem gostos em comum com ninguém. Na literatura, este problema é conhecido como </span><span style="color: #000000"> </span><span style="color: #000000"> </span><span style="color: #000000"><em><a href="http://en.wikipedia.org/wiki/Cold_start">the cold start problem</a></em></span><span style="color: #000000">.</span></p>
<p lang="pt-BR"><span style="color: #000000">Além do mais, o recomendador em questão possui baixa serendipidade (do inglês </span><span style="color: #000080"><a href="http://en.wikipedia.org/wiki/Serendipity"><em>serendipity</em></a></span><span style="color: #000000">), talvez até nula, e, assim, caminharíamos aos poucos para um monoculturalismo. Nos próximos artigos poderemos entrar em detalhes de soluções que lidem com esses problemas.</span></p>
<img src="http://www.bitabit.eng.br/?ak_action=api_record_view&id=2401&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.bitabit.eng.br/2011/12/22/recomendacao-de-paginas-utilizando-dados-de-amigos-do-facebook/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Integrando paradigmas: união da visão de negócios com a visão de TI &#8211; uma metodologia aliando BPM com SOA</title>
		<link>http://www.bitabit.eng.br/2011/11/21/integrando-paradigmas-uniao-da-visao-de-negocios-com-a-visao-de-ti-uma-metodologia-aliando-bpm-com-soa/</link>
		<comments>http://www.bitabit.eng.br/2011/11/21/integrando-paradigmas-uniao-da-visao-de-negocios-com-a-visao-de-ti-uma-metodologia-aliando-bpm-com-soa/#comments</comments>
		<pubDate>Mon, 21 Nov 2011 16:43:35 +0000</pubDate>
		<dc:creator>vicentim.fernando</dc:creator>
				<category><![CDATA[Arquitetura de Computadores]]></category>
		<category><![CDATA[Coop11]]></category>
		<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[TCC]]></category>
		<category><![CDATA[Aris]]></category>
		<category><![CDATA[BPM]]></category>
		<category><![CDATA[BPMN]]></category>
		<category><![CDATA[EPC]]></category>
		<category><![CDATA[soa]]></category>
		<category><![CDATA[webMethods]]></category>

		<guid isPermaLink="false">http://www.bitabit.eng.br/?p=2374</guid>
		<description><![CDATA[Este post descreve o projeto de formatura desenvolvido pelos alunos Diego Francisco Billerbeck, Fernando Picelli Vicentim e Thiago Erik Petersen,  alunos da turma de 2011 do Curso Cooperativo de Engenharia de Computação, e orientado pelo Prof. Dr. Jorge Luis Risco Becerra. Tema: Metodologia de desenvolvimento de sistemas baseado nos conceitos do gerenciamento dos processos do [...]]]></description>
			<content:encoded><![CDATA[<div><em>Este post descreve o projeto de formatura desenvolvido pelos alunos Diego Francisco Billerbeck, Fernando Picelli Vicentim e Thiago Erik Petersen,  alunos da turma de 2011 do Curso Cooperativo de Engenharia de Computação, e orientado pelo Prof. Dr. Jorge Luis Risco Becerra.</em></div>
<div><em> </em></div>
<div><strong><em>Tema: Metodologia de desenvolvimento de sistemas baseado nos conceitos do gerenciamento dos processos do negócio e na arquitetura SOA</em></strong></div>
<h2></h2>
<h2>Introdução</h2>
<div>Hoje em dia, um dos maiores problemas enfrentados pelas empresas é a dificuldade de adequar os sistemas de TI às atividades do negócio (processos), de forma que os resultados obtidos com essa união muitas vezes não atendem as metas corporativas e, muito menos, o retorno sobre o investimento (ROI) esperado. Pensando nisso, o grupo desenvolveu uma metodologia baseada na integração entre Gerenciamento de processos de negócios – BPM (Business Process Management) – e Arquitetura Orientada aos Serviços – SOA (Service Oriented Architecture) – que busca atender as necessidades do negócio, altamente dinâmicas, com uma plataforma de TI altamente flexível e reutilizável e aplicou essa metodologia em um sistema para lançamentos de celulares – o <em>SmartReleasing</em>.</div>
<div id="attachment_2375" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/11/SmartReleasing.png"><img class="size-medium wp-image-2375" src="http://www.bitabit.eng.br/wp-content/uploads/2011/11/SmartReleasing-300x155.png" alt="" width="300" height="155" /></a><p class="wp-caption-text">Logo do Sistema</p></div>
<h2>Conceitos:</h2>
<ul>
<li>
<h3>Business Process Management (BPM)</h3>
</li>
</ul>
<p>BPM é uma prática de desenvolvimento, execução, análise de desempenho e simulação de Processos de Negócios para trabalhar no na continua otimização e ciclos de vida desses processos.</p>
<ul>
<li>
<h3>Service-Oriented Architecture (SOA)</h3>
</li>
</ul>
<p>Uma prática de desenvolvimento de software que emprega disciplinas e linguagens de modelagem para fornecer soluções táticas e estratégicas aos problemas das empresas. Ela defende uma visão total da analise, desenho e arquitetura de todas as entidades organizacionais do software, concebendo-as como recursos de serviços-orientados, isto é, serviços.</p>
<h3 style="text-align: left;">
<div id="attachment_2384" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/11/BPM_SOA1.png"><img class="size-medium wp-image-2384" src="http://www.bitabit.eng.br/wp-content/uploads/2011/11/BPM_SOA1-300x256.png" alt="" width="300" height="256" /></a><p class="wp-caption-text">Exemplo de Processos Aliados a Serviços</p></div></h3>
<ul>
<li>
<h3 style="text-align: left;">Processo de Lançamento de Celulares:</h3>
</li>
</ul>
<div style="text-align: left;">O processo de lançamento de celulares em operadoras é o representante ideal de um processo de negócio altamente dinâmico e complexo, pois envolve todos os departamentos, lida com dispositivos tecnológicos inovadores e tem curto ciclo de vida (aproximadamente 3 meses).<br />
Assim uma solução ágil, eficiente e flexível é fundamental devido ao alto risco do investimento uma vez que um mínimo atraso acarreta em grandes perdas de parcelas de mercado.</div>
<h2 style="text-align: left;">Metodologia</h2>
<div style="text-align: left;">A Metodologia desenvolvida pode ser dividida em 5 grandes etapas: Estudo do Processo; Concepção do Projeto de Software; Implementação do Projeto; Testes e Análises de Performance e Monitoramento e Manutenção do Processo.</div>
<ul>
<li>
<h3 style="text-align: left;">Estudo do Processo</h3>
</li>
</ul>
<div style="text-align: left;">O estudo do Processo inicia com a modelagem As-Is, ou seja, a modelagem do processo como ele é atualmente. A modelagem pode ser feite de diversas maneiras e utilizando-se diversas linguagens como EPC, BPEL, BPMN. No caso dessa metodologia foram utilizadas as linguagens EPC e BPMN. Depois de modelado, passa-se por uma fase de Análise e Simulação com o objetivo de otimizá-lo e finalmente defini-lo formalmente pela modelagem To-Be, ou seja, a modelagem do processo a ser implementado.</div>
<div style="text-align: left;">
<p><div id="attachment_2377" class="wp-caption aligncenter" style="width: 232px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/11/EPC.png"><img class="size-medium wp-image-2377" src="http://www.bitabit.eng.br/wp-content/uploads/2011/11/EPC-222x300.png" alt="" width="222" height="300" /></a><p class="wp-caption-text">Exemplo de Processo Modelado em Linguagem EPC</p></div>
</div>
<ul>
<li>
<h3 style="text-align: left;">Concepção do Projeto de Software</h3>
</li>
</ul>
<div style="text-align: left;">A etapa de concepção do projeto de software parte do modelo do processo e busca identificar os Serviços a serem criados, conceber a Interface com o  usuário composta pelas telas (portlets), planejar o Gerenciamento de Dados que lida com os Bancos de Dados desse e de outros sistemas, tudo isso focando em uma Arquitetura flexível e reutilizável e na Integração dos Sistemas presentes na organização.</div>
<ul>
<li>
<h3 style="text-align: left;">Implementação do Projeto</h3>
</li>
</ul>
<div style="text-align: left;">A implementação do projeto foi realizada com o auxilio da ferramenta webMethods, fornecida pela empresa parceira ao projeto Software <sup>AG</sup>. Nela foram implementados os serviços, as telas e as relações destes com o processo em questão, o de lançamento de celulares.</div>
<div style="text-align: left;">
<div id="attachment_2385" class="wp-caption aligncenter" style="width: 981px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/11/webMethods1.png"><img class="size-full wp-image-2385" src="http://www.bitabit.eng.br/wp-content/uploads/2011/11/webMethods1.png" alt="" width="971" height="530" /></a><p class="wp-caption-text">Implementação com a ferramenta webMethods</p></div>
</div>
<ul>
<li>
<h3 style="text-align: left;">Testes e Análise de Performance</h3>
</li>
</ul>
<div style="text-align: left;">Uma vez o sistema implementado, começa a etapa e testes e análises de desempenho para verificar não somente o bom funcionamento do mesmo como também se as vantagens buscadas na modelagem do processo To-Be foram atendidas com essa nova solução em comparação ao processo anterior As-Is.</div>
<ul>
<li>
<h3 style="text-align: left;">Monitoramento e Manutenção do Processo</h3>
</li>
</ul>
<div style="text-align: left;">A última etapa envolve o monitoramento do Processo através de indicadores de performance (KPIs) bem definidos e a manutenção do mesmo toda vez que novos requisitos de negócios forem surgindo e alterações no sistema e tornem necessárias.</div>
<div style="text-align: left;">
<div class="mceTemp mceIEcenter">
<div id="attachment_2386" class="wp-caption aligncenter" style="width: 957px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/11/Dashboard2.png"><img class="size-full wp-image-2386" src="http://www.bitabit.eng.br/wp-content/uploads/2011/11/Dashboard2.png" alt="" width="947" height="446" /></a><p class="wp-caption-text">Dashboard de Monitoramento do Processo</p></div>
</div>
</div>
<h2 style="text-align: left;">Resultados Esperados</h2>
<div style="text-align: left;">A partir da analise do desempenho e metodologia de implementação  estimamos que o sistema <em>SmartReleasing</em> permita não somente uma execução  rápida e eficiente do processo, como também fornece visibilidade para  identificar gargalos e pontos críticos do processo. Em paralelo, a arquitetura  de TI flexível permite sua manutenção e adaptação a medida que novas  necessidades de negócios surgem.</div>
<h2 style="text-align: left;">Parcerias</h2>
<div style="text-align: left;">Foram utilizadas ferramentas de BPM e SOA do Software <sup>AG</sup>,  uma das empresas líderes do segmento segundo pesquisas dos grupos Garner e  Forres ter, que ofereceu apoio ao projeto com software e materiais de  treinamento gratuitos.</div>
<div style="text-align: left;">O projeto foi desenvolvido no Laboratório de Fábrica de Software do LTS –  PCS – POLI.</div>
<div style="text-align: left;">
<div id="attachment_2381" class="wp-caption aligncenter" style="width: 310px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/11/Parceiros.png"><img class="size-medium wp-image-2381" src="http://www.bitabit.eng.br/wp-content/uploads/2011/11/Parceiros-300x61.png" alt="" width="300" height="61" /></a><p class="wp-caption-text">Parceiros</p></div>
</div>
<img src="http://www.bitabit.eng.br/?ak_action=api_record_view&id=2374&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.bitabit.eng.br/2011/11/21/integrando-paradigmas-uniao-da-visao-de-negocios-com-a-visao-de-ti-uma-metodologia-aliando-bpm-com-soa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SENSUS: Reconhecedor Automático de Expressões Faciais para Publicidade e Propaganda</title>
		<link>http://www.bitabit.eng.br/2011/11/18/sensus-reconhecedor-automatico-de-expressoes-faciais-para-publicidade-e-propaganda/</link>
		<comments>http://www.bitabit.eng.br/2011/11/18/sensus-reconhecedor-automatico-de-expressoes-faciais-para-publicidade-e-propaganda/#comments</comments>
		<pubDate>Fri, 18 Nov 2011 18:48:43 +0000</pubDate>
		<dc:creator>Carla Guillen Gomes</dc:creator>
				<category><![CDATA[Coop11]]></category>
		<category><![CDATA[TCC]]></category>
		<category><![CDATA[Visão Computacional]]></category>
		<category><![CDATA[computer vision]]></category>
		<category><![CDATA[tcc]]></category>
		<category><![CDATA[visão computacional]]></category>

		<guid isPermaLink="false">http://www.bitabit.eng.br/?p=2342</guid>
		<description><![CDATA[O sistema Sensus utiliza técnicas e algoritmos de visão computacional com o objetivo de reconhecer automaticamente expressões faciais e classificá-las em emoções. O cenário vislumbrado para a aplicação publicitária é o de uma vitrine de shopping, na qual as reações expressas pelas características faciais dos passantes são registradas e avaliadas. A partir desta análise, é [...]]]></description>
			<content:encoded><![CDATA[<p>O sistema Sensus utiliza técnicas e algoritmos de visão computacional com o objetivo de reconhecer automaticamente expressões faciais e classificá-las em emoções.</p>
<p>O cenário vislumbrado para a aplicação publicitária é o de uma vitrine de shopping, na qual as reações expressas pelas características faciais dos passantes são registradas e avaliadas. A partir desta análise, é possível verificar como o design da vitrine e a maneira de exposição das mercadorias afetam as reações dos consumidores, tanto positivamente como negativamente. Constituindo assim uma maneira de se avaliar e comparar os impactos alcançados com diferentes estratégias.</p>
<p><img class="alignright size-medium wp-image-2347" style="border-style: initial; border-color: initial;" src="http://www.bitabit.eng.br/wp-content/uploads/2011/11/sensus_nojo1-300x296.png" alt="" width="240" height="237" /></p>
<p style="text-align: left;">O sistema realiza a aq<span style="text-align: -webkit-auto;">uisição e processamento de uma sequência de imagens obtidas através de uma webcam e possibilita, através da produção de gráficos, a exibição de informações relevantes a um usuário da área de publicidade e propaganda que deseje medir a eficácia de uma campanha publicitária.</span></p>
<div>
<p>O reconhecimento consiste em 3 etapas principais. A primeira delas é a <strong>detecção de um rosto</strong> em uma imagem. Esta etapa é feita através do Algoritmo de Detecção Facial de Viola-Jones, que foi explicada <a href="http://www.bitabit.eng.br/2011/02/21/como-detectar-faces-em-videos/">neste</a> post do Filipe Campos.</p>
<p>A segunda etapa realiza a <strong>extração e codificação</strong> das características faciais. Nesta etapa é utilizado o método baseado em texturas, denominado LBP (local binary pattern) em regiões de interesse da face (região compreendida pelos olhos e sobrancelhas e a região da boca).</p>
<p>A terceira e última etapa consiste na <strong>classificação</strong> das expressões nas diferentes categorias existentes, no sistema é utilizada uma técnica de aprendizado de máquina, a SVM (support vector machine).</p>
<p>Para a geração de relatórios contendo gráficos foi desenvolvido um módulo utilizando a linguagem Python com o framework Django, junto com bibliotecas de JavaScript.</p>
<p><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/11/sensus_grafico.png"><img class="aligncenter size-full wp-image-2345" src="http://www.bitabit.eng.br/wp-content/uploads/2011/11/sensus_grafico.png" alt="" width="640" height="327" /></a></p>
<p>As emoções reconhecidas pelo sistema são: Felicidade, Tristeza, Surpresa e Nojo, além da expressão neutra.</p>
<p>O projeto foi desenvolvido pelos alunos Bruno Pezzolo dos Santos, Carla Guillen Gomes e Guilherme Melo Prestes Campos, sob a orientação da <strong>Profa. Dra. Anna Helena Reali Costa</strong>.</p>
</div>
<img src="http://www.bitabit.eng.br/?ak_action=api_record_view&id=2342&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.bitabit.eng.br/2011/11/18/sensus-reconhecedor-automatico-de-expressoes-faciais-para-publicidade-e-propaganda/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Dennis Ritchie, 1941 &#8211; 2011</title>
		<link>http://www.bitabit.eng.br/2011/10/13/dennisritchie/</link>
		<comments>http://www.bitabit.eng.br/2011/10/13/dennisritchie/#comments</comments>
		<pubDate>Thu, 13 Oct 2011 11:44:46 +0000</pubDate>
		<dc:creator>Lucas &#34;Sugis&#34; Lago, Comp09</dc:creator>
				<category><![CDATA[Acadêmico]]></category>
		<category><![CDATA[Computação]]></category>
		<category><![CDATA[Sem9]]></category>
		<category><![CDATA[Sistemas Operacionais]]></category>

		<guid isPermaLink="false">http://www.bitabit.eng.br/?p=2303</guid>
		<description><![CDATA[Mês triste esse outubro de 2011 hein? Dennis Ritchie é um pouco (ha-ha) menos conhecido que o Steve Jobs, mas merece uma página de destaque tão grande quanto Steve. Ritchie é reconhecido por duas grandes criações, que vivem até hoje e revolucionaram a computação. A linguagem de programação C e o sistema operacional UNIX. Vencedor [...]]]></description>
			<content:encoded><![CDATA[<p>Mês triste esse outubro de 2011 hein?</p>
<p>Dennis Ritchie é um pouco (ha-ha) menos conhecido que o Steve Jobs, mas merece uma página de destaque tão grande quanto Steve.</p>
<p> Ritchie é reconhecido por duas grandes criações, que vivem até hoje e revolucionaram a computação. A linguagem de programação C e o sistema operacional UNIX.</p>
<p>Vencedor do prêmio Turing em 1983 pelo seu trabalho com o UNIX. Sistema esse que continua sendo base para uma parte dos sistemas operacionais utilizados nos dias de hoje ( incluindo o MacOS do outro homenageado do mês ).</p>
<p>Tudo que posso dizer é que ele mudou a computação e agradecer por deixar um legado tão importante!</p>
<p>Valeu Ritchie! Break;</p>
<p style="padding-left: 30px;">&nbsp;</p>
<img src="http://www.bitabit.eng.br/?ak_action=api_record_view&id=2303&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.bitabit.eng.br/2011/10/13/dennisritchie/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Os processos matam a paixão do desenvolvedor</title>
		<link>http://www.bitabit.eng.br/2011/05/13/processos-matam-a-paixao/</link>
		<comments>http://www.bitabit.eng.br/2011/05/13/processos-matam-a-paixao/#comments</comments>
		<pubDate>Fri, 13 May 2011 13:52:51 +0000</pubDate>
		<dc:creator>Lucas &#34;Sugis&#34; Lago, Comp09</dc:creator>
				<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[Notícias]]></category>
		<category><![CDATA[Outros]]></category>

		<guid isPermaLink="false">http://www.bitabit.eng.br/?p=2212</guid>
		<description><![CDATA[Melhores práticas parecem boas quando analisadas isoladamente, mas elas podem sugar a vida dos desenvolvedores. Outro dia, no almoço, eu tive uma pequena epifania. Eu também tinha um garfo de churrasco, mas isso é uma outra história. Em qualquer evento, algo veio a claridade que tinha me incomodado profundamente por algum tempo. Nos últimos anos, [...]]]></description>
			<content:encoded><![CDATA[<h2>Melhores práticas parecem boas quando analisadas isoladamente, mas elas podem sugar a vida dos desenvolvedores.</h2>
<p><span style="font-weight: normal;">Outro dia, no almoço, eu tive uma pequena epifania. Eu também tinha um garfo de churrasco, mas isso é uma outra história. Em qualquer evento, algo veio a claridade que tinha me incomodado profundamente por algum tempo.</span></p>
<p><span style="font-weight: normal;">N</span>os últimos anos, a indústria de software se tornou cada vez mais focada no processo e métricas como uma forma de garatir códigos de “qualidade”. Se você seguisse todas as melhores práticas agora, você faria:</p>
<ul>
<li>TDD completo, escrevendo seus testes antes de implementar o código.</li>
</ul>
<ul>
<li>Requerer uma porcentagem arbitrária de código checada antes de fazer um check-in.</li>
</ul>
<ul>
<li>Revisar o código completamente em todos os check-ins.</li>
</ul>
<ul>
<li>Usar ferramentas como o Coverity ou Sonar para gerar números de complexidade de códigos e requerer refatoração por parte dos desenvolvedores quando o código estiver demasiadamente complexo.</li>
</ul>
<p>Adicionalmente, se sua companhia tem bebido Tang sabor Scrum, vocês também teria que gastar seus dias com:</p>
<ul>
<li>Geração de cabeçalhos, histórias e tarefas.</li>
</ul>
<ul>
<li>Limpar as histórias antes de cada sprint.</li>
</ul>
<ul>
<li>Aturar seções de planejamento.</li>
</ul>
<ul>
<li>Controlar seu tempo para gerar gráficos para a gerência.</li>
</ul>
<p>Resumindo, você estará usando boa parte do seu tempo com o processo, e cada vez menos tempo realmente programando a aplicação. Eu trabalhei em algus projetos onde os casos de testes duravam duas ou três vezes mais que programar o código em si, ou onde a necessidade de <em>marretar </em>os testes de unidades reduziram a legibilidade do código. Eu também vi exemplos de desenvolvedores tendo que enganar as ferramentas para atingir metas de quantidades de linhas e complexidade de códigos. A recursão subsequente faz com que isso seja progressivamente pior para o programador passional que escreve um código ótimo, mas o processo mata a paixão. Programadores desinteressados escrevem códigos ruins, códigos ruins fazem com que a gerência adicione mais processos na tentativa de “fazer” com que programadores escrevam bons códigos. E isso somente piora a moral.</p>
<p>Agora, eu certamente não estou advogando para uma abordagem velho-oeste onde nada é testado, e os desenvolvedores programam o que querem ignorando as agendas, etc. Mas a aplicação cega de processos de melhores práticasatravés de todo o desenvolvimento está tornando o que deveria ser um processo criativo em um relatório financeiro com gráficos com um toque de prisão. Enquanto cada um destes bambolês parece bom isoladamentes (exceto talvez o Scrum&#8230;), fazer os desenvolvedores passarem por todos eles vai desmoralizar até o mais apaixonado dos geeks.</p>
<p>Eu não tenho a bala mágica aqui, mas as companhias precisam começar a aceitar que existe uma diferença qualitativa entre os desenvolvedores. Fazer com que todos eles usem arados de mesmo peso para garantir que nenhum deles cometa erros é prejudicial para a moral e eficiencia como um todo. Agora, isso pode soar um pouco arrogante: “Eu sou um desenvolvedor experiente, eu não preciso de nenhum desses recém-criadas práticas para fazer bom código.” Mas, por exemplo, talvez desenvolvedores júniores (ou especializados) devessem escrever testes de unidades, deixando os desenvolvedores mais calejados livres para se concentrar na real implementação da aplicação. Talvez você não precise micro-gerenciar eles com seus updates diários do VersionOne para ter certeza que eles estão comprometidos com o sprint.</p>
<p>Talvez uma olhadinha no código seja preferível a um processo de revisão formal.</p>
<p>E um segredo, se voce está dizendo que voce está praticando desenvolvimento ágil, então <em>pratique um desenvolvimento ágil!!!</em> Um projeto onde você decidiu antes de iniciar o ciclo do produto as características que devem ter no produto, a data em que deve ser entregue, e os recursos necessários é um projeto cascata. Usar termos como “histórias” e “sprints” apenas inserem uma casca ágil quebradiça, e é loucura pensar qualquer coisa além disso. E francamente, isso é o que levou a toda a mentalidade Scrum/Burn Down Charts, porque as equipes de desenvolvimento não tema  flexibilidade para “entregar o que está pronto, quando estiver pronto.”</p>
<p>A não ser que os problemas que eu estou falando sejam atacados, eu temo que o ciclo negativo processo/paixão irá continuar a dragar desenvolvedores engajados em um pântano de reuniões e jogos de métricas.</p>
<p>Traduzido <a href="http://radar.oreilly.com/2011/05/process-kills-developer-passion.html" target="_blank">daqui</a>.</p>
<img src="http://www.bitabit.eng.br/?ak_action=api_record_view&id=2212&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.bitabit.eng.br/2011/05/13/processos-matam-a-paixao/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>SOA por diferentes ângulos</title>
		<link>http://www.bitabit.eng.br/2011/05/06/soa-por-diferentes-angulos/</link>
		<comments>http://www.bitabit.eng.br/2011/05/06/soa-por-diferentes-angulos/#comments</comments>
		<pubDate>Sat, 07 May 2011 01:27:02 +0000</pubDate>
		<dc:creator>Adriano Oliveira, Coop12</dc:creator>
				<category><![CDATA[Computação]]></category>
		<category><![CDATA[Engenharia de Software]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[arquitetura]]></category>
		<category><![CDATA[engenharia de software]]></category>
		<category><![CDATA[integração]]></category>
		<category><![CDATA[negócios]]></category>
		<category><![CDATA[soa]]></category>

		<guid isPermaLink="false">http://www.bitabit.eng.br/?p=2189</guid>
		<description><![CDATA[Procurando por Arquitetura Orientada a Serviços neste blog, fiquei surpreso ao perceber que não havia nada sobre isto até então. Portanto, como meu post inaugural, começarei a discussão sobre o assunto. Apesar do conceito ser atualmente muito utilizado, ainda permanece pouco conhecido, ou conhecido muito superficialmente, por muitos profissionais de TI e de negócios.

A Arquitetura Orientada a Serviços, ou SOA (do inglês Service-oriented Architecture), é um conjunto de práticas que definem um tipo de arquitetura de software. Uma implantação de uma SOA em um ambiente corporativo pode resultar num impacto muito grande no modo de encarar o gerenciamento de TI e processos de negócio.]]></description>
			<content:encoded><![CDATA[<p>Procurando por <em>Arquitetura Orientada a Serviços </em>neste blog, fiquei surpreso ao perceber que não havia nada sobre isto até então. Portanto, como meu post inaugural, começarei a discussão sobre o assunto. Apesar do conceito ser atualmente muito utilizado, ainda permanece pouco conhecido, ou conhecido muito superficialmente, por muitos profissionais de TI e de negócios.</p>
<p>A <em>Arquitetura Orientada a Serviços</em>, ou <strong>SOA</strong> (do inglês <em>Service-oriented Architecture</em>), é um conjunto de práticas que definem um tipo de arquitetura de software. Uma implantação de uma SOA em um ambiente corporativo pode resultar num impacto muito grande no modo de encarar o gerenciamento de TI e processos de negócio.</p>
<p>SOA tem-se mostrado uma alternativa muito eficiente para aumentar flexibilidade e agilidade da estrutura de TI de uma empresa. Como, hoje em dia, o valor de negócio de grande parte das corporações está intimamente atrelado à eficiência de sua área de TI, SOA tem sido cada vez mais vista como uma melhoria de eficiência de negócios. Com base nestas características, uma SOA pode ser enxergada por diversos prismas dentro de uma organização: por gerentes de negócio como uma vantagem estratégica, por administradores de TI como uma melhoria de organização estrutural, por desenvolvedores como um conjunto de padronizações, etc.</p>
<p>Antes de explicar melhor este ponto,</p>
<h2>O que é SOA?</h2>
<p>SOA pode ser entendida como um conjunto de práticas de software que se dispõe conferir as seguintes características a uma arquitetura de software:</p>
<ul>
<li>Descrever as <a href="http://pt.wikipedia.org/wiki/Fun%C3%A7%C3%A3o_e_processo_de_neg%C3%B3cio">funcionalidades de negócio</a> por meio de serviços</li>
<li>Promover <a href="http://pt.wikipedia.org/wiki/Modularidade">modularidade</a>, separando cada componente de software</li>
<li>Baixo acomplamento entre aplicações</li>
<li><a href="http://pt.wikipedia.org/wiki/Encapsulamento">Encapsulamento</a></li>
<li>Composição</li>
<li>Reuso</li>
</ul>
<p>Para atingir esses objetivos, uma SOA segue as seguintes práticas:</p>
<ul>
<li>Expor em um <em>meio comum</em> as funcionalidades das aplicações existentes (e das que deverão ser desenvolvidas) como <em>serviços </em>(normalmente <em><a href="http://pt.wikipedia.org/wiki/Web_service">Web Services</a></em>);</li>
<li>Essa exposição deve ocorrer por meio de <em>interfaces </em>bem definidas, descritas por um protocolo comum (normalmente <a href="http://pt.wikipedia.org/wiki/WSDL">WSDL</a>) especificando as operações, os dados de entrada e os dados de saída;</li>
<li>O <em>meio comum </em>de comunicação entre esses serviços deve incorporar um protocolo de comunicação também comum (normalmente uma rede, com protocolo <a href="http://pt.wikipedia.org/wiki/SOAP">SOAP</a> sobre <a href="http://pt.wikipedia.org/wiki/HTTP">HTTP</a> ou SOAP sobre <a href="http://pt.wikipedia.org/wiki/JMS">JMS</a>).</li>
</ul>
<p>Expondo as aplicações por meio de interfaces bem definidas em uma rede de computadores que identifique cada funcionalidade como um serviço, promove-se o encapsulamento. Pois assim, os detalhes de implementação de cada serviço (como a linguagem em que foi escrito ou sistema operacional em que ele funciona) não necessitam conhecimento por parte de seus <em>consumidores</em>. Mais ainda, os serviços devem ser reutilizáveis e associáveis.</p>
<p>Por meio dessa estrutura, o negócio pode aproveitar mais dos resultados de seu software, preocupando-se menos com os detalhes de seu funcionamento. Este panorama forma uma Arquitetura Orientada a Serviços.</p>
<h2>Os significados de se adotar uma SOA</h2>
<p><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/05/business-plan-writer.png"><img class="alignright size-full wp-image-2199" style="border: 1px solid #ccc;padding: 6px" src="http://www.bitabit.eng.br/wp-content/uploads/2011/05/business-plan-writer.png" alt="Adotar uma SOA pode se tornar um bom plano de negócios" width="300" height="233" /></a></p>
<p>Quando uma organização estabelece uma SOA, ela está muito mais apta a se adaptar. O modo em que SOA é estabelecida propicia baixo custo &#8211; temporal, operacional e financeiro &#8211; de atualização, já que os serviços são independentes. Modificar um serviço, ou acrescentar um novo, não implica modificações nos demais. Essa característica faz com que seja fácil adaptar-se às novas regras e necessidades do negócio.</p>
<p>Essa flexibilidade atrela a estrutura de TI de modo mais conciso aos problemas de negócio. Portanto, para gerentes e administradores, SOA representa em uma capacidade maior de adaptação às exigências, e como a companhia exibe seus serviços, interna e externamente.</p>
<p>Para os arquitetos de TI, SOA é como a companhia organiza seus recursos: fornecedores de serviços, consumidores e descrições de serviços. Isso simplifica os elementos que eles deverão tomar conta, devido ao baixo acoplamento dos componentes.</p>
<p>Para os desenvolvedores, SOA representa um conjunto de especificações, protocolos de interface e comunicação. Ao mesmo tempo que traz maior liberdade para a implementação de suas soluções.</p>
<p>Com SOA é possível centralizar mais facilmente a gestão dos recursos e fazer medições sem ter de inferir na implementação de cada aplicativo. SOA facilita igualmente o recolhimento de dados de indicadores de negócio (quantidade de utilização de determinados serviços, recursos humanos, gastos, etc) quanto indicadores técnicos (desempenho, precisão dos dados trafegados, <em>workloads </em>e outros). Uma vez identificados pontos a melhorar, recomeçar o ciclo para a implantação de melhorias será muito menos doloroso, já que não será mais necessário mexer no que já funciona devidamente.</p>
<p>SOA não possui um<strong> conceito</strong> rigidamente definido, mas como existem<strong> padrões</strong> bem definidos que a habilitam, a indústria de software é livre para criar ferramentas que auxiliem seu projeto, implantação e monitoramento. O mais interessante de tudo isso, em minha opinião, é que como não há disputa na indústria para <em>o conceito</em> de SOA, o que prevalece são o bom senso e a real procura por agregar o maior valor possível de software ao negócio. E por influenciar tantas áreas de uma organização, transcende as bordas de TI.</p>
<h3><strong>Referências</strong></h3>
<p><strong> </strong><a href="http://www.ibm.com/developerworks/webservices/library/ws-soa-practical/">A practical application of SOA</a> &#8211; IBM developerWorks</p>
<img src="http://www.bitabit.eng.br/?ak_action=api_record_view&id=2189&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.bitabit.eng.br/2011/05/06/soa-por-diferentes-angulos/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>iWoz: A versão da história da Apple por Steve Wozniak</title>
		<link>http://www.bitabit.eng.br/2011/03/14/iwoz-a-versao-da-historia-da-apple-por-steve-wozniak/</link>
		<comments>http://www.bitabit.eng.br/2011/03/14/iwoz-a-versao-da-historia-da-apple-por-steve-wozniak/#comments</comments>
		<pubDate>Mon, 14 Mar 2011 04:35:11 +0000</pubDate>
		<dc:creator>Nathalia Sautchuk Patrício, Coop9</dc:creator>
				<category><![CDATA[Computação]]></category>
		<category><![CDATA[Coop9]]></category>
		<category><![CDATA[Cooperativo]]></category>
		<category><![CDATA[Curiosidades]]></category>
		<category><![CDATA[Empreendedorismo]]></category>
		<category><![CDATA[apple]]></category>
		<category><![CDATA[história da computação]]></category>
		<category><![CDATA[Wozniak]]></category>

		<guid isPermaLink="false">http://www.bitabit.eng.br/?p=2050</guid>
		<description><![CDATA[Nos últimos tempos, passei diversas noites lendo o livro iWoz que conta a versão da história da Apple segundo o Steve Wozniak. Não sou nenhuma fã da Apple e sequer tenho um produto da empresa. Mas quando vi o livro vendendo na Campus Party nesse ano, acabei comprando por ser um &#8220;livro de histórias&#8221; da [...]]]></description>
			<content:encoded><![CDATA[<p>Nos últimos tempos, passei diversas noites lendo o livro <a href="http://www.editoraevora.com.br/livro/iwoz.aspx">iWoz</a> que conta a versão da história da Apple segundo o Steve Wozniak.</p>
<p>Não sou nenhuma fã da Apple e sequer tenho um produto da empresa. Mas quando vi o livro vendendo na <a href="http://www.campus-party.com.br/">Campus Party</a> nesse ano, acabei comprando por ser um &#8220;livro de histórias&#8221; da  computação e porque fiquei sabendo que o Woz iria dar uma palestra na  Campus e autografar os livros. Por fim, não consegui ir a palestra, mas  fiquei sabendo que foi muito bacana.<br />
Quando se fala em Apple, em  geral, as pessoas associam a figura de Steve Jobs. Porém, a empresa foi  fundada por dois Steves, o Jobs e o Wozniak como bem mostrado no filme &#8220;<a href="http://pt.wikipedia.org/wiki/Piratas_do_Vale_do_Sil%C3%ADcio">Piratas do Vale do Silício</a>&#8220;.  O livro, antes de ser de fato sobre a história da Apple, é uma  biografia de Steve Wozniak, desde seus tempos de criança até sua vida  após a Apple.</p>
<p>No início do livro, Woz conta como seu pai foi seu  grande motivador a se tornar um engenheiro. A forma como ele o motivava  era bem interessante: apenas respondia o que o filho o perguntava sem  querer &#8220;adiantá-lo&#8221;, mas de uma forma que o induzia a ter mais  curiosidade em entender sobre eletrônica. Com certeza, pode-se notar que  ele fez um excelente trabalho com marcas profundas na formação de Woz.</p>
<p>Durante  sua infância Woz se envolveu em vários projetos de eletrônica, tanto  junto com seu pai quanto com os Garotos Eletrônicos. Por exemplo, quando  Woz tinha 11 anos, construiu a sua própria estação de radioamador e  obteve uma licença de radioamador. Aos 13 anos, foi eleito presidente do  clube de eletrônica de sua escola e ganhou o primeiro prêmio em uma  feira de ciências regional por uma calculadora baseada em transistores.</p>
<p>Wozniak  também esclarece algumas coisas que dizem por ai sobre a Apple e a  invenção do computador pessoal. De fato, Woz projetou sozinho o primeiro  computador pessoal que existiu, que veio a se tornar o Apple I.</p>
<p>O  livro me levou a conclusão de que o verdadeiro empreendedor da Apple  era o Steve Jobs, enquanto o Wozniak era o inventor de seu produto. Isso  fica bem claro quando, pressionado por um investidor, Woz diz que não  queria sair de seu emprego na HP para tocar a Apple junto com Jobs.  Queria que fosse uma coisa paralela na sua vida como tinha sido até  então. Ou seja, a Apple jamais teria existido se Jobs e Woz não tivessem  se juntado. Apesar de Woz deixar claro que os dois eram muito  diferentes, por outro lado, eles, de certa forma, se completavam: sem a  iniciativa de Jobs, a Apple não teria sido criada e sem a grande sacada  de Woz, a Apple não teria seu produto.</p>
<p>Um boato que esclarece no  livro é de que teria saído da Apple por estar insatisfeito com as  atitudes de seus administradores. Na verdade, após sofrer um acidente de  avião e ficar 5 semanas afastado do trabalho com amnesia, Woz decidiu  continuar afastado da empresa e voltar a Berkeley para terminar seu  curso de Engenharia. Depois de terminar o curso, voltou novamente a  trabalhar na Apple. Porém, ele sentiu que já não havia mais espaço para  inovar e, quando uma outra ideia de tecnologia surgiu em sua cabeça,  decidiu que era hora de se dedicar a ela. A ideia era simplesmente o que  hoje conhecemos por controle remoto universal.</p>
<p>Após isso, ele ainda se aventurou na área da docência: começou a dar aulas de informática para crianças.</p>
<p>A  principal lição que fica do livro é que o incentivo a curiosidade e a  criação de condições para a descoberta das respostas às questões  levantadas pelas crianças podem gerar grandes frutos: pessoas com  pensamento independente como Woz. Ele conseguiu vislumbrar que cada  pessoa poderia ter um computador em casa e que isso transformaria suas  vidas, mesmo quando quase todos achavam isso uma grande bobagem.</p>
<p>iWoz  é um bom livro e sua leitura é recomendada para todos aqueles da área  da computação, pois trata de questões bem comuns da nossa área de uma  forma muito humana.</p>
<p>P.S.: A única coisa que me irritou no livro é  um erro de tradução do inglês para o português. Traduziram &#8220;register&#8221;  como &#8220;registro&#8221;, quando, na verdade, deveria ser registrador. FAIL!!!</p>
<img src="http://www.bitabit.eng.br/?ak_action=api_record_view&id=2050&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.bitabit.eng.br/2011/03/14/iwoz-a-versao-da-historia-da-apple-por-steve-wozniak/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Detecção e rastreamento de faces em vídeos – Como classificar faces?</title>
		<link>http://www.bitabit.eng.br/2011/03/07/como-classificar-faces/</link>
		<comments>http://www.bitabit.eng.br/2011/03/07/como-classificar-faces/#comments</comments>
		<pubDate>Mon, 07 Mar 2011 12:00:20 +0000</pubDate>
		<dc:creator>Filipe M. S. de Campos, Coop10</dc:creator>
				<category><![CDATA[Algoritmos e Estruturas de Dados]]></category>
		<category><![CDATA[Computação]]></category>
		<category><![CDATA[Coop10]]></category>
		<category><![CDATA[Inteligência Artificial]]></category>
		<category><![CDATA[Programação]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[Visão Computacional]]></category>
		<category><![CDATA[Affine transformation]]></category>
		<category><![CDATA[boca]]></category>
		<category><![CDATA[classificação]]></category>
		<category><![CDATA[computer vision]]></category>
		<category><![CDATA[correlação]]></category>
		<category><![CDATA[detecção]]></category>
		<category><![CDATA[detection]]></category>
		<category><![CDATA[face]]></category>
		<category><![CDATA[iniciação científica]]></category>
		<category><![CDATA[inteligência artificial]]></category>
		<category><![CDATA[jones]]></category>
		<category><![CDATA[kmeans]]></category>
		<category><![CDATA[nariz]]></category>
		<category><![CDATA[olhos]]></category>
		<category><![CDATA[OpenCV]]></category>
		<category><![CDATA[transformação afim]]></category>
		<category><![CDATA[viola]]></category>
		<category><![CDATA[visão computacional]]></category>

		<guid isPermaLink="false">http://www.bitabit.eng.br/?p=1916</guid>
		<description><![CDATA[Finalizando a nossa série de artigos, indicarei textos sobre a teoria responsável pela etapa de classificação das faces e também a aplicação dela no projeto de iniciação científica. . . Teoria envolvida Para a última etapa do projeto, foi necessário conhecer e organizar todas as faces pelos momentos em que elas aparecem nas tomadas do vídeo [...]]]></description>
			<content:encoded><![CDATA[<p>Finalizando a nossa série de artigos, indicarei textos sobre a teoria responsável pela etapa de classificação das faces e também a aplicação dela no projeto de iniciação científica.   <span style="color: #ffffff;">.</span></p>
<p><span style="color: #ffffff;">.</span></p>
<h2>Teoria envolvida</h2>
<p>Para a última etapa do projeto, foi necessário conhecer e organizar todas as faces pelos momentos em que elas aparecem nas tomadas do vídeo e a que pessoas elas correspondem. Para isso, foram utilizados alguns conceitos e teorias já apresentados nos artigos anteriores da série, mas também outros tópicos ainda não estudados. Para todos os assuntos, serão listadas fontes interessantes para estudo.</p>
<h4>Detecção de características faciais (olhos, nariz, boca):</h4>
<p>Técnica de Viola e Jones com as cascatas adequados para cada característica facial. Mais detalhes sobre essa técnica em <a title="Detecção de objetos - Vioja e Jones" href="http://www.bitabit.eng.br/2011/02/21/como-detectar-faces-em-videos" target="_blank">Detecção e rastreamento de faces em vídeos – Como detectar faces em vídeos?</a>.</p>
<h4>Transformação Afim:</h4>
<p><a title="Transformação afim - Wikipedia" href="http://en.wikipedia.org/wiki/Affine_transformation" target="_blank">Link da Wikipedia sobre transformação afim</a> <a title="Matriz de Transformação" href="http://en.wikipedia.org/wiki/Transformation_matrix" target="_blank">Link da Wikipedia sobre a matriz de transformação</a> <a title="Transformação afim no OpenCV" href="http://dasl.mem.drexel.edu/~noahKuntz/openCVTut5.html#Step%202" target="_blank">Como realizar transformação afim utilizando o OpenCV</a> <a title="Mosaico de imagens" href="http://amais.esoterica.pt/apsi/index.html" target="_blank">Link</a> interessante para um projeto da Universidade do Porto que trata de mosaico de imagens. Com a leitura, além de aprender sobre transformação afim e correlação, você entenderá outra possibilidade de uso desse tipo de transformação e também outras teorias envolvidas para a realização desse projeto.</p>
<h4>Correlação:</h4>
<p><em><a title="Fast Normalized Cross-Correlation" href="http://www.idiom.com/~zilla/Papers/nvisionInterface/nip.html" target="_blank">Fast Normalized Cross-Correlation</a></em> <a title="Correlação - OpenCV" href="http://dasl.mem.drexel.edu/~noahKuntz/openCVTut6.html#Step%202" target="_blank">Como realizar Template Matching utilizando o OpenCV</a> <a title="Template Matching" href="http://nashruddin.com/template-matching-in-opencv-with-example.html" target="_blank">Código exemplo sobre <em>Template Matching</em> utilizando OpenCV</a></p>
<h4>Kmeans:</h4>
<p><a title="Kmeans - Wikipedia" href="http://en.wikipedia.org/wiki/K-means_clustering" target="_blank">Link da Wikipedia sobre Kmeans</a> <a title="Kmeans" href="http://home.dei.polimi.it/matteucc/Clustering/tutorial_html/kmeans.html" target="_blank">Link explicando sobre Kmeans</a> <a title="Kmeans" href="http://people.revoledu.com/kardi/tutorial/kMean/NumericalExample.htm" target="_blank">Link para uma explicação curta e um exemplo</a> <a title="Slides Kmeans" href="http://www.autonlab.org/tutorials/kmeans.html" target="_blank">Slides explicativos sobre o Kmeans</a></p>
<p><span style="color: #ffffff;">.</span></p>
<h2>Aplicação no projeto</h2>
<p>A ideia central dessa etapa era preparar os dados para a criação da estrutura de indexação a ser utilizada pelo hipervídeo. Para isso, inicialmente, seriam identificadas as expressões faciais para a face de cada pessoa presente em uma tomada. O objetivo era guardar a face mais frontal possível e também os pontos necessários para a transformação afim que ocorre como passo seguinte. Com essa transformação afim e a aplicação da máscara, preparávamos as faces pela criação de um padrão para que elas pudessem ser comparadas através de um método simples como o de correlação. Com o valor da correlação entre as faces calculado, utilizava-se o Kmeans para criar grupos de faces semelhantes, o que corresponderiam a faces de uma mesma pessoa. Os parágrafos abaixo explicarão com mais detalhes essas etapas.  Primeiramente, foi adicionado ao sistema uma funcionalidade que permitia extrair de todo quadro do vídeo apenas a imagem de cada face existente. Com a imagem da face; olhos, nariz e boca eram identificados usando o algoritmo de Viola e Jones com um filtro de Haar em cascata adequado para cada caso. Para diminuir a quantidade de falsos positivos para essas características faciais, foram criadas regiões de interesse para cada uma delas e o método citado era aplicado apenas nessas regiões. A partir do retângulo correspondente aos olhos e ao nariz, eram extraídas as coordenadas do centro dessas características. Na figura 1 pode-se observar as características faciais detectadas.</p>
<div id="attachment_1948" class="wp-caption aligncenter" style="width: 340px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/03/olhosNarizBoca.png"><img class="size-full wp-image-1948" title="Olhos, Nariz e Boca" src="http://www.bitabit.eng.br/wp-content/uploads/2011/03/olhosNarizBoca.png" alt="" width="330" height="200" /></a><p class="wp-caption-text">Figura 1 - Pode-se observar o centro encontrado para o nariz, olhos e boca.</p></div>
<p>Além de útil para a próxima etapa, uma face que contém dois olhos e um nariz, é uma face ”mais frontal” do que uma que não as contém, o que é muito mais interessante para o projeto. Assim, para cada quadro do vídeo, se a imagem da face não possuísse dois olhos e um nariz, tentava-se fazer uma troca pela imagem da face do próximo quadro, contanto que nessa fossem identificadas mais características faciais. Com esse procedimento, o sistema tenta obter a melhor face possível para cada pessoa em uma tomada.  O próximo passo foi, utilizando os centros encontrados anteriormente, realizar uma transformação afim da face encontrada para uma face padrão em tons de cinza. Essa tinha um tamanho pré definido (64 <em>pixels</em> de altura e 48 de largura) e também uma posição padrão para os olhos e o nariz (olho esquerdo: (34,26); olho direito: (15,26); nariz: (24,39) ) que foi definida a partir de medições em diversas faces e baseado em proporções faciais encontradas em [1]. Com esse procedimento, tentamos eliminar problemas de translação e rotação de uma face para outra antes da etapa de correlação. Na tentativa de eliminar problemas de iluminação, foi feita uma equalização do histograma. Depois da transformação afim, também era aplicada uma máscara à imagem. Essa máscara permite comparar somente a região dos olhos e do nariz, excluindo regiões inadequadas como a boca e os cantos da imagem já que essas regiões sofrem frequentes modificações inclusive para uma mesma pessoa, o que atrapalharia o processo de cálculo da correlação com o objetivo de encontrar faces de uma mesma pessoa. Na figura 2 observa-se o processo descrito acima para trâs casos.</p>
<div id="attachment_1949" class="wp-caption aligncenter" style="width: 307px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/03/transofrmadaMascaraFinal.png"><img class="size-full wp-image-1949 " title="Transofrmada, Mascara e Final" src="http://www.bitabit.eng.br/wp-content/uploads/2011/03/transofrmadaMascaraFinal.png" alt="" width="297" height="385" /></a><p class="wp-caption-text">Figura 2: A figura apresenta, na coluna da esquerda, a face após a transformação afim e equalização do histograma. Ao centro a máscara aplicada à imagem e na coluna da direita o resultado para a aplicação da máscara.</p></div>
<p>Até esse ponto, os problemas principais estavam relacionados a encontrar os olhos e o nariz nas faces. Nem sempre conseguíamos faces frontais em uma tomada, pois, ou ela realmente não era frontal, ou o detetor falhava, tanto não encontrando a característica desejada quanto devolvendo um falso positivo. O ajuste para esse tipo de detecção se mostrou um trabalho minucioso e longo.  Em seguida, deu-se início à próxima etapa. Ela consistiu em calcular a correlação entre todas as imagens e com esses dados, montar uma matriz. Essa matriz era passada para o Kmeans, que separava as faces em grupos, sendo que cada um desses grupos possui faces de uma mesma pessoa que apareceu em diversas tomadas do vídeo.  Durante essa parte do projeto, também foi projetado o segundo passo para a retirada de falsos positivos. O processo de correlação já implementado também foi utilizado para calcular a correlação entre a face candidata encontrada no vídeo e uma face padrão ideal composta por uma média de faces humanas. Se o valor resultante for acima de um limiar de alto valor, o candidato é aceito como face, caso contrário, é descartado por se tratar de um falso positivo.</p>
<p><span style="color: #ffffff;">.</span></p>
<p><span style="color: #ffffff;"> </span> É isso aí pessoal, encerra-se aqui essa série de quatro artigos sobre detecção e rastreamento facial dentro do contexto da criação de um hipervídeo. Espero que tenham aproveitado.</p>
<p><span style="color: #ffffff;">.</span></p>
<h2>Referências</h2>
<p>[1] R. M. Bertollo, D. L. da Silva, L. Oliveira, R. D. Bergoli, and M. G. de Oliveira. Avaliacao da harmonia facial em relacao as proporcoes divinas de fibonacci. Revista Portuguesa de Estomatologia, Medicina Dentaria e Cirurgia Maxilofacial, 49(N4), 2008.  <span style="color: #ffffff;">.</span> <span style="color: #ffffff;">.</span></p>
<h3><span style="color: #ffffff;">.</span></h3>
<h3><span style="color: #ffffff;">.</span></h3>
<h3>Artigos da série:</h3>
<p>Anterior: <a title="Como rastrear faces em vídeos?" href="http://www.bitabit.eng.br/2011/02/28/como-rastrear-faces-em-videos/" target="_self">Como rastrear faces em vídeos?</a></p>
<h3><span style="color: #ffffff;">.</span></h3>
<img src="http://www.bitabit.eng.br/?ak_action=api_record_view&id=1916&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.bitabit.eng.br/2011/03/07/como-classificar-faces/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Detecção e rastreamento de faces em vídeos &#8211; Como rastrear faces em vídeos?</title>
		<link>http://www.bitabit.eng.br/2011/02/28/como-rastrear-faces-em-videos/</link>
		<comments>http://www.bitabit.eng.br/2011/02/28/como-rastrear-faces-em-videos/#comments</comments>
		<pubDate>Mon, 28 Feb 2011 12:00:49 +0000</pubDate>
		<dc:creator>Filipe M. S. de Campos, Coop10</dc:creator>
				<category><![CDATA[Computação]]></category>
		<category><![CDATA[Coop10]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[Visão Computacional]]></category>
		<category><![CDATA[camshift]]></category>
		<category><![CDATA[computer vision]]></category>
		<category><![CDATA[face]]></category>
		<category><![CDATA[hipervídeo]]></category>
		<category><![CDATA[iniciação científica]]></category>
		<category><![CDATA[OpenCV]]></category>
		<category><![CDATA[rastreamento]]></category>
		<category><![CDATA[tracking]]></category>
		<category><![CDATA[visão computacional]]></category>

		<guid isPermaLink="false">http://www.bitabit.eng.br/?p=1903</guid>
		<description><![CDATA[. Dando continuidade à nossa série de artigos, nesse explicarei sobre a teoria envolvida no rastreamento das faces em um vídeo e também sobre a aplicação dessa teoria no projeto. . Teoria envolvida Durante essa etapa do projeto, foi desenvolvida a parte do sistema responsável por rastrear as faces previamente identificadas pelo detector. Para isso, [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #ffffff;">.</span></p>
<p>Dando continuidade à nossa série de artigos, nesse explicarei sobre a teoria envolvida no rastreamento das faces em um vídeo e também sobre a aplicação dessa teoria no projeto.</p>
<p><span style="color: #ffffff;">.</span></p>
<h2>Teoria envolvida</h2>
<p>Durante essa etapa do projeto, foi desenvolvida a parte do sistema responsável por rastrear as faces previamente identificadas pelo detector. Para isso, foi utilizado o algoritmo CamShift [1].</p>
<p>O algoritmo do Camshift (Continuously Adaptive Mean Shift) [1] é uma modificação do algoritmo Mean Shift e foi inicialmente criado como uma das partes de um grande projeto que tinha a intenção de melhorar a maneira com que os seres humanos interagem com interfaces gráficas. Por exemplo, em jogos ou na visualizações de objetos 3D, em que o movimento da cabeça do usuário se transforma na movimentação do personagem em um jogo ou a visualização do objeto 3D dessa nova posição.</p>
<p>Bradski argumenta que para um sistema desse tipo ser útil, ele deve ser extremamente eficiente em termos computacionais. Isso se deve já que o rastreador não será o único processo consumindo processamento da CPU, ao contrário, ele será um acessório e deverá permitir que o programa principal, no qual ele enriquece seu funcionamento, possa ocupar uma fatia adequada da CPU. Assim, esse algoritmo foi desenvolvido respeitando esse requisito e também sendo possível utilizá-lo com câmeras de baixo custo e sem a necessidade de calibração.</p>
<p>O algoritmo do Mean Shift foi criado para encontrar picos em uma distribuição de probabilidade. Como a distribuição de probabilidade de um objeto em uma cena de vídeo pode mudar e se mover dinamicamente com o decorrer do tempo, Bradski em [1] modificou tal algoritmo para que este fosse robusto a tais alterações, portanto o Camshift é capaz de seguir uma distribuição de probabilidade que se altere dinamicamente. Além disso, o método é baseado em um histograma para produzir a distribuição de probabilidade de um objeto.</p>
<p>Esse método possui quatro passos básicos para sua execução. O primeiro deles é a criação de um instrumento que permita a representação do objeto a ser seguido, que no caso desse projeto é uma face. Para isso, cria-se um histograma das cores que represente essa face.</p>
<p>O segundo passo é composto pelo cálculo da probabilidade de cada <em>pixel</em> de um quadro do vídeo ser uma face. Após a criação do histograma que é feita no início do processo, o cálculo da probabilidade para os quadros seguintes será baseado nessa distribuição de cores. Pode-se entender esse processo através da observação da figura didática 1 retirada de [2]. Nela é possível observar a criação de uma barra para representar todas as cores presentes no histograma da face. Essa barra é construída empilhando-se todas as barras que representam a quantidade em que uma determinada cor está presente no histograma. Então, utilizando como exemplo a cor representada pela barra mais a direita do histograma, pode-se entender que esta cor corresponde a aproximadamente quarenta e cinco porcento de todas as cores presentes em uma face, ou seja, a probabilidade de um <em>pixel</em> selecionado radomicamente dessa região cair na porção correspondente a essa cor é de quarenta e cinco porcento. Assim, para um <em>pixel</em> qualquer presente no quadro e que possua essa mesma cor, a probabilidade dele corresponder a um <em>pixel</em> da face rastreada é de quarenta e cinco porcento.</p>
<div id="attachment_1907" class="wp-caption aligncenter" style="width: 673px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/02/camshift.png"><img class="size-full wp-image-1907 " title="Camshift" src="http://www.bitabit.eng.br/wp-content/uploads/2011/02/camshift.png" alt="" width="663" height="625" /></a><p class="wp-caption-text">Figura 1 - Figura didática com um histograma a esquerda e uma barra a direita que representa todas as cores presentes no histograma do objeto a ser rastreado</p></div>
<p>O terceiro, é responsável por atualizar a localização da marcação da região do quadro do vídeo em que a face está presente. Para isso, a cada novo quadro, e com a probabilidade de cada <em>pixel</em> ser de uma face calculada, o algoritmo é capaz de perceber tais regiões com grande concentração de altas probabilidades e mover a posição da marcação para o centro dessa nova região.</p>
<p>Na última etapa ocorre o cálculo do tamanho e o ângulo da face para cada mudança na marcação da região correspondente à face. Isso é realizado analisando a escala e a orientação que melhor se adequa aos <em>pixels</em> da região de alta probabilidade da nova região marcada como face. Essa etapa é exclusiva do Camshift se comparado com o Mean Shift, sendo uma das diferenças que são notáveis quando se observa o resultado do rastreamento.</p>
<p><span style="color: #ffffff;">.</span></p>
<h2>Aplicação no projeto</h2>
<p>Com a implementação do Camshift no projeto, essa parte do sistema é capaz de rastrear múltiplas faces em um vídeo. Portanto, após uma face ter sido detectada pelo algoritmo de Vila e Jones, o que atualiza sua posição de acordo com sua movimentação é o CamShift. Após a implementação, o método mostrou bons resultados tanto para uma face quanto pra múltiplas faces. Porém, alguns ajustes foram necessários para o melhor funcionamento do sistema.</p>
<p>Foram criadas algumas regras para determinar se o retângulo que demarcava uma face na imagem realmente correspondia a uma face. Para contornar os casos em que uma face saía da imagem, como uma pessoa virando de costas ou saindo da visão da câmera, foi criada uma regra que excluía, para o rastreamento nos quadros seguintes, retângulos menores que vinte <em>pixels</em> em largura e em altura. Também foram criadas regras para excluir retângulos com proporções esticadas de mais na vertical e na horizontal, além da exclusão de um de dois retângulos, caso eles estivessem na mesma posição. Abaixo, na figura 2, pode-se observar o exemplo do caso de uma pessoa virando de costas.</p>
<div id="attachment_1911" class="wp-caption aligncenter" style="width: 644px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/02/rastreamentoMichael1.png"><img class="size-full wp-image-1911" title="Rastreamento de costas" src="http://www.bitabit.eng.br/wp-content/uploads/2011/02/rastreamentoMichael1.png" alt="" width="634" height="380" /></a><p class="wp-caption-text">Figura 2 - Exemplo da atuação do rastreamento realizado pelo Camshift. Mesmo com o personagem virando de costas o método mostra-se capaz de seguir a região facial do ator. Quando o personagem estiver totalmente de costas, uma das regras descritas acima atuará e retirará a marcação do vídeo.</p></div>
<p>Essas regras também contribuem pra o primeiro tratamento que o sistema faz para as faces falso positivas. Já que, quase a totalidade de faces falso positivas possuem, após a análise do CamShift, um retângulo de marcação</p>
<p>muito pequeno ou então esticado de forma a não caracterizar uma face. Assim, essas faces são filtradas pelas regras criadas. Depois dessa etapa do sistema ter sido implementada, é possível perceber que o sistema tornou-se mais robusto como um todo devido a melhor qualidade da detecção das faces, tanto em seu posicionamento pela imagem ao longo dos quadros do vídeo quanto pela quantidade de falsos positivos. Pode-se observar, nas figuras 3 e 4, alguns casos que demonstram a melhoria do sistema.</p>
<div id="attachment_1912" class="wp-caption aligncenter" style="width: 642px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/02/deteccaoJIMlado1.png"><img class="size-full wp-image-1912" title="Rastreamento lateral" src="http://www.bitabit.eng.br/wp-content/uploads/2011/02/deteccaoJIMlado1.png" alt="" width="632" height="380" /></a><p class="wp-caption-text">Figura 3: Inicialmente o personagem olhava para frente, o que gerou uma detecção pelo método de Vila e Jones utilizando um filtro em cascata para faces frontais. Em seguida, ele vira sua face de lado e, com a atuação do rastreamento, a face não é perdida.</p></div>
<div id="attachment_1913" class="wp-caption aligncenter" style="width: 642px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/02/deteccaoMichaelRotacionada1.png"><img class="size-full wp-image-1913" title="Rastreamento face rotacionada" src="http://www.bitabit.eng.br/wp-content/uploads/2011/02/deteccaoMichaelRotacionada1.png" alt="" width="632" height="381" /></a><p class="wp-caption-text">Figura 4: Neste caso, pode-se observar uma face rotacionada que ainda está sendo identificada pelo sistema, pois, em algum momento anterior, o ator teve sua face posicionada verticalmente.</p></div>
<p>Vale ainda acrescentar, que foram notados dois problemas com o rastreamento usando o CamShift. Como seu funcionamento é baseado em cores, o retângulo de marcação da face, em determinados casos específicos, acaba se tornando maior do que o esperado, pois também englobava regiões como a do pescoço ou até mesmo o início do tórax se a roupa da pessoa exibisse essa região. O outro ponto ocorre para situações em que duas faces diferentes estão lado a lado. Nesse caso, as regiões de cada uma das faces se perdiam e invadiam a área da face adjacente.</p>
<p><span style="color: #ffffff;">.</span></p>
<h2>Referências</h2>
<p>[1] G. R. Bradski. Real time face and object tracking as a component of a perceptual user interface. In Proceedings of the Fourth IEEE Workshop on Applications of Computer Vision (WACV98), 1998.</p>
<p>[2] Robin Hewitt. Seeing with opencv &#8211; part3 &#8211; Follow that face, SERVO, 2007.</p>
<p>(<a title="SERVO - Seeing with OpenCV" href="http://www.cognotics.com/opencv/servo_2007_series/index.html" target="_blank">http://www.cognotics.com/opencv/servo_2007_series/index.html</a>)</p>
<p><span style="color: #ffffff;">.</span></p>
<p><span style="color: #ffffff;">.</span></p>
<h3>Artigos da série:</h3>
<p>Próximo: <a title="Como classificar faces?" href="http://www.bitabit.eng.br/2011/03/07/como-classificar-faces/" target="_self">Como classificar faces?</a></p>
<p>Anterior: <a title="Como detectar faces em vídeos?" href="http://www.bitabit.eng.br/2011/02/21/como-detectar-faces-em-videos/" target="_self">Como detectar faces em vídeos?</a></p>
<p><span style="color: #ffffff;">.</span></p>
<img src="http://www.bitabit.eng.br/?ak_action=api_record_view&id=1903&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.bitabit.eng.br/2011/02/28/como-rastrear-faces-em-videos/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

