<?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>Indigo &#187; ipad</title>
	<atom:link href="http://i.ndigo.com.br/tag/ipad/feed/" rel="self" type="application/rss+xml" />
	<link>http://i.ndigo.com.br</link>
	<description>I.ndigo Website</description>
	<lastBuildDate>Fri, 03 Feb 2012 19:01:49 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1-alpha</generator>
		<item>
		<title>Uma Semana, um App e um Estudo de Caso</title>
		<link>http://i.ndigo.com.br/2012/01/uma-semana-um-app-e-um-estudo-de-caso/</link>
		<comments>http://i.ndigo.com.br/2012/01/uma-semana-um-app-e-um-estudo-de-caso/#comments</comments>
		<pubDate>Mon, 30 Jan 2012 14:40:03 +0000</pubDate>
		<dc:creator>daniel.mack</dc:creator>
				<category><![CDATA[Ux]]></category>
		<category><![CDATA[agile]]></category>
		<category><![CDATA[app]]></category>
		<category><![CDATA[case]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[human-centered design]]></category>
		<category><![CDATA[interação]]></category>
		<category><![CDATA[interaction]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[prototipo]]></category>
		<category><![CDATA[prototype]]></category>
		<category><![CDATA[tech]]></category>
		<category><![CDATA[ucd]]></category>
		<category><![CDATA[ux]]></category>

		<guid isPermaLink="false">http://i.ndigo.com.br/?p=738</guid>
		<description><![CDATA[Um aplicativo muito interessante que foi criado dentro de uma loja, consiste em comparar modelos de óculos através da interação com o aplicativo de iPad. O lado deslumbrante é como foi produzido de uma forma nunca visto antes. A equipe de Nordstrom Innovation conseguiu introduzir os processos de design centrado no usuário tendo feedback instantâneo [...]]]></description>
			<content:encoded><![CDATA[<p><iframe width="660" height="365" src="http://www.youtube.com/embed/szr0ezLyQHY" frameborder="0" allowfullscreen></iframe></p>
<p>Um aplicativo muito interessante que foi criado dentro de uma loja, consiste em comparar modelos de óculos através da interação com o aplicativo de iPad.<br />
O lado deslumbrante é como foi produzido de uma forma nunca visto antes.</p>
<p>A equipe de Nordstrom Innovation conseguiu introduzir os processos de design centrado no usuário tendo feedback instantâneo das funcionalidades principais. O aplicativo torna-se fácil, rápido e vai direto ao ponto.<br />
Confira como foi tudo isso foi implementado no vídeo.</p>
<p>Criação e produção de <em>Nordstrom Innovation</em>.</p>
]]></content:encoded>
			<wfw:commentRss>http://i.ndigo.com.br/2012/01/uma-semana-um-app-e-um-estudo-de-caso/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mobile Year in Review</title>
		<link>http://i.ndigo.com.br/2012/01/mobile-year-in-review-2/</link>
		<comments>http://i.ndigo.com.br/2012/01/mobile-year-in-review-2/#comments</comments>
		<pubDate>Fri, 20 Jan 2012 20:49:41 +0000</pubDate>
		<dc:creator>felipe.sabino</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[app]]></category>
		<category><![CDATA[application]]></category>
		<category><![CDATA[Brazil]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[I.ndigo]]></category>
		<category><![CDATA[indigo]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[mobile device]]></category>
		<category><![CDATA[mobile internet]]></category>
		<category><![CDATA[São Paulo]]></category>

		<guid isPermaLink="false">http://i.ndigo.com.br/?p=667</guid>
		<description><![CDATA[2011 was a really intense year here at I.ndigo. More rewarding than launching 29 apps, was being able to witness the Brazilian market maturation and successfully accomplish worldwide recognized cases. We would like to thank all partners, agencies, clients, employees and our families for believing in our potential and helping us build this result that [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://i.ndigo.com.br/wp-content/uploads/2012/01/infografico-aplicativos-indigo-eng.png"><img src="http://i.ndigo.com.br/wp-content/uploads/2012/01/infografico-aplicativos-indigo-eng-708x1024.png" alt="" title="infografico-aplicativos-indigo-eng" width="660" height="954" class="aligncenter size-large wp-image-673" /></a></p>
<p>2011 was a really intense year here at I.ndigo. More rewarding than launching 29 apps, was being able to witness the Brazilian market maturation and successfully accomplish worldwide recognized cases.</p>
<p>We would like to thank all partners, agencies, clients, employees and our families for believing in our potential and helping us build this result that we are pleased to share with you.</p>
<p>Bring on 2012!</p>
]]></content:encoded>
			<wfw:commentRss>http://i.ndigo.com.br/2012/01/mobile-year-in-review-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mobile Year in Review</title>
		<link>http://i.ndigo.com.br/2012/01/mobile-year-in-review/</link>
		<comments>http://i.ndigo.com.br/2012/01/mobile-year-in-review/#comments</comments>
		<pubDate>Fri, 20 Jan 2012 15:02:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[App Forward]]></category>
		<category><![CDATA[Apps]]></category>
		<category><![CDATA[Go Tech]]></category>
		<category><![CDATA[Keep Watching]]></category>
		<category><![CDATA[Mobile Trends & Mobile Business]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[aplicativo]]></category>
		<category><![CDATA[app]]></category>
		<category><![CDATA[brasil]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[dispositivos móveis]]></category>
		<category><![CDATA[I.ndigo]]></category>
		<category><![CDATA[indigo]]></category>
		<category><![CDATA[internet móvel]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[São Paulo]]></category>

		<guid isPermaLink="false">http://i.ndigo.com.br/?p=559</guid>
		<description><![CDATA[O ano de 2011 foi realmente intenso aqui na I.ndigo. Agradecemos a todos os parceiros, agências, clientes, colaboradores e às nossas famílias por confiarem em nosso potencial e nos ajudarem a construir o resultado que temos o prazer de compartilhar com vocês. ]]></description>
			<content:encoded><![CDATA[<p><a href="http://i.ndigo.com.br/wp-content/uploads/2012/01/infografico-aplicativos-indigo.png"><img class="aligncenter size-large wp-image-657" title="infografico-aplicativos-indigo" src="http://i.ndigo.com.br/wp-content/uploads/2012/01/infografico-aplicativos-indigo-708x1024.png" alt="Infografico I.ndigo 2011" width="660" height="954" /></a></p>
<p>O ano de 2011 foi realmente intenso aqui na I.ndigo. Mais gratificante do que o lançamento dos 29 apps, foi poder testemunhar o amadurecimento do mercado brasileiro e emplacar cases reconhecidos no mundo inteiro.</p>
<p>Agradecemos a todos os parceiros, agências, clientes, colaboradores e às nossas famílias por confiarem em nosso potencial e nos ajudarem a construir o resultado que temos o prazer de compartilhar com vocês.</p>
<p>Que venha 2012!</p>
]]></content:encoded>
			<wfw:commentRss>http://i.ndigo.com.br/2012/01/mobile-year-in-review/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>iOS Facial Recognition</title>
		<link>http://i.ndigo.com.br/2012/01/ios-facial-recognition/</link>
		<comments>http://i.ndigo.com.br/2012/01/ios-facial-recognition/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 23:54:20 +0000</pubDate>
		<dc:creator>Raphael Petegrosso</dc:creator>
				<category><![CDATA[English]]></category>
		<category><![CDATA[core image]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[facial recognition]]></category>
		<category><![CDATA[iOS 5 Tech Talk World Tour]]></category>
		<category><![CDATA[ios5]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iphone]]></category>

		<guid isPermaLink="false">http://i.ndigo.com.br/?p=636</guid>
		<description><![CDATA[Core Image was one of the many interesting topics discussed at iOS Tech Talk Tour that took place in São Paulo on january 9th. It is a framework that was already available at the MacOS and now can also be used by iOS developers. It is important to notice that this framework is available only [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://i.ndigo.com.br/wp-content/uploads/2012/01/big-bang.jpeg" alt="iOS Facial Recognition Test" title="iOS Facial Recognition Test" width="660" height="371" class="aligncenter size-full wp-image-643" /></p>
<p>Core Image was one of the many interesting topics discussed at iOS Tech Talk Tour that took place in São Paulo on january 9th. It is a framework that was already available at the MacOS and now can also be used by iOS developers.</p>
<p>It is important to notice that this framework is available only after iOS 5.0, resulting in a use limited to the application requirements. However, according to <a href="http://news.cnet.com/8301-13579_3-57321295-37/ios-5-on-almost-40-percent-of-iphones/" target="_blank">CNET</a> the percentage of devices using iOS 5 in November, 2011 was already 40%, showing that apps developed to this version will shortly be available to the majority of users</p>
<p>Facial recognition is, by far, the most interesting of Core Image&#8217;s features, which will be detailed in this article. This new technique allow developers to think about new apps using this concept with a very low implementation cost.</p>
<p>We will show you how to implement the facial recognition straight from the device&#8217;s camera data stream. The source code is based on Apple&#8217;s SquareCam <a href="http://developer.apple.com/library/ios/#samplecode/SquareCam/Introduction/Intro.html" target="_blank">example project</a>.</p>
<div><span><br />
</span></div>
<div><strong>Camera Configuration</strong></div>
<div>
<p><span id="internal-source-marker_0.11296257469803095"> </span></p>
<p>The first step is to configure the camera using the AVFoundation Framework, available since iOS 4 release in a way we can directly read the device stream.</p>
<p>This configuration is made in order to use the following objects:</p>
<ul>
<li><strong><a href="http://developer.apple.com/library/IOs/#documentation/AVFoundation/Reference/AVCaptureSession_Class/Reference/Reference.html" target="_blank">AVCaptureSession</a></strong> &#8211; This object represents a session that coordinates the data flow from AV input devices to the output. In order to accomplish that, We add the input and output devices to this session object and start data flow using the startRunning messages (and stop it by using stopRunning).</li>
</ul>
</div>
<div>
<p><span id="internal-source-marker_0.11296257469803095"> </span></p>
<ul>
<li><strong><a href="http://developer.apple.com/library/mac/#documentation/AVFoundation/Reference/AVCaptureDevice_Class/Reference/Reference.html" target="_blank">AVCaptureDevice</a></strong> &#8211; It is a physical device abstraction which provides an input for a AVCapureSession object. There is an object available for every input device type, for instance: there is one video input for iPhone 3G, but there are two of them for iPhone 4.</li>
</ul>
</div>
<div>
<p><span id="internal-source-marker_0.11296257469803095"> </span></p>
<ul>
<li><strong><a href="http://developer.apple.com/library/IOs/#documentation/AVFoundation/Reference/AVCaptureDeviceInput_Class/Reference/Reference.html" target="_blank">AVCaptureDeviceInput</a></strong> &#8211; It is an AVCaptureInput subclass used to add and input device into a session (AVCaptureSession).</li>
</ul>
</div>
<div>
<p><span id="internal-source-marker_0.11296257469803095"> </span></p>
<ul>
<li><strong><a href="http://developer.apple.com/library/mac/#documentation/AVFoundation/Reference/AVCaptureOutput_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40009543" target="_blank">AVCaptureOutput</a></strong> &#8211; It is an abstract class used to find a session output (AVCaptureSession).</li>
</ul>
</div>
<div><span id="internal-source-marker_0.11296257469803095">The image below, from Apple&#8217;s <a href="http://developer.apple.com/library/IOs/#documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/04_MediaCapture.html#//apple_ref/doc/uid/TP40010188-CH5-SW2" target="_blank">AV Foundation Programming Guide</a> shows the interaction between the instances and their data flow:</span></div>
<div><span><br />
</span></div>
<div style="text-align: center;"><img class="aligncenter size-full wp-image-584" src="http://i.ndigo.com.br/wp-content/uploads/2012/01/captureDetail.jpg" alt="" width="553" height="330" /></div>
<div>
<p><span> </span></p>
<div><span id="internal-source-marker_0.11296257469803095">The folowing chunk of code was taken from SquareCam project. It shows how to configure the camera:</span></div>
<div><span><br />
</span></div>
</div>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #49f;">-</span> <span style="color: #49f;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #49f;">&#41;</span>setupAVCapture
<span style="color: #49f;">&#123;</span>
    AVCaptureSession <span style="color: #49f;">*</span>session <span style="color: #49f;">=</span> <span style="color: #49f;">&#91;</span>AVCaptureSession new<span style="color: #49f;">&#93;</span>;
    <span style="color: #a61390;">if</span> <span style="color: #49f;">&#40;</span><span style="color: #49f;">&#91;</span><span style="color: #49f;">&#91;</span>UIDevice currentDevice<span style="color: #49f;">&#93;</span> userInterfaceIdiom<span style="color: #49f;">&#93;</span> <span style="color: #49f;">==</span> UIUserInterfaceIdiomPhone<span style="color: #49f;">&#41;</span>
        <span style="color: #49f;">&#91;</span>session setSessionPreset<span style="color: #49f;">:</span>AVCaptureSessionPreset640x480<span style="color: #49f;">&#93;</span>;
    <span style="color: #a61390;">else</span>
        <span style="color: #49f;">&#91;</span>session setSessionPreset<span style="color: #49f;">:</span>AVCaptureSessionPresetPhoto<span style="color: #49f;">&#93;</span>;
&nbsp;
    <span style="color: #11740a; font-style: italic;">// Select a video device, make an input</span>
    AVCaptureDevice <span style="color: #49f;">*</span>device <span style="color: #49f;">=</span> <span style="color: #49f;">&#91;</span>AVCaptureDevice defaultDeviceWithMediaType<span style="color: #49f;">:</span>AVMediaTypeVideo<span style="color: #49f;">&#93;</span>;
    AVCaptureDeviceInput <span style="color: #49f;">*</span>deviceInput <span style="color: #49f;">=</span> <span style="color: #49f;">&#91;</span>AVCaptureDeviceInput deviceInputWithDevice<span style="color: #49f;">:</span>device error<span style="color: #49f;">:</span><span style="color: #a61390;">nil</span><span style="color: #49f;">&#93;</span>;
&nbsp;
    <span style="color: #a61390;">if</span> <span style="color: #49f;">&#40;</span> <span style="color: #49f;">&#91;</span>session canAddInput<span style="color: #49f;">:</span>deviceInput<span style="color: #49f;">&#93;</span> <span style="color: #49f;">&#41;</span>
        <span style="color: #49f;">&#91;</span>session addInput<span style="color: #49f;">:</span>deviceInput<span style="color: #49f;">&#93;</span>;
&nbsp;
    <span style="color: #11740a; font-style: italic;">// Make a video data output</span>
    videoDataOutput <span style="color: #49f;">=</span> <span style="color: #49f;">&#91;</span><span style="color: #49f;">&#91;</span>AVCaptureVideoDataOutput alloc<span style="color: #49f;">&#93;</span> init<span style="color: #49f;">&#93;</span>;
&nbsp;
    <span style="color: #11740a; font-style: italic;">// we want BGRA, both CoreGraphics and OpenGL work well with 'BGRA'</span>
    <span style="color: #8844FF;">NSDictionary</span> <span style="color: #49f;">*</span>rgbOutputSettings <span style="color: #49f;">=</span> <span style="color: #49f;">&#91;</span><span style="color: #8844FF;">NSDictionary</span> dictionaryWithObject<span style="color: #49f;">:</span>
    <span style="color: #49f;">&#91;</span><span style="color: #8844FF;">NSNumber</span> numberWithInt<span style="color: #49f;">:</span>kCMPixelFormat_32BGRA<span style="color: #49f;">&#93;</span> forKey<span style="color: #49f;">:</span><span style="color: #49f;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #49f;">&#41;</span>kCVPixelBufferPixelFormatTypeKey<span style="color: #49f;">&#93;</span>;
    <span style="color: #49f;">&#91;</span>videoDataOutput setVideoSettings<span style="color: #49f;">:</span>rgbOutputSettings<span style="color: #49f;">&#93;</span>;
    <span style="color: #49f;">&#91;</span>videoDataOutput setAlwaysDiscardsLateVideoFrames<span style="color: #49f;">:</span><span style="color: #a61390;">YES</span><span style="color: #49f;">&#93;</span>; <span style="color: #11740a; font-style: italic;">// discard if the data output queue is blocked (as we process the still image)</span>
&nbsp;
    videoDataOutputQueue <span style="color: #49f;">=</span> dispatch_queue_create<span style="color: #49f;">&#40;</span><span style="color: #bf1d1a;">&quot;VideoDataOutputQueue&quot;</span>, <span style="color: #a61390;">NULL</span><span style="color: #49f;">&#41;</span>;
    <span style="color: #49f;">&#91;</span>videoDataOutput setSampleBufferDelegate<span style="color: #49f;">:</span>self queue<span style="color: #49f;">:</span>videoDataOutputQueue<span style="color: #49f;">&#93;</span>;
&nbsp;
    <span style="color: #a61390;">if</span> <span style="color: #49f;">&#40;</span> <span style="color: #49f;">&#91;</span>session canAddOutput<span style="color: #49f;">:</span>videoDataOutput<span style="color: #49f;">&#93;</span> <span style="color: #49f;">&#41;</span>
        <span style="color: #49f;">&#91;</span>session addOutput<span style="color: #49f;">:</span>videoDataOutput<span style="color: #49f;">&#93;</span>;
&nbsp;
    previewLayer <span style="color: #49f;">=</span> <span style="color: #49f;">&#91;</span><span style="color: #49f;">&#91;</span>AVCaptureVideoPreviewLayer alloc<span style="color: #49f;">&#93;</span> initWithSession<span style="color: #49f;">:</span>session<span style="color: #49f;">&#93;</span>;
    <span style="color: #49f;">&#91;</span>previewLayer setBackgroundColor<span style="color: #49f;">:</span><span style="color: #49f;">&#91;</span><span style="color: #49f;">&#91;</span>UIColor blackColor<span style="color: #49f;">&#93;</span> CGColor<span style="color: #49f;">&#93;</span><span style="color: #49f;">&#93;</span>;
    <span style="color: #49f;">&#91;</span>previewLayer setVideoGravity<span style="color: #49f;">:</span>AVLayerVideoGravityResizeAspect<span style="color: #49f;">&#93;</span>;
    CALayer <span style="color: #49f;">*</span>rootLayer <span style="color: #49f;">=</span> <span style="color: #49f;">&#91;</span>previewView layer<span style="color: #49f;">&#93;</span>;
    <span style="color: #49f;">&#91;</span>rootLayer setMasksToBounds<span style="color: #49f;">:</span><span style="color: #a61390;">YES</span><span style="color: #49f;">&#93;</span>;
    <span style="color: #49f;">&#91;</span>previewLayer setFrame<span style="color: #49f;">:</span><span style="color: #49f;">&#91;</span>rootLayer bounds<span style="color: #49f;">&#93;</span><span style="color: #49f;">&#93;</span>;
    <span style="color: #49f;">&#91;</span>rootLayer addSublayer<span style="color: #49f;">:</span>previewLayer<span style="color: #49f;">&#93;</span>;
    <span style="color: #49f;">&#91;</span>session startRunning<span style="color: #49f;">&#93;</span>;
&nbsp;
<span style="color: #49f;">&#125;</span></pre></div></div>

<div><span><br />
</span></div>
<p><strong>Identifying a face with a CIDetector</strong></p>
<p>According to <a href="http://developer.apple.com/library/ios/#documentation/CoreImage/Reference/CIDetector_Ref/Reference/Reference.html" target="_blank">CIDetector&#8217;s Class Reference</a> the CIDetector object (available since iOS 5 inside CoreImage.framework) uses image processing to find &#8220;features&#8221; inside an image.</p>
<p>So, the next step is to identify the face in our video data stream is to configure a CIDetector. We can create an instance of the object by instantiating:</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #8844FF;">NSDictionary</span> <span style="color: #49f;">*</span>detectorOptions <span style="color: #49f;">=</span> <span style="color: #49f;">&#91;</span><span style="color: #49f;">&#91;</span><span style="color: #8844FF;">NSDictionary</span> alloc<span style="color: #49f;">&#93;</span> initWithObjectsAndKeys<span style="color: #49f;">:</span>CIDetectorAccuracyLow, CIDetectorAccuracy, <span style="color: #a61390;">nil</span><span style="color: #49f;">&#93;</span>;
&nbsp;
faceDetector <span style="color: #49f;">=</span> <span style="color: #49f;">&#91;</span><span style="color: #49f;">&#91;</span>CIDetector detectorOfType<span style="color: #49f;">:</span>CIDetectorTypeFace context<span style="color: #49f;">:</span><span style="color: #a61390;">nil</span> options<span style="color: #49f;">:</span>detectorOptions<span style="color: #49f;">&#93;</span> retain<span style="color: #49f;">&#93;</span>;</pre></div></div>

<p>When we previously initialized the camera, we configured our controller to act as a the video output stream&#8217;s delegate (<em>videoDataOutput</em>) at the line:</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #49f;">&#91;</span>videoDataOutput setSampleBufferDelegate<span style="color: #49f;">:</span>self queue<span style="color: #49f;">:</span>videoDataOutputQueue<span style="color: #49f;">&#93;</span>;</pre></div></div>

<p>We can now implement the following method to read the video data stream:</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #49f;">-</span> <span style="color: #49f;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #49f;">&#41;</span>captureOutput<span style="color: #49f;">:</span><span style="color: #49f;">&#40;</span>AVCaptureOutput <span style="color: #49f;">*</span><span style="color: #49f;">&#41;</span>captureOutput didOutputSampleBuffer<span style="color: #49f;">:</span><span style="color: #49f;">&#40;</span>CMSampleBufferRef<span style="color: #49f;">&#41;</span>sampleBuffer fromConnection<span style="color: #49f;">:</span><span style="color: #49f;">&#40;</span>AVCaptureConnection <span style="color: #49f;">*</span><span style="color: #49f;">&#41;</span>connection
<span style="color: #49f;">&#123;</span>
…
<span style="color: #49f;">&#125;</span></pre></div></div>

<p>Finally, with a CIDetector&#8217;s instance and the video data stream, We can identify our face.</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #11740a; font-style: italic;">// got an image</span>
CVPixelBufferRef pixelBuffer <span style="color: #49f;">=</span> CMSampleBufferGetImageBuffer<span style="color: #49f;">&#40;</span>sampleBuffer<span style="color: #49f;">&#41;</span>;
CFDictionaryRef attachments <span style="color: #49f;">=</span> CMCopyDictionaryOfAttachments<span style="color: #49f;">&#40;</span>kCFAllocatorDefault, sampleBuffer, kCMAttachmentMode_ShouldPropagate<span style="color: #49f;">&#41;</span>;
CIImage <span style="color: #49f;">*</span>ciImage <span style="color: #49f;">=</span> <span style="color: #49f;">&#91;</span><span style="color: #49f;">&#91;</span>CIImage alloc<span style="color: #49f;">&#93;</span> initWithCVPixelBuffer<span style="color: #49f;">:</span>pixelBuffer options<span style="color: #49f;">:</span><span style="color: #49f;">&#40;</span><span style="color: #8844FF;">NSDictionary</span> <span style="color: #49f;">*</span><span style="color: #49f;">&#41;</span>attachments<span style="color: #49f;">&#93;</span>;
<span style="color: #a61390;">if</span> <span style="color: #49f;">&#40;</span>attachments<span style="color: #49f;">&#41;</span>
    CFRelease<span style="color: #49f;">&#40;</span>attachments<span style="color: #49f;">&#41;</span>;
<span style="color: #8844FF;">NSDictionary</span> <span style="color: #49f;">*</span>imageOptions <span style="color: #49f;">=</span> <span style="color: #a61390;">nil</span>;
&nbsp;
<span style="color: #11740a; font-style: italic;">// '6' identifies device on vertical position</span>
imageOptions <span style="color: #49f;">=</span> <span style="color: #49f;">&#91;</span><span style="color: #8844FF;">NSDictionary</span> dictionaryWithObject<span style="color: #49f;">:</span><span style="color: #49f;">&#91;</span><span style="color: #8844FF;">NSNumber</span> numberWithInt<span style="color: #49f;">:</span><span style="color: #2400d9;">6</span><span style="color: #49f;">&#93;</span> forKey<span style="color: #49f;">:</span>CIDetectorImageOrientation<span style="color: #49f;">&#93;</span>;
<span style="color: #8844FF;">NSArray</span> <span style="color: #49f;">*</span>features <span style="color: #49f;">=</span> <span style="color: #49f;">&#91;</span>faceDetector featuresInImage<span style="color: #49f;">:</span>ciImage options<span style="color: #49f;">:</span>imageOptions<span style="color: #49f;">&#93;</span>;
<span style="color: #49f;">&#91;</span>ciImage release<span style="color: #49f;">&#93;</span>;</pre></div></div>

<p>The array features have each element as an instance of a CIFaceFeature, which identify a new face found in the video and allow us to retrieve several information from it.</p>
<div><span><br />
</span></div>
<p><strong>Image&#8217;s CIFaceFeature</strong></p>
<p>A <a href="http://developer.apple.com/library/mac/#documentation/CoreImage/Reference/CIFaceFeature/Reference/Reference.html" target="_blank">CIFaceFeature</a> object properties describes the face found in a image. These properties are:</p>
<p><strong>hasLeftEyePosition</strong><br />
<strong>hasRightEyePosition</strong><br />
<strong>hasMouthPosition</strong><br />
<strong>leftEyePosition</strong><br />
<strong>rightEyePosition</strong><br />
<strong>mouthPosition</strong></p>
<p>Besides that, due to its <a href="http://developer.apple.com/library/mac/#documentation/CoreImage/Reference/CIFeature_Ref/Reference/Reference.html#//apple_ref/occ/cl/CIFeature" target="_blank">CIFeature</a> inheritance, it also has the following properties:</p>
<p><strong>bounds</strong> &#8211; The rectangle that the feature was found inside<br />
<strong>type</strong> &#8211; The feature type</p>
<p>By using this information several actions can be taken, such as adding new visual elements on top of the face which was found in the image.</p>
<div><span><br />
</span></div>
<p><strong>CIDetectorAccuracyLow Vs CIDetectorAccuracyHigh</strong></p>
<p>When we created our CIDetector, we provided the CIDetectorAccuracyLow parameter:</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #8844FF;">NSDictionary</span> <span style="color: #49f;">*</span>detectorOptions <span style="color: #49f;">=</span> <span style="color: #49f;">&#91;</span><span style="color: #49f;">&#91;</span><span style="color: #8844FF;">NSDictionary</span> alloc<span style="color: #49f;">&#93;</span> initWithObjectsAndKeys<span style="color: #49f;">:</span>CIDetectorAccuracyLow, CIDetectorAccuracy, <span style="color: #a61390;">nil</span><span style="color: #49f;">&#93;</span>;</pre></div></div>

<p>The reason we did that is because we are trying to read from a video stream, and using this option results in a faster analysis for each video frame, however, with a higher chance of not detecting any face at all.</p>
<p>In general, the CIDetectorAccuracyHigh option is used to analyse a single picture, resulting in a slower processing time, but with a higher face detection rate.</p>
<p>As you can notice, iOS 5 made it extremely easy to integrate facial recognition, which allows us to think again in several features that would be impracticable to implement in a project before. That said, we still have to be aware of the project requirements, since not all the users updates their operating system to the latest iOS version.</p>
<p>This post is also available in portuguese <a href="http://i.ndigo.com.br/2012/01/reconhecimento-de-faces-no-ios/">here</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://i.ndigo.com.br/2012/01/ios-facial-recognition/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Reconhecimento de Faces no iOS</title>
		<link>http://i.ndigo.com.br/2012/01/reconhecimento-de-faces-no-ios/</link>
		<comments>http://i.ndigo.com.br/2012/01/reconhecimento-de-faces-no-ios/#comments</comments>
		<pubDate>Thu, 19 Jan 2012 21:56:21 +0000</pubDate>
		<dc:creator>Raphael Petegrosso</dc:creator>
				<category><![CDATA[Go Tech]]></category>
		<category><![CDATA[core image]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[iOS 5 Tech Talk World Tour]]></category>
		<category><![CDATA[ios5]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[reconhecimento de face]]></category>

		<guid isPermaLink="false">http://i.ndigo.com.br/?p=568</guid>
		<description><![CDATA[Um dos interessantes tópicos abordados no evento iOS 5 Tech Talk Tour, que aconteceu em São Paulo no último dia 9 de janeiro, se refere ao Core Image, um framework que já era disponível no MacOS e agora pode ser usado pelos desenvolvedores de aplicativos para o iOS. É importante ressaltar que este framework está [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://i.ndigo.com.br/wp-content/uploads/2012/01/big-bang.jpeg" alt="iOS Facial Recognition Test" title="iOS Facial Recognition Test" width="660" height="371" class="aligncenter size-full wp-image-643" /></p>
<p>Um dos interessantes tópicos abordados no evento iOS 5 Tech Talk Tour, que aconteceu em São Paulo no último dia 9 de janeiro, se refere ao Core Image, um framework que já era disponível no MacOS e agora pode ser usado pelos desenvolvedores de aplicativos para o iOS.</p>
<p>É importante ressaltar que este framework está disponível apenas a partir do iOS 5.0, o que torna o seu uso ainda limitado aos requisitos do aplicativo. Porém, de acordo com <a href="http://news.cnet.com/8301-13579_3-57321295-37/ios-5-on-almost-40-percent-of-iphones/" target="_blank">artigo</a> do site CNET em novembro de 2011 a porcentagem de devices utilizando o iOS 5 já era de 40%, o que mostra que em pouco tempo os aplicativos lançados para essa versão já poderão ser baixados pela maior parte dos usuários.</p>
<p>Com certeza uma das características mais interessantes do Core Image para o iPhone é sua capacidade de reconhecimento de face, que vamos abordar neste artigo. Esta nova técnica faz com que possamos pensar em diversas aplicações utilizando este conceito, com baixo custo de implementação.</p>
<p>Vamos mostrar como fazer o reconhecimento de faces lendo diretamente do stream da câmera do iPhone. O código-fonte mostrado baseia-se no projeto SquareCam disponibilizado pela Apple como exemplo de uso de Reconhecimento de Faces, presente <a href="http://developer.apple.com/library/ios/#samplecode/SquareCam/Introduction/Intro.html" target="_blank">aqui</a>.</p>
<div><span><br />
</span></div>
<div><strong>Configuração da Camera</strong></div>
<div>
<p><span id="internal-source-marker_0.11296257469803095"> </span></p>
<p>Primeiramente, iremos configurar a câmera utilizando o framework AVFoundation, disponível a partir do iOS 4, de modo que possamos ler diretamente o stream do dispositivo.</p>
<p>A configuração é feita para que tenhamos as seguintes instâncias:</p>
<ul>
<li><strong><a href="http://developer.apple.com/library/IOs/#documentation/AVFoundation/Reference/AVCaptureSession_Class/Reference/Reference.html" target="_blank">AVCaptureSession</a></strong> &#8211; Este objeto representa uma sessão que coordena o fluxo de dados dos dispositivos de entrada AV para as saídas. Para isso, adicionamos os dispositivos de captura e saídas para esta sessão e iniciamos o fluxo de dados enviando uma mensagem startRunning e paramos com uma mensagem stopRunning.</li>
</ul>
</div>
<div>
<p><span id="internal-source-marker_0.11296257469803095"> </span></p>
<ul>
<li><strong><a href="http://developer.apple.com/library/mac/#documentation/AVFoundation/Reference/AVCaptureDevice_Class/Reference/Reference.html" target="_blank">AVCaptureDevice</a></strong> &#8211; É uma abstração de um dispositivo físico de captura que fornece uma entrada para um objeto AVCaptureSession. Há um objeto disponível para cada tipo de dispositivo de entrada. Por exemplo: no iPhone 3GS há uma entrada de vídeo, enquanto que no iPhone 4 há duas entradas.</li>
</ul>
</div>
<div>
<p><span id="internal-source-marker_0.11296257469803095"> </span></p>
<ul>
<li><strong><a href="http://developer.apple.com/library/IOs/#documentation/AVFoundation/Reference/AVCaptureDeviceInput_Class/Reference/Reference.html" target="_blank">AVCaptureDeviceInput</a></strong> &#8211; É uma subclasse de AVCaptureInput usada para adicionar um dispositivo de entrada em uma sessão (AVCaptureSession).</li>
</ul>
</div>
<div>
<p><span id="internal-source-marker_0.11296257469803095"> </span></p>
<ul>
<li><strong><a href="http://developer.apple.com/library/mac/#documentation/AVFoundation/Reference/AVCaptureOutput_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40009543" target="_blank">AVCaptureOutput</a></strong> &#8211; É uma classe abstrata usada para buscar uma saída da sessão (AVCaptureSession).</li>
</ul>
</div>
<div><span id="internal-source-marker_0.11296257469803095">A imagem abaixo, retirada do <a href="http://developer.apple.com/library/IOs/#documentation/AudioVideo/Conceptual/AVFoundationPG/Articles/04_MediaCapture.html#//apple_ref/doc/uid/TP40010188-CH5-SW2" target="_blank">AV Foundation Programming Guide</a> da Apple mostra a interação entre estas instâncias e o fluxo de dados entre elas:</span></div>
<div><span><br />
</span></div>
<div style="text-align: center;"><img class="aligncenter size-full wp-image-584" src="http://i.ndigo.com.br/wp-content/uploads/2012/01/captureDetail.jpg" alt="" width="553" height="330" /></div>
<div>
<p><span> </span></p>
<div><span id="internal-source-marker_0.11296257469803095">Vamos ver, em termos de código, como configurar a câmera. Utilizaremos o seguinte código, que foi reduzido do projeto SquareCam, para melhor visualização:</span></div>
<div><span><br />
</span></div>
</div>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #49f;">-</span> <span style="color: #49f;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #49f;">&#41;</span>setupAVCapture
<span style="color: #49f;">&#123;</span>
    AVCaptureSession <span style="color: #49f;">*</span>session <span style="color: #49f;">=</span> <span style="color: #49f;">&#91;</span>AVCaptureSession new<span style="color: #49f;">&#93;</span>;
    <span style="color: #a61390;">if</span> <span style="color: #49f;">&#40;</span><span style="color: #49f;">&#91;</span><span style="color: #49f;">&#91;</span>UIDevice currentDevice<span style="color: #49f;">&#93;</span> userInterfaceIdiom<span style="color: #49f;">&#93;</span> <span style="color: #49f;">==</span> UIUserInterfaceIdiomPhone<span style="color: #49f;">&#41;</span>
        <span style="color: #49f;">&#91;</span>session setSessionPreset<span style="color: #49f;">:</span>AVCaptureSessionPreset640x480<span style="color: #49f;">&#93;</span>;
    <span style="color: #a61390;">else</span>
        <span style="color: #49f;">&#91;</span>session setSessionPreset<span style="color: #49f;">:</span>AVCaptureSessionPresetPhoto<span style="color: #49f;">&#93;</span>;
&nbsp;
    <span style="color: #11740a; font-style: italic;">// Select a video device, make an input</span>
    AVCaptureDevice <span style="color: #49f;">*</span>device <span style="color: #49f;">=</span> <span style="color: #49f;">&#91;</span>AVCaptureDevice defaultDeviceWithMediaType<span style="color: #49f;">:</span>AVMediaTypeVideo<span style="color: #49f;">&#93;</span>;
    AVCaptureDeviceInput <span style="color: #49f;">*</span>deviceInput <span style="color: #49f;">=</span> <span style="color: #49f;">&#91;</span>AVCaptureDeviceInput deviceInputWithDevice<span style="color: #49f;">:</span>device error<span style="color: #49f;">:</span><span style="color: #a61390;">nil</span><span style="color: #49f;">&#93;</span>;
&nbsp;
    <span style="color: #a61390;">if</span> <span style="color: #49f;">&#40;</span> <span style="color: #49f;">&#91;</span>session canAddInput<span style="color: #49f;">:</span>deviceInput<span style="color: #49f;">&#93;</span> <span style="color: #49f;">&#41;</span>
        <span style="color: #49f;">&#91;</span>session addInput<span style="color: #49f;">:</span>deviceInput<span style="color: #49f;">&#93;</span>;
&nbsp;
    <span style="color: #11740a; font-style: italic;">// Make a video data output</span>
    videoDataOutput <span style="color: #49f;">=</span> <span style="color: #49f;">&#91;</span><span style="color: #49f;">&#91;</span>AVCaptureVideoDataOutput alloc<span style="color: #49f;">&#93;</span> init<span style="color: #49f;">&#93;</span>;
&nbsp;
    <span style="color: #11740a; font-style: italic;">// we want BGRA, both CoreGraphics and OpenGL work well with 'BGRA'</span>
    <span style="color: #8844FF;">NSDictionary</span> <span style="color: #49f;">*</span>rgbOutputSettings <span style="color: #49f;">=</span> <span style="color: #49f;">&#91;</span><span style="color: #8844FF;">NSDictionary</span> dictionaryWithObject<span style="color: #49f;">:</span>
    <span style="color: #49f;">&#91;</span><span style="color: #8844FF;">NSNumber</span> numberWithInt<span style="color: #49f;">:</span>kCMPixelFormat_32BGRA<span style="color: #49f;">&#93;</span> forKey<span style="color: #49f;">:</span><span style="color: #49f;">&#40;</span><span style="color: #a61390;">id</span><span style="color: #49f;">&#41;</span>kCVPixelBufferPixelFormatTypeKey<span style="color: #49f;">&#93;</span>;
    <span style="color: #49f;">&#91;</span>videoDataOutput setVideoSettings<span style="color: #49f;">:</span>rgbOutputSettings<span style="color: #49f;">&#93;</span>;
    <span style="color: #49f;">&#91;</span>videoDataOutput setAlwaysDiscardsLateVideoFrames<span style="color: #49f;">:</span><span style="color: #a61390;">YES</span><span style="color: #49f;">&#93;</span>; <span style="color: #11740a; font-style: italic;">// discard if the data output queue is blocked (as we process the still image)</span>
&nbsp;
    videoDataOutputQueue <span style="color: #49f;">=</span> dispatch_queue_create<span style="color: #49f;">&#40;</span><span style="color: #bf1d1a;">&quot;VideoDataOutputQueue&quot;</span>, <span style="color: #a61390;">NULL</span><span style="color: #49f;">&#41;</span>;
    <span style="color: #49f;">&#91;</span>videoDataOutput setSampleBufferDelegate<span style="color: #49f;">:</span>self queue<span style="color: #49f;">:</span>videoDataOutputQueue<span style="color: #49f;">&#93;</span>;
&nbsp;
    <span style="color: #a61390;">if</span> <span style="color: #49f;">&#40;</span> <span style="color: #49f;">&#91;</span>session canAddOutput<span style="color: #49f;">:</span>videoDataOutput<span style="color: #49f;">&#93;</span> <span style="color: #49f;">&#41;</span>
        <span style="color: #49f;">&#91;</span>session addOutput<span style="color: #49f;">:</span>videoDataOutput<span style="color: #49f;">&#93;</span>;
&nbsp;
    previewLayer <span style="color: #49f;">=</span> <span style="color: #49f;">&#91;</span><span style="color: #49f;">&#91;</span>AVCaptureVideoPreviewLayer alloc<span style="color: #49f;">&#93;</span> initWithSession<span style="color: #49f;">:</span>session<span style="color: #49f;">&#93;</span>;
    <span style="color: #49f;">&#91;</span>previewLayer setBackgroundColor<span style="color: #49f;">:</span><span style="color: #49f;">&#91;</span><span style="color: #49f;">&#91;</span>UIColor blackColor<span style="color: #49f;">&#93;</span> CGColor<span style="color: #49f;">&#93;</span><span style="color: #49f;">&#93;</span>;
    <span style="color: #49f;">&#91;</span>previewLayer setVideoGravity<span style="color: #49f;">:</span>AVLayerVideoGravityResizeAspect<span style="color: #49f;">&#93;</span>;
    CALayer <span style="color: #49f;">*</span>rootLayer <span style="color: #49f;">=</span> <span style="color: #49f;">&#91;</span>previewView layer<span style="color: #49f;">&#93;</span>;
    <span style="color: #49f;">&#91;</span>rootLayer setMasksToBounds<span style="color: #49f;">:</span><span style="color: #a61390;">YES</span><span style="color: #49f;">&#93;</span>;
    <span style="color: #49f;">&#91;</span>previewLayer setFrame<span style="color: #49f;">:</span><span style="color: #49f;">&#91;</span>rootLayer bounds<span style="color: #49f;">&#93;</span><span style="color: #49f;">&#93;</span>;
    <span style="color: #49f;">&#91;</span>rootLayer addSublayer<span style="color: #49f;">:</span>previewLayer<span style="color: #49f;">&#93;</span>;
    <span style="color: #49f;">&#91;</span>session startRunning<span style="color: #49f;">&#93;</span>;
&nbsp;
<span style="color: #49f;">&#125;</span></pre></div></div>

<div><span><br />
</span></div>
<p><strong>Identificando um Rosto com um CIDetector</strong></p>
<p>De acordo com o <a href="http://developer.apple.com/library/ios/#documentation/CoreImage/Reference/CIDetector_Ref/Reference/Reference.html" target="_blank">CIDetector Class Reference</a> da Apple, um objeto CIDetector, disponível a partir do iOS 5 no framework CoreImage.framework, usa processamento de imagem para encontrar &#8220;features&#8221; em uma imagem.</p>
<p>Assim, o próximo passo para identificar o rosto no nosso stream de vídeo é configurar um CIDetector. Após adicionamos este framework no projeto, criamos uma instância dele para utilizarmos da seguinte forma:</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #8844FF;">NSDictionary</span> <span style="color: #49f;">*</span>detectorOptions <span style="color: #49f;">=</span> <span style="color: #49f;">&#91;</span><span style="color: #49f;">&#91;</span><span style="color: #8844FF;">NSDictionary</span> alloc<span style="color: #49f;">&#93;</span> initWithObjectsAndKeys<span style="color: #49f;">:</span>CIDetectorAccuracyLow, CIDetectorAccuracy, <span style="color: #a61390;">nil</span><span style="color: #49f;">&#93;</span>;
&nbsp;
faceDetector <span style="color: #49f;">=</span> <span style="color: #49f;">&#91;</span><span style="color: #49f;">&#91;</span>CIDetector detectorOfType<span style="color: #49f;">:</span>CIDetectorTypeFace context<span style="color: #49f;">:</span><span style="color: #a61390;">nil</span> options<span style="color: #49f;">:</span>detectorOptions<span style="color: #49f;">&#93;</span> retain<span style="color: #49f;">&#93;</span>;</pre></div></div>

<p>Em nossa inicialização da câmera feita anteriormente configuramos nosso controller para atuar como delegate do stream de vídeo (<em>videoDataOutput</em>) com a seguinte linha:</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #49f;">&#91;</span>videoDataOutput setSampleBufferDelegate<span style="color: #49f;">:</span>self queue<span style="color: #49f;">:</span>videoDataOutputQueue<span style="color: #49f;">&#93;</span>;</pre></div></div>

<p>Desta forma, podemos implementar o seguinte método para ler o stream do vídeo:</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #49f;">-</span> <span style="color: #49f;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #49f;">&#41;</span>captureOutput<span style="color: #49f;">:</span><span style="color: #49f;">&#40;</span>AVCaptureOutput <span style="color: #49f;">*</span><span style="color: #49f;">&#41;</span>captureOutput didOutputSampleBuffer<span style="color: #49f;">:</span><span style="color: #49f;">&#40;</span>CMSampleBufferRef<span style="color: #49f;">&#41;</span>sampleBuffer fromConnection<span style="color: #49f;">:</span><span style="color: #49f;">&#40;</span>AVCaptureConnection <span style="color: #49f;">*</span><span style="color: #49f;">&#41;</span>connection
<span style="color: #49f;">&#123;</span>
…
<span style="color: #49f;">&#125;</span></pre></div></div>

<p>Por fim, com uma instância de um CIDetector e um método que lê o stream da câmera, podemos identificar um rosto utilizando o seguinte:</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #11740a; font-style: italic;">// got an image</span>
CVPixelBufferRef pixelBuffer <span style="color: #49f;">=</span> CMSampleBufferGetImageBuffer<span style="color: #49f;">&#40;</span>sampleBuffer<span style="color: #49f;">&#41;</span>;
CFDictionaryRef attachments <span style="color: #49f;">=</span> CMCopyDictionaryOfAttachments<span style="color: #49f;">&#40;</span>kCFAllocatorDefault, sampleBuffer, kCMAttachmentMode_ShouldPropagate<span style="color: #49f;">&#41;</span>;
CIImage <span style="color: #49f;">*</span>ciImage <span style="color: #49f;">=</span> <span style="color: #49f;">&#91;</span><span style="color: #49f;">&#91;</span>CIImage alloc<span style="color: #49f;">&#93;</span> initWithCVPixelBuffer<span style="color: #49f;">:</span>pixelBuffer options<span style="color: #49f;">:</span><span style="color: #49f;">&#40;</span><span style="color: #8844FF;">NSDictionary</span> <span style="color: #49f;">*</span><span style="color: #49f;">&#41;</span>attachments<span style="color: #49f;">&#93;</span>;
<span style="color: #a61390;">if</span> <span style="color: #49f;">&#40;</span>attachments<span style="color: #49f;">&#41;</span>
    CFRelease<span style="color: #49f;">&#40;</span>attachments<span style="color: #49f;">&#41;</span>;
<span style="color: #8844FF;">NSDictionary</span> <span style="color: #49f;">*</span>imageOptions <span style="color: #49f;">=</span> <span style="color: #a61390;">nil</span>;
&nbsp;
<span style="color: #11740a; font-style: italic;">// '6' identifies device on vertical position</span>
imageOptions <span style="color: #49f;">=</span> <span style="color: #49f;">&#91;</span><span style="color: #8844FF;">NSDictionary</span> dictionaryWithObject<span style="color: #49f;">:</span><span style="color: #49f;">&#91;</span><span style="color: #8844FF;">NSNumber</span> numberWithInt<span style="color: #49f;">:</span><span style="color: #2400d9;">6</span><span style="color: #49f;">&#93;</span> forKey<span style="color: #49f;">:</span>CIDetectorImageOrientation<span style="color: #49f;">&#93;</span>;
<span style="color: #8844FF;">NSArray</span> <span style="color: #49f;">*</span>features <span style="color: #49f;">=</span> <span style="color: #49f;">&#91;</span>faceDetector featuresInImage<span style="color: #49f;">:</span>ciImage options<span style="color: #49f;">:</span>imageOptions<span style="color: #49f;">&#93;</span>;
<span style="color: #49f;">&#91;</span>ciImage release<span style="color: #49f;">&#93;</span>;</pre></div></div>

<p>No código acima, temos o array features onde cada elemento é uma instância de um CIFaceFeature, que identifica uma face encontrada no vídeo e permite encontrar diversas informações sobre ela.</p>
<div><span><br />
</span></div>
<p><strong>CIFaceFeature de uma Imagem</strong></p>
<p>Um objeto <a href="http://developer.apple.com/library/mac/#documentation/CoreImage/Reference/CIFaceFeature/Reference/Reference.html" target="_blank">CIFaceFeature</a> descreve uma face encontrada em uma imagem. Suas propriedades informam as posições dos olhos e da boca da face. Estas propriedades são as seguintes:</p>
<p><strong>hasLeftEyePosition</strong> &#8211; Informa se a posição do olho esquerdo esta disponível<br />
<strong>hasRightEyePosition</strong> &#8211; Informa se a posição do olho direito esta disponível<br />
<strong>hasMouthPosition</strong> &#8211; Informa se a posição da boca esta disponível<br />
<strong>leftEyePosition</strong> &#8211; Informa a posição do olho esquerdo<br />
<strong>rightEyePosition</strong> &#8211; Informa a posição do olho direito<br />
<strong>mouthPosition</strong> &#8211; Informa a posição da boca</p>
<p>Além disso, por herdar de um <a href="http://developer.apple.com/library/mac/#documentation/CoreImage/Reference/CIFeature_Ref/Reference/Reference.html#//apple_ref/occ/cl/CIFeature" target="_blank">CIFeature</a>, também possui as seguintes propriedades:</p>
<p><strong>bounds</strong> &#8211; Um retângulo que contém a feature encontrada<br />
<strong>type</strong> &#8211; O tipo de feature encontrado</p>
<p>A partir destas informações diversas ações podem ser tomadas, como inserir elementos visuais sobre a face encontrada.</p>
<div><span><br />
</span></div>
<p><strong>Modo CIDetectorAccuracyLow Vs CIDetectorAccuracyHigh</strong></p>
<p>Quando criamos nosso CIDetector, um parâmetro de configuração utilizado foi CIDetectorAccuracyLow, como pode ser visto a seguir:</p>

<div class="wp_syntax"><div class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #8844FF;">NSDictionary</span> <span style="color: #49f;">*</span>detectorOptions <span style="color: #49f;">=</span> <span style="color: #49f;">&#91;</span><span style="color: #49f;">&#91;</span><span style="color: #8844FF;">NSDictionary</span> alloc<span style="color: #49f;">&#93;</span> initWithObjectsAndKeys<span style="color: #49f;">:</span>CIDetectorAccuracyLow, CIDetectorAccuracy, <span style="color: #a61390;">nil</span><span style="color: #49f;">&#93;</span>;</pre></div></div>

<p>O motivo desse uso foi pelo fato de estarmos fazendo a detecção diretamente do stream de vídeo e, por isso, utilizar esta opção faz com a análise de cada frame seja mais rápida, porém tendo uma chance maior de não detectar uma face.</p>
<p>De modo geral, a opção CIDetectorAccuracyHigh é utilizada somente quando vamos analisar uma única imagem, o que permite que possamos ter um processamento um pouco mais lento, encontrando com mais facilidade as faces.</p>
<p>Como podemos ver, a partir do iOS 5 ficou bem mais fácil utilizar detecção de faces em aplicativos, o que nos permite pensar em diversas soluções que anteriormente poderiam ser consideradas inviáveis para um projeto. Porém, como dito, devemos ainda nos alertar quanto aos requisitos do projeto, uma vez que nem todos os usuários já possuem esta versão de iOS.</p>
<p>Este post também está disponível em inglês <a href="http://i.ndigo.com.br/2012/01/ios-facial-recognition/">aqui</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://i.ndigo.com.br/2012/01/reconhecimento-de-faces-no-ios/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iOS 5 Tech Talk World Tour &#8211; Brazil 2012</title>
		<link>http://i.ndigo.com.br/2012/01/ios-5-tech-talk-world-tour-brazil-2012/</link>
		<comments>http://i.ndigo.com.br/2012/01/ios-5-tech-talk-world-tour-brazil-2012/#comments</comments>
		<pubDate>Tue, 10 Jan 2012 20:39:29 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Go Tech]]></category>
		<category><![CDATA[Mobile Trends & Mobile Business]]></category>
		<category><![CDATA[aplicativo]]></category>
		<category><![CDATA[Aprovação Aplicativos]]></category>
		<category><![CDATA[Brazil]]></category>
		<category><![CDATA[desenvolvimento]]></category>
		<category><![CDATA[Experiência do usuário]]></category>
		<category><![CDATA[ios]]></category>
		<category><![CDATA[iOS 5 Tech Talk World Tour]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[São Paulo]]></category>
		<category><![CDATA[Usabilidade]]></category>

		<guid isPermaLink="false">http://i.ndigo.com.br/?p=510</guid>
		<description><![CDATA[A I.ndigo participou do iOS 5 Tech Talk World Tour Brazil 2012 e conta para você como foi nossa experiência com os especialistas da Apple presentes no evento e seu impacto nos nossos próximos aplicativos.  ]]></description>
			<content:encoded><![CDATA[<p style="text-align: center;"><img class=" aligncenter" title="iOS 5 Tech Talk World Tour Brazil 2012" src="http://ndigo.com.br/mmkt/images/ios%205%20tech%20talk%20world%20tour%20brazil.jpg" alt="iOS 5 Tech Tour World Tour Brazil 2012" width="660" height="276" /></p>
<p style="text-align: left;">
<div id="_mcePaste">
<div id="_mcePaste">Aconteceu ontem em São Paulo o grande evento oficial da Apple que reuniu desenvolvedores de todo o país e, claro que a I.ndigo esteve presente.</div>
<div id="_mcePaste">O &#8220;iOS 5 Tech Talk World Tour&#8221; contou com palestras e consultorias de funcionários da Apple que compartilharam suas experiências com a comunidade de desenvolvedores, principalmente sobre as últimas novidades do iOS 5, o sistema operacional lançado há alguns meses pela empresa.</div>
<div id="_mcePaste">Confira a seguir um pouco das nossas percepções sobre o evento:</div>
<div id="_mcePaste"><strong>Lab</strong></div>
<div>Sem sombra de dúvidas, o Lab foi para nós o ponto alto do evento. Tivemos o privilégio de interagir com a equipe de especialistas da Apple, que analisaram sob a ótica de desempenho, usabilidade, estética e experiência do usuário os últimos aplicativos lançados pela I.ndigo, como o <a href="http://i.ndigo.com.br/2011/11/hyvee-for-iphone-by-i-ndigo" target="_blank">Hy.vee</a>, <a href="http://itunes.apple.com/app/mn-wild-nhl/id489278925?mt=8" target="_blank">Minnesota Wild</a>, <a href="http://itunes.apple.com/br/app/pilao-desperta/id484621914?mt=8" target="_blank">Pilão Desperta</a> e o da universidade de <a href="http://itunes.apple.com/us/app/icardinal/id460288504?mt=8" target="_blank">Stanford</a>.</div>
<div id="_mcePaste">Foi muito gratificante receber, do diretor da Apple responsável pelo evento, John Geleynse, feedbacks e elogios sobre a identidade visual e experiência do usuário do <a href="http://itunes.apple.com/us/app/icardinal/id460288504?mt=8" target="_blank">iCardinal</a>, além dos elogios e dicas sobre o desempenho dos nossos aplicativos como o <a href="http://i.ndigo.com.br/2011/11/hyvee-for-iphone-by-i-ndigo" target="_blank">Hy.vee</a> e o <a href="http://i.ndigo.com.br/?p=273" target="_blank">Royal Wedding</a>.</div>
<div id="_mcePaste">Descobrimos também, conversando com o responsável pelo time de aprovação de aplicativos na App Store, detalhes importantes sobre o processo de revisão dos aplicativos o que nos dá ainda mais tranquilidade e liberdade de criação de novos modelos e arquiteturas, o que tende a deixar os nossos projetos mais flexíveis e até mais baratos.</div>
<div id="_mcePaste"><strong>Palestras</strong></div>
<div>Foram realizadas <a href="http://developer.apple.com/techtalk/" target="_blank">18 palestras</a> ao longo do dia, nos quais foram tratados assuntos específicos sobre os novos recursos da última versão do sistema operacional da Apple o iOS 5. Novidades que vão desde a criação de interfaces gráficas, melhorias nos serviços de localização até o grande serviço disponibilizado recentemente pela Apple: o iCloud.</div>
<div id="_mcePaste">Seguindo a mesma linha do WWDC, os profissionais da Apple expuseram a tecnologia de forma bastante didática, com o objetivo de ampliar a visão dos desenvolvedores para o máximo aproveitamento do iOS 5, sem entrar muito nos detalhes de implementação e API.</div>
<div id="_mcePaste">Só nos resta agradecer e parabenizar a Apple pelo modelo do evento e sua infraestrutura, não temos do que reclamar de um evento (gratuito) que nos aproximou de especialistas estratégicos da Apple e que marca o começo de um relacionamento mais estreito com as empresas brasileiras.</div>
<div id="_mcePaste">Não perca nossos próximos posts que vão tratar alguns dos assuntos abordados nas palestras.</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://i.ndigo.com.br/2012/01/ios-5-tech-talk-world-tour-brazil-2012/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>The Royal Wedding Rebound</title>
		<link>http://i.ndigo.com.br/2011/04/the-royal-wedding-rebound/</link>
		<comments>http://i.ndigo.com.br/2011/04/the-royal-wedding-rebound/#comments</comments>
		<pubDate>Mon, 18 Apr 2011 07:36:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Apps]]></category>
		<category><![CDATA[advertising]]></category>
		<category><![CDATA[app]]></category>
		<category><![CDATA[iAd]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[NBC]]></category>
		<category><![CDATA[NBC News]]></category>
		<category><![CDATA[royal wedding]]></category>

		<guid isPermaLink="false">http://i.ndigo.com.br/?p=284</guid>
		<description><![CDATA[Na semana passada completamos 15 dias do lançamento dos aplicativos iPhone e iPad que fizemos para a NBC &#8211; o The Royal Wedding by NBC News. O fato do aplicativo ter sido lançado durante os programas de maior audiência da televisão norte-americana, nos rendeu uma repercursão que não acreditávamos ser possível em tão pouco tempo, [...]]]></description>
			<content:encoded><![CDATA[<p>Na semana passada completamos 15 dias do lançamento dos aplicativos <a href="http://itunes.apple.com/us/app/the-royal-wedding-by-nbc-news/id426642389?mt=8&#038;ls=1" target="_blank">iPhone</a> e <a href="http://itunes.apple.com/us/app/the-royal-wedding-by-nbc-news/id426642389?mt=8&#038;ls=1" target="_blank">iPad</a> que fizemos para a NBC &#8211;  o <strong>The Royal Wedding by NBC News</strong>.</p>
<p>O fato do aplicativo ter sido lançado durante os programas de maior audiência da televisão norte-americana, nos rendeu uma repercursão que não acreditávamos ser possível em tão pouco tempo, em pouquíssimas horas nosso app já figurava entre os <strong>vinte mais baixados</strong> da App Store Americana, chegando ao <strong>segundo</strong> lugar entre os aplicativos da categoria lifestyle.</p>
<p>Os dias que sucederam o lançamento foram de mais surpresas ainda, figuramos entre os aplicativos recomendados pela Apple nas seções &#8220;What&#8217;s Hot&#8221; e &#8220;New and Noteworthy&#8221; ao lado do Justin Bieber e da Oprah (rs). Outro fato curioso foi a criação de uma área inteira de destaque na App Store para aplicativos voltados à cobertura do casamento real. </p>
<div id="attachment_319" class="wp-caption aligncenter" style="width: 548px"><a href="http://i.ndigo.com.br/wp-content/uploads/2011/04/Imagem22.png" target="_blank"><img src="http://i.ndigo.com.br/wp-content/uploads/2011/04/Imagem22.png" alt="Nosso app em destaque entro o Justin Bieber e a Oprah" title="Imagem22" width="538" height="271" class="size-full wp-image-319" /></a><p class="wp-caption-text">Nosso app em destaque no New and Noteworthy</p></div>
<div id="attachment_321" class="wp-caption aligncenter" style="width: 310px"><a href="http://i.ndigo.com.br/wp-content/uploads/2011/04/Imagem21.png" target="_blank"><img src="http://i.ndigo.com.br/wp-content/uploads/2011/04/Imagem21-300x83.png" alt="Área de destaque criada pela Apple para Apps do Royal Wedding" title="Imagem21" width="300" height="83" class="size-medium wp-image-321" /></a><p class="wp-caption-text">Área de destaque criada pela Apple para Apps do Royal Wedding</p></div>
<p>A notícia do aplicativo também repercurtiu em alguns sites que gostamos muito como o <a href="http://www.appolicious.com/articles/7336-another-british-invasion-the-royal-wedding-takes-on-the-app-world" target="_blank">appolicious</a> e o <a href="http://www.mobilepedia.com.br/noticias/casamento-real-tem-aplicativo-criado-por-brasileiros" target="_blank">mobilepedia</a>, no youtube a NBC <a href="http://www.youtube.com/watch?v=Vnc_tpPn58g" target="_blank">publicou um vídeo</a> com o Vice-Presidente deles contando detalhes do desafio de lançar um aplicativo tão completo, em tão pouco tempo.</p>
<p>O aprendizado com o projeto foi grande também para o nosso time, por exemplo em mobile-advertising,  tivemos a oportunidade de lidar de perto com o iAd aproveitando todo o buzz criado pela NBC e compará-lo com a busca de patrocínios independentes. Tem sido interessante também analisar o padrão de comportamento e o país de origem dos usuários que baixaram o aplicativo.</p>
<p>Estamos agora ansiosos para acompanhar a evolução de usuários com a proximidade do casamento, e fiquem de olho para acompanhar as próximas novidades que vamos lançar até lá.</p>
]]></content:encoded>
			<wfw:commentRss>http://i.ndigo.com.br/2011/04/the-royal-wedding-rebound/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Permitindo Untrusted Certificates com UIWebView</title>
		<link>http://i.ndigo.com.br/2011/04/permitindo-untrusted-certificates-com-uiwebview/</link>
		<comments>http://i.ndigo.com.br/2011/04/permitindo-untrusted-certificates-com-uiwebview/#comments</comments>
		<pubDate>Tue, 12 Apr 2011 01:58:23 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Go Tech]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[private api]]></category>
		<category><![CDATA[uiwebview]]></category>
		<category><![CDATA[untrusted certificates]]></category>

		<guid isPermaLink="false">http://i.ndigo.com.br/?p=303</guid>
		<description><![CDATA[Permitindo Untrusted Certificates com UIWebView

Recentemente caímos em uma situação em que necessitávamos testar uma aplicação iPhone (SDK 4.0) tentando acessar uma aplicação web via UIWebView. Porém, havia um problema: todas as páginas do servidor eram fornecidas por conexão HTTPS, mas o certificado não era válido.
]]></description>
			<content:encoded><![CDATA[<p>Recentemente caímos em uma situação em que necessitávamos testar uma aplicação iPhone (SDK 4.0) tentando acessar uma aplicação web via UIWebView. Porém, havia um problema: todas as páginas do servidor eram fornecidas por conexão HTTPS, mas o certificado não era válido.</p>
<p>Uma forma de resolver este problema foi usando o método estático setAllowsAnyHTTPSCertificate:forHost: da classe NSURLRequest, que faz parte da API privada da Apple. Este método permite que você especifique quais host podem ter seu certificado HTTPS aceito pela aplicação.</p>
<p>Usando o método acima há grandes chances de ter seu app rejeitado, mas em uma situação de teste a alternativa funciona muito bem.</p>
<p>Você deve usar este método antes de fazer o request do UIWebView, como o seguinte:</p>
<p>NSURL *url = [[NSURL alloc] initWithString:@&#8221;https://www.something.com&#8221;];<br />
[NSURLRequest setAllowsAnyHTTPSCertificate:YES forHost:[url host]];<br />
[webView loadRequest:url];</p>
<p>Isto seria suficiente, mas você verá que seu código mostrará uma mensagem de warning dizendo &#8220;&#8216;NSURLRequest&#8217; may not respond to &#8216;+setAllowsAnyHTTPSCertificate:forHost:&#8217;&#8221;. Se você quer resolver isso, adicione o seguinte ao final do arquivo .h que corresponde ao .m que você está trabalhando:</p>
<p>@interface NSURLRequest (Certificates)<br />
+ (void)setAllowsAnyHTTPSCertificate:(BOOL)allow forHost:(NSString*)host;<br />
@end</p>
<p>Este código sobrecarrega a interface do método da classe NSURLRequest, mas não iremos reimplementá-lo, então a implementação existente na API privada pode ser usada.</p>
<p>Como pode ser visto, embora o uso da API privada da Apple não seja permitido, ele pode ser bastante útil em algumas situações. </p>
<p>Espero que este post tenha ajudado. Obrigado!</p>
]]></content:encoded>
			<wfw:commentRss>http://i.ndigo.com.br/2011/04/permitindo-untrusted-certificates-com-uiwebview/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>O sucesso do iPad no Brasil mesmo antes de sua chegada</title>
		<link>http://i.ndigo.com.br/2010/10/o-sucesso-do-ipad-no-brasil-mesmo-antes-de-sua-chegada/</link>
		<comments>http://i.ndigo.com.br/2010/10/o-sucesso-do-ipad-no-brasil-mesmo-antes-de-sua-chegada/#comments</comments>
		<pubDate>Thu, 21 Oct 2010 14:32:19 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Mobile Trends & Mobile Business]]></category>
		<category><![CDATA[brasil]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[lançamento]]></category>
		<category><![CDATA[mercado]]></category>
		<category><![CDATA[tablets]]></category>

		<guid isPermaLink="false">http://i.ndigo.com.br/?p=266</guid>
		<description><![CDATA[Pouco meses após o lançamento nos Estados Unidos, o iPad já começou a gerar interesse das empresas brasileiras em explorar os recursos desta maravilha tecnológica. Sua chegada ainda não foi oficializada no Brasil, mas há rumores que o iPad invada o mercado brasileiro até o final deste ano. A aposta é grande de que quando [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://i.ndigo.com.br/wp-content/uploads/2010/10/ipad.jpg"><img class="alignleft size-medium wp-image-267" title="iPad" src="http://i.ndigo.com.br/wp-content/uploads/2010/10/ipad-300x200.jpg" alt="iPad" width="300" height="200" /></a>Pouco  meses após o lançamento nos Estados Unidos, o iPad já começou a gerar  interesse das empresas brasileiras em explorar os recursos desta  maravilha tecnológica. Sua chegada ainda não foi oficializada no Brasil,  mas há rumores que o iPad invada o mercado brasileiro até o final deste  ano.</p>
<p>A  aposta é grande de que quando isto ocorrer, uma reviravolta no mercado  nacional aconteça, criando uma chuva de possibilidades tanto para o  segmento corporativo quanto para o mercado consumidor.</p>
<p>A  busca de soluções móveis mundialmente torna-se cada vez mais evidente,  pois fabricantes de hardware não pretendem ficar atrás e já estão  prometendo lançar versões de tablets para concorrer com o iPad.</p>
<p>Obviamente,  ainda há bastante espaço e tecnologia a ser explorada, mas certamente  estes equipamentos surgirão para bagunçar o mercado, no sentido  positivo, é claro. Um dos impactos que se enxerga com o surgimento  desses gadgets é o mercado editorial. Leitores eletrônicos (e-readers) e  tablets prometem revigorar o mercado abrindo novas fronteiras e  possibilidades de negócio.</p>
<p>No  Brasil por exemplo, revistas como Época, Veja, Estadão já mesmo antes  da sua vinda oficial possuem uma versão iPad para seu público. Livros  digitais interativos para o público jovem também já podem ser  encontrados na Apple Store brasileira.</p>
<p>Para  as empresas, é um prato cheio para criação de um novo canal junto ao  seu público. Soluções como jogos, utilitários para organização pessoal, serviços baseados em localização, realidade aumentada  são alguns exemplos de aplicativos para focados este segmento. Para o  mercado corporativo há uma série de possibilidades, soluções de  automação de vendas, relacionamentos,  m-commerce, inteligência de  mercado, entre outros.</p>
<p>Agora, resta saber qual vai ser a linha que as empresas irão seguir. Os  fabricantes de hardware terão condições de replicar a febre Apple que  tem acontecido nos últimos tempos? Ou o iPad já aniquilou seus  concorrentes mesmo antes deles terem nascido?</p>
<p>Será  que as empresas e marcas terão várias versões de seus aplicativos, cada  um em um sistema operacional diferente? O mercado móvel está crescendo,  e rápido. Esta é unica certeza que temos hoje e não há indicios de que o  &#8220;vento passe a soprar para o outro lado&#8221;.</p>
]]></content:encoded>
			<wfw:commentRss>http://i.ndigo.com.br/2010/10/o-sucesso-do-ipad-no-brasil-mesmo-antes-de-sua-chegada/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Pesquisa de Desenvolvimento de Aplicações Móveis</title>
		<link>http://i.ndigo.com.br/2010/06/pesquisa-de-desenvolvimento-de-aplicacoes-moveis/</link>
		<comments>http://i.ndigo.com.br/2010/06/pesquisa-de-desenvolvimento-de-aplicacoes-moveis/#comments</comments>
		<pubDate>Wed, 30 Jun 2010 16:21:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[Mobile Trends & Mobile Business]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[ipad]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[windows phone 7]]></category>

		<guid isPermaLink="false">http://i.ndigo.com.br/?p=27</guid>
		<description><![CDATA[Appcelerator (http://www.appcelerator.com/) empresa responsável pelo desenvolvimento da plataforma Appcelerator Titanium (discutido neste post) realizou uma pesquisa com 2700 desenvolvedores de aplicações para dispositivos móveis.  Esta pesquisa engloba detalhes e percepções de plataformas como iOS (Apple), Android (Google), webOS (Palm/HP), Windows Phone 7 (Microsoft), Symbian (Nokia) e Blackberry (RIM). Informações interessantes como aumento da motivação em [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: left;"><strong>Appcelerator</strong> (<a title="Appcelerator" href="http://www.appcelerator.com" target="_blank">http://www.appcelerator.com/</a>) empresa responsável pelo desenvolvimento  da plataforma <strong>Appcelerator Titanium</strong> (<a title="Appcelerator Titanium" href="http://i.ndigo.com.br/2010/04/appcelerator-titanium" target="_self">discutido neste post</a>) realizou uma  pesquisa com 2700 desenvolvedores de aplicações para dispositivos  móveis.  Esta pesquisa engloba detalhes e percepções de plataformas como  iOS (Apple), Android (Google), webOS (Palm/HP), Windows Phone 7  (Microsoft), Symbian (Nokia) e Blackberry (RIM).</p>
<p style="text-align: left;"><a href="http://i.ndigo.com.br/wp-content/uploads/2010/06/appcelerator_survey.png"><img class="aligncenter size-medium wp-image-34" title="Mobile Survey" src="http://i.ndigo.com.br/wp-content/uploads/2010/06/appcelerator_survey-300x197.png" alt="" width="300" height="197" /></a></p>
<p style="text-align: left;">Informações  interessantes como aumento da motivação em desenvolver aplicações na  plataforma Apple tem aumentado desde o lançamento do iPad.</p>
<p style="text-align: left;">A pesquisa pode ser encontrada na íntegra no site da Appcelerator ou  baixada <a href="http://i.ndigo.com.br/wp-content/uploads/2010/06/appcelerator-mobile-developer-survey-june-2010.pdf">aqui</a>.</p>
<p style="text-align: left;"><strong>Fonte: </strong><a title="Mobile Developer Survey" href="http://www.appcelerator.com/mobile-developer-survey-June-2010/" target="_blank">Mobile Developer Survey, June 2010</a></p>
]]></content:encoded>
			<wfw:commentRss>http://i.ndigo.com.br/2010/06/pesquisa-de-desenvolvimento-de-aplicacoes-moveis/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

