<?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; Software</title>
	<atom:link href="http://www.bitabit.eng.br/categorias/tecnologia/software/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>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>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>Apresentando Ploobs Engine</title>
		<link>http://www.bitabit.eng.br/2011/03/23/apresentando-ploobs-engine/</link>
		<comments>http://www.bitabit.eng.br/2011/03/23/apresentando-ploobs-engine/#comments</comments>
		<pubDate>Wed, 23 Mar 2011 13:34:16 +0000</pubDate>
		<dc:creator>Thiago Dias Pastor, Coop 10</dc:creator>
				<category><![CDATA[Coop10]]></category>
		<category><![CDATA[Games]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[TCC]]></category>
		<category><![CDATA[.NET]]></category>
		<category><![CDATA[C]]></category>
		<category><![CDATA[Deferred Rendering]]></category>
		<category><![CDATA[Engine Para Jogos]]></category>
		<category><![CDATA[Game Engine]]></category>
		<category><![CDATA[Jogos]]></category>
		<category><![CDATA[Opensource]]></category>
		<category><![CDATA[XNA]]></category>

		<guid isPermaLink="false">http://www.bitabit.eng.br/?p=2076</guid>
		<description><![CDATA[Olá Pessoal !! Neste artigo pretendo apresentar a Ploobs Engine, nossa engine de jogos. Inicialmente a ideia é mostrar as features principais e num futuro próximo postar alguns tutoriais. O que é a Ploobs Engine ? É uma Engine para criação de jogos e aplicativos gráficos desenvolvida em XNA 4.0, C# .Net 4.0 e HLSL. [...]]]></description>
			<content:encoded><![CDATA[<p>Olá Pessoal !! Neste artigo pretendo apresentar a Ploobs Engine, nossa engine de jogos. Inicialmente a ideia é mostrar as features principais e num futuro próximo postar alguns tutoriais.</p>
<p><em><strong><span style="font-style: normal; font-weight: normal;"> </span></strong></em></p>
<h2>O que é a Ploobs Engine ?</h2>
<dt></dt>
<p>É uma Engine para criação de jogos e aplicativos gráficos desenvolvida em XNA 4.0, C# .Net 4.0 e HLSL. Criada para ser simples de extender e fácil de usar, mesmo para aqueles que não conhecem com profundidade computação gráfica.</p>
<div id="attachment_2079" class="wp-caption alignright" style="width: 370px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/03/Etapa1-12122010-110541-AM.jpg"><img class="size-medium wp-image-2079 " title="Piscina" src="http://www.bitabit.eng.br/wp-content/uploads/2011/03/Etapa1-12122010-110541-AM-300x168.jpg" alt="" width="360" height="202" /></a><p class="wp-caption-text">Cena com Reflexão, Refração, Animação, Glow, iluminação e SkyBox</p></div>
<p>O framework construído é bastante extenso, sendo constituído de diversos módulos responsáveis pelas tarefas mais comuns utilizadas em jogos como: Controle de Entrada, Simulação Física, Renderização Gráfica, Inteligência Artificial e Controle de Recursos.</p>
<p>O foco principal da Engine esta na parte gráfica, que usa a técnica de renderização <a href="http://en.wikipedia.org/wiki/Deferred_shading" target="_blank">Deferred Shading</a>, a mesma encontrada em jogos como <a href="http://us.battle.net/sc2/pt/" target="_blank">Startcraft II,</a> <a href="http://www.ea.com/crysis-2" target="_blank">Crysis II</a> e <a href="http://www.killzone2.com/" target="_blank">KillZone II</a>.</p>
<p>O render construído fez parte do nosso projeto de formatura. Uma explicação bastante profunda do funcionamento da técnica e da nossa implementação pode ser encontrada na nossa <a href="http://www.codeplex.com/Project/Download/FileDownload.aspx?ProjectName=ploobsengine&amp;DownloadId=217469">tese</a>.</p>
<h2 style="text-align: left;">Quais são as Funcionalidades Principais ?</h2>
<p>A PloobsEngine suporta praticamente todas as funcionalidades de uma Engine Directx 9c, sendo as principais:</p>
<ul>
<li>Deferred Render com suporte a <a href="http://en.wikipedia.org/wiki/Bump_mapping" target="_blank">Bump Map</a>, <a href="http://dimitribueno.dreamhosters.com/?p=224" target="_blank">Specular Map</a>, <a href="http://bighouse.bungie.org/killingtime/Help_Schtuff/Glow_Maps.html" target="_blank">Glow Map</a> e <a href="http://en.wikipedia.org/wiki/Parallax_mapping" target="_blank">Paralax Map</a> (técnicas usadas para simular materiais e aumentar o realismo dos jogos)</li>
<li>Sistemas de partículas</li>
<li>Simulação física</li>
<li>Som 3D e 2D</li>
<li>Luzes Dinâmicas com Sombra</li>
<li><a href="http://en.wikipedia.org/wiki/Skeletal_animation" target="_blank">Animação por ossos</a> (Bone Animation)</li>
<li>Terrenos</li>
<li>Reflexão e Refração em Tempo Real</li>
<li>Sistema de GUI (HUD)</li>
</ul>
<p>Foram utilizados diversos algoritmos e técnicas encontradas em jogos que estão atualmente no mercado, sempre que possível escolhíamos algoritmos que exploravam ao máximo a GPU.</p>
<p>O nosso grande diferencial esta no uso da técnica Deferred Shading ao extremo, nenhuma Engine XNA não comercial utiliza esta técnica desta forma.</p>
<p>Para uma lista bem mais completa das funcionalidades, de uma olhada <a href="http://ploobsengine.codeplex.com/">no site do projeto</a>.</p>
<div id="attachment_2080" class="wp-caption alignright" style="width: 310px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/03/Etapa1-12122010-15056-AM.jpg"><img class="size-medium wp-image-2080 " src="http://www.bitabit.eng.br/wp-content/uploads/2011/03/Etapa1-12122010-15056-AM-300x168.jpg" alt="" width="300" height="168" /></a><p class="wp-caption-text"> Ambient Scattering, Vegetação e Partículas ao fundo</p></div>
<h2><em>O que você precisa para começar a usar a Ploobs Engine ?</em></h2>
<p>Para um uso mais simples, somente conhecimento básico de C# é necessário, não é preciso conhecer computação gráfica ou XNA.</p>
<p>Para o desenvolvedor, é necessário instalar a XNA 4.0 SDK, o .Net 4.0 Framework e o Visual Studio 2010 completo ou express. Em termos de hardware é necessário apenas ter uma placa de vídeo compatível com DirectX 10 (Shader Model 3.0).</p>
<h2>Por onde que eu começo ??!!</h2>
<p>Temos uma seção com tutoriais básicos no<a href="ploobsengine.codeplex.com" target="_blank"> site do projeto</a>, além de alguns pacotes com diversos demos de funcionalidades (cerca de 30 demos bastante comentados) .</p>
<p>Estamos trabalhando para criar outros tutoriais e alguns demos reais (pequenos Showcases). Junto com a DLL da Engine, temos um documento (.chm) explicando os conceitos básicos da Engine.</p>
<h2>Como que a Engine é distribuída ?</h2>
<p>Atualmente existem as seguintes formas de distribuição:</p>
<div id="attachment_2095" class="wp-caption alignright" style="width: 310px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/03/marcuz.jpg"><img class="size-medium wp-image-2095" title="marcuz" src="http://www.bitabit.eng.br/wp-content/uploads/2011/03/marcuz-300x250.jpg" alt="" width="300" height="250" /></a><p class="wp-caption-text">Iluminacao e Lod</p></div>
<ul>
<li>Código Fonte Completo através do nosso repositório Mercurial (este repositório contem apenas a ultima versão estável no branch principal).</li>
<li>DLL Única contendo todas as dependências e documentação.</li>
<li>Através dos pacotes de Demos.</li>
</ul>
<p>A idéia é lançar uma versão estável periodicamente e diversas outras versões betas intermediarias. Caso algum bug crítico seja encontrado, iremos corrigir a versão estável o mais rápido possível. Os Demos e o arquivo de documentação serão atualizados apenas no lançamento de versões estáveis, a documentação do site será atualizada assim que as versões intermediárias forem lançadas. Pretendemos manter compatibilidade com as versões antigas sempre que for possível.</p>
<h2><em>Nosso RoadMap</em></h2>
<p><em> </em></p>
<p>Num futuro próximo pretendemos melhorar a estabilidade, a  documentação e corrigir os bugs que vão “surgindo”, em um futuro um pouco mais distante pretendemos adicionar suporte a Rede.</p>
<h1>Junte-se a nós !!!</h1>
<div id="attachment_2083" class="wp-caption alignright" style="width: 310px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/03/Etapa1-10232010-64241-PM.jpg"><img class="size-medium wp-image-2083" title="Etapa1 10232010 64241 PM" src="http://www.bitabit.eng.br/wp-content/uploads/2011/03/Etapa1-10232010-64241-PM-300x233.jpg" alt="" width="300" height="233" /></a><p class="wp-caption-text">Iluminacao avancada</p></div>
<p>Antes de tudo, o projeto não tem fins financeiros.</p>
<p>Precisamos de pessoas que gostem de computação gráfica (não é necessário nenhum conhecimento prévio, temos diversos materiais para auxiliar no aprendizado do pessoal), principalmente programação de  shaders (código que roda na placa de vídeo).</p>
<p>Precisamos também de pessoas dispostas a fazer demos e Showcases (pessoas que não irão entrar em contato com o core da Engine).</p>
<p>Duvidas ? Quer saber mais ? Deixe um comentário aqui ou mande um email: <a href="contato@ploobs.com.br">contato@ploobs.com.br</a></p>
<h3>Time Atual</h3>
<p>Thiago Dias Pastor &#8211; COOP10</p>
<p>Bruno Duarte Correa &#8211; COOP10</p>
<h3>Links</h3>
<p>XNA 4.0 Alpha Release: <a href=" http://ploobs.com.br/?p=725">http://ploobs.com.br/?p=725</a></p>
<p>Site do projeto: <a href="http://ploobsengine.codeplex.com/">http://ploobsengine.codeplex.com/</a></p>
<p>DLL, Documentação e Tutoriais (Xna 3.1 Version): <a href="http://sourceforge.net/projects/ploobsengine/files/">http://sourceforge.net/projects/ploobsengine/files/</a></p>
<p>Nosso Fórum: <a href="http://www.ploobs.com.br/forum" target="_blank">ploobs.com.br/forum</a></p>
<p>Nosso Blog: <a href="http://www.ploobs.com.br" target="_blank">ploobs.com.br/</a></p>
<p>Nosso Twitter : <a href="http://www.twitter.com/ploobsengine/">@ploobsengine</a></p>
<h3>Agradecimentos</h3>
<ul>
<li>Toda a galera do COOP10 por ter nos aguentado nesses últimos anos, em especial o Filipão e o Kayatt.</li>
<li>Ao Professor Ricardo Nakamura, nosso orientador no TCC, e seus conselhos sagazes.</li>
<li>A nossa Equipe da ImaginCup 2010, a experiência adquirida mudou completamente o desenvolvimento da engine.</li>
</ul>
<h3>ScreenShots</h3>

<a href='http://www.bitabit.eng.br/2011/03/23/apresentando-ploobs-engine/etapa1-12122010-110541-am/' title='Piscina'><img width="150" height="150" src="http://www.bitabit.eng.br/wp-content/uploads/2011/03/Etapa1-12122010-110541-AM-150x150.jpg" class="attachment-thumbnail" alt="Cena com Reflexão, Refração, Animação, Glow, iluminação e SkyBox" title="Piscina" /></a>
<a href='http://www.bitabit.eng.br/2011/03/23/apresentando-ploobs-engine/etapa1-12122010-15056-am/' title='Scattering'><img width="150" height="150" src="http://www.bitabit.eng.br/wp-content/uploads/2011/03/Etapa1-12122010-15056-AM-150x150.jpg" class="attachment-thumbnail" alt="Ambient Scattering, Vegetação e Partículas ao fundo" title="Scattering" /></a>
<a href='http://www.bitabit.eng.br/2011/03/23/apresentando-ploobs-engine/etapa1-10232010-45216-pm/' title='Etapa1 10232010 45216 PM'><img width="150" height="150" src="http://www.bitabit.eng.br/wp-content/uploads/2011/03/Etapa1-10232010-45216-PM-150x150.jpg" class="attachment-thumbnail" alt="Deferred Render: Da esquerda para direita, imagem final, mapa diffuse, mapa das normais e mapa de iluminacao" title="Etapa1 10232010 45216 PM" /></a>
<a href='http://www.bitabit.eng.br/2011/03/23/apresentando-ploobs-engine/etapa1-10232010-64241-pm/' title='Etapa1 10232010 64241 PM'><img width="150" height="150" src="http://www.bitabit.eng.br/wp-content/uploads/2011/03/Etapa1-10232010-64241-PM-150x150.jpg" class="attachment-thumbnail" alt="Iluminacao avancada" title="Etapa1 10232010 64241 PM" /></a>
<a href='http://www.bitabit.eng.br/2011/03/23/apresentando-ploobs-engine/untitled/' title='Untitled'><img width="150" height="150" src="http://www.bitabit.eng.br/wp-content/uploads/2011/03/Untitled-150x150.jpg" class="attachment-thumbnail" alt="Ploobs Logo" title="Untitled" /></a>
<a href='http://www.bitabit.eng.br/2011/03/23/apresentando-ploobs-engine/marcuz/' title='marcuz'><img width="150" height="150" src="http://www.bitabit.eng.br/wp-content/uploads/2011/03/marcuz-150x150.jpg" class="attachment-thumbnail" alt="Iluminacao e Lod" title="marcuz" /></a>
<a href='http://www.bitabit.eng.br/2011/03/23/apresentando-ploobs-engine/etapa1-12112010-110342-pm/' title='Etapa1 12112010 110342 PM'><img width="150" height="150" src="http://www.bitabit.eng.br/wp-content/uploads/2011/03/Etapa1-12112010-110342-PM-150x150.jpg" class="attachment-thumbnail" alt="Piscina: Combinacao de diversas tecnicas" title="Etapa1 12112010 110342 PM" /></a>
<a href='http://www.bitabit.eng.br/2011/03/23/apresentando-ploobs-engine/etapa1-10232010-55208-pm/' title='Etapa1 10232010 55208 PM'><img width="150" height="150" src="http://www.bitabit.eng.br/wp-content/uploads/2011/03/Etapa1-10232010-55208-PM-150x150.jpg" class="attachment-thumbnail" alt="Oceano" title="Etapa1 10232010 55208 PM" /></a>
<a href='http://www.bitabit.eng.br/2011/03/23/apresentando-ploobs-engine/etapa1-12122010-123737-am/' title='Etapa1 12122010 123737 AM'><img width="150" height="150" src="http://www.bitabit.eng.br/wp-content/uploads/2011/03/Etapa1-12122010-123737-AM-150x150.jpg" class="attachment-thumbnail" alt="Homenagem a Hell Week" title="Etapa1 12122010 123737 AM" /></a>
<a href='http://www.bitabit.eng.br/2011/03/23/apresentando-ploobs-engine/etapa1-10262010-31059-pm/' title='Etapa1 10262010 31059 PM'><img width="150" height="150" src="http://www.bitabit.eng.br/wp-content/uploads/2011/03/Etapa1-10262010-31059-PM-150x150.jpg" class="attachment-thumbnail" alt="Sol e Scattering" title="Etapa1 10262010 31059 PM" /></a>
<a href='http://www.bitabit.eng.br/2011/03/23/apresentando-ploobs-engine/etapa1-10242010-83736-pm/' title='Etapa1 10242010 83736 PM'><img width="150" height="150" src="http://www.bitabit.eng.br/wp-content/uploads/2011/03/Etapa1-10242010-83736-PM-150x150.jpg" class="attachment-thumbnail" alt="Terreno MultiTexture e Vegetacao" title="Etapa1 10242010 83736 PM" /></a>
<a href='http://www.bitabit.eng.br/2011/03/23/apresentando-ploobs-engine/sombra/' title='sombra'><img width="150" height="150" src="http://www.bitabit.eng.br/wp-content/uploads/2011/03/sombra-150x150.jpg" class="attachment-thumbnail" alt="Sombra com CSM e Filtragem" title="sombra" /></a>

<p><em><br />
</em><em> </em><em> </em></p>
<img src="http://www.bitabit.eng.br/?ak_action=api_record_view&id=2076&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.bitabit.eng.br/2011/03/23/apresentando-ploobs-engine/feed/</wfw:commentRss>
		<slash:comments>10</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>
		<item>
		<title>Detecção e rastreamento de faces em vídeos &#8211; Como detectar faces em vídeos?</title>
		<link>http://www.bitabit.eng.br/2011/02/21/como-detectar-faces-em-videos/</link>
		<comments>http://www.bitabit.eng.br/2011/02/21/como-detectar-faces-em-videos/#comments</comments>
		<pubDate>Mon, 21 Feb 2011 12:00:54 +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[cascade]]></category>
		<category><![CDATA[computer vision]]></category>
		<category><![CDATA[detecção]]></category>
		<category><![CDATA[detection]]></category>
		<category><![CDATA[face]]></category>
		<category><![CDATA[haar-like features]]></category>
		<category><![CDATA[hipervídeo]]></category>
		<category><![CDATA[iniciação científica]]></category>
		<category><![CDATA[jones]]></category>
		<category><![CDATA[OpenCV]]></category>
		<category><![CDATA[viola]]></category>
		<category><![CDATA[visão computacional]]></category>

		<guid isPermaLink="false">http://www.bitabit.eng.br/?p=1880</guid>
		<description><![CDATA[. Dando continuidade à nossa série de artigos, nesse explicarei sobre a teoria responsável pela detecção facial e também a aplicação dela no projeto de iniciação científica. .. Teoria envolvida Durante essa fase do projeto foi desenvolvida a parte do sistema responsável pela detecção de faces em um vídeo, sendo utilizado o algoritmo de Viola e [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #ffffff;">.</span></p>
<p>Dando continuidade à nossa série de artigos, nesse explicarei sobre a teoria responsável pela detecção facial e também a aplicação dela no projeto de iniciação científica.</p>
<p><span style="color: #ffffff;">.</span><span style="color: #ffffff;">.</span></p>
<h2>Teoria envolvida</h2>
<p>Durante essa fase do projeto foi desenvolvida a parte do sistema responsável pela detecção de faces em um vídeo, sendo utilizado o algoritmo de Viola e Jones [1], baseado em filtros de Haar em cascata.</p>
<p>Segundo Viola e Jones, seu método possui três contribuições principais que o distingue de outros algoritmos e o torna computacionalmente mais eficiente, elas são: a imagem integral, o algoritmo de aprendizado baseado em AdaBoost e um método para combinar classificadores de complexidade crescente baseados em <em>Haar-like</em> <em>features</em> para criar um filtro em cascata eficiente.</p>
<div id="attachment_1882" class="wp-caption alignright" style="width: 231px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/02/imagemIntegral.png"><img class="size-full wp-image-1882" title="Imagem Integral" src="http://www.bitabit.eng.br/wp-content/uploads/2011/02/imagemIntegral.png" alt="" width="221" height="175" /></a><p class="wp-caption-text">Figura 1 - O valor da imagem integral na posição 1 é a soma dos pixels do retângulo A. O valor referente à posição 2 é igual a soma de A+B, para a posição 3 é A+C e para a posição 4 é A+B+C+D. Logo, a soma dos valores dos pixels do retângulo D pode ser calculada por 4+1-(2+3)</p></div>
<p>A técnica da imagem integral foi utilizada para que fosse possível computar de forma eficiente a presença ou não de uma <em>Haar-like feature</em> em cada uma das diversas posições e escalas que uma janela de observação pode ser colocada na imagem em que se quer detectar um objeto. Para isso, como o termo integral pode sugerir, é feita a soma dos valores de todos os <em>pixels</em> presentes acima e a esquerda de um <em>pixel</em> em específico podendo esse ser representado por um ponto (x,y) da imagem. Após a integração, obtém-se para cada <em>pixel</em> da imagem o valor da soma dos <em>pixels</em> do retângulo formado pelo canto da origem da imagem (canto superior esquerdo) e pela localização do <em>pixel</em> em questão, assim, para descobrir o valor médio dessa região, basta dividir o valor obtido pela área do retângulo. É importante notar que para calcular o valor médio de uma área que não tem um de seus cantos na origem da imagem, o processo necessário torna-se computacionalmente simples, necessitando de quatro etapas como pode ser visto na figura 1 retirada de [1].</p>
<p>Essa técnica torna eficiente o cálculo para avaliar a presença ou não de uma <em>haar-like feature</em> em determinada posição na imagem, pois utiliza exatamente os resultados obtidos com a imagem integral. Isso ocorre porque a presença é determinada pela subtração da média dos valores dos <em>pixels</em> da região considerada escura com a região clara. Se a diferença estiver acima de um limiar, ou seja, realmente existe uma região mais clara e outra mais escura, então pode ser verificada a existência da <em>feature</em>. Ao lado, pode-se observar o que seriam as <em>haar-like feature</em> na figura 2 retirada de [2] e a sobreposição delas em uma imagem para avaliar sua presença na figura 3 retirada de [1].</p>
<div id="attachment_1883" class="wp-caption aligncenter" style="width: 539px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/02/haarfeaures.png"><img class="size-full wp-image-1883 " title="Haar Features" src="http://www.bitabit.eng.br/wp-content/uploads/2011/02/haarfeaures.png" alt="" width="529" height="156" /></a><p class="wp-caption-text">Figura 2 - Exemplos de haar-like fetures.</p></div>
<div id="attachment_1884" class="wp-caption aligncenter" style="width: 343px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/02/haarFace.png"><img class="size-full wp-image-1884 " title="haarFace" src="http://www.bitabit.eng.br/wp-content/uploads/2011/02/haarFace.png" alt="" width="333" height="210" /></a><p class="wp-caption-text">Figura 3 - Exemplo de sobreposição de fetures em uma face.</p></div>
<p>O algoritmo de aprendizado baseado em AdaBoost é utilizado para definir quais das diversas <em>features</em> existentes serão utilizadas e também os valores dos limiares a que estarão sujeitas. O que Viola e Jones observaram foi que um número pequeno de <em>features</em> combinadas podem formar bons classificadores, sendo o principal problema escolher quais <em>features</em> são as mais adequadas. Para isso, a etapa de aprendizado realizada por uma variante do AdaBoost é responsável pela escolha de uma <em>feature</em> para treinar cada classificador para que ele consiga separar, da melhor maneira possível, amostras positivas e negativas. Assim, para cada <em>feature</em>, o algoritmo determina um limiar que minimize o número de amostras classificadas erroneamente. Na prática, segundo [1], nenhuma <em>feature</em> consegue uma baixa taxa de erro nesse processo de classificação. Para cada ciclo do processo de <em>boosting</em>, que deve escolher uma <em>feature</em> dentre 180000 possíveis, as selecionadas nos primeiros ciclos possuem taxa de erro de 0,1 a 0,3, já as selecionadas durante os ciclos finais chegam a taxas de erro de 0,4 e 0,5.</p>
<div id="attachment_1894" class="wp-caption alignright" style="width: 328px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/02/cascade.png"><img class="size-full wp-image-1894" title="Cascata" src="http://www.bitabit.eng.br/wp-content/uploads/2011/02/cascade.png" alt="" width="318" height="174" /></a><p class="wp-caption-text">Figura 4 - Estrutura que representa o detector em cascata.</p></div>
<p>O produto do processo anterior, os classificadores fracos, cada um contendo uma <em>feature</em> e um limiar, são então combinados com o auxílio de pesos para formar um classificador forte com o intuito de criar uma estrutura que possa minimizar a ocorrência de falsos negativos. Esses são organizados no formato de uma árvore de decisão degenerada que consiste no detector em cascata.</p>
<p>O funcionamento básico de uma estrutura como essa ocorre pela passagem de todas as sub janelas de uma imagem por diversos classificadores, sendo os primeiros mais simples que os seguintes. Se é obtido um resultado positivo pela análise do primeiro classificador, a janela segue para o seguinte, que se também for aprovada, continua pelos próximos classificadores até ser rejeitada ou então chegar ao final da cascata. Em qualquer uma das etapas, uma janela pode ser rejeitada, isso quer dizer que o detector entende que ali uma face não está presente. A cascata descrita pode ser observada na figura 4 ao lado também retirada de [1].</p>
<p>A estrutura dessa cascata reflete uma característica particular de um processo de detecção que consiste na existência de uma quantidade muito maior de sub janelas negativas em uma imagem do que sub janelas positivas, ou seja, que contenham faces. Assim, tem-se como objetivo rejeitar o maior número de janelas negativas logo nas primeiras etapas fazendo com que apenas janelas positivas continuem pelo processo de detecção. Isso é interessante, pois quanto mais se caminha pela estrutura em cascata, passa-se por classificadores mais complexos, e que portanto, exigem um custo maior de processamento. Logo, quanto antes uma janela negativa é rejeitada mais eficiente se torna o processo, pois requisita que apenas janelas positivas, que é um evento raro, passem por toda a árvore.</p>
<p>Em cada etapa os classificadores se tornam mais custosos, pois a medida que se percorre a árvore eles são treinados usando os exemplos que passaram por todas as etapas anteriores. Consequentemente, os classificadores que surgem posteriormente se deparam com uma tarefa de classificação mais difícil.</p>
<p>Como é salientado por Vila e Jones, o treino de uma cascata envolve um dilema entre a eficiência computacional e desempenho do detector. Isso ocorre porque, em geral, classificadores com mais <em>features</em> alcançam taxas maiores para detecção e menores para falsos positivos. Entretanto, classificadores como esses requisitam maior tempo de processamento. Chega-se a conclusão que para otimizar um processo como esse, deve-se atentar para o número de etapas de classificadores, o número de <em>features</em> e o limiar em cada uma dessas etapas. Como essa otimização é um processo extremamente complicado, na prática, o que se faz é criar uma cascata que a cada etapa reduza a taxa de falsos positivos e a taxa de detecção. Para cada etapa, define-se uma meta para o valor mínimo de redução de falsos positivos e para o valor máximo de redução para a detecção. Então, acrescentam-se <em>features</em> até que se atinja as metas estabelecidas para cada etapa e etapas são adicionadas até que se alcance uma taxa de falso positivos e de detecção desejadas para a cascata.</p>
<p><span style="color: #ffffff;">.</span></p>
<h2>Aplicação no projeto</h2>
<p>A biblioteca utilizada nesse projeto, OpenCV, já possui uma implementação do método explicado, bem como um filtro em cascata treinado para detectar faces. Para a manipulação e ajuste desse método, a função responsável do OpenCV possui alguns parâmetros que devem ser passados, entre eles encontram-se: fator de escala para a janela, o número mínimos de vizinhos, o menor tamanho possível para cada face e a opção de procurar faces em áreas que provavelmente elas não existem.</p>
<div id="attachment_1895" class="wp-caption alignright" style="width: 295px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/02/vizinhos0.png"><img class="size-full wp-image-1895" title="Vizinhos igual a zero" src="http://www.bitabit.eng.br/wp-content/uploads/2011/02/vizinhos0.png" alt="" width="285" height="303" /></a><p class="wp-caption-text">Figura 5 - Detecção de faces com o parâmetro de vizinhos em zero.</p></div>
<p>O fator de escala da janela é responsável pelo crescimento que a janela recebe em cada ciclo de passagem pela imagem, assim, para um valor de 1,1, a janela cresce dez porcento em cada ciclo. Para um valor de 1,2 cresceria vinte porcento o que resultaria em menos janelas a serem verificadas e que resulta em um menor tempo de processamento porém uma maior chance de se perderem faces.</p>
<p>O número mínimo de vizinhos serve para resolvermos o problema apontado pela figura 5 retirada de [3]. Neste caso, o valor adotado foi zero, o que mostrou todas as regiões da imagem que o detector julgou serem faces. Normalmente, o local onde realmente existe uma face recebe diversas marcações que se sobrepõem. Então, para obtermos um resultado mais adequado, utiliza-se esse parâmetro para definir o número mínimo de regiões sobrepostas necessárias para que uma face seja retornada.</p>
<p>O parâmetro do menor tamanho possível para cada face é utilizado para definirmos um tamanho mínimo para a face ser encontrada diferente do padrão pelo qual o filtro em cascata foi treinado, que em geral é de 20&#215;20 ou 24&#215;24 <em>pixels</em>. Assim, podemos determinar que apenas faces de tamanhos maiores sejam encontradas com a intenção de que não se perca tempo de processamento tentando detectar faces que não interessam para a aplicação que o sistema esteja sendo desenvolvido.</p>
<p>O último parâmetro permite evitar a procura de faces em áreas que provavelmente elas não existem. Isso também é útil para evitar que se perca tempo de processamento em áreas que, após a passagem de um detetor de bordas na imagem, acredita-se que não existam faces.</p>
<p>Após implementar o método, diversos ajustes foram necessários para maximizar seu desempenho.  Os parâmetros da função do OpenCV do algoritmo de Viola e Jones foram variados e também combinou-se essa função com outras etapas de processamento da imagem antes de sua detecção, como o aumento e a diminuição da imagem, equalização de histograma e <em>smoothing</em>. Na tentativa de aumentar o número de faces detectadas, o parâmetro de número mínimos de vizinhos foi diminuído, o que também resultou no aumento do número de falsos positivos, o que era esperado. Entretanto, isso não causou problemas para o projeto, pois, posteriormente, os falsos positivos foram tratados e puderam ser retirados do conjunto de faces encontradas. Verificou-se que a melhor combinação ocorreu para uma imagem de setenta e sete por cento da original, com um fator de escala para a janela de dez porcento, número mínimo de vizinhos igual a quatro, sem busca em regiões que provavelmente não existem faces e gaussian blur 3&#215;3.</p>
<p>Ao final, o detector mostrou bons resultados. Como era esperado, faces frontais foram bem identificadas contanto que não estivessem rotacionadas, já que essa característica é uma limitação do método utilizado. Apenas faces levemente rotacionadas ainda eram identificadas. Sobre invariância a escala, o método se mostrou adequado. O único fato que pode ser percebido foi sua restrição ao tamanho mínimo da face presente no vídeo, que decorre da limitação existente no detector em cascata utilizada pelo método. Isso limita a identificação de faces muito pequenas presentes em vídeos, mas não comprometeu o projeto, já que faces desse tamanho não são tão frequentes e quando presentes, normalmente não fazem parte da ação principal da tomada. Ainda pode ser citado, que, apesar do filtro em cascata ter sido criado para detectar faces frontais, percebeu-se que, em alguns casos, faces quase laterais foram identificadas, beneficiando-nos com um maior número de faces encontradas no vídeo.</p>
<p>Seguem exemplos de detecção facial realizadas nessa etapa do projeto nas figuras 6, 7 e 8 abaixo:</p>
<div id="attachment_1896" class="wp-caption aligncenter" style="width: 642px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/02/deteccaoEla1.png"><img class="size-full wp-image-1896 " title="Detecção facial" src="http://www.bitabit.eng.br/wp-content/uploads/2011/02/deteccaoEla1.png" alt="" width="632" height="380" /></a><p class="wp-caption-text">Figura 6 - Exemplo de detecção de face.</p></div>
<div id="attachment_1897" class="wp-caption aligncenter" style="width: 641px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/02/deteccaoDupla1.png"><img class="size-full wp-image-1897" title="Detecção de múltiplas faces" src="http://www.bitabit.eng.br/wp-content/uploads/2011/02/deteccaoDupla1.png" alt="" width="631" height="378" /></a><p class="wp-caption-text">Figura 7 - Exemplo de detecção de múltiplas faces.</p></div>
<div id="attachment_1898" class="wp-caption aligncenter" style="width: 642px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/02/deteccaoMichael1.png"><img class="size-full wp-image-1898 " title="Detecção em face não frontal" src="http://www.bitabit.eng.br/wp-content/uploads/2011/02/deteccaoMichael1.png" alt="" width="632" height="380" /></a><p class="wp-caption-text">Figura 8 - Exemplo de detecção em face não frontal</p></div>
<p><span style="color: #ffffff;">.</span></p>
<h2>Referências</h2>
<p>[1] P. Viola and M. Jones. Rapid object detection using a boosted cascade of simple features. In CVPR 2001 &#8211; IEEE Conference on Computer Vision and Pattern Recognition, 2001.</p>
<p>[2] A. Kuranov, R. Lienhart, and V. Pisarevsky. An empirical analysis of boosting algorithms for rapid objects with an extended set of haar-like features. Intel Technical Report MRL-TR-July02-01, 2002.</p>
<p>[3] Robin Hewitt. Seeing with opencv &#8211; part2 &#8211; Finding faces in images, 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 rastrear faces em videos" href="http://www.bitabit.eng.br/2011/02/28/como-rastrear-faces-em-videos/" target="_self">Como rastrear faces em vídeos?</a></p>
<p>Anterior: <a title="Detecção e rastreamento de faces em vídeos" href="http://www.bitabit.eng.br/2011/02/14/deteccao-e-rastreamento-de-faces-em-videos/" target="_self">Detecção e rastreamento de faces em vídeos</a></p>
<p><span style="color: #ffffff;">.</span></p>
<p><span style="color: #ffffff;"><br />
</span></p>
<img src="http://www.bitabit.eng.br/?ak_action=api_record_view&id=1880&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.bitabit.eng.br/2011/02/21/como-detectar-faces-em-videos/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Detecção e rastreamento de faces em vídeos</title>
		<link>http://www.bitabit.eng.br/2011/02/14/deteccao-e-rastreamento-de-faces-em-videos/</link>
		<comments>http://www.bitabit.eng.br/2011/02/14/deteccao-e-rastreamento-de-faces-em-videos/#comments</comments>
		<pubDate>Mon, 14 Feb 2011 11:00:19 +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[computer vision]]></category>
		<category><![CDATA[detecção]]></category>
		<category><![CDATA[detection]]></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=1779</guid>
		<description><![CDATA[Olá pessoal! Neste artigo, e nos próximos dessa série, vou compartilhar com vocês sobre o projeto da minha iniciação científica. Nesse artigo, vou me restringir a explicar porque fui fazer essa IC, o que era o projeto e os resultados obtidos. Nos próximos artigos, vou detalhar alguns aspectos técnicos relacionados à visão computacional utilizados durante [...]]]></description>
			<content:encoded><![CDATA[<p>Olá pessoal! Neste artigo, e nos próximos dessa série, vou compartilhar com vocês sobre o projeto da minha iniciação científica. Nesse artigo, vou me restringir a explicar porque fui fazer essa IC, o que era o projeto e os resultados obtidos. Nos próximos artigos, vou detalhar alguns aspectos técnicos relacionados à visão computacional utilizados durante o projeto.</p>
<div id="attachment_1782" class="wp-caption alignright" style="width: 281px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/01/Lena-detectada.png"><img class="size-full wp-image-1782 " title="Lena detectada" src="http://www.bitabit.eng.br/wp-content/uploads/2011/01/Lena-detectada.png" alt="Lena detectada" width="271" height="273" /></a><p class="wp-caption-text">Figura 1 - Exemplo de detecção facial - Lena</p></div>
<h3><span style="color: #ffffff;">.</span></h3>
<h2>Como tudo começou?</h2>
<p>Na verdade, a história não é assim tão simples e está dentro de um contexto maior e encadeada com acontecimentos anteriores. Mas como eu não estou aqui para contar a história de minha vida, vou contar o que interessa dentro desse contexto.</p>
<p>Meu interesse por visão computacional começou de forma inesperada e inclusive sem saber que o que eu estava me interessando chamava-se visão computacional. Eu, o Barbolo e o Ivan estávamos tendo algumas ideias relacionadas a encontrar coisas em imagens, juntar várias câmeras e criar &#8220;uma câmera&#8221; que enxergasse para todos os lados e coisas parecidas. Discutíamos bastante sobre o assunto e também como transformar essas ideias em aplicações reais para que pudéssemos encontrar nosso próximo projeto empreendedor. Mas normalmente eu era o mais empolgado com os possíveis projetos que poderiam surgir dentro dessa nova área que estávamos descobrindo.</p>
<p>Pois é, mas eu e meus amigos não somos os únicos seres pensantes desse planeta, claro que já existiam diversas coisas a respeito, inclusive uma tal área da computação que estudava toda essa parte de processamento e análise de imagens, a visão computacional. Podemos definir rapidamente visão computacional como uma ciência que se encarrega de ensinar o computador a enxergar como um humano.</p>
<p>Além disso, a tal bola que enxergava pra todos os lados já existia (figura 2), e pouco tempo depois descobrimos uma empresa, aqui mesmo no Brasil, que estava mexendo exatamente com aquilo que começamos a pensar.</p>
<div id="attachment_1790" class="wp-caption alignright" style="width: 182px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/01/full-shpere-camera-device.png"><img class="size-full wp-image-1790 " title="Câmera que enxerga pra todos os lados" src="http://www.bitabit.eng.br/wp-content/uploads/2011/01/full-shpere-camera-device.png" alt="" width="172" height="128" /></a><p class="wp-caption-text">Figura 2 - Câmera que enxerga para todos os lados - Já existe!</p></div>
<p>Nessa época, estava por vir mais um módulo de estágio do cooperativo. Meu interesse por visão aumentava, mas como não temos nenhuma matéria relacionada a isso na graduação, ficava um pouco complicado deslanchar em cima do assunto sem ter conhecimento nenhum sobre ele, era preciso estudar. Foi aí que decidi fazer do estágio uma iniciação científica, que inclusive, fazer uma IC, era algo desejado por mim já do primeiro ano da POLI. E posso dizer que não me arrependo nem um pouco. Hoje, um ano e meio depois, creio realmente ter encontrado o campo que gosto dentro da computação, inicio meu mestrado nessa área esse ano e também começo minha empresa que atuará nesse segmento, que no nosso país, ainda não é muito desenvolvido.</p>
<p>Tendo decidido o que eu ia fazer do estágio, fui correr atrás de quem mexia com visão na USP. Comecei pela POLI. Perguntei para vários professores e colegas até que cheguei em alguns professores que me atenderam. Entre eles posso citar o Hae Yong Kim e a Anna Helena Reali Costa. Ainda em busca de mais oportunidades para ter uma melhor opção de escolha, além de querer conhecer quem mais mexia com isso, conversei com professores do IME-USP. Dentre eles, Roberto Marcondes Cesar Junior, Roberto Hirata Junior e mais intensamente com o Marcel Jackowski e com o Carlos Hitoshi Morimoto.</p>
<p>Eu estava procurando algo relacionado a faces. Não lembro mais exatamente o motivo, mas tinha &#8220;cismado&#8221; que queria aprender mais sobre reconhecimento facial, ou algo relacionado a faces. Já que eu não conhecia os professores, minha escolha foi baseda no projeto que eu mais me identifiquei e que estava relacionado ao meu interesse. O projeto foi o do professor Hitoshi e portanto fiz a iniciação com ele no IME.</p>
<p>Espero com essa primeira parte ter ajudado alguns indecisos com relação a iniciação científica, estágio e o uso dele para realizar uma IC (sim, é possível e não arranca pedaço <img src='http://www.bitabit.eng.br/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ), facilitado a busca por professores que mexem com visão, além de ter despertado interesse em alguém para conhecer mais sobre de visão computacional, correr atrás de suas vontades, preferências e do que gosta de fazer. Espero ter motivado alguns a sair da mesmice e não achar que é refém do que já existe, parece ser o padrão ou o que deve acontecer.</p>
<p><span style="color: #ffffff;">.</span></p>
<h2>O projeto - Criação automática de índices de faces para aplicação em hipervídeo</h2>
<p>Na iniciação científica, sob a orientação do professor Hitoshi, investigamos formas automáticas para a criação de índices para hipervídeos baseados em faces. Similar ao conceito de hipertexto, um hipervídeo é um vídeo não linear que permite ao usuário acessar outros hipervídeos por meio de links distribuídos ao longo do hipervídeo. O primeiro artigo do Bit a Bit foi justamente sobre hipervídeo. Então, se você não lembra ou não sabe o que é, leia o artigo <a title="O que é Hipervídeo" href="http://www.bitabit.eng.br/2009/10/25/o-que-e-hipervideo/" target="_blank">O que é Hipervídeo?</a>.</p>
<p>Durante o projeto foram estudados algoritmos de visão computacional que foram utilizados no desenvolvimento de um sistema, utilizando a biblioteca OpenCV juntamente com Python, com a capacidade de detecção e rastreamento de faces para que então possibilitasse a criação automática de índices para hipervídeos.</p>
<p>Cada face detectada seria adicionada a uma estrutura contendo informações sobre as tomadas em que ela apareceu no vídeo. Uma tomada pode ser definida como o conjunto mínimo e sequencial de quadros que transmite significado. Este é um conceito importante para hipervídeo, pois pode-se desejar que um link esteja presente durante uma tomada, mas não na próxima. Consequentemente, um hipervídeo requer algoritmos capazes de detectar as transições de tomadas que foi foco de outras atividades de pesquisa do IME.</p>
<p>Entre outras várias aplicações possíveis, esse projeto visou utilizar essa estrutura como um índice visual que permita ao usuário clicar em uma face para visualizar informações do personagem e acessar outras tomadas onde o personagem aparece no vídeo, o que poderia ser aplicado na TV Digital, DVDs ou mesmo na internet. Além disso, existia a relação do nosso trabalho com um projeto dentro do TIDIA-Ae que consistia na criação de ferramentas de hipervídeo para uso em plataformas de educação a distância.</p>
<p>Ao longo dessa série de artigos, me concentrarei na detecção, no rastreamento e no início da classificação das faces, pois essas foram as partes centrais dos meus trabalhos no projeto. Para a detecção foi utilizado o algoritmo de Viola e Jones, baseado em filtros de Haar em cascata, para o rastreamento foi utilizado Camshift e para a classificação das faces utilizou-se conceitos como correlação, transformação afim e Kmeans.</p>
<p><span style="color: #ffffff;">.</span></p>
<h2>Alguns resultados</h2>
<p>Neste tópico, apresentarei algumas imagens demonstrando resultados das etapas do projeto. Mais detalhes sobre os resultados de cada etapa serão encontrados nos próximos artigos dessa série.</p>
<p>Na etapa de detecção, era possível detectar primordialmente faces frontais sem que elas estivessem rotacionadas ou fossem muito pequenas. Seguem exemplos:</p>
<div id="attachment_1865" class="wp-caption aligncenter" style="width: 522px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/02/deteccaoEla.png"><img class="size-full wp-image-1865  " title="Detecção de face" src="http://www.bitabit.eng.br/wp-content/uploads/2011/02/deteccaoEla.png" alt="Detecção de face" width="512" height="308" /></a><p class="wp-caption-text">Figura 3 - Exemplo de detecção de face</p></div>
<div id="attachment_1864" class="wp-caption aligncenter" style="width: 515px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/02/deteccaoDupla.png"><img class="size-full wp-image-1864 " title="Múltiplas faces" src="http://www.bitabit.eng.br/wp-content/uploads/2011/02/deteccaoDupla.png" alt="" width="505" height="302" /></a><p class="wp-caption-text">Figura 4 - Exemplo de detecção de múltiplas faces.</p></div>
<p>Com a adição do rastreamento, assim que uma face era detectada, o rastreador entrava em ação e seguia a movimentação da face pelo vídeo sem a necessidade da detecção. Isso garantia maior robustez já que era possível manter a trajetória das faces laterais ou rotacioandas além de ser computacionalmente menos custoso. Seguem exemplos:</p>
<div id="attachment_1867" class="wp-caption aligncenter" style="width: 516px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/02/deteccaoJIMlado.png"><img class="size-full wp-image-1867  " title="Face lateral" src="http://www.bitabit.eng.br/wp-content/uploads/2011/02/deteccaoJIMlado.png" alt="" width="506" height="304" /></a><p class="wp-caption-text">Figura 5 - Face de lado não é perdida quando utiliza-se o rastreamento.</p></div>
<div id="attachment_1868" class="wp-caption aligncenter" style="width: 516px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/02/deteccaoMichaelRotacionada.png"><img class="size-full wp-image-1868  " title="Face Rotacionada" src="http://www.bitabit.eng.br/wp-content/uploads/2011/02/deteccaoMichaelRotacionada.png" alt="" width="506" height="305" /></a><p class="wp-caption-text">Figura 6 - Face rotacionada continua a ser identificada pelo sistema.</p></div>
<div id="attachment_1869" class="wp-caption aligncenter" style="width: 517px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/02/rastreamentoMichael.png"><img class="size-full wp-image-1869  " title="RastreamentoMichael" src="http://www.bitabit.eng.br/wp-content/uploads/2011/02/rastreamentoMichael.png" alt="" width="507" height="304" /></a><p class="wp-caption-text">Figura 7 - Mesmo com a pessoa praticamente de costas, ainda é possível encontrar sua face.</p></div>
<p>Para a classificação das faces, foi necessário extrair as características faciais como os olhos, o nariz e a boca.</p>
<div id="attachment_1870" class="wp-caption aligncenter" style="width: 340px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/02/olhosNarizBoca.png"><img class="size-full wp-image-1870 " title="OlhosNarizBoca" src="http://www.bitabit.eng.br/wp-content/uploads/2011/02/olhosNarizBoca.png" alt="" width="330" height="200" /></a><p class="wp-caption-text">Figura 8 - Pode-se observar o centro encontrado para o nariz, olhos e boca.</p></div>
<p>Também foi realizada uma transformação afim para cada face e a aplicação de uma máscara para então calcularmos a correlação entre as faces.</p>
<div id="attachment_1871" class="wp-caption aligncenter" style="width: 307px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/02/transofrmadaMascaraFinal.png"><img class="size-full wp-image-1871   " title="transofrmadaMascaraFinal" src="http://www.bitabit.eng.br/wp-content/uploads/2011/02/transofrmadaMascaraFinal.png" alt="" width="297" height="385" /></a><p class="wp-caption-text">Figura 9 - 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 da aplicação da máscara.</p></div>
<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 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=1779&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.bitabit.eng.br/2011/02/14/deteccao-e-rastreamento-de-faces-em-videos/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Yahoo Pipes</title>
		<link>http://www.bitabit.eng.br/2011/01/24/yahoo-pipes/</link>
		<comments>http://www.bitabit.eng.br/2011/01/24/yahoo-pipes/#comments</comments>
		<pubDate>Mon, 24 Jan 2011 10:10:51 +0000</pubDate>
		<dc:creator>Eduardo Russo, Coop10</dc:creator>
				<category><![CDATA[Busca]]></category>
		<category><![CDATA[Coop10]]></category>
		<category><![CDATA[Dicas]]></category>
		<category><![CDATA[Internet]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Tecnologia]]></category>
		<category><![CDATA[Tutorial]]></category>
		<category><![CDATA[filtro]]></category>
		<category><![CDATA[fluxo]]></category>
		<category><![CDATA[mac os x]]></category>
		<category><![CDATA[pipes]]></category>
		<category><![CDATA[rss]]></category>
		<category><![CDATA[séries]]></category>
		<category><![CDATA[yahoo]]></category>

		<guid isPermaLink="false">http://www.bitabit.eng.br/?p=1767</guid>
		<description><![CDATA[Olá, meu nome é Eduardo Russo e faz 3 minutos que não acesso o Google Reader. Sim, sou um viciado em RSS e esse vício me fez querer filtrar o que acesso e até transformar o que não é RSS em RSS. A melhor maneira que encontrei para fazer isso foi o Yahoo Pipes, que, [...]]]></description>
			<content:encoded><![CDATA[<p>Olá, meu nome é Eduardo Russo e faz 3 minutos que não acesso o <a href="http://pt.wikipedia.org/wiki/Google_Reader" target="_blank">Google Reader</a>. Sim, sou um viciado em <a href="http://pt.wikipedia.org/wiki/RSS" target="_blank">RSS</a> e esse vício me fez querer filtrar o que acesso e até transformar o que não é RSS em RSS.</p>
<p><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/01/pipeslogo_whitebg.gif"><img class="alignright size-full wp-image-1768" title="pipeslogo_whitebg" src="http://www.bitabit.eng.br/wp-content/uploads/2011/01/pipeslogo_whitebg.gif" alt="" width="119" height="45" /></a>A melhor maneira que encontrei para fazer isso foi o <a href="http://pipes.yahoo.com/pipes/" target="_blank">Yahoo Pipes</a>, que, de maneira resumida, é um gerador de fluxo, com diversas possibilidades de filtros e ações.Para explicar melhor o que o Pipes faz, é mais fácil dar exemplos.</p>
<p>Assinava o <a href="http://pt.wikipedia.org/wiki/Feeds" target="_blank">feed</a> do <a href="http://lifehacker.com/" target="_blank">Lifehacker</a> completo, mas, meu real interesse eram dicas sobre Macs. Para tal, filtrava com o poder do meu cérebro, tentando, rapidamente, achar a palavra &#8220;Mac&#8221; nas notícias. Obviamente perdia muito tempo e a taxa de erro era imensa. Fazer um programa em PHP, Ruby on Rails ou qualquer outra coisa similar, seria fácil, mas, não tanto quanto criar um fluxo no Yahoo Pipes.</p>
<p>Para isso, basta ter uma conta do Yahoo, acessar o Pipes e começar a criar. Ou, ainda, buscar por fluxos que outros criaram e que servem ao seu propósito.</p>
<p>Esse do Lifehacker é bem simples, mas dá pra fazer coisas inacreditáveis. Cheguei a criar um fluxo que dava <a href="http://pt.wikipedia.org/wiki/An%C3%A1lise_sint%C3%A1tica_%28computa%C3%A7%C3%A3o%29" target="_blank">parse </a>num HTML para gerar um RSS. Não é a coisa mais fácil do mundo – qualquer um que já tentou encontrar lógica num HTML sabe do que estou falando –, mas, é bem mais fácil do que fazer seu próprio programa, arrumar um local na web para colocá-lo e só então poder usá-lo.</p>
<p>Como se vê a seguir, meu fluxo pega o feed do Lifehacker e busca em cada campo pelas palavras &#8220;mac&#8221;, &#8220;os x&#8221; ou &#8220;ios&#8221; e colocam isso no output.</p>
<div id="attachment_1770" class="wp-caption aligncenter" style="width: 764px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/01/yahoo-pipes-mac-on-lifehacker.png"><img class="size-full wp-image-1770" title="yahoo pipes - mac on lifehacker" src="http://www.bitabit.eng.br/wp-content/uploads/2011/01/yahoo-pipes-mac-on-lifehacker.png" alt="Filtros e output do Yahoo Pipes do Lifehacker" width="754" height="410" /></a><p class="wp-caption-text">Filtros e output do Yahoo Pipes do Lifehacker.</p></div>
<p style="text-align: left;">A ferramenta funciona com <a href="http://pt.wikipedia.org/wiki/Drag-and-drop" target="_blank">drag-and-drop</a>. Na esquerda, existem diversas opções de entrada, filtros e lógicas que podem ser aplicadas. Basta selecionar e juntar de maneira sequencial as ações.</p>
<p style="text-align: left;">Outra sequencia que criei foi para filtrar as novas legendas do <a href="http://legendas.tv/" target="_blank">Legendas.tv</a> para ver apenas as séries que eu acompanho. Não está 100% ainda, pois a busca é com &#8220;ous&#8221; e, portanto, tenho que remover coisas como &#8220;desperate&#8221; para que ele ache &#8220;house&#8221;, mas não &#8220;desperate housewifes&#8221;. Mas, com certeza filtrar manualmente algumas coisas incorretas é bem mais fácil do que o processo antigo.</p>
<div id="attachment_1771" class="wp-caption aligncenter" style="width: 767px"><a href="http://www.bitabit.eng.br/wp-content/uploads/2011/01/yahoo-pipes-series-on-legendas.tv_.png"><img class="size-full wp-image-1771" title="yahoo pipes - series on legendas.tv" src="http://www.bitabit.eng.br/wp-content/uploads/2011/01/yahoo-pipes-series-on-legendas.tv_.png" alt="Filtros e output do Yahoo Pipes do Legendas.tv" width="757" height="406" /></a><p class="wp-caption-text">Filtros e output do Yahoo Pipes do Legendas.tv</p></div>
<p style="text-align: left;">Neste exato momento, estou criando um Pipe para tentar transformar em RSS as <a href="http://cetsp1.cetsp.com.br/institucional/rodizio/default.asp" target="_blank">suspensões de rodízio de SP da CET</a>. Será um parto, mas, sei que é possível. Para ver meus Pipes, basta entrar no <a href="http://pipes.yahoo.com/pipes/person.info?guid=LJQTE6242D6UEDHWIVVCALWPJI" target="_blank">meu perfil</a>. Se você tem algum Pipe interessante ou alguma dica e quer compartilhar, deixe nos comentários.</p>
<img src="http://www.bitabit.eng.br/?ak_action=api_record_view&id=1767&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.bitabit.eng.br/2011/01/24/yahoo-pipes/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Qual é o melhor CAD livre?</title>
		<link>http://www.bitabit.eng.br/2010/11/17/qual-e-o-melhor-cad-livre/</link>
		<comments>http://www.bitabit.eng.br/2010/11/17/qual-e-o-melhor-cad-livre/#comments</comments>
		<pubDate>Wed, 17 Nov 2010 03:22:33 +0000</pubDate>
		<dc:creator>Rodrigo Rodrigues da Silva, Coop08</dc:creator>
				<category><![CDATA[Acadêmico]]></category>
		<category><![CDATA[Coop8]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[CAD]]></category>
		<category><![CDATA[cad livre]]></category>
		<category><![CDATA[GNU]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[polignu]]></category>
		<category><![CDATA[software livre]]></category>

		<guid isPermaLink="false">http://www.bitabit.eng.br/?p=1679</guid>
		<description><![CDATA[Hoje recebi um e-mail do Hilton Fernandes, hacker e colega da Poli, perguntando sobre a melhor opção em software livre para CAD. A verdade é que não há um, mas alguns CADs livres que se adequam a diferentes tipos de projetos. É claro que nenhum CAD livre cobre todas as funcionalidades de programas proprietários como [...]]]></description>
			<content:encoded><![CDATA[<p>Hoje recebi um e-mail do Hilton Fernandes, hacker e colega da Poli, perguntando sobre a melhor opção em software livre para CAD. A verdade é que não há <strong>um</strong>, mas alguns CADs livres que se adequam a diferentes tipos de projetos. É claro que nenhum CAD livre cobre todas as funcionalidades de programas proprietários como o AutoCAD, já que são todos relativamente recentes, mas com certeza já são robustos e completos o bastante para as necessidades de grande parte dos usuários.</p>
<div class="wp-caption alignright" style="width: 410px"><a href="http://sourceforge.net/apps/mediawiki/free-cad/nfs/project/f/fr/free-cad/b/b3/Freecad010.png"><img src="http://sourceforge.net/apps/mediawiki/free-cad/nfs/project/f/fr/free-cad/b/b3/Freecad010.png" alt="Freecad 0.10" width="400" /></a><p class="wp-caption-text">Modelagem 3D no Freecad 0.10</p></div>
<p>O <a href="http://www.qcad.org">QCAD</a>, licenciado sob a GNU GPLv2, é o mais conhecido &#8211; talvez por já estar há bastante tempo no repositório das principais distribuições, talvez pelo uso nativo de DXF, bem compatível com AutoCAD -, mas é adequado apenas para projetos simples de arquitetura e engenharia civil, já que é limitado a desenhos 2D, e também tem funções básicas de design de circuitos elétricos. Mas o maior problema é que a sua versão mais atual é sempre proprietária (QCAD Pro) e a versão livre (Community) é uma versão ultrapassada. O QCAD Community mais recente é de 2005 e, pelo que ando ouvindo, a Ribbonsoft, empresa responsável por todo o desenvolvimento, não vai mais lançar a versão Community. Além disso, no Community eles simplesmente removem ferramentas como <em>polyline</em>.</p>
<p>A falta de uma comunidade &#8211; pois a Ribbonsoft sempre fez o desenvolvimeto internamente &#8211; é outro grande problema do QCAD. Até pouco tempo ninguém se aventurara a fazer um <em>fork</em> porque (esperava-se que) logo a versão Pro seria liberada como Community assim que houvesse um novo lançamento. Com a cada vez menor frequência de lançamento e os rumores de que não haveria mais uma versão livre, surgiu o <a href="http://caduntu.org">Caduntu</a>, que atualizou para o Qt4 e incorporou patches de outros derivados já mortos. O Caduntu é multiplataforma: funciona em GNU/Linux, Windows e Mac.</p>
<p>O <a href="http://free-cad.sourceforge.net">FreeCAD</a> também é interessante, e está recebendo novos recursos muito rapidamente. Ótimo para trabalhar com 3D &#8211; o que não dá pra fazer com o QCad e derivados. No entanto, o Yorik van Havre (que é belga mas mora no Brasil e já apareceu em reuniões do <a href="http://polignu.org">PoliGNU</a>) tem feito várias melhorias ao módulo 2D. Talvez não seja o mais utilizável ainda, mas é o mais promissor. Assim como o Caduntu, o FreeCAD também é multiplataforma. Entre outras qualidades, ressalto a facilidade de criar extensões em Python e de automatizar tarefas com macros.</p>
<div class="wp-caption alignleft" style="width: 410px"><a href="http://brlcad.org/gallery/d/210-1/cassini-1.png"><img src="http://brlcad.org/gallery/d/210-1/cassini-1.png" alt="" width="400" /></a><p class="wp-caption-text">Sonda espacial Cassini renderizada no BRL-CAD</p></div>
<p>O <a href="http://brlcad.org">BRL-CAD</a> é muito avançado para projeto mecânico 3D (tem até cálculos de balística), e é desenvolvido pelo exército americano há 25 anos, mas a interface gráfica praticamente inexiste na versão estável, mas está em desenvolvimento.</p>
<p>O suporte a importação de arquivos no formato DWG, muito popular por ser o padão do AutoCAD, ainda é uma deficiência em todos eles. Identificamos isso há mais de um ano nas pesquisas que o PoliGNU realizou no <em>Projeto CAD Livre</em>, em parceria com o Escritório Piloto, e <a href="http://gnu.org/s/libredwg">colocamos a mão na massa</a>. Esperamos que em breve a LibreDWG esteja estável* e pronta para ser incorporada nesses softwares.</p>
<p>*Já é possível importar arquivos DWG no <a href="http://grass.osgeo.org">GRASS</a>, um software livre de georreferenciamento. Farei um post sobre isso em breve.</p>
<p>Post originalmente publicado em <a href="http://pitanga.polignu.org/qual-e-o-melhor-cad-livre/">http://pitanga.polignu.org</a></p>
<p>(C) 2010 Rodrigo Rodrigues da Silva<br />
Este texto pode ser copiado, modificado e redistribuído sob os termos da licença <a rel="license" href="http://creativecommons.org/licenses/by-sa/2.5/br/">Creative Commons by-sa</a></p>
<p><code>As imagens são de propriedade de seus respectivos autores.</code></p>
<img src="http://www.bitabit.eng.br/?ak_action=api_record_view&id=1679&type=feed" alt="" />]]></content:encoded>
			<wfw:commentRss>http://www.bitabit.eng.br/2010/11/17/qual-e-o-melhor-cad-livre/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

