<?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>Face Detection Archives - Truiton</title>
	<atom:link href="https://www.truiton.com/tag/face-detection/feed/" rel="self" type="application/rss+xml" />
	<link></link>
	<description>Technology Reaching Us In Time - Online</description>
	<lastBuildDate>Sun, 01 Sep 2019 09:47:32 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://i0.wp.com/www.truiton.com/wp-content/uploads/2022/11/cropped-truiton_new_logo_half_white.png?fit=32%2C32&#038;ssl=1</url>
	<title>Face Detection Archives - Truiton</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">54534495</site>	<item>
		<title>Introducing Android Mobile Vision API</title>
		<link>https://www.truiton.com/2017/05/introducing-android-mobile-vision-api/</link>
					<comments>https://www.truiton.com/2017/05/introducing-android-mobile-vision-api/#comments</comments>
		
		<dc:creator><![CDATA[Mohit Gupt]]></dc:creator>
		<pubDate>Sun, 28 May 2017 17:29:27 +0000</pubDate>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Face Detection]]></category>
		<category><![CDATA[Image Recognition]]></category>
		<category><![CDATA[Mobile Vision API]]></category>
		<category><![CDATA[OCR]]></category>
		<guid isPermaLink="false">http://www.truiton.com/?p=1557</guid>

					<description><![CDATA[<p>In August 2015, Google announced the release of Android Mobile Vision API. At that time this API had mainly three&#160;components Face Detection, Barcode scanner and ways to capture the tracking of objects in real time. But later on some bugs were found in its implementation, due to which the access to this API was restricted&#8230;&#160;<a href="https://www.truiton.com/2017/05/introducing-android-mobile-vision-api/" rel="bookmark">Read More &#187;<span class="screen-reader-text">Introducing Android Mobile Vision API</span></a></p>
<p>The post <a href="https://www.truiton.com/2017/05/introducing-android-mobile-vision-api/">Introducing Android Mobile Vision API</a> appeared first on <a href="https://www.truiton.com">Truiton</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-image"><figure class="aligncenter"><img data-recalc-dims="1" fetchpriority="high" decoding="async" width="950" height="530" data-attachment-id="1741" data-permalink="https://www.truiton.com/2017/05/introducing-android-mobile-vision-api/android-mobile-vision-featured/" data-orig-file="https://i0.wp.com/www.truiton.com/wp-content/uploads/2017/05/Android-Mobile-Vision-Featured.jpg?fit=950%2C530&amp;ssl=1" data-orig-size="950,530" data-comments-opened="1" data-image-title="Android Mobile Vision Featured" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/www.truiton.com/wp-content/uploads/2017/05/Android-Mobile-Vision-Featured.jpg?fit=950%2C530&amp;ssl=1" src="https://i0.wp.com/www.truiton.com/wp-content/uploads/2017/05/Android-Mobile-Vision-Featured.jpg?resize=950%2C530" alt="Android Mobile Vision API" class="wp-image-1741" srcset="https://i0.wp.com/www.truiton.com/wp-content/uploads/2017/05/Android-Mobile-Vision-Featured.jpg?w=950&amp;ssl=1 950w, https://i0.wp.com/www.truiton.com/wp-content/uploads/2017/05/Android-Mobile-Vision-Featured.jpg?resize=600%2C335&amp;ssl=1 600w, https://i0.wp.com/www.truiton.com/wp-content/uploads/2017/05/Android-Mobile-Vision-Featured.jpg?resize=300%2C167&amp;ssl=1 300w, https://i0.wp.com/www.truiton.com/wp-content/uploads/2017/05/Android-Mobile-Vision-Featured.jpg?resize=768%2C428&amp;ssl=1 768w" sizes="(max-width: 950px) 100vw, 950px" /></figure></div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">In August 2015, Google <a href="https://developers.google.com/vision/" target="_blank" rel="noopener noreferrer">announced</a> the release of Android Mobile Vision API. At that time this API had mainly three&nbsp;components Face Detection, Barcode scanner and ways to capture the tracking of objects in real time. But later on some bugs were found in its implementation, due to which the access to this API was restricted by Google&nbsp;to the existing users only. Then recently in <a href="https://developers.google.com/android/guides/releases" target="_blank" rel="noopener noreferrer">June 2016</a> these issues were resolved and Mobile Vision APIs were re-launched. But this time it had a few&nbsp;new features like OCR and scanning of Aztec barcodes. In the next sections lets understand what&nbsp;exactly is the new Mobile Vision API and how can we use it&nbsp;to&nbsp;build an efficient code base.</p>



<h2 class="wp-block-heading">&nbsp;</h2>



<h2 class="wp-block-heading">What is Android Mobile Vision API ?</h2>



<p class="wp-block-paragraph">Ever wondered how to detect a face, a QR code or a Bar code on an Android Device? If yes; you might have heard of, or used the&nbsp;<a href="http://developer.android.com/reference/android/media/FaceDetector.Face.html" target="_blank" rel="noopener noreferrer">FaceDetector.Face</a>&nbsp;API of the Android framework, or the OpenCV SDK, or maybe you had opted for a cloud based solution like <a href="http://www.truiton.com/2016/06/android-image-recognition-google-cloud-vision-api/" target="_blank" rel="noopener noreferrer">Cloud Vision API</a>,&nbsp;which makes the requests to a web server, fetching the results for&nbsp;scans. But this new Android Mobile Vision API does not make any requests to a web server. Instead it performs real time image/video scanning on the device itself. Although this&nbsp;may sound a little in-effective, but its not. The Mobile Vision API is very efficient and deeply integrated in to the Android system by the means of <a href="https://developers.google.com/android/guides/overview" target="_blank" rel="noopener noreferrer">Google Play Services SDK</a>. This gives this API&nbsp;an added advantage over all other solutions, as&nbsp;being&nbsp;a developer you do not need to integrate any third party SDK to perform media analysis. All you may need to do is <a href="https://developers.google.com/android/guides/setup" target="_blank" rel="noopener noreferrer">integrate the Google Play Services</a> properly and start building on it. Android Mobile Vision API as of now performs&nbsp;three types of image/stream detection as shown in next sections.</p>



<h2 class="wp-block-heading">Setting up Android Mobile Vision&nbsp;Library</h2>



<p class="wp-block-paragraph">When speaking of this new&nbsp;multipurpose Android offline image recognition library, the only downside is that one has to set it up before the actual usage. Although it does not mean any manual configuration but&nbsp;a tag needs to be added in the application manifest. So that the installer knows that an extra package is needed to be downloaded as the app is being installed. As of now the mobile vision API has three components, therefore all&nbsp;three&nbsp;dependencies can be included in a single manifest tag under the application tag as shown:</p>



<pre class="wp-block-preformatted lang:default decode:true">&lt;meta-data
            android:name="com.google.android.gms.vision.DEPENDENCIES"
            android:value="barcode,face,ocr"/&gt;</pre>



<p class="wp-block-paragraph">This would instruct the OS to download the packages for all three types of offline image analysis. Next lets have a brief understanding of all the features of this powerful Mobile Vision API.</p>



<h3 class="wp-block-heading">1. Barcode and QR Code scanning on Android</h3>



<p class="wp-block-paragraph">The Barcode Scanner API is used to scan various types of bar codes and qr codes. Some of them are:</p>



<ul class="wp-block-list"><li>1D barcodes: <a href="https://en.wikipedia.org/wiki/International_Article_Number_(EAN)" target="_blank" rel="noopener noreferrer">EAN-13, EAN-8</a>, <a href="https://en.wikipedia.org/wiki/Universal_Product_Code" target="_blank" rel="noopener noreferrer">UPC-A, UPC-E</a>, <a href="https://en.wikipedia.org/wiki/Code_39" target="_blank" rel="noopener noreferrer">Code-39</a>, <a href="https://en.wikipedia.org/wiki/Code_93" target="_blank" rel="noopener noreferrer">Code-93</a>, <a href="https://en.wikipedia.org/wiki/Code_128" target="_blank" rel="noopener noreferrer">Code-128</a>, <a href="https://en.wikipedia.org/wiki/Interleaved_2_of_5" target="_blank" rel="noopener noreferrer">ITF</a>, <a href="https://en.wikipedia.org/wiki/Codabar" target="_blank" rel="noopener noreferrer">Codabar</a></li><li>2D barcodes: <a href="https://en.wikipedia.org/wiki/QR_code" target="_blank" rel="noopener noreferrer">QR Code</a>, <a href="https://en.wikipedia.org/wiki/Data_Matrix" target="_blank" rel="noopener noreferrer">Data Matrix</a>, <a href="https://en.wikipedia.org/wiki/PDF417" target="_blank" rel="noopener noreferrer">PDF-417</a>, <a href="https://en.wikipedia.org/wiki/PDF417" target="_blank" rel="noopener noreferrer">AZTEC</a></li></ul>



<p class="wp-block-paragraph">Using this Mobile Vision API for Bar codes is very simple, even with so many supported formats. All you need to do is write around&nbsp;10&nbsp;lines of code to parse a Barcode or QR Code.&nbsp;One of the most interesting things about this API is that, it also parses the type of barcode/QR code it is scanning.&nbsp;All the information about the scanned barcode or QR Code type is found in the <code><code></code></code><a href="https://developers.google.com/android/reference/com/google/android/gms/vision/barcode/Barcode.html#valueFormat">valueFormat</a> field of Barcode Object besides the scanned barcode. To learn more about the usage of Barcode Scanner API of the Android Mobile Vision API please refer to this tutorial:</p>



<p class="wp-block-paragraph" style="text-align:center"><a class="fasc-button fasc-size-medium fasc-type-flat fasc-rounded-medium" style="background-color: #33809e; color: #ffffff;" target="_blank" rel="noopener noreferrer" href="http://www.truiton.com/2016/09/android-example-programmatically-scan-qr-code-and-bar-code/">Android Barcode Tutorial</a></p>



<h3 class="wp-block-heading">2. Optical Character Recognition (OCR)&nbsp;on Android</h3>



<p class="wp-block-paragraph">Mobile Vision Text API is another great feature packed into this library. Its purpose is straight forward, i.e. text recognition in an image or a stream of frames.&nbsp;It can recognize a majority of Latin character based languages like English, French, Italian Dutch etc. Therefore if your app needs to extract text out of an image, this is the perfect solution&nbsp;for you. As once its dependencies are downloaded, you no more required to have an internet connection, all the character recognition takes place on device itself.</p>



<p class="wp-block-paragraph">Incase you wonder; how would this Android Mobile Vision Text API deliver large results, as when scanning a page of a book- a lot of words could be scanned. But thankfully this API returns text in a structured way. It mainly divides text into three sections:</p>



<ol class="wp-block-list"><li><strong>Block</strong>: Top level structure, contains all the paragraphs.</li><li><strong>Line</strong>: Mid level structure, contains lines in a block.</li><li><strong>Word</strong>: Low level structure, contains a single word from line.</li></ol>



<p class="wp-block-paragraph">To learn more about the Text API, please refer to this tutorial:</p>



<p class="wp-block-paragraph" style="text-align:center"><a class="fasc-button fasc-size-medium fasc-type-flat fasc-rounded-medium" style="background-color: #33809e; color: #ffffff;" target="_blank" rel="noopener noreferrer" href="http://www.truiton.com/2016/11/optical-character-recognition-android-ocr/">Android OCR Tutorial</a></p>



<h3 class="wp-block-heading">3. Face Detection&nbsp;on Android</h3>



<p class="wp-block-paragraph">This is the most powerful API in&nbsp;all, as it has human&nbsp;Face Detection capabilities.&nbsp;It is a perfectly suited API for any face filter or camera app, as it performs the analysis on the device itself once the package is downloaded. Interestingly it not only recognizes a face but can also extract the facial features of that face, including eyes nose and mouth etc. Since this API as of now does not support face recognition it cannot identify similarity between two faces, but can still classify the features like, if the eyes are open or not. The functionalities that Mobile Vision Face Detection API supports are:</p>



<ol class="wp-block-list"><li><strong>Landmark Detection:</strong> Face API understands the human face in terms of landmarks.&nbsp;When a face is scanned via this API, it identifies that face via landmarks. In simple terms face landmarks are: nose, mouth, left eye, and right eye etc. By using this API you can actually extract the position of all these landmarks.&nbsp;</li><li><strong>Classification:</strong> This API not only scans a face but can also apply some basic logic and identify certain characteristics on the scanned face. For ex. with this feature we can find out whether the face has its eyes open or not. Also we can find out the probability of a smile on that face.&nbsp;</li><li><strong>Tracking:</strong> This is the most interesting feature of this API, you can actually track a face in a video sequence through this API. This feature of Mobile Vision API can be used to identify and track a face in a video. Once again this is not an application of face recognition, instead it tracks the face through movement of that particular face in the video.&nbsp;</li></ol>



<p class="wp-block-paragraph">To learn more in detail about Face Detection, please refer to this tutorial:</p>



<p class="wp-block-paragraph" style="text-align:center"><a class="fasc-button fasc-size-medium fasc-type-flat fasc-rounded-medium" style="background-color: #33809e; color: #ffffff;" target="_blank" rel="noopener noreferrer" href="http://www.truiton.com/2017/05/android-face-detection-example/">Face Detection Tutorial</a>&nbsp;</p>



<h2 class="wp-block-heading">Tracking Faces, Bar codes&nbsp;and QR Codes Simultaneously</h2>



<p class="wp-block-paragraph">Interestingly, if you want to scan and track multiple faces simultaneously, even that is possible through this API. All you need to do is initialize a <a href="https://developers.google.com/android/reference/com/google/android/gms/vision/MultiProcessor" target="_blank" rel="noopener noreferrer">MultiProcessor</a> and track multiple faces through this API. Also if you want to track multiple Bar codes or QR codes, same thing is applicable, as all of this is a part of <a href="http://www.truiton.com/2017/05/introducing-android-mobile-vision-api/">Mobile Vision API</a>, backed by Google Play Services. But even more interesting thing is that you can track Bar codes, QR codes and Faces in a single frame, by using the <a href="https://developers.google.com/android/reference/com/google/android/gms/vision/MultiDetector" target="_blank" rel="noopener noreferrer">MultiDetector</a> class of the same API suite. This makes the mobile vision APIs an outstanding leader in terms of features when compared to any other such library in the market. As its light, easy to integrate and very easy to use. For more updates, please connect with us on Twitter, Facebook and Google+.</p>
<div class="saboxplugin-wrap" itemtype="http://schema.org/Person" itemscope itemprop="author"><div class="saboxplugin-tab"><div class="saboxplugin-gravatar"><img alt='Mohit Gupt' src='https://secure.gravatar.com/avatar/a816092ad56645d2635ccfceb9f7e9d44821c19dec126cb394c882ba574eaa04?s=100&#038;d=mm&#038;r=g' srcset='https://secure.gravatar.com/avatar/a816092ad56645d2635ccfceb9f7e9d44821c19dec126cb394c882ba574eaa04?s=200&#038;d=mm&#038;r=g 2x' class='avatar avatar-100 photo' height='100' width='100' itemprop="image"/></div><div class="saboxplugin-authorname"><a href="https://www.truiton.com/author/mohitgupt/" class="vcard author" rel="author"><span class="fn">Mohit Gupt</span></a></div><div class="saboxplugin-desc"><div itemprop="description"><p>Born in New Delhi, India. A software engineer by profession, an android enthusiast and mobile development evangelist. My motive here is to create a group of skilled engineers, who can build better software. Reason being programming is my passion, and also it feels good to make a device do something you want. Professionally I have worked with many software engineering and product development firms. As of now too, I am employed as a senior engineer in a leading tech company. In total I may have worked on more than 20 projects professionally, but whenever I get spare time I share my thoughts here at Truiton.</p>
</div></div><div class="saboxplugin-web "><a href="http://www.truiton.com" target="_self" >www.truiton.com</a></div><div class="clearfix"></div><div class="saboxplugin-socials "><a title="Wordpress" target="_blank" href="https://www.truiton.com/author/mohitgupt/" rel="nofollow noopener" class="saboxplugin-icon-grey"><svg aria-hidden="true" class="sab-wordpress" role="img" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512"><path fill="currentColor" d="M61.7 169.4l101.5 278C92.2 413 43.3 340.2 43.3 256c0-30.9 6.6-60.1 18.4-86.6zm337.9 75.9c0-26.3-9.4-44.5-17.5-58.7-10.8-17.5-20.9-32.4-20.9-49.9 0-19.6 14.8-37.8 35.7-37.8.9 0 1.8.1 2.8.2-37.9-34.7-88.3-55.9-143.7-55.9-74.3 0-139.7 38.1-177.8 95.9 5 .2 9.7.3 13.7.3 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l77.5 230.4L249.8 247l-33.1-90.8c-11.5-.7-22.3-2-22.3-2-11.5-.7-10.1-18.2 1.3-17.5 0 0 35.1 2.7 56 2.7 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l76.9 228.7 21.2-70.9c9-29.4 16-50.5 16-68.7zm-139.9 29.3l-63.8 185.5c19.1 5.6 39.2 8.7 60.1 8.7 24.8 0 48.5-4.3 70.6-12.1-.6-.9-1.1-1.9-1.5-2.9l-65.4-179.2zm183-120.7c.9 6.8 1.4 14 1.4 21.9 0 21.6-4 45.8-16.2 76.2l-65 187.9C426.2 403 468.7 334.5 468.7 256c0-37-9.4-71.8-26-102.1zM504 256c0 136.8-111.3 248-248 248C119.2 504 8 392.7 8 256 8 119.2 119.2 8 256 8c136.7 0 248 111.2 248 248zm-11.4 0c0-130.5-106.2-236.6-236.6-236.6C125.5 19.4 19.4 125.5 19.4 256S125.6 492.6 256 492.6c130.5 0 236.6-106.1 236.6-236.6z"></path></svg></span></a><a title="Twitter" target="_blank" href="http://twitter.com/mohitgupt" rel="nofollow noopener" class="saboxplugin-icon-grey"><svg aria-hidden="true" class="sab-twitter" role="img" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 30 30"><path d="M26.37,26l-8.795-12.822l0.015,0.012L25.52,4h-2.65l-6.46,7.48L11.28,4H4.33l8.211,11.971L12.54,15.97L3.88,26h2.65 l7.182-8.322L19.42,26H26.37z M10.23,6l12.34,18h-2.1L8.12,6H10.23z" /></svg></span></a><a title="Facebook" target="_blank" href="https://www.facebook.com/Mr.Mohit.Gupt" rel="nofollow noopener" class="saboxplugin-icon-grey"><svg aria-hidden="true" class="sab-facebook" role="img" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 264 512"><path fill="currentColor" d="M76.7 512V283H0v-91h76.7v-71.7C76.7 42.4 124.3 0 193.8 0c33.3 0 61.9 2.5 70.2 3.6V85h-48.2c-37.8 0-45.1 18-45.1 44.3V192H256l-11.7 91h-73.6v229"></path></svg></span></a></div></div></div><p>The post <a href="https://www.truiton.com/2017/05/introducing-android-mobile-vision-api/">Introducing Android Mobile Vision API</a> appeared first on <a href="https://www.truiton.com">Truiton</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.truiton.com/2017/05/introducing-android-mobile-vision-api/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1557</post-id>	</item>
		<item>
		<title>Android Face Detection Example</title>
		<link>https://www.truiton.com/2017/05/android-face-detection-example/</link>
					<comments>https://www.truiton.com/2017/05/android-face-detection-example/#comments</comments>
		
		<dc:creator><![CDATA[Mohit Gupt]]></dc:creator>
		<pubDate>Sun, 28 May 2017 16:58:13 +0000</pubDate>
				<category><![CDATA[Android]]></category>
		<category><![CDATA[Face Detection]]></category>
		<category><![CDATA[Mobile Vision API]]></category>
		<guid isPermaLink="false">http://www.truiton.com/?p=1728</guid>

					<description><![CDATA[<p>Nowadays face filter apps are one of the most common apps available on a users phone, where a user can apply various funny filters on their face pictures. Interestingly the base tech that powers these sort of apps is similar to what we are going to discuss in this tutorial. That&#8217;s right we are going&#8230;&#160;<a href="https://www.truiton.com/2017/05/android-face-detection-example/" rel="bookmark">Read More &#187;<span class="screen-reader-text">Android Face Detection Example</span></a></p>
<p>The post <a href="https://www.truiton.com/2017/05/android-face-detection-example/">Android Face Detection Example</a> appeared first on <a href="https://www.truiton.com">Truiton</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-image"><figure class="aligncenter"><img data-recalc-dims="1" decoding="async" width="950" height="530" data-attachment-id="1738" data-permalink="https://www.truiton.com/2017/05/android-face-detection-example/android-face-detection-featured/" data-orig-file="https://i0.wp.com/www.truiton.com/wp-content/uploads/2017/05/Android-Face-Detection-Featured.jpg?fit=950%2C530&amp;ssl=1" data-orig-size="950,530" data-comments-opened="1" data-image-title="Android Face Detection Featured" data-image-description="" data-image-caption="&lt;p&gt;Android Face Detection Featured&lt;/p&gt;
" data-large-file="https://i0.wp.com/www.truiton.com/wp-content/uploads/2017/05/Android-Face-Detection-Featured.jpg?fit=950%2C530&amp;ssl=1" src="https://i0.wp.com/www.truiton.com/wp-content/uploads/2017/05/Android-Face-Detection-Featured.jpg?resize=950%2C530" alt="Android Face Detection Featured" class="wp-image-1738" srcset="https://i0.wp.com/www.truiton.com/wp-content/uploads/2017/05/Android-Face-Detection-Featured.jpg?w=950&amp;ssl=1 950w, https://i0.wp.com/www.truiton.com/wp-content/uploads/2017/05/Android-Face-Detection-Featured.jpg?resize=600%2C335&amp;ssl=1 600w, https://i0.wp.com/www.truiton.com/wp-content/uploads/2017/05/Android-Face-Detection-Featured.jpg?resize=300%2C167&amp;ssl=1 300w, https://i0.wp.com/www.truiton.com/wp-content/uploads/2017/05/Android-Face-Detection-Featured.jpg?resize=768%2C428&amp;ssl=1 768w" sizes="(max-width: 950px) 100vw, 950px" /></figure></div>



<p class="wp-block-paragraph"></p>



<p class="wp-block-paragraph">Nowadays face filter apps are one of the most common apps available on a users phone, where a user can apply various funny filters on their face pictures. Interestingly the base tech that powers these sort of apps is similar to what we are going to discuss in this tutorial. That&#8217;s right we are going to discuss an Android Face Detection API. Interestingly to power all these apps, officially Google has released an Android Face Detection API in&nbsp;their&nbsp;<a href="https://developers.google.com/vision/" target="_blank" rel="noopener noreferrer">Mobile Vision</a>&nbsp;set of APIs. Basically&nbsp;all the face filter apps detect a face through a face detection API, and apply various overlays on the selected picture.&nbsp;Although when speaking of&nbsp;Face Detection APIs for Android, we have multiple options.&nbsp;But for this article we will be discussing Google backed Mobile Vision APIs only. As its fast and has deeply integrated Android development SDK/APIs.</p>



<h2 class="wp-block-heading">Android Face Detection API &#8211; Mobile Vision</h2>



<p class="wp-block-paragraph">When speaking of face detection, it is often misunderstood by face recognition, therefore let me put it&nbsp;discretely.&nbsp;As of now <a href="http://www.truiton.com/2017/05/introducing-android-mobile-vision-api/" target="_blank" rel="noopener noreferrer">Mobile Vision APIs</a> do not support Face Recognition, right now they only support face detection. Although it does have the ability to identify the characteristics of a face, which includes eyes, nose, mouth and smile etc. But besides these characteristics Mobile Vision Face Detection API can also track a face in a video sequence, which is&nbsp;again not an application of face recognition, but face detection as&nbsp;it is identified&nbsp;by tracking the movement of that particular face in the sequence. Also since this API is a part of Google&#8217;s Play Services library, it is not bundled as a part of the APK, instead an ad-on package is downloaded internally by&nbsp;the play services itself if it is not present to support Android face detection.&nbsp;To do so, we need to set up the play services with the mobile vision&nbsp;dependency in build.gradle file as shown below:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">compile 'com.google.android.gms:play-services-vision:11.4.0'</pre>



<p class="wp-block-paragraph">Also the build.gradle(project) should have this:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">allprojects {
    repositories {
        jcenter()
        maven {
            url "https://maven.google.com"
        }
    }
}</pre>



<p class="wp-block-paragraph">Post this a <code>&lt;meta-data&gt;</code> tag for face detection api&nbsp;along with <code>&lt;uses-feature&gt;</code> and <code>&lt;uses-permission&gt;</code> tag for camera and accessing external storage needs to be added in the manifest as shown below:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="xml" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;?xml version="1.0" encoding="utf-8"?>
&lt;manifest package="com.truiton.mobile.vision.facedetection"
          xmlns:android="http://schemas.android.com/apk/res/android">

    &lt;uses-feature
        android:name="android.hardware.camera"
        android:required="true"/>
    &lt;uses-permission
        android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    &lt;application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        &lt;meta-data
            android:name="com.google.android.gms.vision.DEPENDENCIES"
            android:value="face"/>

        &lt;activity android:name=".MainActivity">
            &lt;intent-filter>
                &lt;action android:name="android.intent.action.MAIN"/>

                &lt;category android:name="android.intent.category.LAUNCHER"/>
            &lt;/intent-filter>
        &lt;/activity>
        &lt;provider
            android:name="android.support.v4.content.FileProvider"
            android:authorities="${applicationId}.provider"
            android:exported="false"
            android:grantUriPermissions="true">
            &lt;meta-data
                android:name="android.support.FILE_PROVIDER_PATHS"
                android:resource="@xml/provider_paths"/>
        &lt;/provider>
    &lt;/application>

&lt;/manifest></pre>



<h3 class="wp-block-heading">Android Face Detection Library &#8211; Features&nbsp;</h3>



<p class="wp-block-paragraph">Next lets understand the features of Mobile Vision Face Detection&nbsp;APIs. As amazing things can be done by correct usage&nbsp;of this API. Broadly speaking, this API can perform detailed facial analysis- like detection of facial features and identifying their states. Currently its features can be divided&nbsp;into three categories shown below:</p>



<p class="wp-block-paragraph"><strong>1. Landmark Detection:</strong> One of the most important features of Mobile Vision Face Detection APIs is the detection of facial landmarks. In case you are wondering what are facial landmarks? They are the basic facial features or points of interest, like Nose, Eyes, and Mouth etc. Interestingly these features are detected very accurately by this Android Face Detection API. As of now following facial features are detected by this API:</p>



<ul class="wp-block-list"><li>Landmark.BOTTOM_MOUTH</li><li>Landmark.LEFT_CHEEK</li><li>Landmark.LEFT_EAR_TIP</li><li>Landmark.LEFT_EAR</li><li>Landmark.LEFT_EYE</li><li>Landmark.LEFT_MOUTH</li><li>Landmark.NOSE_BASE</li><li>Landmark.RIGHT_CHEEK</li><li>Landmark.RIGHT_EAR_TIP</li><li>Landmark.RIGHT_EAR</li><li>Landmark.RIGHT_EYE</li><li>Landmark.RIGHT_MOUTH</li></ul>



<p class="wp-block-paragraph"><strong>2. Facial Classification:</strong> Interestingly this API can also apply some logic on the detected facial landmarks and identify facial classifications. For ex. it can be detected through this API&nbsp;if the detected face has its eyes open or is smiling or not. Although this feature set may not sound very impressive as of now; but its very accurate and has a lot of room to grow. Maybe in near future some additional features might come in.</p>



<p class="wp-block-paragraph"><strong>3. Face Tracking:</strong> Another very powerful feature of <em>Mobile Vision Face Detection APIs</em> is this face tracking feature. It simply gives us the ability to track a face in a video sequence. Once again, here I would like to clarify that this is not Face Recognition, this feature simply works on face detection only. As it tracks that&nbsp;face based on its movement in the consecutive video frames.&nbsp;</p>



<h2 class="wp-block-heading">Android Face Detection API &#8211; Example</h2>



<p class="wp-block-paragraph">Now that we have a basic understanding of how the Face Detection APIs work, here in this section we would build a short example where we showcase its capabilities. Since Android Face Detection is itself a huge topic we would limit the scope of this tutorial, and showcase&nbsp;the Facial Classification feature with Landmark Detection only.&nbsp;Also this would solve our primary use case of Face Detection.&nbsp;Therefore for this <a href="http://www.truiton.com/2017/05/android-face-detection-example/">Android Face Detection Example</a> we would simply take a picture from a camera and run face detection on it, by using the Mobile Vision Face Detection APIs. To start building,&nbsp;lets continue from the steps mentioned in the first section of this article and define a layout to take a picture as shown below:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">&lt;?xml version="1.0" encoding="utf-8"?>
&lt;android.support.constraint.ConstraintLayout
    android:id="@+id/activity_main"
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.truiton.mobile.vision.facedetection.MainActivity">

    &lt;ImageView
        android:id="@+id/imageView"
        android:layout_width="70dp"
        android:layout_height="70dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintHorizontal_bias="1.0"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:srcCompat="@mipmap/truiton"/>

    &lt;Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginBottom="8dp"
        android:text="Scan Face"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        tools:layout_constraintLeft_creator="1"
        tools:layout_constraintRight_creator="1"
        />

    &lt;TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="8dp"
        android:text="Scan Results:"
        android:textAllCaps="false"
        android:textStyle="normal|bold"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        tools:layout_constraintLeft_creator="1"
        tools:layout_constraintRight_creator="1"/>

    &lt;ScrollView
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginTop="8dp"
        android:paddingLeft="5dp"
        android:paddingRight="5dp"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintHorizontal_bias="1.0"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView"
        app:layout_constraintVertical_bias="1.0"
        tools:layout_constraintBottom_creator="1"
        tools:layout_constraintLeft_creator="1"
        tools:layout_constraintRight_creator="1"
        tools:layout_constraintTop_creator="1">

        &lt;LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            &lt;TextView
                android:id="@+id/results"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginTop="8dp"/>

            &lt;ImageView
                android:id="@+id/scannedResults"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_gravity="center_horizontal"
                android:layout_marginBottom="8dp"
                android:layout_marginTop="8dp"/>
        &lt;/LinearLayout>
    &lt;/ScrollView>
&lt;/android.support.constraint.ConstraintLayout>
</pre>



<p class="wp-block-paragraph">Here for this layout I have used <code>ConstraintLayout</code> as my root layout, but its not mandatory to use this for your activity&#8217;s layout. You can also use the normal <code>RelativeLayout</code> or <code>LinearLayout</code> as per your needs, but if you wish to use <code>ConstraintLayout</code>, please don&#8217;t forget to add its dependency in your build.gradle file, as shown below:</p>



<pre class="EnlighterJSRAW" data-enlighter-language="generic" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">compile 'com.android.support.constraint:constraint-layout:1.0.2'</pre>



<p class="wp-block-paragraph">Also full source code is available at the end of this tutorial. Next lets define the MainActivity for this Android Face Detection tutorial.</p>



<pre class="EnlighterJSRAW" data-enlighter-language="java" data-enlighter-theme="" data-enlighter-highlight="" data-enlighter-linenumbers="" data-enlighter-lineoffset="" data-enlighter-title="" data-enlighter-group="">package com.truiton.mobile.vision.facedetection;


import android.Manifest;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.MediaStore;
import android.support.annotation.NonNull;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.FileProvider;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.util.SparseArray;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.gms.vision.Frame;
import com.google.android.gms.vision.face.Face;
import com.google.android.gms.vision.face.FaceDetector;
import com.google.android.gms.vision.face.Landmark;

import java.io.File;
import java.io.FileNotFoundException;

public class MainActivity extends AppCompatActivity {
    private static final String LOG_TAG = "FACE API";
    private static final int PHOTO_REQUEST = 10;
    private TextView scanResults;
    private ImageView imageView;
    private Uri imageUri;
    private FaceDetector detector;
    private static final int REQUEST_WRITE_PERMISSION = 20;
    private static final String SAVED_INSTANCE_URI = "uri";
    private static final String SAVED_INSTANCE_BITMAP = "bitmap";
    private static final String SAVED_INSTANCE_RESULT = "result";
    Bitmap editedBitmap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Button button = (Button) findViewById(R.id.button);
        scanResults = (TextView) findViewById(R.id.results);
        imageView = (ImageView) findViewById(R.id.scannedResults);
        if (savedInstanceState != null) {
            editedBitmap = savedInstanceState.getParcelable(SAVED_INSTANCE_BITMAP);
            if (savedInstanceState.getString(SAVED_INSTANCE_URI) != null) {
                imageUri = Uri.parse(savedInstanceState.getString(SAVED_INSTANCE_URI));
            }
            imageView.setImageBitmap(editedBitmap);
            scanResults.setText(savedInstanceState.getString(SAVED_INSTANCE_RESULT));
        }
        detector = new FaceDetector.Builder(getApplicationContext())
                .setTrackingEnabled(false)
                .setLandmarkType(FaceDetector.ALL_LANDMARKS)
                .setClassificationType(FaceDetector.ALL_CLASSIFICATIONS)
                .build();
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ActivityCompat.requestPermissions(MainActivity.this, new
                        String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_WRITE_PERMISSION);
            }
        });
    }

    @Override
    public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
        switch (requestCode) {
            case REQUEST_WRITE_PERMISSION:
                if (grantResults.length &gt; 0 &amp;&amp; grantResults[0] == PackageManager.PERMISSION_GRANTED) {
                    takePicture();
                } else {
                    Toast.makeText(MainActivity.this, "Permission Denied!", Toast.LENGTH_SHORT).show();
                }
        }
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == PHOTO_REQUEST &amp;&amp; resultCode == RESULT_OK) {
            launchMediaScanIntent();
            try {
                scanFaces();
            } catch (Exception e) {
                Toast.makeText(this, "Failed to load Image", Toast.LENGTH_SHORT).show();
                Log.e(LOG_TAG, e.toString());
            }
        }
    }

    private void scanFaces() throws Exception {
        Bitmap bitmap = decodeBitmapUri(this, imageUri);
        if (detector.isOperational() &amp;&amp; bitmap != null) {
            editedBitmap = Bitmap.createBitmap(bitmap.getWidth(), bitmap
                    .getHeight(), bitmap.getConfig());
            float scale = getResources().getDisplayMetrics().density;
            Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
            paint.setColor(Color.rgb(255, 61, 61));
            paint.setTextSize((int) (14 * scale));
            paint.setShadowLayer(1f, 0f, 1f, Color.WHITE);
            paint.setStyle(Paint.Style.STROKE);
            paint.setStrokeWidth(3f);
            Canvas canvas = new Canvas(editedBitmap);
            canvas.drawBitmap(bitmap, 0, 0, paint);
            Frame frame = new Frame.Builder().setBitmap(editedBitmap).build();
            SparseArray&lt;Face&gt; faces = detector.detect(frame);
            scanResults.setText(null);
            for (int index = 0; index &lt; faces.size(); ++index) {
                Face face = faces.valueAt(index);
                canvas.drawRect(
                        face.getPosition().x,
                        face.getPosition().y,
                        face.getPosition().x + face.getWidth(),
                        face.getPosition().y + face.getHeight(), paint);
                scanResults.setText(scanResults.getText() + "Face " + (index + 1) + "\n");
                scanResults.setText(scanResults.getText() + "Smile probability:" + "\n");
                scanResults.setText(scanResults.getText() + String.valueOf(face.getIsSmilingProbability()) + "\n");
                scanResults.setText(scanResults.getText() + "Left Eye Open Probability: " + "\n");
                scanResults.setText(scanResults.getText() + String.valueOf(face.getIsLeftEyeOpenProbability()) + "\n");
                scanResults.setText(scanResults.getText() + "Right Eye Open Probability: " + "\n");
                scanResults.setText(scanResults.getText() + String.valueOf(face.getIsRightEyeOpenProbability()) + "\n");
                scanResults.setText(scanResults.getText() + "---------" + "\n");

                for (Landmark landmark : face.getLandmarks()) {
                    int cx = (int) (landmark.getPosition().x);
                    int cy = (int) (landmark.getPosition().y);
                    canvas.drawCircle(cx, cy, 5, paint);
                }
            }

            if (faces.size() == 0) {
                scanResults.setText("Scan Failed: Found nothing to scan");
            } else {
                imageView.setImageBitmap(editedBitmap);
                scanResults.setText(scanResults.getText() + "No of Faces Detected: " + "\n");
                scanResults.setText(scanResults.getText() + String.valueOf(faces.size()) + "\n");
                scanResults.setText(scanResults.getText() + "---------" + "\n");
            }
        } else {
            scanResults.setText("Could not set up the detector!");
        }
    }

    private void takePicture() {
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
        File photo = new File(Environment.getExternalStorageDirectory(), "picture.jpg");
        imageUri = FileProvider.getUriForFile(MainActivity.this,
                BuildConfig.APPLICATION_ID + ".provider", photo);
        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
        startActivityForResult(intent, PHOTO_REQUEST);
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        if (imageUri != null) {
            outState.putParcelable(SAVED_INSTANCE_BITMAP, editedBitmap);
            outState.putString(SAVED_INSTANCE_URI, imageUri.toString());
            outState.putString(SAVED_INSTANCE_RESULT, scanResults.getText().toString());
        }
        super.onSaveInstanceState(outState);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        detector.release();
    }

    private void launchMediaScanIntent() {
        Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
        mediaScanIntent.setData(imageUri);
        this.sendBroadcast(mediaScanIntent);
    }

    private Bitmap decodeBitmapUri(Context ctx, Uri uri) throws FileNotFoundException {
        int targetW = 600;
        int targetH = 600;
        BitmapFactory.Options bmOptions = new BitmapFactory.Options();
        bmOptions.inJustDecodeBounds = true;
        BitmapFactory.decodeStream(ctx.getContentResolver().openInputStream(uri), null, bmOptions);
        int photoW = bmOptions.outWidth;
        int photoH = bmOptions.outHeight;

        int scaleFactor = Math.min(photoW / targetW, photoH / targetH);
        bmOptions.inJustDecodeBounds = false;
        bmOptions.inSampleSize = scaleFactor;

        return BitmapFactory.decodeStream(ctx.getContentResolver()
                .openInputStream(uri), null, bmOptions);
    }
}
</pre>



<p class="wp-block-paragraph">In the above piece of code, in <code>onCreate</code> method I have simply&nbsp;initialized the face detector by calling the <code>FaceDetector.Builder(getApplicationContext())</code> builder. This would download the Google Play Service dependencies for performing face detection and initialize them. In a way this also works as a safety measure to download the dependencies even when we specified the app to download the dependencies for face detection in the manifest (shown in first step). Also to make it event more reliable, we have also put a check; to check whether the detector is operational or not just before scanning the actual image in <code>scanFaces()</code> method. Full source code is available&nbsp;here:</p>



<p class="wp-block-paragraph" style="text-align:center"><a class="fasc-button fasc-size-large fasc-type-flat fasc-rounded-medium ico-fa fasc-ico-before fa-github" style="background-color: #0364af; color: #ffffff;" target="_blank" rel="noopener noreferrer" href="https://github.com/Truiton/MobileVisionAPI/tree/master/FaceDetection">Full Source Code</a></p>



<p class="wp-block-paragraph">Also as you can see above we have initialized the Mobile Vision Face Detector with two capabilities, i.e. <code>setLandmarkType(FaceDetector.ALL_LANDMARKS)</code> and <code>setClassificationType(FaceDetector.ALL_CLASSIFICATIONS)</code>. This would identify all the facial landmarks and classifications on a detected face, rest of the code just shows how we have plotted it on screen, which is self explanatory. The end result would look something like this:</p>



<div class="wp-block-image"><figure class="aligncenter"><img data-recalc-dims="1" loading="lazy" decoding="async" width="600" height="967" data-attachment-id="1739" data-permalink="https://www.truiton.com/2017/05/android-face-detection-example/android-face-detection-1/" data-orig-file="https://i0.wp.com/www.truiton.com/wp-content/uploads/2017/05/Android-Face-Detection-1.png?fit=600%2C967&amp;ssl=1" data-orig-size="600,967" data-comments-opened="1" data-image-title="Android Face Detection" data-image-description="" data-image-caption="" data-large-file="https://i0.wp.com/www.truiton.com/wp-content/uploads/2017/05/Android-Face-Detection-1.png?fit=600%2C967&amp;ssl=1" src="https://i0.wp.com/www.truiton.com/wp-content/uploads/2017/05/Android-Face-Detection-1.png?resize=600%2C967" alt="Android Face Detection" class="wp-image-1739" srcset="https://i0.wp.com/www.truiton.com/wp-content/uploads/2017/05/Android-Face-Detection-1.png?w=600&amp;ssl=1 600w, https://i0.wp.com/www.truiton.com/wp-content/uploads/2017/05/Android-Face-Detection-1.png?resize=186%2C300&amp;ssl=1 186w, https://i0.wp.com/www.truiton.com/wp-content/uploads/2017/05/Android-Face-Detection-1.png?resize=300%2C484&amp;ssl=1 300w" sizes="auto, (max-width: 600px) 100vw, 600px" /></figure></div>



<h2 class="wp-block-heading">Additional Capabilities</h2>



<p class="wp-block-paragraph">In addition to all what we have discussed above in this <a href="http://www.truiton.com/2017/05/android-face-detection-example/">Android Face Detection Example</a>, there is one more capability present in these Face Detection APIs. That is the face tracking capability with <a href="https://developers.google.com/android/reference/com/google/android/gms/vision/MultiProcessor" target="_blank" rel="noopener noreferrer">MultiProcessor</a>. The great thing about this feature is that it can not only track a single face, but can also track multiple faces in a video sequence. &nbsp;But due to limited scope of this article it is not covered here. Also since the face detection APIs are a part of Google&#8217;s <a href="http://www.truiton.com/2017/05/introducing-android-mobile-vision-api/" target="_blank" rel="noopener noreferrer">Mobile Vision Suite</a>, we have the capability to build a multi detector. Where we can track multiple faces and multiple bar codes or QR codes in a single video sequence by using the <a href="https://developers.google.com/android/reference/com/google/android/gms/vision/MultiDetector" target="_blank" rel="noopener noreferrer">MultiDetector</a> class. This feature is&nbsp;something very new and very powerful which opens a whole new area to explore into. Connect with us on Twitter, Facebook and Google+ for more updates on this.&nbsp;</p>
<div class="saboxplugin-wrap" itemtype="http://schema.org/Person" itemscope itemprop="author"><div class="saboxplugin-tab"><div class="saboxplugin-gravatar"><img alt='Mohit Gupt' src='https://secure.gravatar.com/avatar/a816092ad56645d2635ccfceb9f7e9d44821c19dec126cb394c882ba574eaa04?s=100&#038;d=mm&#038;r=g' srcset='https://secure.gravatar.com/avatar/a816092ad56645d2635ccfceb9f7e9d44821c19dec126cb394c882ba574eaa04?s=200&#038;d=mm&#038;r=g 2x' class='avatar avatar-100 photo' height='100' width='100' itemprop="image"/></div><div class="saboxplugin-authorname"><a href="https://www.truiton.com/author/mohitgupt/" class="vcard author" rel="author"><span class="fn">Mohit Gupt</span></a></div><div class="saboxplugin-desc"><div itemprop="description"><p>Born in New Delhi, India. A software engineer by profession, an android enthusiast and mobile development evangelist. My motive here is to create a group of skilled engineers, who can build better software. Reason being programming is my passion, and also it feels good to make a device do something you want. Professionally I have worked with many software engineering and product development firms. As of now too, I am employed as a senior engineer in a leading tech company. In total I may have worked on more than 20 projects professionally, but whenever I get spare time I share my thoughts here at Truiton.</p>
</div></div><div class="saboxplugin-web "><a href="http://www.truiton.com" target="_self" >www.truiton.com</a></div><div class="clearfix"></div><div class="saboxplugin-socials "><a title="Wordpress" target="_blank" href="https://www.truiton.com/author/mohitgupt/" rel="nofollow noopener" class="saboxplugin-icon-grey"><svg aria-hidden="true" class="sab-wordpress" role="img" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 512 512"><path fill="currentColor" d="M61.7 169.4l101.5 278C92.2 413 43.3 340.2 43.3 256c0-30.9 6.6-60.1 18.4-86.6zm337.9 75.9c0-26.3-9.4-44.5-17.5-58.7-10.8-17.5-20.9-32.4-20.9-49.9 0-19.6 14.8-37.8 35.7-37.8.9 0 1.8.1 2.8.2-37.9-34.7-88.3-55.9-143.7-55.9-74.3 0-139.7 38.1-177.8 95.9 5 .2 9.7.3 13.7.3 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l77.5 230.4L249.8 247l-33.1-90.8c-11.5-.7-22.3-2-22.3-2-11.5-.7-10.1-18.2 1.3-17.5 0 0 35.1 2.7 56 2.7 22.2 0 56.7-2.7 56.7-2.7 11.5-.7 12.8 16.2 1.4 17.5 0 0-11.5 1.3-24.3 2l76.9 228.7 21.2-70.9c9-29.4 16-50.5 16-68.7zm-139.9 29.3l-63.8 185.5c19.1 5.6 39.2 8.7 60.1 8.7 24.8 0 48.5-4.3 70.6-12.1-.6-.9-1.1-1.9-1.5-2.9l-65.4-179.2zm183-120.7c.9 6.8 1.4 14 1.4 21.9 0 21.6-4 45.8-16.2 76.2l-65 187.9C426.2 403 468.7 334.5 468.7 256c0-37-9.4-71.8-26-102.1zM504 256c0 136.8-111.3 248-248 248C119.2 504 8 392.7 8 256 8 119.2 119.2 8 256 8c136.7 0 248 111.2 248 248zm-11.4 0c0-130.5-106.2-236.6-236.6-236.6C125.5 19.4 19.4 125.5 19.4 256S125.6 492.6 256 492.6c130.5 0 236.6-106.1 236.6-236.6z"></path></svg></span></a><a title="Twitter" target="_blank" href="http://twitter.com/mohitgupt" rel="nofollow noopener" class="saboxplugin-icon-grey"><svg aria-hidden="true" class="sab-twitter" role="img" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 30 30"><path d="M26.37,26l-8.795-12.822l0.015,0.012L25.52,4h-2.65l-6.46,7.48L11.28,4H4.33l8.211,11.971L12.54,15.97L3.88,26h2.65 l7.182-8.322L19.42,26H26.37z M10.23,6l12.34,18h-2.1L8.12,6H10.23z" /></svg></span></a><a title="Facebook" target="_blank" href="https://www.facebook.com/Mr.Mohit.Gupt" rel="nofollow noopener" class="saboxplugin-icon-grey"><svg aria-hidden="true" class="sab-facebook" role="img" xmlns="http://www.w3.org/2000/svg" viewbox="0 0 264 512"><path fill="currentColor" d="M76.7 512V283H0v-91h76.7v-71.7C76.7 42.4 124.3 0 193.8 0c33.3 0 61.9 2.5 70.2 3.6V85h-48.2c-37.8 0-45.1 18-45.1 44.3V192H256l-11.7 91h-73.6v229"></path></svg></span></a></div></div></div><p>The post <a href="https://www.truiton.com/2017/05/android-face-detection-example/">Android Face Detection Example</a> appeared first on <a href="https://www.truiton.com">Truiton</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.truiton.com/2017/05/android-face-detection-example/feed/</wfw:commentRss>
			<slash:comments>5</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">1728</post-id>	</item>
	</channel>
</rss>

<!--
Performance optimized by W3 Total Cache. Learn more: https://www.boldgrid.com/w3-total-cache/?utm_source=w3tc&utm_medium=footer_comment&utm_campaign=free_plugin

Page Caching using Disk: Enhanced 
Minified using Disk

Served from: www.truiton.com @ 2026-07-06 19:59:10 by W3 Total Cache
-->