در این آموزش یاد خواهید گرفت چطور رزبری پای خود را آموزش دهید تا شما و اعضای خانوادهتان را شناسایی کند و همچنین هنگامی که فردی شناسایی شد، یک ایمیل برایتان ارسال شود.
زمانی که برای قفلکردن تلفنهمراه خود از قفل صورت استفاده میکنید یا به گوگل یا اپل اجازهی مرتب کردن عکسهایتان را میدهید، در واقع در حال استفاده از نرمافزار تشخیص چهره هستید. بسیاری از کامپیوترهای مبتنی بر ویندوز نیز امکان لاگین از طریق چهره را برای شما فراهم میکنند. علاوهبر تلفنهمراه و کامپیوتر، شما میتوانید برنامههای تشحیص چهره را بر روی رزبری پای خود بنویسید و به جز لاگین کارهای جالبتری با آن انجام دهید. پس در ادامه راهاندازی تشخیص چهره با رزبری پای همراه ما باشید.
در این مقاله به شما نشان خواهیم داد که چطور رزبری پای خود را برای تشخیص چهرهی خود و خانواده یا دوستانتان آموزش دهید. در ادامه نیز به تنظیمات لازم رزبری پای برای ارسال ایمیل هنگامی که چهرهی فردی شناسایی میشود، خواهیم پرداخت.
تشخیص چهره با رزبری پای چگونه انجام میشود؟
در این آموزش برای تشخیص چهره توسط رزبری پای، ازکتابخانههای OpenCV و face_recognition و نیز پکیجهای imutils استفاده خواهیم کرد و براساس مجموعهای از تصاویری که آنها را به عنوان یک مجموعهداده (dataset) جمعآوری میکنیم، رزبری پای را آموزش میدهیم. برنامهای به زبان پایتون تحت عنوان train_model.py را به منظور تحلیل تصاویر موجود در مجموعهداده خود اجرا خواهیمکرد و نگاشتی میان نامها و تصاویر موجود در فایل encodings.pickle ایجاد میکنیم. پس از اتمام آموزش به رزبری پای، برنامهی دیگری تحت عنوان facial_req.py را به منظور پیداکردن و شناسایی چهرهها اجرا خواهیمکرد. علاوهبراین کد دیگری برای ارسال یک ایمیل، زمانی که چهرهای تشخیص داده میشود، به پروژه اضافه خواهیم کرد.
با توجه به مدل رزبری پای و سرعت اینترنت شما، این پروژهی تشخیص چهره با رزبری پای حداقل 3 ساعت طول میکشد. بخش عمدهی این آموزش مبنی بر اجرای دستورات در خط فرمان است. چنانچه با دستورات خط فرمان بر روی رزبری پای آشنایی ندارید، بهتر است ابتدا در این مورد مطالعه کنید.
سختافزارهای مورد نیاز برای تشخیص چهره با رزبری پای
- رزبری پای 3 یا 4 (برای انجام این پروژه رزبریپای Zero W توصیه نمیشود).
- منبع تغذیه، کارت microSD، صفحهکلید، ماوس، صفحهنمایش و یک کابل HDMI.
- یک وبکم (Webcam) همراه با کابل USB
- یک صفحه نمایش لمسی 7 اینچی برای رزبری پای (اختیاری).
- یک استند برای صفحهنمایش لمسی رزبری پای (اختیاری).
بخش اول: نصب ابزارهای لازم برای تشخیص چهره با رزبری پای
در این مرحله، OpenCV، face_recognition و imutils را نصب میکنیم و swapfile خود را به طور موقت تغییر میدهیم تا رزبریپای را برای یادگیری ماشین و تشخیص چهره آماده کنیم.
OpenCV : یک کتابخانهی نرمافزاری متنباز برای پردازش و تحلیل بلادرنگ تصویر و ویدیو با قابلیتهای یادگیری ماشین میباشد.
Face_recognition: یکی از پکیجهای پایتون است که از آن برای محاسبهی کادر دور چهره، جایدادن چهره و مقایسهی چهرهها در مجموعهداده استفاده میشود.
Imutils: مجموعهای از توابعی است که از آنها برای ایجاد توابع پایهای پردازشتصویر و تسریع محاسبات OpenCV بر روی رزبری پای استفاده میشود.
برای تکمیل این بخش از آموزش تشخیص چهره با رزبری پای، حداقل 2 ساعت زمان نیاز دارید. در ادامه مدتزمانی که اجرای هر یک از دستورات بر روی یک رزبری پای 8 گیگابایتی با یک اتصال وایفای و سرعت دانلود 40.5 مگابیتبرثانیه طول میکشد را ثبتکردهایم.
1- وبکم خود را به یکی از پورتهای USB رزبری پای خود متصل نمایید. چنانچه از یک دوربین رزبریپای برای تشخیص چهره استفاده میکنید، لازم است چندین گام دیگر را نیز انجام دهید. لطفا به بخش “استفاده از دوربین رزبریپای به جای یک وبکم” در انتهای این آموزش مراجعه کنید.
2- رزبریپای خود را راهاندازی کنید. اگر با راهاندازی رزبریپای آشنایی ندارید میتوانید مقالهی آموزش راهاندازی رزبری پای برای مبتدیان و برای کنترل یک رزبریپای از راه دور مقالهی آموزش راهاندازی رزبری پای به صورت هدلس را مطالعه کنید. توصیه میشود قبل از شروع هر پروژهای یک ترمینال باز کنید (بدین منظور میتوانید از کلیدهای میانبر CTRL + T استفاده نمایید) و دو دستور ‘sudo apt-get update’ و ‘sudo apt-get upgrade’ را اجرا کنید.
3- با اجرای دستورات زیر در ترمینال خود، OpenCV را نصب کنید. هر یک از دستورات را کپی و در ترمینال رزبریپای خود پِیست کنید، سپس کلید Enter را فشار دهید و اجازه دهید تا فرآیند نصب کامل شود، سپس دستور بعدی را اجرا کنید. چنانچه با سوال “Do you want to continue” روبهرو شدید، کلید y و سپس Enter را فشار دهید.
Terminal Command | Length of time to run | |
1 | sudo apt install cmake build-essential pkg-config git | a few seconds |
2 | sudo apt install libjpeg-dev libtiff-dev libjasper-dev libpng-dev libwebp-dev libopenexr-dev | a few seconds |
3 | sudo apt install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libdc1394-22-dev libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev | 4 minutes |
4 | sudo apt install libgtk-3-dev libqtgui4 libqtwebkit4 libqt4-test python3-pyqt5 | 4.5 minutes |
5 | sudo apt install libatlas-base-dev liblapacke-dev gfortran | 1 minute |
6 | sudo apt install libhdf5-dev libhdf5-103 | 1 minute |
7 | sudo apt install python3-dev python3-pip python3-numpy | a few seconds |
قبل از نصب سایر پکیجهای لازم برای تشخیص چهره، لازم است سایز فایل swap را افزایش دهیم. بدین منظور دستور زیر را در ترمینال وارد کنید.
sudo nano /etc/dphys-swapfile
زمانی که فایل باز شد، خط “CONF_SWAPSIZE=100” را کامنت کنید و “CONF_SWAPSIZE=2048” را در خط بعدی اضافه کنید. سپس کلیدهای Ctrl-X, Y را فشار دهید و بعد از آن با فشردن کلید Enter تغییراتی که در فایل swap اعمال کردید را ذخیره نمایید.
این تغییر موقتی است و پس از کامل شدن فرآیند نصب OpenCV ، آن را به مقدار اولیه تغییر خواهیمداد.
برای مشاهدهی تغییرات اعمال شده، لازم است فایل swap را با کمک دستور زیر ریاستارت کنیم.
sudo systemctl restart dphys-swapfile
بیایید با وارد کردن دستورات زیر در ترمینال خود به صورت جداگانه، نصب پکیج را از سر بگیریم. زمان تقریبی برای اجرای هر دستور با یک رزبریپای 4، مدل 8 گیگابایت نیز در جدول زیر ذکر شدهاست.
Length of time to run | Terminal Commands |
7 minutes | git clone https://github.com/opencv/opencv.git |
2 minutes | git clone https://github.com/opencv/opencv_contrib.git |
less than a second | mkdir ~/opencv/build |
less than a second | cd ~/opencv/build |
5 minutes | cmake -D CMAKE_BUILD_TYPE=RELEASE \ |
-D CMAKE_INSTALL_PREFIX=/usr/local \ | |
-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules \ | |
-D ENABLE_NEON=ON \ | |
-D ENABLE_VFPV3=ON \ | |
-D BUILD_TESTS=OFF \ | |
-D INSTALL_PYTHON_EXAMPLES=OFF \ | |
-D OPENCV_ENABLE_NONFREE=ON \ | |
-D CMAKE_SHARED_LINKER_FLAGS=-latomic \ | |
-D BUILD_EXAMPLES=OFF .. | |
One hour and 9 minutes | make -j$(nproc) |
a few seconds | sudo make install |
a few seconds | sudo ldconfig |
پس از نصب موفقیتآمیز OpenCV، با وارد کردن دستور زیر در ترمینال فایل swap را به وضعیت اولیهاش باز میگردانیم.
sudo nano /etc/dphys-swapfile
زمانی که فایل باز شد، خط “CONF_SWAPSIZE=100” را از حالت کامنت خارج کنید و خط “CONF_SWAPSIZE=2048” را نیز کامنت یا حذف کنید. سپس کلیدهای Ctrl-X, Y را فشار دهید و بعد از آن با فشردن کلید Enter تغییراتی که در فایلswap اعمال کردید را ذخیره نمایید.
مجدداً با وارد کردن دستور زیر در ترمینال، فایل swap را ریاستارت کنید تا تغییرات اعمال شوند.
sudo systemctl restart dphys-swapfile
4- در این مرحله، face_recognition را با دستور زیر نصب کنید.این فرآیند حدود 19 دقیقه طول میکشد.
pip install face-recognition
5- سپس imutils را با کمک دستور زیر نصب کنید.
pip install imutils
چنانچه در بخش دوم، هنگام آموزش رزبریپای خود (بخش2- گام 15) با پیغام خطای “No module named imutils” یا “No module named face_recognition” روبهرو شدید، مجدداً آن را با استفاده از pip2 (به جای pip) نصب کنید.
بخش دوم: آموزش یک مدل برای تشخیص چهره توسط رزبریپای
در این بخش به آموزش رزبری پای برای چهرههایی که میخواهیم شناسایی شوند، میپردازیم. با دانلود کد پایتون برای تشخیص چهره شروع میکنیم.
1- با فشردن کلیدهای Ctrl-T، یک ترمینال جدید باز کنید.
2- فایل محتوی کد پایتون موردنیاز را کپی کنید.
git clone https://github.com/carolinedunn/facial_recognition
3- اکنون بیایید مجموعهدادهی خود را که برای آموزش رزبریپای استفاده خواهیمکرد بسازیم. از دسکتاپ رزبریپای خود، با کلیک بر روی آیکن فولدر، File Manager را باز کنید.
4- سپس به مسیرfolder facial_recognition folder > dataset بروید.
5- در فولدر dataset ، یک فولدر جدید بسازید؛ بدین صورت که کلیک راست کرده و New Folder را انتخاب کنید.
6- نام فولدر جدیدی که ساختید را به نام کوچک خود تغییر دهید.
7- سپس با کلیک بر روی OK ساخت فولدر خود را به پایان برسانید. این فولدر، محلی است که شما عکسهای خود را برای آموزش مدل در آن قرار خواهید داد.
8- همچنان در File Manager، به فولدر facial_recognition بروید و برنامهای به زبان پایتون تحت عنوان headshots.py را باز کنید.
9- در خط سوم از این برنامه، نام Caroline را با نام فولدر جدیدی که در گام 6 ساختید، جایگزین کنید. توجه کنید نام شما در فولدر dataset با نام شما در خط سوم از این برنامه حتما باید یکسان باشند.
10- در اِدیتور Geany بر روی آیکن “Paper Airplane” کلیک کنید تا برنامهی headshots.py اجرا شود.
11- برای گرفتن عکس از خود، وبکم را مقابل چهرهتان قرار دهید و کلید space را فشار دهید. هر بار که کلید space را فشار دهید، عکس جدیدی از شما گرفته خواهد شد. پیشنهاد میدهیم حداقل 10 عکس از زوایای مختلف از چهرهی خود بگیرید. اگر از عینک استفاده میکنید، میتوانید چندین عکس با عینک و چندین عکس بدون عینک بگیرید.این تصاویر برای آموزش مدل ما استفاده خواهد شد. پس گرفتن عکسها، کلید Esc را فشار دهید.
12- از مسیر File Manager > dataset folder > your name folder میتوانید عکسهای خود را بررسی کنید. برای مشاهدهی یک عکس، بر روی آن دابل کلیک کنید همچنین با کلیک بر روی پیکان موجود در گوشه سمت چپ این پنجره، میتوانید بین تمام عکسهایی که گرفتید، جابهجا شوید.
13- برای افزودن یکی از اعضای خانوادهتان، مراحل 5 تا 10 را تکرار کنید. اکنون مجموعهدادهی ما آماده است و میتوانیم مدل خود را به رزبری آموزش دهیم.
14- در یک ترمینال جدید، به پوشهی facial_recognition بروید:
cd facial_recognition
حدود 3 تا 4 ثانیه طول میکشد تا رزبری پای هر یک از تصاویر موجود در مجموعه داده شما را تحلیل کند. برای مثال برای مجموعه دادهای شامل 20 عکس، حدود 15 دقیقه طول میکشد تا رزبریپای تصاویر را تحلیل و فایل encodings.pickle را بسازد.
15- برای آموزش یک مدل به رزبریپای دستور زیر را اجرا کنید:
python train_model.py
چنانچه پیغام خطایی مشاهده کردید که ماژولهای imutils یا face_recognition نصب نشدهاند، آنها را مجدداً با pip2 به جای pip نصب کنید.
توضیحات کد train_model.py:
مجموعه داده: کد train_model.py، تصاویر موجود در فولدر dataset را تحلیل خواهد کرد. تصاویر را درون پوشههایی با نام شخص مرتب کنید. برای مثال فولدر جدیدی به نام Paul درون فولدر dataset بسازید و تمام عکسهای چهرهی Paul را در این فولدر قرار دهید.
رمزنگاری: کد train_model.py، یک فایل تحت عنوان encoding.pickle میسازد که شامل استانداردهایی برای شناسایی چهرهها در گام بعدی میباشد.
روش شناسایی: در اینجا از روش شناسایی HOG (Histogram of Oriented Gradients) استفاده میکنیم (HOG یک توصیفگر ویژگی است که برای استخراج ویژگی از تصاویر استفاده میشود).
اکنون بیایید مدلی که آموزش دادیم را تست کنیم.
16- برا تست این مدل دستور زیر را در ترمینال وارد نمایید:
python facial_req.py
پس از چند ثانیه نمای وبکم شما باید باز شود. وبکم خود را مقابل چهرهتان قرار دهید. اگر یک کارد زردرنگ دور صورت خود با نام خودتان ببینید، به این معناست که مدل به درستی آموزش داده شده تا چهرهی شما را تشخیص دهد.
تبریک میگیوییم. شما توانستید رزبریپای خود را برای تشخیص چهره آموزش دهید. چنانچه شخص دیگری را در گام 11 اضافه کردهاید، وبکم را مقابل او قرار دهید و دوباره مدل را تست کنید. با فشردن کلید q ، برنامه متوقف خواهد شد.
بخش سوم: تنظیم اعلانهای ایمیل هنگام تشخیص چهره با رزبری پای
در این بخش، اعلانهای ایمیل را به کد پایتون تشخیص چهره خود اضافه خواهیمکرد. با این تنظیمات، شما می توانید حتی بیرون از خانه خود، از ورود اعضای خانوادهتان مطلع شوید.
در اینجا سرویس Mailgun را به خاطر سادگی آن انتخاب کردهایم؛ شما میتوانید کد را با هر سرویس ایمیل دلخواهی تغییر دهید. چنانچه از سرویس Mailgun استفاده میکنید، ابتدا لازم است یک حساب کاربری بسازید. در این پروژه از دامنه سندباکس پیشفرض در Mailgun استفاده کردیم.
1- در مرورگر خود mailgun.com را وارد کنید.
2- به حساب کاربری خود وارد شوید یا یک حساب کاربری بسازید.
3- سپس به دامنه سندباکس خود بروید و بر روی API و سپس Python کلیک کنید تا اعتبار API شما معلوم شود.
4- از مسیر file manager > facial_recognition، کد پایتون send_test_email.py را باز کنید.
5- در خط نهم از این کد، عبارت “YOUR_DOMAIN_NAME” را با دامنه Mailgun خود جایگزین کنید.
6- در خط دهم به جای “YOUR_API_KEY” کلید API مربوط به Mailgun خود را وارد کنید.
7- در خط دوازدهم نیز کافی است آدرس ایمیل خود را وارد کنید.
8- در این مرحله، کد send_test_email.py را اجرا کنید. اگر کد وضعیت 200 و پیغام “Message: Queued” را دریافت کردید، ایمیل خود را چک کنید.
زمانی که این مرحله را با موفقیت انجام دادید، ایمیل زیر را دریافت خواهید کرد. البته ممکن است این ایمیل در فولدر اسپم قرار گرفته باشد.
افزودن اعلانهای ایمیل برای تشخیص چهره
9- از مسیر file manager > facial_recognition، کد پایتون facial_req_email.py را باز کنید.
10- سپس مراحل 5 تا 7 را تکرار کنید.
11- تغییرات اعمال شده بر روی کد facial_req_email.py را ذخیره کنید.
12- ترمینال خود را باز کنید و دستور زیر را برای انجام تشخیص چهره همراه با اعلان ایمیل اجرا کنید.
python facial_req_email.py
مانند مرحله قبل، نمای وبکم شما باید باز شود. وبکم را مقابل چهره خود قرار دهید. در صورتی که یک کادر زردرنگ دور چهره شما با نام شما نمایش داده شود، یعنی مدل به درستی برای تشخیص چهرهتان آموزش داده شدهاست.
اگر همه چیز به درستی انجام شده باشد، در ترمیتال خود نام شخصی که چهره او شناسایی شده را خواهید دید و همچنین پس از آن عبارت”Take a picture” را میبینید(که نشان میدهد وبکم در حال گرفتن عکس است) و در ادامه کد وضعیت 200 نمایش داده میشود (که نشان میدهد ایمیلی برایتان ارسال شدهاست).
اکنون ایمیل خود را چک کنید. خواهید دید ایمیلی دریافت کردهاید که شامل نام شخصی است که چهره او شناسایی شده و عکسی که از او گرفته شده است.
لازم به ذکر است که طبق کد facial_req_emqil.py، ایمیل ها زمانی ارسال میشوند که شخص جدیدی توسط این الگوریتم شناسایی شود. به خاطر اینکه با هر بار شناسایی چهره، ایمیلی ارسال نشود. همچنین با استفاده از نمایشگر 7 اینچ، میتوانید تصویر وب کم را به کاربر نمایش دهید.
استفاده از دوربین رزبریپای به جای یک وبکم
در این آموزش از یک وبکم استفاده شد. چنانچه مایل به استفاده از یک دوربین پای هستید، نیاز خواهید داشت دوربین پای را فعال و تغییراتی را در کد faicial_req.py اعمال نمایید.
1- از قسمت تنظیمات رزبریپای، دوربین را فعال کنید. بر روی ok کلیک و رزبریپای خود را مجدداً راهاندازی کنید.
2- ترمینال خود را باز کنید و با استفاده از دستور زیر، دوربین پای را نصب نمایید.
pip install picamera[array]
3- در بخش دوم، به جای اجرای فایل headshots.py، فایل headshots_picam.py را اجرا کنید.
python headshots_picam.py
4- در فایلهای facial_req.py و facial_req_email.py، خط زیر را کامنت کنید.
vs = VideoStream(src=0).start()
خط زیر را از حالت کامنت خارج کنید:
vs = VideoStream(usePiCamera=True).start()t
5- تغییرات را ذخیره و فایل را اجرا کنید.
افزودن اشخاص با استفاده از تصاویر آنها برای تشخیص چهره با رزبریپای
شما میتوانید سایر اعضای خانواده یا دوستانتان را برای شناسایی به رزبریخود اضافه کنید. اگر آنها برای اجرای hesdshots.py و گرفتن تصاویرشان در دسترس نیستند، میتوانید تصاویرشان را بر روی رزبری خود آپلود کنید. تنها نکته مهم این است که تصاویر واضحی از چهره آنها پیدا کنید و آنها را در فولدرهای مجزایی با نام همان اشخاص دستهبندی کنید.
امیدواریم از این مقاله آموزشی لذت بردهباشید، با استفاده از این آموزش میتوانید قابلیت تشخیص چهره با رزبری پای را به پروژههای خود اضافه کنید و تجربههای جدیدی کسب کنید. ما مشتاقانه منتظر سوالات و نظرات شما هستیم، پس آنها را با ما در بخش دیدگاه در میان بگذارید.