محاسبه شباهت تصویر با استفاده از دید کامپیوتر در iOS

محاسبه شباهت تصویر با استفاده از دید کامپیوتر در iOS

تعیین فاصله اقلیدسی بین تصاویر با استفاده از ویژگی های چاپ شده آنها

عکس توسط برونو مارتینز در Unsplash

اپل با افزودن پیشرفت های زیاد ، چارچوب Vision خود را در طول WWDC 2019 تقویت کرد. اپل از گسترش تعداد کلاسها (اصطلاح طبقه بندی برای این مورد استفاده می شود) درخواستهای طبقه بندی تصویر تا بهبود فناوری چهره و درخواستهای تشخیص متن ، پیشرفتهای جالبی در بینایی رایانه برای iOS ارائه می دهد.

< p> یکی از مهمترین موارد اضافی WWDC 2019 ، معرفی درخواست های مشابهت تصویر در چارچوب Vision بود. شباهت تصویر با طبقه بندی تصویر یکسان نیست ، و به زودی خواهیم دید که چگونه و چرا. اما ابتدا بیایید نگاهی به برخی از برنامه های کاربردی که در آنها شباهت تصویر مفید است بیاندازیم:

تأیید امضا- برای تعیین اینکه آیا امضای شخص با امضا مطابقت دارد ، مفید است ، در نتیجه برنامه های شما را در تشخیص جعل در واقع هوشمندتر می کند- زمان بر روی دستگاه. Duplicate Image Finder - تعداد زیادی تصویر را از بین می برید ، چه در مجموعه داده شما و چه در کتابخانه عکس ها. با این درخواست Vision جدید ، فیلتر کردن تصاویر تکراری با ایجاد یک کار خودکار آسان تر می شود. گروه بندی یا یافتن تصاویر مشابه - درست مانند شباهت متن برای برچسب زدن از معانی معنایی استفاده می شود ، شباهت تصویر در مواقعی مفید است که گروه بندی یا یافتن تصاویری که زمینه های مشابهی مانند مناظر ، مکان ها ، افراد ، اشکال و غیره را ارائه می دهند. تأیید چهره - شباهت تصویر در مواردی مانند شناسایی بصری بسیار مهم است. < p> اکنون که ایده خوبی در مورد موارد مختلف استفاده از مواردی که تعیین شباهت تصویر مفید است بدست آوردیم ، بیایید در حین ایجاد یک برنامه iOS مبتنی بر SwiftUI برای پیاده سازی این ویژگی ، عمیق تر به آن بپردازیم.

هدف ما

درک اینکه چگونه طبقه بندی تصویر با شباهت تصویر متفاوت است. آگاهی از نحوه عملکرد شباهت تصویر در چارچوب چشم انداز اپل. ساخت برنامه ای که محاسبه شباهت تصاویر مشابه را انجام دهد به یک تصویر مرجع و رتبه بندی آنها ما از چارچوب SwiftUI برای ساخت برنامه iOS خود استفاده می کنیم. آیا می خواهید برنامه های تلفن همراه با استفاده از یادگیری ماشین ایجاد کنید؟ هوش مصنوعی فریتز با مدل های از پیش آموزش داده شده و SDK برای iOS و Android کار را آسان می کند.

شباهت تصویر بینایی

شباهت و طبقه بندی تصویر یکسان نیست ، زیرا برچسب های کلاس دلالت بر شباهت ندارند به یک مدل طبقه بندی تصویر معمولاً برچسب های تولید شده را به عنوان خروجی برمی گرداند ، در حالی که درخواست شباهت تصویر مسئول محاسبه شباهت بین دو تصویر است. برای بازگرداندن نتایج خروجی هدف از طرف دیگر ، شباهت تصویر بدون نظارت است زیرا ورودی مجموعه ای از دستورالعمل ها را ندارد و برای استخراج شباهت های مربوط به تصاویر به استخراج ویژگی ها وابسته است.

تکنیک های زیادی برای محاسبه تصویر وجود دارد. شباهت و مقایسه مقادیر پیکسل تصویر بی اهمیت ترین و بی تاثیر است. تصویر یکسان در نورپردازی/سایه متفاوت پیکسل های متفاوتی می دهد و با وجود شباهت بسیار زیاد با محتوا ، متفاوت از تصویر منبع تعیین می شود. تصویر زیر از ویدیوهای WWDC این را نشان می دهد:

چاپ ویژگی های چشم انداز

خوشبختانه چارچوب Vision شامل یک شبکه طبقه بندی است کهبرای تعیین توصیف کننده های ویژگی تصویر در بالاترین لایه مدل آموزش دیده است. این ما را از ایجاد مدلهای خود برای استخراج ویژگیها از تصاویر نجات می دهد ، زیرا Vision قبلاً در API خود قابلیت چاپ را ارائه می دهد. FeaturePrint توصیف بردار تصویر است.

کد زیر نحوه تعیین ویژگی های چاپ شده از درخواست Vision و محاسبه فاصله اقلیدسی بین تصاویر را نشان می دهد. فاصله تعیین می کند که چقدر تصاویر روی نقشه اقلیدسی نزدیک/دور هستند. هرچه فاصله کوچکتر باشد ، تصاویر بیشتر شبیه هم هستند.

 آیا {
 requestHandler.perform ([request]) 
 let result = request.results؟. اولین بار به عنوان؟ VNFeaturePrintObservation
var var = Float (0)
سعی کنید نتیجه؟ برای محاسبه فاصله شناور از تصویر منبع استفاده می شود. 

در ادامه ، در بخش بعدی ، یک برنامه iOS را توسعه می دهیم که از ویژگی های چاپ تصاویر برای مرتب سازی آنها بر اساس شباهت استفاده می کند. < /p>

پیاده سازی

برای شروع ، نمای SwiftUI خود را تنظیم می کنیم که دارای تصویر منبع (تصویر مرجع) و لیستی از تصاویر است. ایده این است که VNGenerateImageFeaturePrintRquest را روی هر یک از تصاویر اجرا کرده و فاصله آنها را با چاپ ویژگی تصویر منبع محاسبه کنید. متعاقباً ، فهرست SwiftUI را مرتب می کنیم تا مشابه ترین تصاویر در بالا نمایش داده شود.

در اینجا نگاهی اجمالی به وضعیت اولیه رابط کاربری ما می اندازیم: cdn-images-1.medium.com/max/426/1*X6QNV8uTvXMp5NK_KMMPtQ.gif">

بنابراین ما یک تصویر از یک ماشین را به عنوان تصویر منبع و چند تصویر تصادفی (از جمله مدل های یک ماشین مشابه در حالت های مختلف) در SwiftUI List. به زودی خواهیم دید که شباهت تصویر با دقت چگونه کار می کند هنگام محاسبه ویژگی های چاپ شده تصاویر. اما ابتدا اجازه دهید لیست و مدل آن را تنظیم کنیم.

ایجاد یک مدل برای فهرست SwiftUI

لیست SwiftUI ما تصویر و فاصله محاسبه شده را در برابر تصویر منبع در یک struct مطابق شکل زیر: distance: String = "NA"

} 

پیروی از پروتکل قابل شناسایی برای عناصر موجود در لیست برای داشتن شناسه منحصر به فرد مهم است.

ساختن ما SwiftUI View

بعد ، نمای SwiftUI را طوری تنظیم می کنیم که modelData و تصویر منبع را مانند تصویر زیر نگه دارد:

در اینجا modelData ما به عنوان یک متغیر حالت تعریف شده است. هرگونه تغییر در modelData یا ویژگی های آن ، نمای را دوباره به روز می کند. NavigationBarItem هنگام فشار دادن درخواست Vision را فعال می کند. بیایید ببینیم چگونه کار می کند.

حرکت در چشم انداز یادگیری ماشین همراه دشوار است. ما اینجا هستیم تا به شما در مرتب سازی آن کمک کنیم. برای کاوش های عمیق در مورد همه چیز ML تلفن همراه ، در خبرنامه هوش مصنوعی Fritz مشترک شوید.

اجرای درخواست چشم انداز

کد زیر فاصله هر تصویر از مدل داده و منبع تصویر را محاسبه می کند. و آرایه را با تابع map و سپس مرتب سازی بر اساس فاصله تغییر می دهد: https://cdn-images-1.medium.com/max/426/1*oMJn7mUEAZa_3M52IkM-fQ.gif">

در نتیجه بالا ، مشابه ترین تصویر ، مشابه ترین ژست بود به تصویر مرجع مقایسه چاپ ویژگی Vision نیز اهمیت را در نظر می گیرد(از این رو دوچرخه ای که برجسته تر بود رتبه بالاتری کسب کرد).

برای سناریوهایی که تصویر محاسبه شباهت با تصویر منبع یکسان است ، فاصله بازگشتی 0.0 است. علاوه بر این ، اگر درخواست Vision نتواند ویژگی های چاپ شده را استخراج کند ، خطایی ایجاد می کند. الگوریتم های بینایی کامپیوتری پیچیده با API آسان برای استفاده.

با استخراج نسخه های چاپی تصاویر ، می توان شباهت بین تصاویر را تجزیه و تحلیل کرد. با حرکت به جلو ، می توانید تصاویر با چندین تصویر مرجع را برای موارد استفاده محاسبه کنید ، مانند اینکه آیا تصویر تار است یا خیر ، تیره/روشن است و غیره. جالب است که ببینیم درخواست دید در این نوع موارد چقدر دقیق عمل می کند. به کد منبع کامل این مقاله در این مخزن GitHub موجود است.

این برای این مورد است. امیدوارم از خواندن لذت برده باشید.

توجه ویراستار: ضربان قلب یک نشریه آنلاین آنلاین و مشارکت کننده است که به کاوش در تقاطع نوظهور توسعه برنامه تلفن همراه و یادگیری ماشین اختصاص داده شده است. ما متعهد هستیم که از توسعه دهندگان و مهندسان از هر قشری حمایت و الهام می گیریم.

مستقل از نظر ویرایش ، Heartbeat توسط Fritz AI ، پلت فرم یادگیری ماشینی که به توسعه دهندگان کمک می کند تا دستگاه ها را ببینند ، بشنوند ، حمایت و منتشر می شود. حس کنید و فکر کنید ما به مشارکت کنندگان خود پرداخت می کنیم و تبلیغات نمی فروشیم.

اگر می خواهید مشارکت داشته باشید ، به تماس ما برای مشارکت کنندگان سر بزنید. همچنین می توانید برای دریافت خبرنامه های هفتگی ما (هفته نامه یادگیری عمیق و خبرنامه هوش مصنوعی Fritz) ثبت نام کنید ، در Slack به ما بپیوندید و Fritz AI را در توییتر دنبال کنید تا آخرین یادگیری ماشین تلفن همراه را مشاهده کنید.

فیلترهای Snapchat: چگونه دید رایانه چهره شما را تشخیص می دهد

فیلترهای Snapchat: چگونه دید رایانه چهره شما را تشخیص می دهد

علم پشت تشخیص چهره شخصی

در آن لحظات خستگی هنگامی که با فیلترهای Snapchat بازی می کنید - زبان خود را بیرون بیاورید ، ویژگی های خود را غش کنید و نحوه تناسب تاج گل را بیاموزید. دقیقاً روی سر خود هستید - مطمئناً لحظه ای را گذرانده اید که از لحاظ فنی فکر می کنید چه خبر است - چگونه Snapchat موفق می شود چهره شما را با انیمیشن ها مطابقت دهد؟

پس از دو هفته تحقیق آنلاین ، از اینکه بالاخره نیم نگاهی به پشت پرده انداختم ، سپاسگزارم. به نظر می رسد که این محصول نمونه ای از برنامه بینایی رایانه ای است که سوخت اصلی پشت انواع نرم افزارهای تشخیص چهره است.

فناوری

این فناوری از راه اندازی اوکراینی به دست آمده Looksery ، برنامه ای است که به کاربران اجازه می دهد ویژگی های صورت خود را هنگام چت تصویری و عکس ها تغییر دهند. Snapchat این استارتاپ تغییر چهره مبتنی بر اودسا را ​​در سپتامبر 2015 به قیمت 150 میلیون دلار خریداری کرد. طبق گزارشات ، این بزرگترین کسب فناوری در تاریخ اوکراین است.

فیلترهای واقعیت افزوده آنها به حوزه بزرگ و سریع رو به رشد بینایی رایانه وارد می شود. بینایی کامپیوتری را می توان نقطه مقابل گرافیک کامپیوتری دانست. در حالی که گرافیک کامپیوتری سعی در تولید مدل های تصویری از مدل های سه بعدی دارد ، بینایی رایانه سعی می کند از داده های تصویر یک فضای سه بعدی ایجاد کند. چشم انداز رایانه ای در جامعه ما بیش از پیش مورد استفاده قرار گرفته است. این است که چگونه چک های خود را اسکن می کنید و داده ها از خطوط استخراج می شوند. به این ترتیب می توانید چک ها را با تلفن خود واریز کنید. این است که چگونه فیس بوک می داند چه کسانی در عکس های شما هستند ، چگونه اتومبیل های خودران می توانند از برخورد با افراد جلوگیری کنند و چگونه می توانید بینی خود را دچار تردید کنید.

نحوه عملکرد فیلترهای Snapchat

Looksery معتقد است مهندسی آنها محرمانه است ، اما هر کس می تواند به اختراعات خود به صورت آنلاین دسترسی پیدا کند. ناحیه خاصی از Computer Vision که فیلترهای Snapchat از آن استفاده می کنند پردازش تصویر نامیده می شود. پردازش تصویر عبارت است از تبدیل یک تصویر با انجام عملیات ریاضی بر روی هر پیکسل روی تصویر ارائه شده.

1 - تشخیص چهره:

اولین مرحله به این صورت عمل می کند: با توجه به ورودی تصویر یا قاب ویدئویی ، تمام چهره های موجود انسان را بیابید و کادر محدود کننده آنها را (یعنی مستطیل به شکل: X ، Y ، عرض و ارتفاع) مختص کنید.

تشخیص چهره از زمان حل مشکل در اوایل دهه 2000 اما با چالش هایی از جمله تشخیص چهره های ریز ، جزئی و غیر پیشانی روبرو است. پرکاربردترین تکنیک ترکیبی از هیستوگرام گرادیانهای جهت دار (به اختصار HOG) و ماشین بردار پشتیبان (SVM) است که با توجه به کیفیت خوب تصویر نسبتهای متوسط ​​نسبتاً خوبی را بدست می آورد اما این روش قادر به تشخیص زمان واقعی در حداقل در CPU.

اینجاست نحوه عملکرد آشکارساز HOG/SVM:

با توجه به تصویر ورودی ، نمای هرمی آن تصویر را که هرمی از نسخه کوچک شده چندگانه تصویر اصلی است محاسبه کنید. برای هر ورودی روی هرم ، از روش پنجره کشویی استفاده می شود. مفهوم پنجره کشویی بسیار ساده است. با حلقه زدن بر روی یک تصویر با اندازه گام ثابت ، تصاویر کوچک معمولاً وصله می کننداندازه 64 * 128 پیکسل در مقیاس های مختلف استخراج می شود. برای هر وصله ، الگوریتم تصمیم می گیرد که آیا دارای صورت است یا نه. HOG برای پنجره فعلی محاسبه می شود و به طبقه بندی SVM (خطی یا غیر) منتقل می شود تا تصمیم گیری انجام شود (یعنی صورت یا نه). هنگامی که با هرم انجام می شود ، معمولاً یک عملیات سرکوب غیر حداکثر (به اختصار NMS) به منظور دور انداختن مستطیل های انباشته انجام می شود. در اینجا می توانید اطلاعات بیشتری در مورد ترکیب HOG/SVM بخوانید.

2 - نشانه های صورت:

این مرحله بعدی در مرحله تجزیه و تحلیل ما است و به شرح زیر عمل می کند: برای هر صورت تشخیص داده شده ، مختصات ناحیه محلی را برای هر عضو یا ویژگی صورت آن صورت نمایش دهید. این شامل چشم ها ، استخوان ، لب ها ، بینی ، دهان ، ... مختصات معمولاً به شکل نقاط (X ، Y) است. یعنی تصویر بریده با صورت مورد نظر) ، اما اجرای آن برای برنامه نویس بسیار دشوار است مگر اینکه از تکنیک های نه چندان سریع یادگیری ماشین مانند آموزش و اجرای طبقه بندی استفاده شود.

می توانید در مورد استخراج نشانه های صورت در اینجا یا این PDF بیشتر بدانید: یک میلی ثانیه تراز صورت با مجموعه درختان رگرسیون در برخی موارد و بدیهی مفید ، تشخیص چهره و استخراج نشانه ها در یک عملیات واحد ترکیب می شوند.

3 - پردازش تصویر

اکنون که چهره شناسایی شده است ، Snapchat می تواند از پردازش تصویر استفاده کند برای اعمال ویژگی ها بر روی صورت کامل با این حال ، آنها تصمیم گرفتند یک قدم جلوتر بروند و می خواهند ویژگی های صورت شما را پیدا کنند. این کار با کمک مدل شکل فعال انجام می شود.

مدل شکل فعال یک مدل صورت است که توسط علامت گذاری دستی مرزهای ویژگی های صورت در صدها تا هزاران تصویر آموزش داده شده است. از طریق یادگیری ماشین ، یک "چهره متوسط" ایجاد می شود و این را با تصویری که ارائه می شود هماهنگ می کند. این چهره متوسط ​​، البته دقیقاً با چهره کاربر مطابقت ندارد (همه ما چهره های متنوعی داریم) ، بنابراین پس از تناسب صورت ، پیکسل هایی در اطراف لبه "متوسط ​​چهره" مورد بررسی قرار می گیرند تا تفاوت در سایه زنی جستجو شود. به دلیل آموزش الگوریتم (فرایند یادگیری ماشین) ، دارای اسکلت اساسی در مورد ظاهر برخی از ویژگی های صورت است ، بنابراین به دنبال الگوی مشابه در تصویر داده شده است. حتی اگر برخی از تغییرات اولیه اشتباه باشند ، با در نظر گرفتن موقعیت سایر نقاطی که آن را ثابت کرده است ، الگوریتم خطاهایی را که مرتکب شده است تصور می کند که در آن فکر می کرد جنبه های خاصی از صورت شما وجود دارد. سپس مدل یک مش تنظیم می کند و یک مدل سه بعدی ایجاد می کند که می تواند با صورت شما تغییر حالت دهد.

این کل فرایند تشخیص چهره/ویژگی هنگامی انجام می شود که درست قبل از انتخاب فیلتر خود آن شبکه سفید را مشاهده کنید. سپس فیلترها با افزایش آنها یا افزودن چیزی در بالای آنها ، مناطق خاصی از صورت ارائه شده را مخدوش می کنند.

از فیلترها تا تعویض صورت

نسخه به روز شده Snapchat چند ماه قبل دارای قابلیت تعویض صورت با a بوددوست ، چه در زمان واقعی و چه با دسترسی به برخی از چهره های گالری خود. توجه کنید که چگونه صورت ها قابل مشاهده هستند ، این موقعیتی است که مدل آماری در آن قرار دارد. این به Snapchat کمک می کند تا شما و دوستانتان را سریع تر تراز کرده و ویژگی ها را عوض کند.

پس از قرار دادن همه ویژگی های خود ، برنامه مش ای در امتداد صورت شما ایجاد می کند که به هر نقطه فریم به فریم می چسبد. این مش اکنون می تواند همانطور که Snapchat احساس می کند ، ویرایش و اصلاح شود.

برخی از لنزها یا از شما می خواهند ابروهای خود را بالا بیاورید و یا با باز کردن دهان خود کارهای بیشتری انجام می دهند. فکر کردن درباره این نیز بسیار ساده است ، اما الزام به الگوریتم های بیشتری نیاز است.

قسمت داخلی دهان نسبتاً تیره است. بنابراین این باعث باز شدن دهان می شود. هنگامی که متوجه می شوید کاربر ابروهای خود را بالا برده است ، تغییرات ابرو نسبت به سایر ویژگی های صورت در نظر گرفته می شود.

همانطور که قبلاً ذکر شد ، این فناوری جدید نیست. اما برای انجام همه آن فرایندها در زمان واقعی و روی یک پلت فرم تلفن همراه ، قدرت پردازش زیادی همراه با برخی الگوریتم های پیچیده نیاز است. به همین دلیل اسنپ چت تصور کرد که بهتر است به جای ساختن بستر خود ، 150 میلیون دلار برای خرید Looksery بپردازید.

نتیجه گیری

امیدوارم این مطلب آموزنده باشد و مانند من کنجکاوی شما را تکان دهد. در حال حاضر ، من فیلترهای Snapchat را عمیق تر کاوش می کنم ، لنز صورت مورد علاقه خود را آزمایش می کنم ، از تمام دیدهای رایانه ای که در پشت صحنه اتفاق می افتد ، آگاهی و قدردانی می کنم.

- -

اگر از این قطعه لذت بردید ، اگر دکمه کف زدن را بزنید ، دوست دارم آن را دوست داشته باشید