فناوری تشخیص چهره روشی منبی بر فناوریهای روز دنیا برای شناسایی و راستی آزمایی هویت افراد بر اساس چهرهی آنها است. سیستمهای تشخیص چهره میتوانند در تصاویر، فیلمها و همچنین بهصورت زنده و بیدرنگ (real time) استفاده شوند. یک سیستم تشخیص چهره از نشانگرهای زیستی برای مدلسازی ویژگیهای چهره در یک عکس یا فیلم بهره میبرد. این سیستم، اطلاعات پایگاه دادهی چهرههای شناخته شده را با سایر چهرهها مقایسه میکند تا اینکه به جواب درست برسد. تشخیص چهره میتواند در شناسایی هویت افراد کمک کند و از طرف دیگر چالشهای حریم خصوصی را بالا میبرد. در ادامهی این مقاله از فنولوژی به این سوال به طور کامل پاسخ میدهیم که فناوری تشخیص چهره چیست؟ و همچنین با مهمترین روشهای تشخیص چهره آشنا میشویم. در ادامهی مقاله به کاربر هوش مصنوعی، یادگیری ماشین و یادگیری عمیق در فناوری تشخیص چهره میپردازیم و یک نمونه از آن را با زبان برنامه نویسی پایتون و کتابخانهی OpenCV بررسی میکنیم.
کاربردهای فناوری تشخیص چهره چیست؟
پیشبینی میشود تا سال ۲۰۲۲ بازار تشخیص چهره به ۷.۷ میلیارد دلار برسد که نسبت به سال ۲۰۱۷ که ۴ میلیارد دلار بوده، رشد زیادی است. این تخمینهای رو به رشد به این خاطر است که تشخیص چهره در انواع کاربردهای تجاری حضور دارد. این فناوری میتواند برای همه چیز از نظارت گرفته تا بازاریابی مورد استفاده قرار گیرد. اما اینجا بحث کمی پیچیده میشود. اگر حریم خصوصی برایتان مهم است، به احتمال زیاد میخواهید کنترل کنید که چگونه اطلاعات شخصی شما استفاده میشود؛ نکته اینجاست که اثرچهره (faceprint) شما همان دادهی شخصی شماست. تمرکز کاربردهای فناوری تشخیص چهره با استفاده از اثرچهره، شناسایی و احراز هویت است.
در ادامه به زمینههایی که این فناوری استفاده میشود اشاره میکنیم:
- عامل احراز هویت ثانویه، برای اضافه کردن امنیت افزوده بر هر نوع فرایند ورود (log-in) .
- دسترسی به نرمافزارهای موبایل، بدون رمز.
- دسترسی به خدمات آنلاینی که در گذشته استفاده شده، مانند ورود به پلتفرمهای آنلاین.
- دسترسی به ساختمانها، منازل، دفترها و هر نوع املاک و ورودیهای فیزیکی.
- استفاده به عنوان یک روش پرداختی، در فروشگاه های فیزیکی و آنلاین.
- دسترسی به یک دستگاه قفل شده.
- قابلیت پذیرش گردشگران در هواپیماها،هتلها و … .
چالشهای فناوری تشخیص چهره چیست؟
ماموران قانون ممکن است از دستگاههای تلفن همراه برای شناسایی افراد در ایستگاههای پلیس استفاده کنند. اما دادهی تشخیص چهره میتواند با خطا همراه باشد و باعث شود افراد به خاطر گناهانی که انجام ندادهاند گرفتار شوند. تشخیص چهره به طور خاص در مواردی چالش برانگیز میشود که چهرههای آمریکایی-آفریقایی و سایر اقلیتهای قومی، زنان و افراد کم سنوسال در کار هستند؛ در چنین مواردی اغلب در شناسایی چهرهها اشتباه صورت گرفته و یا اصلا شناسایی نمیشوند.
نحوهی کارکرد فناوری تشخیص چهره چیست؟
شاید شما استعداد ذاتی در شناسایی تصاویر داشته باشید. احتمالا فکر میکنید شناسایی چهرهی یک عضو خانواده، یک دوست و یا یک فرد آشنا کار بسیار سادهای است. شما با ویژگیهای چهرهی آنها آشنایی دارید مانند چشمان، بینی و دهان آنها و اینکه چگونه این ویژگیها در کنار هم قرار میگیرند.
این همان نحوهی کارکرد یک سیستم تشخیص چهره است؛ اما در یک مقیاس بزرگ و الگوریتمی. وقتی شما یک تصویر را میبینید، فناوری تشخیصی در اصل فقط داده میبیند. این داده میتواند ذخیره شود و در دسترس قرار گیرد. برای مثال، طبق یک مطالعهی دانشگاه Georgetown نیمی از بزرگسالان آمریکا تصاویر خود را در یک یا چند پایگاه داده ذخیره کردهاند تا سازمانهای اجرایی بتوانند از میان آنها جستوجو کنند.
بنابراین فناوری تشخیص چهره چگونه کار میکند؟ تکنولوژیهای متفاوتی به میدان آمدهاند اما در ادامه به مراحل پایهی این فناوری اشاره میکنیم.
مراحل پایهای فناوری تشخیص چهره چیست؟
مرحلهی اول: عکسی از چهرهی شما از یک فیلم یا عکس گرفته میشود. چهرهتان ممکن است به تنهایی و یا در گروه نمایان باشد. همچنین ممکن است تصویر شما صاف و یا متمایل باشد.
مرحلهی دوم: نرمافزار تشخیص چهره هندسهی چهرهی شما را میخواند. عوامل اصلی فاصلهی میان چشمان و همچنین فاصلهی میان پیشانی و چانهی شما هستند. این نرمافزار نقاط برجستهی تصویرشما که کلید اصلی تمایز چهرهتان است را شناسایی کرده و میتواند ۸۶ تا از این نقاط برجسته را پیدا کند. نتیجهی کار میشود همان امضای تصویری شما!
مرحلهی سوم: امضای تصویری شما، یک فرمول ریاضی، با یک پایگاه داده از چهرههای شناخته شده مقایسه میشود. در نظر بگیرید که حداقل ۱۱۷ میلیون آمریکایی تصاویری از چهرههای خود در یک یا چند پایگه دادهی پلیس را دارند. سازمانهای امنیتی به تعداد بسیاری از این تصاویر برای جستوجوهای خود دسترسی دارند.
مرحلهی چهارم: در این مرحله تشخیص صورت میگیرد؛ به این معنی که اثرچهرهی شما با یکی از دادههای پایگاه داده منطبق میشود.
ابزارهای آماری پرکاربرد در فناوری تشخیص چهره چیست؟
در ادامه به روشها و ابزهای آماری پرکاربرد در تشخیص چهره میپردازیم.
-
PCA (آنالیز مولفهی اصلی/Principal Component Analysis)
این روش یکی از پرکاربردترین و پراستنادترین روشهای آماری است. در این فرایند ریاضیاتی، با استخراج مولفهی اصلی یک دادهی چند بعدی، اقدام به کاهش ابعاد آن میکنیم.
-
DCT (تبدیل گسستهی کسینوسی / Discrete Cosine Transform)
این روش مجموعههایی از داده را مشخص میکند که شامل مجموع چند تابع سینوسی با فرکانسهای تناوب متفاوت است. این روش مبنی بر تبدیل سریهای فوریه است بنابراین با این روش میتوان تغییرات را کم کرد و بعد تصویر را با راندمان بالایی کاهش داد.
-
LDA (تحلیل تفکیک کننده خطی/Linear Discriminant Analysis)
این روش به طور گستردهای استفاده میشود برای یافتن ترکیبات خطی ویژگیها با حفظ تفکیک کلاس آنها. برخلاف PCA، در روش LAD سعی میکنیم تفاوت میان سطوح را مدلسازی کنیم. برای هر سطح، در روش LDA بردارهای تصویرشدهی چندگانه، متفاوت خواهد بود.
-
LPP (تصویر حفظ کننده محل/ Locality Preserving Projections)
این روش بهترین جایگزین PCA برای حفظ موقعیت ساختارها و طراحیهاست. الگوریتم های تشخیص الگو، معمولا برای نزدیکترین الگو یا همسایههای مجاور جستوجو میکنند. به همین دلیل حفظ موقعیت در روش LPP میتواند فرایند تشخیص چهره را سرعت ببخشد.
-
موجک گابور (Gabor Wavelet)
در این الگوریتم، شواهد دادههای نوروفیزیولوژیکی از قشر بینایی مغز پستانداران، نشان میدهد سلولهای ساده در قشر بینایی میتوانند مانند خانوادهای از موجکهای دوبعدی گابور عمل کنند. توابع گابور که توسط داگمن ارائه شدند، نوعی فیلتر پهنای باند فضایی محلی هستند که میتوانند محدودیت فرض شده برای پیوند رزلوشن اطلاعات در فضای دو بعدی و دامنهی دو بعدی فوریه را فراهم کنند.
-
ICA(تحلیل مولفهی مستقل/ Independent Component Analysis)
این روش سعی میکند دادهها را تبدیل کند به ترکیب خطی دادههایی که از لحاظ آماری مستقل از هم هستند. بنابراین هدف آن تهیهی دادههای مستقل است که تصاویر نامرتبط را ارائه دهد. ICA نیز یک جایگزین PCA است که نمایندگی قدرتمندتری از دادهها را دارد. این یک ملاک تفکیک برای تحلیل است که میتواند روش PCA را بهبود ببخشد.
-
Kernel PCA
این روش برای بهکارگیری توابع کرنل جهت انجام PCA غیرخطی معرفی شد. روش پایهای آن اعمال یک تطابق غیرخطی به ورودی و حل یک PCA خطی در ویژگی خروجی زیرفضای موجود است.
روشهای تکنیکال فناوری تشخیص چهره چیست؟
روشهای گوناگونی برای فناوری تشخیص چهره وجود دارد که در ادامه به طور کامل هرکدام از آنها را توضیح میدهیم.
۱ روش های هندسی(geometric based) / روشهای قالبی (template based)
الگوریتمهای تشخیص چهره به روشهای هندسی (geometric) و روشهای قالبی یا الگویی (template) طبقهبندی میشوند. روشهای قالبی میتواند با استفاده از ابزارهای آماری پیادهسازی شود؛ ابزارهایی مانند SVM (ماشین بردار پشتیبانی)، PCA (آنالیز مولفهی اصلی)، LDA (تحلیل تفکیک کننده خطی/Linear Discriminant Analysis)، روشهای هسته (Kernel methods) و یا تبدیل ردیابی (Trace Transforms).
روشهای هندسی مبتنی بر ویژگی (feature based)، ویژگیهای محلی تصویر و ارتباط هندسی میان آنها را تحلیل میکند؛ از این رو به روشهای هندسی روشهای مبتنی بر ویژگی نیز گفته میشود.
۲ قطعه قطعه / کامل
ارتباط میان المانها و یا اتصال یک عملگر بدون اینکه کلیت چهره زیر سوال برود، بسیاری از پژوهشگران با این روش به دنبال استنباط کاراکترهای چهره هستند. در بعضی روشها سعی شده از چشمان، ترکیبی از ویژگیها و … استفاده شود. بعضی از مدلهای مخفی مارکو (Markov Model) نیز وارد این دسته بندی میشوند و پردازش ویژگی (feature processing) خیلی در تشخیص چهره کاربرد دارد.
۳ روشهای ظاهری (Appearance-Based) / روشهای مدلی (Model-Based)
در روش ظاهری، یک چهره با توجه به چند تصویر نشان داده میشود. هر تصویر یک بردار با ابعاد زیاد است. این تکنیک معمولا برای گرفتن یک ویژگی فضایی از تقسیم تصویر استفاده میشود. تصویر نمونه با مجموعهی درحال تمرین مقایسه میشود. از طرف دیگر روش مدلی سعی میکند چهره را مدل کند. نمونهی جدید در مدل پیاده سازی میشود و پارامترهای مدل برای تشخیص تصویر استفاده میشوند.
مدل ظاهری به روشهای خطی و غیرخطی دسته بندی میشود. روشهای قبلی PCA، LDA، IDA در روش مستقیم و kernel PCA در روش غیر خطی استفاده میشوند. از سوی دیگر، در روش مدلی دستهبندیهای دوبعدی و سه بعدی از تطابق الاستیک نمودارهای خوشهای بهره میبرند.
۴ قالب / آماری / شبکههای عصبی
۱.۴ تطابق قالبTemplate Matching :
در تطابق قالب الگوها با استفاده از نمونه، مدل، پیکسل، زمینه و … نشان داده میشوند. عملگر تشخیصی معمولا یک همبستگی و یا معیار فاصله است.
۲.۴ روش آماری:
در روش آماری، الگوها با ویژگی (feature) نشان داده میشوند. عملگر تشخیصی یک عملگر تفکیک کننده است. هر تصویر با توجه به ویژگیهایش نمایان میشود. بنابراین، هدف انتخاب و اعمال ابزار آماری درست برای استخراج ویژگیها و تحلیل آنهاست. با روشهای آماری پرکاربرد تشخیص چهره در چند پاراگراف بالاتر آشنا شدید.
۳.۴ شبکههای عصبی
شبکههای عصبی از روشهای تشخیص الگو و دستهبندی استفاده میکند. کوهونن اولین کسی بود که نشان داد میشود از یک شبکهی عصبی برای تشخیص جهرههای هم ردیف و نرمال شده استفاده کرد. روشهایی وجود دارند که با استفاده از شبکههای عصبی عمل استخراج ویژگی (feature extraction) را انجام میدهند. روشهای زیادی وجود دارند که اگر با ابزارهایی مانند PCA یا LCA ترکیب شوند، میتوانند یک شناساگر ترکیبی برای تشخیص چهره شوند. چیزی که در تصویر میبینید شبکههای عصبی پیشرو هستند که مجهر به نقشههای خودسازماندهندهی PCA و شبکههای عصبی حلقوی چند لایه هستند که کارایی مدل را افزایش میدهند.
شبکههای عصبی با فیلترهای گابور
این روش عملیات تشخیص چهره را با پیاده سازی یک شبکهی عصبی و با استفاده از الگوریتم انتشار به عقب (backpropagation) انجام میدهد. در ابتدا یک مرحلهی قبل از پردازش وجود دارد. هر تصویر با درجهی وضوح و روشنایی خود، نرمال سازی میشود. سپس تصاویر با فیلتر گابور پردازش میشوند. فیلتر گابور پنج مولفهی مسیریابی و سه فرکانس مکانی دارد بنابراین با ۱۵ موجک گابور مواجه هستیم.
شبکههای عصبی و مدل مخفی مارکو HMM یا Hidden Msrkov Model
مدلهای مخفی مارکو ابزارهای آماری هستند که برای فناوری تشخیص چهره استفاده میشوند. این مدلها با ترکیب شبکههای عصبی استفاده میشوند. ورودی یک مدل دوبعدی مارکو، خروجی یک شبکهی عصبی مصنوعی است و الگوریتمی با کاهش ابعاد مناسب را ایجاد میکند.
شبکههای عصبی فازی
شبکههای عصبی فازی برای تشخیص چهره در سال ۲۰۰۹ میلادی معرفی شدند. در این شبکهها یک پرسپترون (perceptron) چندلایه برای تشخیص چهره استفاده میشود. مفهوم پشت این قضیه، اتخاذ سطوح قابل تصمیم گیری در معادلات غیرخطی گوناگون است، کاری که با یک پرسپترون چند لایهی معمولی به سختی قابل انجام است. بردارهای ویژگی از تبدیل موجک گابور استفاده میکنند.
فناوری تشخیص چهره چیست؟ انواع تشخیص چهره با OpenCV
روشهای زیادی برای تشخیص چهره وجود دارد که در ادامه با کتابخانهی معروف OpenCV به بررسی سه روش تشخیص چهره میپردازیم. در ابتدا، تصویر آماداهی پردازش میشود و سپس موتور تشخیص چهره برای شناسایی چهرهها تعلیم (train) داده میشود. پس از تعلیم مدل، آن را تست میکنیم تا نتایج را بررسی کنیم. در ادامه با سه نوع مدل OpenCV آشنا میشویم و سپس نمونهای ساده از برنامه نویسی آن را خواهیم دید.
-
تشخیص دهندهی EigenFaces
این تشخیص دهنده همهی تصاویر مورد تعلیم و کاراکترهای آنها را به عنوان یک مجموعه در نظر میگیرد و سعی میکند مولفهها را کاهش دهد. این مولفهها، مولفههای ضروی و مهم هستند و سایر بخشهای تصاویر (که پراکندگی بالایی دارند) را نادیده میگیرند. در این روش علاوه بر استخراج المانهای حیاتی از دادههای مورد تعلیم، حافظهی زیادی نیز ذخیره میشود زیرا بخشهای کم اهمیتتر نادیده گرفته میشوند.
-
تشخیص دهندهی FisherFaces
الگوریتمهای فیشرفیس، به جای نگه داشتن ویژگیهای مهم که بیانگر تصاویر همهی انسانها باشد، اقدام به حذف ویژگیهای ارزشمندی میکنند که سبب تفکیک یک شخص از دیگری میشود. این ویژگیهای خاص هر فرد، نسبت به سایر افراد غالب نیستند و به شما گزینهای میدهد که بتوانید یک فرد را از بقیه متمایز کنید.
-
هیستوگرام الگوهای دوتایی محلی (Local Binary Patterns Histograms) یا LBPH
میدانیم که دو روش اشاره شده در بالا، هردو با میزان روشنایی تحت تاثیر قرار میگیرند و در دنیای واقعی نمیتوان همواره شرایط نوری ایدهآل را تضمین کرد. این روش یک نوع بهبود عملکرد است که این ایراد را برطرف میکند. ایدهی این روش این است که به دنبال یک ویژگی محلی در تصاویر نباشیم. این الگوریتمها سعی میکنند یک ساختار محلی از تصاویر بیرون بکشند و این کار را با مقایسهی هر پیکسل با پیکسل کناریاش انجام میدهند.
نمونه کد پایتون فناوری تشخیص چهره چیست؟
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 |
#import OpenCV module/فراخوانی کتابخوانهی OpenCV import cv2 import os import numpy as np import matplotlib.pyplot as plt %matplotlib inline #function to detect face/ تابعی برای تشخیص چهره def detect_face (img): #convert the test image to gray image/ تبدیل تصویر آزمایشی رنگی به خاکستری gray = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY) #load OpenCV face detector/ بارگذاری شناساگر چهره OpenCV face_cas = cv2.CascadeClassifier ('-File name.xml-') faces = face_cas.detectMultiScale (gray, scaleFactor=1.3, minNeighbors=4); #if no faces are detected then return image/ اگر هیج چهرهای شناسایی نشد، تصویر را برگردان if (len (faces) == ): return None, None #extract the face/ چهره را استخراج کن faces []=(x, y, w, h) #return only the face part/ فقط قسمت چهره را برگردان return gray[y: y+w, x: x+h], faces [] #this function will read all persons' training images, detect face #from each image #and will return two lists of exactly same size, one list #این تابع تمام تصاویر مورد تعلیم افراد را میخواند، از هرکدام چهره را شناسایی میکند،و #دو لیست با یک اندازهی دقیقا مشابه برمیگرداند. def prepare_training_data(data_folder_path): #------STEP-1-------- / گام اول #get the directories (one directory for each subject) in data folder #دایرکتوریها را در پوشهی دادهها بگیرید(برای هر فرد یک دایرکتوری) dirs = os.listdir(data_folder_path) faces = [] labels = [] for dir_name in dirs: #our subject directories start with letter 's' so/ دایرکتوری فرد ما با حرف s شروع میشود #ignore any non-relevant directories if any/ پس از هر دایرکتوری نامربوط، درصورت وجود گذر کنید if not dir_name.startswith("s"): continue; #------STEP-2--------/ گام دوم #extract label number of subject from dir_name/ از dir_name عدد برچسب فرد را استخراج کن #format of dir name = slabel/ فرمت گذاری نام دایرکتوری #, so removing letter 's' from dir_name will give us label/ حذف حرف s از نام دایرکتوری label = int(dir_name.replace("s", "")) #build path of directory containing images for current subject/ ساخت مسیر دایرکتوری شامل تصاویر موضوع #sample subject_dir_path = "training-data/s1" / نمونه مسیر subject_dir_path = data_folder_path + "/" + dir_name #get the images names that are inside the given subject directory/ اسم تصاویر داخل دایرکتوری داده شده را بگیر subject_images_names = os.listdir(subject_dir_path) #------STEP-3--------/ گام سوم #go through each image name, read image,/ براساس نام همهی تصاویر را بخوان #detect face and add face to list of faces/ چهره را شناسایی کن و به لیستی از چهرهها اضافه کن for image_name in subject_images_names: #ignore system files like .DS_Store/ فایلهای سیتمی را نادیده بگیر if image_name.startswith("."): continue; #build image path/ مسیر تصویر را درست کن #sample image path = training-data/s1/1.pgm/ مسیر نمونه image_path = subject_dir_path + "/" + image_name #read image/ تصویر را بخوان image = cv2.imread(image_path) #display an image window to show the image/ پنجرهای برای نمایش تصویر ایجاد کن cv2.imshow("Training on image...", image) cv2.waitKey(100) #detect face/ چهره را شناسایی کن face, rect = detect_face(image) #------STEP-4--------/ گام چهارم #we will ignore faces that are not detected/ چهرههای شناسایی نشده را ندید میگیریم if face is not None: #add face to list of faces/ چهره را به لیست چهرهها اضافه کن faces.append(face) #add label for this face/ برای این چهره برچسب بزن labels.append(label) cv2.destroyAllWindows() cv2.waitKey(1) cv2.destroyAllWindows() return faces, labels #let's first prepare our training data/ ابتدا دادههای مورد تعلیم را آماده میکنیم #data will be in two lists of same size/ دادهها در دو لیست یک اندازهاند #one list will contain all the faces/ یک لیست شامل تمام چهرهها #and other list will contain respective labels for each face/ #و لیست دیگر شالم برچسبهای مورد انتظار برای هر چهره print("Preparing data...") faces, labels = prepare_training_data("training-data") print("Data prepared") #print total faces and labels/ همهی چهرهها و برچسبها را نمایش بده print("Total faces: ", len(faces)) print("Total labels: ", len(labels)) #create our LBPH face recognizer/ شناساگر LBPH را درست کن face_recognizer = cv2.face.createLBPHFaceRecognizer() #train our face recognizer of our training faces/ با دادههای تعلیمی، مدل را تعلیم بده face_recognizer.train(faces, np.array(labels)) #function to draw rectangle on image/ تابع رسم مستطیل در تصویر #according to given (x, y) coordinates and/ بر اساس مختصات و طول و عرض داده شده #given width and heigh def draw_rectangle(img, rect): (x, y, w, h) = rect cv2.rectangle(img, (x, y), (x+w, y+h), (, 255, ), 2) #function to draw text on give image starting from/ تابع ایجاد نوشته روی تصویر بر اساس مختصات #passed (x, y) coordinates. def draw_text(img, text, x, y): cv2.putText(img, text, (x, y), cv2.FONT_HERSHEY_PLAIN, 1.5, (, 255, ), 2) #this function recognizes the person in image passed/ این تابع فرد داخل تصویر را شناسایی کرده #and draws a rectangle around detected face with name of the subject/ و یک مستطیل با نام شخص دورش میکشد def predict(test_img): #make a copy of the image as we don't want to chang original image/ برای حفظ تصویر اصلی از آن کپی بگیر img = test_img.copy() #detect face from the image/ چهره را در تصویر شناسایی کن face, rect = detect_face(img) #predict the image using our face recognizer/ تصویر را با شناساگر چهره پیشبینی کن label= face_recognizer.predict(face) #get name of respective label returned by face recognizer/ نام برچسب موردنظر را که شناساگر برگردانده بگیر label_text = subjects[label] #draw a rectangle around face detected/ یک مستطیل دور چهرهی شناسایی شده بکش draw_rectangle(img, rect) #draw name of predicted person/ نام شخص شناسایی شده را بنویس draw_text(img, label_text, rect[], rect[1]-5) return img #load test images/ تصاویر آزمایشی را بارگذاری کن test_img1 = cv2.imread("test-data/test1.jpg") test_img2 = cv2.imread("test-data/test2.jpg") #perform a prediction/ پیشبینی کن predicted_img1 = predict(test_img1) predicted_img2 = predict(test_img2) print("Prediction complete") #create a figure of 2 plots (one for each test image)/ دو نمودار برای هر تصویر آزمایشی درست کن f, (ax1, ax2) = plt.subplots(1, 2, figsize=(10, 5)) #display test image1 result/ نتایج تصویر آزمایشی اول را نشان بده ax1.imshow(cv2.cvtColor(predicted_img1, cv2.COLOR_BGR2RGB)) #display test image2 result/ نتایج تصویر آزمایشی دوم را نشان بده ax2.imshow(cv2.cvtColor(predicted_img2, cv2.COLOR_BGR2RGB)) #display both images/ دو تصویر را نشان بده cv2.imshow("Tom cruise test", predicted_img1) cv2.imshow("Shahrukh Khan test", predicted_img2) cv2.waitKey() cv2.destroyAllWindows() cv2.waitKey(1) cv2.destroyAllWindows() |
بسیار عالی بود 😃