{"id":1705,"date":"2018-03-01T12:47:10","date_gmt":"2018-03-01T12:47:10","guid":{"rendered":"https:\/\/www.moveoapps.com\/blog\/?p=1705"},"modified":"2019-11-21T08:46:21","modified_gmt":"2019-11-21T08:46:21","slug":"face-detection-ios-11-vision-framework","status":"publish","type":"post","link":"https:\/\/www.moveoapps.com\/blog\/face-detection-ios-11-vision-framework\/","title":{"rendered":"Introduction to Face Detection in iOS 11 using Vision Framework"},"content":{"rendered":"<p>At the WWDC-2017, Apple introduced iOS11 with a bouquet of new and advanced features for the iOS users. From stunner features like Multitasking and ARKit, to advances in existing frameworks like AVFoundation and Metal made WWDC 2017 worth the wait.<\/p>\n<p>Apple never misses a chance to bring something exciting for developers. During WWDC-2017 too, Apple upheld its reputation and introduced several advanced and exciting Frameworks that will further help developers create nuanced and high-performance apps.<\/p>\n<p>One of these new and exciting frameworks is Vision. It is a framework that lets you apply high-performance image analysis to detect, sort and classify images and video, letting developers take their imagination to the next level. In this article, let\u2019s explore this amazing new technology and take a look at all the things we can do with it.<\/p>\n<h2><strong><b>What is Vision Framework?<\/b><\/strong><\/h2>\n<p>Vision is a Framework that lets you apply high-performance image analysis and computer vision technology to images and videos, thus automatically identifying faces, detecting features and classifying scenes. It also detects barcodes, text, features and object tracking, making it an incredible tool for sorting and filtering large numbers of image files and videos.<\/p>\n<p>Here\u2019s what Brett Keating had to say when introducing Vision at the WWDC 2017 &#8211;<\/p>\n<p><strong><em><b><i>\u201c<\/i><\/b><\/em><\/strong><strong><em><b><i>(It is a) High-level on-device solutions to computer vision problems through one simple API<\/i><\/b><\/em><\/strong><strong><em><b><i>\u201d<\/i><\/b><\/em><\/strong><strong><em><b><i>.<\/i><\/b><\/em><\/strong><\/p>\n<h2><strong><b>Things you can do with Vision.<\/b><\/strong><\/h2>\n<p>There\u2019s a whole arsenal of powerful features Vision offers. Using Core ML and deep learning, it gives you a great deal of precision and higher recall than any earlier technology. This is what enables Vision to accurately detect faces even with glasses or hats and scarves. It works exceptionally well even inside views, partially blocked faces or any other strong profiles with ease. To list out a few, here are the key capabilities you can find in Vision:<\/p>\n<ul>\n<li>Determine face rectangle and face landmarks i.e. eyes, brows, nose, lips.<\/li>\n<li>Recognize and identify text and barcode.<\/li>\n<li>Recognize and identify rectangular surface.<\/li>\n<li>Image registration.<\/li>\n<li>Identify the horizon angle in an image.<\/li>\n<li>Object tracking from Image and Video frames.<\/li>\n<li>Integration with <a href=\"https:\/\/developer.apple.com\/documentation\/coreml\" target=\"_blank\" rel=\"noopener\"><strong><b>CoreML<\/b><b>\u00a0<\/b><u><b><\/b><\/u><\/strong><\/a>allows you to use custom models with ease.Now that is an impressive list. But if you\u2019re feeling intimidated by the sheer number of features Vision packs, don\u2019t be. There is no steep learning curve or much homework to do. Vision is easy to learn and use. With traditional and deep learning algorithms, it handles complexities easily, making your job simple.<br \/>\n<b><\/b><\/li>\n<\/ul>\n<h2><strong><b>Vision Concept<\/b><\/strong><\/h2>\n<p>The simple mechanism Vision follows to obtain computer vision is:<\/p>\n<p><em><i>Request<\/i><\/em>, <em><i>Request Handler <\/i><\/em>and the <em><i>Result<\/i><\/em>\u00a0of that request.<\/p>\n<p><a href=\"https:\/\/www.moveoapps.com\/blog\/wp-content\/uploads\/2018\/03\/Image-1.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1708 aligncenter\" src=\"https:\/\/www.moveoapps.com\/blog\/wp-content\/uploads\/2018\/03\/Image-1.png\" alt=\"Vision Concept\" width=\"624\" height=\"181\" srcset=\"https:\/\/www.moveoapps.com\/blog\/wp-content\/uploads\/2018\/03\/Image-1.png 624w, https:\/\/www.moveoapps.com\/blog\/wp-content\/uploads\/2018\/03\/Image-1-300x87.png 300w, https:\/\/www.moveoapps.com\/blog\/wp-content\/uploads\/2018\/03\/Image-1-150x44.png 150w\" sizes=\"auto, (max-width: 624px) 100vw, 624px\" \/><\/a>Before moving ahead with the code snippet, let\u2019s see the base classes and categories of\u00a0 Vision. Under the roof, there are 3 main class categories:<\/p>\n<p><strong><u><b>VNRequest<\/b><\/u><\/strong><\/p>\n<p>This is the abstract superclass for image analysis requests. You can ask Vision to do something using this request. It has a request completion handler and an array of results.<strong><b>\u00a0<\/b><\/strong>i.e.<\/p>\n<p><em>VNDetectFaceRectanglesRequest<\/em>\u00a0for Face detection.<\/p>\n<p><em>VNDetectBarcodesRequest<\/em>\u00a0for Barcode detection.<\/p>\n<p><em>VNDetectTextRectanglesRequest<\/em>\u00a0for Text region.<\/p>\n<p><strong><u><b>VNImageRequestHandler,<\/b><\/u><\/strong><strong><b>\u00a0<\/b><\/strong><strong><u><b>VNSequenceRequestHandler<\/b><\/u><\/strong><\/p>\n<p>Request will execute one of the two kinds of request handlers, along with a completion block. It can execute more than one request on given image.<\/p>\n<p><strong><u><b>VNObservation<\/b><\/u><\/strong><\/p>\n<p>This is the abstract superclass for image analysis results. Result array will populate with \u2018Observation\u2019.<\/p>\n<p>Last but not the least, there is <strong><u>VNError<\/u><\/strong>\u00a0for error handling in Vision.<\/p>\n<p><strong><b>Best Practices<\/b><\/strong><strong><b>\u00a0<\/b><\/strong><\/p>\n<p>When introducing Vision, Apple described the following areas for Best Practices.<\/p>\n<p><strong><b>1.\u00a0 Which image type is right for me?\u00a0 \u00a0<\/b><\/strong><\/p>\n<ul>\n<li>Vision supports a wide variety of image types including CVPixelBufferRef, CGImageRef, CIImage, NSURL, and NSData.<\/li>\n<li>You can choose the image type based on where it comes from.<\/li>\n<li><b><i><\/i><\/b><strong><em><b><i>CVPixelBuffer<\/i><\/b><\/em><\/strong> comes from <strong><em><b><i>CMSampleBuffer<\/i><\/b><\/em><\/strong>\u00a0and it produces <strong><em><b><i>VideoDataOut<\/i><\/b><\/em><\/strong>\u00a0of a camera stream. This is a low-level format just to provide image data in memory.<\/li>\n<li>If your image is saved on your disk, you can use <strong><em><b><i>URL\u00a0<\/i><\/b><\/em><\/strong>and if your image comes from web, use <strong><em><b><i>NSData<\/i><\/b><\/em><\/strong>. Wherever possible, Vision will do the scaling without reading the full image. There is no need to specify the EXIF orientation data for URL type images unless you want to override the default one.<\/li>\n<li>If you are using Core Image, use <b><i><\/i><\/b><\/li>\n<li>You also can use <strong><em><b><i>CGImageRef\u00a0<\/i><\/b><\/em><\/strong>from <strong><em><b><i>UIImage\u00a0<\/i><\/b><\/em><\/strong>or <strong><em><b><i>NSImage, CGImage <\/i><\/b><\/em><\/strong>if image is UI based or comes through Image Picker.<b><\/b><\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p style=\"text-align: left\"><strong><b>2.\u00a0 What Am I Going to Do with the Image?<\/b><\/strong><\/p>\n<ul>\n<li>Use handler (VNImageRequestHandler\/VNSequenceRequestHandler) according to\u00a0 your use. i.e VNImageRequestHandler. This will hold the image for some time.<\/li>\n<li style=\"text-align: left\">Remember that the input image is immutable and be sure not to pre-scale it.<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p><strong><b>3.\u00a0 What Performance Do I Need or Want?<\/b><\/strong><\/p>\n<ul>\n<li>Task performed using Vision can be time-consuming so factor that in.<\/li>\n<li>Run your Vision task on a different queue and not the main queue. It is advisable to run it on a background queue so the UI doesn\u2019t get blocked by Vision task.<\/li>\n<li>Keep in mind that if you want to update the UI, you need to dispatch back to the main queue.<\/li>\n<\/ul>\n<h2><strong><b>Let<\/b><\/strong><strong><b>\u2019<\/b><\/strong><strong><b>s See Some Code Snippets<\/b><\/strong><\/h2>\n<p>Time to get to work with Vision. Let\u2019s take a closer look at the code to see how we can detect faces from an image.<\/p>\n<ul>\n<li>Things you need to work with Vision are <strong><b>XCode9\u00a0<\/b><\/strong>and a device<strong><b>\u00a0<\/b><\/strong>with<strong><b>\u00a0iOS11<\/b><\/strong>\u00a0to test your code.<\/li>\n<li>First of all, choose the image which you want to detect the face(s) in.<\/li>\n<li>Now begin with importing <strong><b>Vision\u00a0<\/b><\/strong>Framework to get an access to its API in your ViewController\/Class.<\/li>\n<\/ul>\n<pre>import\u00a0Vision<\/pre>\n<ul>\n<li>First, we will create the Request to detect Face(s) from the image. It\u2019ll be <strong><em><b><i>VNDetectFaceRectanglesRequest\u00a0<\/i><\/b><\/em><\/strong><b><\/b>in our case. You can also use other requests according to your use. i.e \u00a0<em><i>VNDetectBarcodesRequest<\/i><\/em>, <em><i>VNDetectTextRectanglesRequest<\/i><\/em>, etc.<\/li>\n<\/ul>\n<pre>var\u00a0faceDetectionRequest : VNDetectFaceRectanglesRequest\u00a0= {\r\n \r\n let\u00a0faceRequest = VNDetectFaceRectanglesRequest(completionHandler:self.handleFaceDetection)\r\n \r\n return\u00a0faceRequest\r\n \r\n}()<\/pre>\n<p>where <em><i>handleFaceDetection<\/i><\/em>\u00a0will handle your result after performing Vision task.<\/p>\n<ul>\n<li>The <strong><em><b><i>VNImageRequestHandler <\/i><\/b><\/em><\/strong>will execute your request. You can choose any initialization method according to your Vision task and mean, while you will have to take care of your image type to pass it as a parameter.\n<pre>let\u00a0handler = VNImageRequestHandler(cgImage: cgImage, options: [:])\r\ndo\u00a0{\r\n    try\u00a0handler.perform([self.faceDetectionRequest])\r\n} catch\u00a0{\r\n    print(\"Failed to perform classification.\\n\\(error.localizedDescription)\")\r\n}\r\n<\/pre>\n<\/li>\n<li>The results are wrapped in \u201cobservations\u201d. The execution of your handler will generate the result according to your request. In our case, the <em><i>handleFaceDetection<\/i><\/em><i><\/i>will generate the result of our <em><i>faceDetectionRequest<\/i><\/em><em><i>. <\/i><\/em>Due to the updating of UI, some lines of the code will execute under <em><i>main.<\/i><\/em><\/li>\n<\/ul>\n<pre>func\u00a0handleFaceDetection (request: VNRequest, error: Error?) {\r\n    \r\n    guard\u00a0let\u00a0observations = request.results\u00a0as? [VNFaceObservation]\r\n    else\u00a0{\r\n        print(\"unexpected result type from VNFaceObservation\")\r\n        return\r\n    }\r\n\r\n    DispatchQueue.main.async\u00a0{\r\n        for\u00a0face in\u00a0observations\r\n        {\r\n            let\u00a0view = self.createBoxView(withColor: UIColor.red)\r\n            view.frame\u00a0= self.transformRect(fromRect: face.boundingBox, toViewRect: self.yourImageView)\r\n            self.yourImageView.addSubview(view)\r\n        }\r\n    }\r\n}\r\n<\/pre>\n<ul>\n<li>In above snippet, the observations return the array of type\u00a0<em>VNFaceobservation<\/em> And to draw a square on faces from the image you can use one of the below methods or you can write your own custom methods.<\/li>\n<\/ul>\n<pre>func\u00a0transformRect(fromRect: CGRect\u00a0, toViewRect :UIView) -&gt; CGRect\u00a0{\r\n    \r\n    \/\/Convert Vision Frame to UIKit Frame\r\n    \r\n    var\u00a0toRect = CGRect()\r\n    toRect.size.width\u00a0= fromRect.size.width\u00a0* toViewRect.frame.size.width\r\n    toRect.size.height\u00a0= fromRect.size.height\u00a0* toViewRect.frame.size.height\r\n    toRect.origin.y\u00a0= \u00a0(toViewRect.frame.height) - (toViewRect.frame.height\u00a0* fromRect.origin.y\u00a0)\r\n    toRect.origin.y\u00a0\u00a0= toRect.origin.y\u00a0- \u00a0toRect.size.height\r\n    toRect.origin.x\u00a0= \u00a0fromRect.origin.x\u00a0* toViewRect.frame.size.width\r\n    return\u00a0toRect\r\n    \r\n}\r\n\r\nfunc\u00a0createBoxView(withColor : UIColor) -&gt; UIView\u00a0{\r\n    \r\n    let\u00a0view = UIView()\r\n    view.layer.borderColor\u00a0= withColor.cgColor\r\n    view.layer.borderWidth\u00a0= 2\r\n    view.backgroundColor\u00a0= UIColor.clear\r\n    return\u00a0view\r\n}\r\n<\/pre>\n<ul>\n<li>Let&#8217;s consider the following UI to begin with detecting faces using <strong>Vision.<\/strong><\/li>\n<\/ul>\n<p><a href=\"https:\/\/www.moveoapps.com\/blog\/wp-content\/uploads\/2018\/03\/Image-2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1715 aligncenter\" src=\"https:\/\/www.moveoapps.com\/blog\/wp-content\/uploads\/2018\/03\/Image-2.png\" alt=\"detecting face using vision\" width=\"315\" height=\"568\" srcset=\"https:\/\/www.moveoapps.com\/blog\/wp-content\/uploads\/2018\/03\/Image-2.png 315w, https:\/\/www.moveoapps.com\/blog\/wp-content\/uploads\/2018\/03\/Image-2-166x300.png 166w, https:\/\/www.moveoapps.com\/blog\/wp-content\/uploads\/2018\/03\/Image-2-83x150.png 83w\" sizes=\"auto, (max-width: 315px) 100vw, 315px\" \/><\/a><\/p>\n<ul>\n<li>In the above UI, we can see a \u2018Start Detection\u2019 button. After initializing <em><i>VNDetectFaceRectanglesRequest, <\/i><\/em>the<em><i>VNImageRequestHandler <\/i><\/em>will execute in the IBAction of this button.<\/li>\n<\/ul>\n<ul>\n<li>And finally, the observation of the image will go under <em><i>handleFaceDetection <\/i><\/em>and the UI will change as follows, and you will see red squares on faces in the image.<\/li>\n<\/ul>\n<p><a href=\"https:\/\/www.moveoapps.com\/blog\/wp-content\/uploads\/2018\/03\/Image-3.png\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1716 aligncenter\" src=\"https:\/\/www.moveoapps.com\/blog\/wp-content\/uploads\/2018\/03\/Image-3.png\" alt=\"Facedetection with better UI\" width=\"321\" height=\"565\" srcset=\"https:\/\/www.moveoapps.com\/blog\/wp-content\/uploads\/2018\/03\/Image-3.png 321w, https:\/\/www.moveoapps.com\/blog\/wp-content\/uploads\/2018\/03\/Image-3-170x300.png 170w, https:\/\/www.moveoapps.com\/blog\/wp-content\/uploads\/2018\/03\/Image-3-85x150.png 85w\" sizes=\"auto, (max-width: 321px) 100vw, 321px\" \/><\/a><\/p>\n<h2><strong><b>Conclusion<\/b><\/strong><\/h2>\n<p>So there you have it, a complete guide to what Vision is and what it can do. it truly is a sophisticated little piece of technology. It is a new high-level framework for Computer Vision, which is the best among all other frameworks to get image processing. It obtains the highest accuracy in very low processing time without any latency. Features like privacy of users\u2019\u00a0data, consistent interface, no cost and real-time use case makes Vision even more efficient. Now that you know just how to use Vision, get started and explore its vast potential for yourself. Happy coding!<br \/>\n<script type=\"text\/javascript\" src=\"\/\/newsharecounts.s3-us-west-2.amazonaws.com\/nsc.js\"><\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>At the WWDC-2017, Apple introduced iOS11 with a bouquet of new and advanced features for the iOS users. From stunner features like Multitasking and ARKit, to advances in existing frameworks like AVFoundation and Metal made WWDC 2017 worth the wait. Apple never misses a chance to bring something exciting for developers. During WWDC-2017 too, Apple &hellip; <a href=\"https:\/\/www.moveoapps.com\/blog\/face-detection-ios-11-vision-framework\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Introduction to Face Detection in iOS 11 using Vision Framework<\/span> <span class=\"meta-nav\">&rarr;<\/span><\/a><\/p>\n","protected":false},"author":101027,"featured_media":1721,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[30],"tags":[],"class_list":["post-1705","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-ios"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.9 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Introduction to Face Detection in iOS 11 using Vision Framework<\/title>\n<meta name=\"description\" content=\"Vision is a Framework that lets you apply high-performance image analysis and computer vision technology to images and videos.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.moveoapps.com\/blog\/face-detection-ios-11-vision-framework\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Introduction to Face Detection in iOS 11 using Vision Framework\" \/>\n<meta property=\"og:description\" content=\"Vision is a Framework that lets you apply high-performance image analysis and computer vision technology to images and videos.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.moveoapps.com\/blog\/face-detection-ios-11-vision-framework\/\" \/>\n<meta property=\"og:site_name\" content=\"Moveo Apps\" \/>\n<meta property=\"article:published_time\" content=\"2018-03-01T12:47:10+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-11-21T08:46:21+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.moveoapps.com\/blog\/wp-content\/uploads\/2018\/03\/Face-Detection-in-iOS-11-using-Vision-Framework.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1294\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Gunjan Bhavsar\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Gunjan Bhavsar\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.moveoapps.com\/blog\/face-detection-ios-11-vision-framework\/\",\"url\":\"https:\/\/www.moveoapps.com\/blog\/face-detection-ios-11-vision-framework\/\",\"name\":\"Introduction to Face Detection in iOS 11 using Vision Framework\",\"isPartOf\":{\"@id\":\"https:\/\/www.moveoapps.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.moveoapps.com\/blog\/face-detection-ios-11-vision-framework\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.moveoapps.com\/blog\/face-detection-ios-11-vision-framework\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.moveoapps.com\/blog\/wp-content\/uploads\/2018\/03\/Face-Detection-in-iOS-11-using-Vision-Framework.jpg\",\"datePublished\":\"2018-03-01T12:47:10+00:00\",\"dateModified\":\"2019-11-21T08:46:21+00:00\",\"author\":{\"@id\":\"https:\/\/www.moveoapps.com\/blog\/#\/schema\/person\/f78d302c017914e7aaa78d6c0b8fa805\"},\"description\":\"Vision is a Framework that lets you apply high-performance image analysis and computer vision technology to images and videos.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.moveoapps.com\/blog\/face-detection-ios-11-vision-framework\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.moveoapps.com\/blog\/face-detection-ios-11-vision-framework\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.moveoapps.com\/blog\/face-detection-ios-11-vision-framework\/#primaryimage\",\"url\":\"https:\/\/www.moveoapps.com\/blog\/wp-content\/uploads\/2018\/03\/Face-Detection-in-iOS-11-using-Vision-Framework.jpg\",\"contentUrl\":\"https:\/\/www.moveoapps.com\/blog\/wp-content\/uploads\/2018\/03\/Face-Detection-in-iOS-11-using-Vision-Framework.jpg\",\"width\":2560,\"height\":1294,\"caption\":\"Face Detection in iOS 11\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.moveoapps.com\/blog\/face-detection-ios-11-vision-framework\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.moveoapps.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Introduction to Face Detection in iOS 11 using Vision Framework\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.moveoapps.com\/blog\/#website\",\"url\":\"https:\/\/www.moveoapps.com\/blog\/\",\"name\":\"Moveo Apps\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.moveoapps.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.moveoapps.com\/blog\/#\/schema\/person\/f78d302c017914e7aaa78d6c0b8fa805\",\"name\":\"Gunjan Bhavsar\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.moveoapps.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.moveoapps.com\/blog\/wp-content\/uploads\/2019\/09\/Gunjan-Bhavsar-96x96.jpg\",\"contentUrl\":\"https:\/\/www.moveoapps.com\/blog\/wp-content\/uploads\/2019\/09\/Gunjan-Bhavsar-96x96.jpg\",\"caption\":\"Gunjan Bhavsar\"},\"sameAs\":[\"https:\/\/www.moveoapps.com\/\"],\"url\":\"https:\/\/www.moveoapps.com\/blog\/author\/gunjan-bhavsar\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Introduction to Face Detection in iOS 11 using Vision Framework","description":"Vision is a Framework that lets you apply high-performance image analysis and computer vision technology to images and videos.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.moveoapps.com\/blog\/face-detection-ios-11-vision-framework\/","og_locale":"en_US","og_type":"article","og_title":"Introduction to Face Detection in iOS 11 using Vision Framework","og_description":"Vision is a Framework that lets you apply high-performance image analysis and computer vision technology to images and videos.","og_url":"https:\/\/www.moveoapps.com\/blog\/face-detection-ios-11-vision-framework\/","og_site_name":"Moveo Apps","article_published_time":"2018-03-01T12:47:10+00:00","article_modified_time":"2019-11-21T08:46:21+00:00","og_image":[{"width":2560,"height":1294,"url":"https:\/\/www.moveoapps.com\/blog\/wp-content\/uploads\/2018\/03\/Face-Detection-in-iOS-11-using-Vision-Framework.jpg","type":"image\/jpeg"}],"author":"Gunjan Bhavsar","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Gunjan Bhavsar","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.moveoapps.com\/blog\/face-detection-ios-11-vision-framework\/","url":"https:\/\/www.moveoapps.com\/blog\/face-detection-ios-11-vision-framework\/","name":"Introduction to Face Detection in iOS 11 using Vision Framework","isPartOf":{"@id":"https:\/\/www.moveoapps.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.moveoapps.com\/blog\/face-detection-ios-11-vision-framework\/#primaryimage"},"image":{"@id":"https:\/\/www.moveoapps.com\/blog\/face-detection-ios-11-vision-framework\/#primaryimage"},"thumbnailUrl":"https:\/\/www.moveoapps.com\/blog\/wp-content\/uploads\/2018\/03\/Face-Detection-in-iOS-11-using-Vision-Framework.jpg","datePublished":"2018-03-01T12:47:10+00:00","dateModified":"2019-11-21T08:46:21+00:00","author":{"@id":"https:\/\/www.moveoapps.com\/blog\/#\/schema\/person\/f78d302c017914e7aaa78d6c0b8fa805"},"description":"Vision is a Framework that lets you apply high-performance image analysis and computer vision technology to images and videos.","breadcrumb":{"@id":"https:\/\/www.moveoapps.com\/blog\/face-detection-ios-11-vision-framework\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.moveoapps.com\/blog\/face-detection-ios-11-vision-framework\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.moveoapps.com\/blog\/face-detection-ios-11-vision-framework\/#primaryimage","url":"https:\/\/www.moveoapps.com\/blog\/wp-content\/uploads\/2018\/03\/Face-Detection-in-iOS-11-using-Vision-Framework.jpg","contentUrl":"https:\/\/www.moveoapps.com\/blog\/wp-content\/uploads\/2018\/03\/Face-Detection-in-iOS-11-using-Vision-Framework.jpg","width":2560,"height":1294,"caption":"Face Detection in iOS 11"},{"@type":"BreadcrumbList","@id":"https:\/\/www.moveoapps.com\/blog\/face-detection-ios-11-vision-framework\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.moveoapps.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Introduction to Face Detection in iOS 11 using Vision Framework"}]},{"@type":"WebSite","@id":"https:\/\/www.moveoapps.com\/blog\/#website","url":"https:\/\/www.moveoapps.com\/blog\/","name":"Moveo Apps","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.moveoapps.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/www.moveoapps.com\/blog\/#\/schema\/person\/f78d302c017914e7aaa78d6c0b8fa805","name":"Gunjan Bhavsar","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.moveoapps.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/www.moveoapps.com\/blog\/wp-content\/uploads\/2019\/09\/Gunjan-Bhavsar-96x96.jpg","contentUrl":"https:\/\/www.moveoapps.com\/blog\/wp-content\/uploads\/2019\/09\/Gunjan-Bhavsar-96x96.jpg","caption":"Gunjan Bhavsar"},"sameAs":["https:\/\/www.moveoapps.com\/"],"url":"https:\/\/www.moveoapps.com\/blog\/author\/gunjan-bhavsar\/"}]}},"_links":{"self":[{"href":"https:\/\/www.moveoapps.com\/blog\/wp-json\/wp\/v2\/posts\/1705","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.moveoapps.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.moveoapps.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.moveoapps.com\/blog\/wp-json\/wp\/v2\/users\/101027"}],"replies":[{"embeddable":true,"href":"https:\/\/www.moveoapps.com\/blog\/wp-json\/wp\/v2\/comments?post=1705"}],"version-history":[{"count":21,"href":"https:\/\/www.moveoapps.com\/blog\/wp-json\/wp\/v2\/posts\/1705\/revisions"}],"predecessor-version":[{"id":1758,"href":"https:\/\/www.moveoapps.com\/blog\/wp-json\/wp\/v2\/posts\/1705\/revisions\/1758"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.moveoapps.com\/blog\/wp-json\/wp\/v2\/media\/1721"}],"wp:attachment":[{"href":"https:\/\/www.moveoapps.com\/blog\/wp-json\/wp\/v2\/media?parent=1705"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.moveoapps.com\/blog\/wp-json\/wp\/v2\/categories?post=1705"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.moveoapps.com\/blog\/wp-json\/wp\/v2\/tags?post=1705"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}