این آموزش تشخیص چهره با پایتون و OpenCV در واقع بخشی از این بسته آموزش بینایی کامپیوتر است که مستقل هم میتوانید استفاده کنید. این آموزش ضمن استفاده در شناسایی چهره به نوعی یک کاربرد یادگیری عمیق در پردازش تصویر هم هست. در این آموزش نخست مبانی نظری را میآموزید. این که تشخیص چهره چیست و ماشینها چطور چهره را میشناسند.
سپس کدنویسی میکنید. از کتابخانهای مبتنی بر یادگیری عمیق استفاده میکنید. در نهایت میتوانید اسکریپتی بنویسید که چهرهها را در یک فیلم یافته و شناسایی کند.
تشخیص چهره چیست؟
تشخیص چهره به معنی یافتن محل چهره توسط ماشین و شناسایی هویت چهره است. تشخیص چهره در انگلیسی هم Facial Recognition و هم Face Recognition نوشته میشود.
تشخیص چهره کاربردهای بسیاری دارد. سیستمهای امنیتی، حضور و غیاب، تشخیص مجرمان، تشخیص بیماری، و دستهبندی مخاطب در تبلیغات از آن جمله هستند.
تحقیق روی الگوریتمهای تشخیص چهره در تصویر از سال 2000 اوج گرفت. امروزه یافتن چهره در هنگام عکسبرداری عادی شده است؛ اما شناسایی چهره موضوع دیگری است.
تحقیقات در زمینه شناسایی هویت چهرهها در تصاویر ادامه پیدا کرد تا در سال 2015 محققان گوگل یک الگوریتم مبتنی بر یادگیری عمیق برای آن ارائه کردند. الگوریتم FaceNet (+) روشی برای شناسایی ویژگیهای منحصربهفرد چهره افراد با شبکههای عصبی Canonical است.
تیم دیگری تحت عنوان OpenFace (+) روش مذکور را به عمل درآوردند. این گروه با استفاده از هزاران تصویر نمونه، شبکههای عصبی عمیقی تربیت کردند. این شبکهها قادر هستند که از تصویر چهره هر شخص تعداد 128 اندازهگیری منحصربهفرد ثبت کنند. این اندازهها میتوانند معیار تمایز و در نهایت تشخیص چهره فرد در بین هزاران فرد دیگر باشد.
در این آموزش، از کتابخانهای استفاده شده که امکان استفاده از شبکههای عصبی مذکور در پایتون را به ما میدهد.
این آموزش در یک نگاه
آموزش تشخیص چهره با پایتون شامل هشت درس است. در درس اول مبانی نظری را میآموزیم. این که تشخیص چهره چیست. مفهوم HOG چیست. کامپیوتر چطور چهره ها را پیدا میکند. و این که چطور هویت یک فرد مشخص میشود.
در درسهای دوم و سوم محیط برنامهنویسی و کتابخانههای لازم نصب میشوند. درس چهارم به فراخوانی تصویر و تبدیل سیستم رنگ آن اختصاص دارد.
در درس پنجم میآموزیم که چطور چهره ها را در یک تصویر پیدا کنیم. در درس ششم چهرههای یافته شده را در بین چهرههای موجود شناسایی میکنیم.
سرانجام در درس هفتم یک پروژه واقعی را با هم میسازیم. در این پروژه ورودی وبکم پردازش میشود. چهره افراد در فیلم پیدا و شناسایی میشود.
آموزههای اصلی
- آشنایی با الگوریتم تشخیص چهره
- استفاده از dlib در پایتون برای یافتن چهره
- مفهوم HOG یا هیستوگرام گرادیان جهتدار
- رفع مشکل نصب dlib در ویندوز و پایتون
- کار با کتابخانه face_recognition
- تعیین موقعیت و کدگذاری تصویر با یادگیری عمیق
- پردازش ورودی دوربین و تشخیص چهره در فیلم
این آموزش بینظیر است زیرا:
- هم مبانی نظری و هم کدنویسی سریع آموزش داده میشود.
- آموزش تشخیص چهره با پایتون همراه با پروژه عملی است.
- به واسطه این آموزش، یک برخورد کاربردی با یادگیری عمیق دارید.
- یک کدنویسی حرفهای برای پردازش تصویر را تجربه میکنید.
پیشنیاز
آموزش پردازش تصویر با پایتون و OpenCV (+)
کلیدواژهها
آموزش تشخیص چهره با پایتون – تشخیص چهره با opencv – تشخیص چهره با یادگیری عمیق – شناسایی چهره با پایتون – مفهوم hog در پردازش تصویر – آموزش dlib در پایتون – آموزش face_reognition – مفهوم facenet – مفهوم openface – تشخیص چهره با شبکه عصبی – یادگیری عمیق در پردازش تصویر
overnet.ir –
باسلام. لطفاً آموزش روش face alignment with an Ensemble of Regression Trees تهیه و را بطور دقیق توضیح دهید.
مصطفی آصفی –
سلام و سپاس از پیشنهادتون.
محمد رضا (خریدار محصول) –
سلام وقت شما بخیر من اینکارا با yolo هم اجرایی کردم ولی اشکالی که داشت اگر چهره فرد دیگریم می برد جلوی دوربین باز توی کلاس من نمایش می داد و کلا به نظرم به فیس حساس شده بود در تستی که من کردم
ابراهیم میرآقایی (خریدار محصول) –
با کدوم دوره ها می تونم این پروژه را پیاده کنم .
با دوربین های مدار بسته تردد پرسنلی تو شرکت راه اندازی کرد . که ورود و خروج با دوربین های مدار بسته انجام شود . ممنونم میشم راهنمایی بفرمایید . اگه کلاس خصوصی هم باشه ممنونم مبشم .
مصطفی آصفی –
سلام وقت بخیر. پایین تر خدمتتون پاسخ دادم. با همین دوره یه سری دوربین ها هستن که خودشون دارن این قابلیت رو. اما اگه دوربین این رو نداره و قصد دارید فیلم خروجی دوربین رو پردازش کنید می تونید با این دوره یا دوره تشخیص اشتیای اختصاصی با یولو (+) شروع کنید. پیشنیازش هم البته باید ببینید.
یولو (YOLO) برای تشخیص اشیا استفاده میشه ولی اگه بتونید چهره انسان ها رو هم به عنوان شی بهش آموزش بدین می تونه چهره هم تشخیص بده. اگه به این کار موفق بشین یولو بهتره. الان نسخه های بالاترش هم اومده که سرعت و دقت بیشتری دارن. ضمنا یولو رو اگه به سرعت بیشتری نیاز داشته باشین می تونین با GPU و همین طور با اوپن سی وی و زبان سی پلاس پلاس هم پیاده کنید.
ابراهیم میرآقایی (خریدار محصول) –
با سلام خدمت استاد عزیز جناب آقای دکتر آصفی
استاد با این دوره میشه با دوربین های مدار بسته تردد پرسنلی تو شرکت راه اندازی کرد . که ورود و خروج با دوربین های مدار بسته انجام شود . ممنونم میشم راهنمایی بفرمایید . اگه کلاس خصوصی هم باشه ممنونم مبشم .
مصطفی آصفی –
سلام وقت بخیر پوزش از تاخیر، ببنید بالقوه میشه ولی در عمل پروژه های روتین خیلی چالشهای مختلفی دارن: سرعت عمل مورد نیاز، تغییرات جوی محیط، هماهنگی سخت افزار و نرم افزار از این موارد هستن. منظور این که تصور نکنید شما با تهیه یک دوره میتونید یه پروژه واقعی رو به سرعت پیاده کنید.
AmirHadiNorani –
سلام
سرعت این کتابخونه خیلی پایین هست مخصوصا وقتی میخوای از وبکم استفاده کنی و چهر و شناسایی کنی.
چطور میشه سرعتشو افزایش داد؟؟؟
مصطفی آصفی –
سلام به شما. در مورد این شبکه امتخان نکردم اما مثلا در مورد یولو اگه به جای CPU از اجرای OpenCV و یولو روی GPU بهره بگیرید سرعت تا ۵۰۰ برابر بهتر میشه.
محمدامین نظری (خریدار محصول) –
سلام استاد.ماکد رو درست زدیم ولی شناسایی نمیکنه نفهمیدیم مشکلمون کجاست راهنمایی میکنین؟
import cv2
import face_recognition
import numpy as np
img_face = face_recognition.load_image_file(‘amin.jpg’)
img_encode = face_recognition.face_encodings(img_face)
cap = cv2.VideoCapture(0)
while(True):
ret , frame = cap.read()
# frame_face = cv2.resize(frame,(0,0),None,0.25,0.25)
frame_face = cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)
face_locs = face_recognition.face_locations(frame_face)
face_encodes = face_recognition.face_encodings(frame_face,face_locs)
for face_loc,face_encode in zip(face_locs,face_encodes):
matches = face_recognition.compare_faces(img_encode,face_encode)
distances = face_recognition.face_distance(img_encode,face_encode)
distance = np.argmin(distances)
for i in matches:
if i is True:
y2,x1,y1,x2 = face_loc
# y2,x1,y1.x2 = y2*4,x1*4,y1*4,x2*4
cv2.rectangle(frame,(x1,y1),(x2,y2),(255,0,255),1)
font = cv2.FONT_HERSHEY_COMPLEX
cv2.putText(frame,”,(x1,y2+50),font,1,(255,255,0),1)
cv2.imshow(‘security’,frame)
if cv2.waitKey(1) == ord(‘q’):
break
cap.release()
cv2.destroyAllWindows()
مصطفی آصفی –
سلام مجدد. پایین قبل از این که این سوالتون رو ببینم جواب دادم. ینی کدتون خطایی برنمی گردونه؟ ولی مستطیل هم رسم نمی کنه؟ اگه خطایی برمی گردونه خطا رو اینجا برای من بنویسید. اگه خطایی ندارید احتمالا یک جایی از کد رو دارید اشتباه می نویسید. با مخزن گیت هاب (+) مطابقت بدین.
امین اسدی (خریدار محصول) –
سلام وقتتون به خیر. بسیار ممنون از آموزشی که گذاشتین. واقعا عالی بود.یه شوال داشتم اگر بخوام همین کتابخونه face recognition رو در c++ استفاده کنم میشه راهنمایی بفرمایین. راهی وجود داره از همین کتابخونه استفاده کنم ؟
ممنون
مصطفی آصفی –
سلام و سپاس از محبت شما. این مخزن (+) رو برای تشخیص چهره مبتنی بر Dlib و C++ بررسی کنید. موارد مشابه هم هست که می تونید گوگل کنید. یوتبوب هم موارد خوبی پیدا می کنید.
محمدحسین هاشمی –
سلام و عرض ادب
بنده با این ارور در شروع کار رو به رو شدم.
لطفا راهنمایی کنید.
ModuleNotFoundError: No module named ‘cv2’
مصطفی آصفی –
سلام به شما. ببینید این خطا وقتی ایجاد میشه که CV2 نصب نباشه. لطفا فرآیند نصب opencv-python رو مشابه فیلم ها با دقت طی کنید.
البته ممکنه نصب کرده باشین ولی جای نادرست. مثلا تو محیط مجازیتون نصب نکردین. یا تو محیط مجازیتون نصب کردین اما الان که می خواید کد رو اجرا کنید محیط مجازیتون فعال نیست.
اگه قصد دارین تو محیط مجازی استفاده کنید اول محیط مجازی (venv یا virtualenv) رو فعال کنید بعد از محیط گرافیکی پایچارم یا با زدن دستور پایین تو ترمینال نصبش کنید:
pip install opencv-python
بعد می تونید استفاده کنید.
پینوشت: توصیه می کنم این فیلم رایگان ساخت محیط مجازی در پایتون رو ببینید.
mansour hesabi (خریدار محصول) –
متن خطا در پیام قبلی برای شما گذاشته بودم.
frame_small = cv2.resize(frame, (0,0), None, 0.25, 0.25)
cv2.error: OpenCV(4.5.5) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\resize.cpp:4052: error: (-215:Assertion failed) !ssize.empty() in function ‘cv::resize’
مصطفی آصفی –
سلام به شما. این خطا معمولا یا به دلیل مسیر نادرست تصویر یا فرمت نادرست تصویر ایجاد میشه. ممکنه مسیر فیلم که قراره فریم ها ازش خونده بشه به درستی خونده نمیشه یا اتصال به وبکم به درستی برقرار نباشه.
mansour hesabi (خریدار محصول) –
باسلام مجدد
وقتی ورودی برنامه وبکم سیستم هست این پیغام میاد اما وقتی ورودی رو یه فایل ویدئویی قرار میدم برنامه اجرا میشه و تشخیص چهره به خوبی عمل میکنه (بدون خطا)
مصطفی آصفی –
سلام وقتتون بخیر. متن خطا رو بنده نمی بینم لطفا متن خطا رو بفرستین که بتونیم بهتر هم فکری کنیم.
mansour hesabi (خریدار محصول) –
سلام وقتتون بخیر، ممنون بابت آموزش بسیار عالی
من در هنگام اجرای کد با این خطا مواجه می شم لطفا راهنمایی بفرمایید.
frame_small = cv2.resize(frame, (0,0), None, 0.25, 0.25)
cv2.error: OpenCV(4.5.5) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\resize.cpp:4052: error: (-215:Assertion failed) !ssize.empty() in function ‘cv::resize’
مصطفی آصفی –
سلام به شما. احتمالا CV2 نمی تونه فایلتون رو بخونه. لطفا imread رو چک کنید که فایلتون رو داره به درستی می خونه یا نه و به بنده اطلاع بدین.
ata_nikbayan@yahoo.com (خریدار محصول) –
برای کشیدن مستطیل از این کد استفاده کنید:
for (y1,x1,y2,x2) in shajarian01_face_location:
cv2.rectangle(imgshagaradian01cv,(x1,y1),(x2,y2),(0,255,0),(1))
بسیار راحت تر هستش و هر تعداد چهره خواستید رو میتونید بکشید، اگر با مستطیل این آموزش فرق داشت هر چه فحش داشتید به من عطا بدهید.
مصطفی آصفی –
بسیار عالی. من نظر پایین رو جواب میدادم این رو ندیده بودم. ممنون که کدتون رو هم گذاشتین. چرا فحش؟ شما زحمت کشیدین یه روش پیشنهاد کردین. درست باشه یا نه، کارتون ارزشمنده. دست شما درد نکنه.
ata_nikbayan@yahoo.com (خریدار محصول) –
سلام، برای کشیدن مستطیل دور چهره نیاز به اینهمه تغییر مختصات نبود، با اینکار بچه ها را گیج کردید.
از هر دو نقطه روی قطر مستطیل می شود آن را کشید چه از قطر 1 باشد چه از قطر 2
مصطفی آصفی –
سلام و ممنون از شما. البته نظرتون رو امتحان نکردم ولی حتما کد بنده بهترین کد ممکن نیست. همین که وقت گذاشتین و بچه ها رو به حالت های بهتر دعوت کردین خیلی خوبه.
mazyar solouki (خریدار محصول) –
salam ostad asefy aziz khaste nabashid ..
man tamami mabaheso ba shoma jelo omadam va code ham javab ham mide ama ye moshkeli ke vojod dare vaghti chehraro shenasayi mikone sorat cod payin myad daghighan mese code shoma ke ba webcam chehre ali dayi ro vaghti shenasayi mikard kond mishod mikhastam bedoonm dalilesh chye aya bekhater webcame ke fps payini dare ya moshkel az cod ha va systeme?
مصطفی آصفی –
سلام به شما. سلامت باشید. ببینید سرعت پردازش اگه از GPU استفاده کنید خیلی بهتر میشه. منتها شما بایستی OpenCV رو از اساس برای کار با GPU بیلد کنید. این آموزش نصب OpenCV روی GPU (+) رو لطفا ببینید توضیح مفصل و خوبی داره. اگه متن خوشتون نمیاد build opencv gpu رو تو یوتیوب جستجو کنید. فیلمهای متعددی هست که این رو گام به گام توضیح دادن.
ضمنا خوبی کار با OpenCV اینه که شما وقتی توابع رو یاد بگیرید می تونید از پایتون به سی پلاس پلاس هم مهاجرت کنید که باز هم اجرا رو سریع تر می کنه. همون توابع رو دارید و همون پارامترها منتها با سینتکس سی پلاس پلاس می نویسید.
میری (خریدار محصول) –
سلام حتما لازمه که ویژوال استدیو برای c++ رو نصب کنیم یا دانلود با دستور pip کافیه؟
مصطفی آصفی –
سلام به شما. در صورتی که کتابخونه ای که اشاره شده رو از قبل داشته باشین خیر.
مجتبی –
سلام استاد.خسته نباشین.ممنون دوره خوبتون.مطالب خیلی گویا و مفید هست.
استاد من یه مشکلی دارم .وقتی فریم ها رو از وب کم میگیریم و میگیم اگه چهره ای تو تصویر بود شناسایی و encode بکنه.بعدش به مقایسه و چیدا کردن مقایسه میرسیم.تو مقایسه میتونیم یه لیست از چهره هایی که قبلا encode شده رو بدیم یا اینکه فقط یه چهره.که با چهره ای که الان تشخیص و encodeشده مقایسه بشه.
distances = face_recognition.face_distance(self.encode_faces, encode) شما این کد رو دادین مشکلی نبود ولی من با خطای اینکه یکیش لیست هست و یکیش تاپل مواجه میشم.(unsupported operand type(s) for -: ‘list’ and ‘tuple’)
ممنون میشم راهنماییم کنین
مصطفی آصفی –
سلام به شما. سلامت باشید. با توجه به این که کدتون رو نمی بینم من گمان می کنم توی کدتون یه اشتباه ریز داشته باشین. این تفاوت نوع رو نباید بهش برسین. اصل کد (+) رو لطفا با دقت با کد خودتون مقایسه کنید.
محمد مهدی فتح الهی –
سلام جناب آصفی آموزش بسیار عالی است.
من برای کار خودم یک data base از عکس بازیکنان والیبال درست کردم ولی وقتی یک تصویر آزمون رو که در اون چند تا از بازیکنان هستند و بعنوان آزمایش به برنامه خودم میدم مثلا به اشتباه تصویر محمد موسوی رو میثم صالحی تشخیص میده میخواستم بدونم چکار میتونم برای این مشکل انجام بدم
پ . ن : حتی از face_distance هم استفاده کردم و دیدم که فاصله عکس موسوی در تصویر آزمون رو از عکس میثم صالحی در data base کمتر از فاصله با عکس خود موسوی در data base نشون میده
ممنون.
مصطفی آصفی –
سلام به شما. سلامت باشید. واقعیت اینه که روش های یادگیری عمیق -حتی یک شبکه با یک تنظیمات در چند مرتبه یادگیری- رفتار متفاوتی دارن و بهترین کار معمولا اینه که با شناخت پارامترهای دخیل در دقت شبکه یا حتی ساختار اون (با بررسی سورس ها) به حالت در مورد پروژه خودتون برسید.
ضمنا چون می بینم فراگیر کل بسته بینایی کامپیوتر هستین می تونید از یولو هم که در دو بخش آخر توضیح داده شده علاوه بر تشخیص شی برای تشخیص فرد هم استفاده کنید.
علی اصغری –
سلام استاد من این بسته رو تهیه کردم ممنون از کیفیت خوب آموزشتون . ولی یه مشکل دارم من از کتابخانه face recognition میخواستم در محیط سی پلاس پلاس استفاده کنم ولی ظاهرا متوجه شدم اختصاصی پایتون هست من پایتون کار نمی کنم میخواستم ببینم امکان نداره به یه طریقی مستقیما مثل خود openCV در محیط سی پلاس استفاده کنم و اگر نه آیا کتابخانه دیگه هست که با این شرایط بتوانم استفاده کنم ؟
مصطفی آصفی –
سلام و ممنون از لطف شما.
این آموزش رو ببینید که تشخیص چهره با Dlib رو مبتنی بر پایتون و سی پلاس پلاس همزمان توضیح داده.
این کتابخانه تشخیص چهره با سی پلاس پلاس و موارد مشابه در گیت هاب رو هم بر اساس ستاره هاشون و آخرین زمان روزآمدسازیشون می تونید بررسی کنید.
Amirhosseini186@gmail.com –
?salam va sepas, video 06, daghighe 00:07:45 durbin mano b surate array 0 mikhune, eshtebaham kojast
مصطفی آصفی –
سلام به شما. لطفا خطایی که دریافت می کنید گزارش کنید.
محمد کوزه گر (خریدار محصول) –
سلام. ممنون از اینکه وقت گذاشتید.
البته مشکل من نحوه ذخیره و بازیابی انکود تصاویر توی دیتابیس بود، نه خود تصاویر. (همون موضوعی که خودتون توی دقیقه 22 از جلسه 7 آموزش بهش اشاره کرده بودین). به هر حال ممنون
محمد کوزه گر (خریدار محصول) –
سلام و خسته نباشید. لینک کدی که نوشتم رو گذاشتم اینجا :
https://s17.picofile.com/file/8426502734/EncodePicSaveToDB.rar.html
لطفاً با توجه به توضیحاتی که توی کامنت قبلی دادم اگه تونستین یه راهنمایی کنین که فرمت درست ذخیره و بازیابی انکودها توی دیتابیس چی هست. (کدpic2sqlite.py برای ذخیره انکود یک تصویر توی دیتابیس و فایل main.py برای خوندن انکود از دیتابیس و مقایسه اون با فریم های تصویر وب کم هست . اما چون چیزی که از دیتابیس بیرون میاد با انکود اولیه فرق میکنه هیچ چهره ای شناسایی نمیشه. فایل db و پوشه images رو هم تو پروژه گذاشتم) . خیلی ممنون.
مصطفی آصفی –
سلام جناب کوزه گر عزیز. توصیه می کنم این مقاله آموزش ذخیره کردن عکس های فشرده در دیتابیس (+) رو با دقت بخونید.
این گفتگو از stackoverflow (+) هم البته مشابه مشکل شماست اما به زبان C++ که می تونه مفید باشه.
پینوشت – بنده نظر قبلی شما رو هم دیدم. خیلی هم مشتاقم که بتونم وقت باز کنم برای بررسی طرح های خلاقانه دوستان ولی متاسفانه فرصت کافی دست نمیده.
در روز چندین و چند نظر پای آموزش های مختلف باید پاسخ داده بشن و حقیقتا فرصتی برای بررسی سورس کدها نمی مونه. نهایتا می رسم خطاهایی که عینا گزارش شده باشه رو راهنمایی کنم و مشاوره های کلی بدم و واگذار کنم به تلاش خودتون.
محمد کوزه گر (خریدار محصول) –
باسلام و خسته نباشید. من عکس های مورد نظرم رو به صورت Blob توی SQLite ذخیره کردم و توی برنامه از دیتابیس میخونمشون و تشخیص چهره هم درست کار میکنه. اما به خاطر فرایند encoding ابتدای شروع برنامه یه مقدار تاخیر داشتم. واسه همین خواستم عکس های هدف رو به صورت encode شده توی دیتابیس ذخیره کنم اما نمی دونم encode ها رو با چه فرمتی ذخیره کنم . قطعه کد زیر رو برای ذخیره در db نوشتم :
sqliteConnection = sqlite3.connect(‘PersonPic.db’)
cursor = sqliteConnection.cursor()
print(“Connected to SQLite”)
sqlite_insert_blob_query = “”” INSERT INTO peson_table
(id, name, photo, encode) VALUES (?, ?, ?,?)”””
personPhoto = convertToBinaryData(photo)
img = cv2.imread(photo)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
encode = face_recognition.face_encodings(img)[0]
data_tuple = (personId , name, personPhoto, encode)
cursor.execute(sqlite_insert_blob_query, data_tuple)
sqliteConnection.commit()
print(“Image and encode file inserted successfully as a BLOB into peson_table”)
cursor.close()
این قطعه کد رو هم برای بازیابی از دیتابیس :
sqliteConnection = sqlite3.connect(‘PersonPic.db’)
cursor = sqliteConnection.cursor()
print(“Connected to SQLite”)
cursor.execute(“SELECT * from peson_table”)
record = cursor.fetchall()
for row in record:
name = row[1]
photo = row[2]
encode = row[3]
nparr = np.frombuffer(photo, np.uint8)
curImage = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
images.append(curImage)
names.append(name)
encode_nparr = np.frombuffer(encode, np.uint64)
print(encode_nparr)
known_encode_list.append(encode_nparr)
print(“Read Known Person images from db \n”)
cursor.close()
ببخشید کدها به هم ریخته هست اما اگه ببرینشون توی Sublime Text درست میشن.خیلی جستجو کردم هیچ کدوم از راهکارها جواب نداد. انکدها به صورت باینری ذخیره میشن و وقتی بازیابی میکنم شون دیگه اون آرایه 128 عضوی اولیه نیستن و به هم میریزن. با np هم قبل از ذخیره ، آرایه شون کردم اما فرقی نکرد. ممنون میشم راهنماییم کنین.
ساناز قنبری (خریدار محصول) –
سلام خسته نباشید ممنون از دوره خوبتون
من برای تبدیل این کد به فایل exe بوسیله pyinstaller مشکل دارم
برای ادرس دهیpath=os.path.abspath(‘images_pro’) این دستور رو نوشتم اما باز هم به نتیجه نرسیدم ممنون میشم راهنماییم کنید
مصطفی آصفی –
سلام به شما. وقتی یک فایل خارجی در کد استفاده می کنید باید آدرس رو نسبی به Pyinstaller اعلام کنید.
در فایل اصلی خودتون عبارت زیر رو اضافه کنید
import os, sys
os.chdir(sys._MEIPASS)
این به پای اینستالر میگه که آدرس دهی برای باندل باید نسبی باشه.
اگه به درستی کار نکرد باید بیشتر در مورد Relative Directory یا Add File در Pyinstaller تحقیق کنید چون به اقتصای شرایط راه های دیگه ای رو ممکنه لازم باشه امتحان کنید.
سیاوش زکی زاده (خریدار محصول) –
ممنون استاد آصفی
من کدهای داخل git hub رو چک کردم اما اصلی ترین مشکلم با قسمت (‘{curImage = cv2.imread(f'{path}/{item هستش که خطای invalid syntax میده ممنون میشم کمکم کنید.
سیاوش زکی زاده (خریدار محصول) –
سلام استاد آصفی
قسمت مربوط به imshow کد رو اصلاح کردم ولی کل کدهای من 46 خط بوددر صورتی که شما به خط های 62 تا 64 اشاره کردید. من منظورتون رو درست متوجه نشدم. با این حال فایلم رو اجرا کردم همون خطاهای مربوط به پست قبلیم همچنان پابرجاست اگه کمکم کنید ممنون میشم.
اینم لینک فایل اصلاح شده خدمت شما:
https://s17.picofile.com/file/8416257926/face_recognition1_1_.py.html
مصطفی آصفی –
سلام به شما. جناب زکی زاده عزیز گمان می کنم شما آموزش رو شتاب زده می بینید. اشاره من به شماره 62 روی اون سورس کدی هست که تو مخزن گیت هاب گذاشتم و لینک دریافت اون هم در فایل های دانلودی دوره هست. اون کد رو دریافت و به صورت دقیق با کد خودتون مقایسه بفرمایید. ایرادی که بار قبل داشتید نشون دهنده شتاب زدگی هست.
سیاوش زکی زاده (خریدار محصول) –
این لینک خدمت شما استاد.
https://s17.picofile.com/file/8416123150/face_recognition1.py.html
محبت میکنید.
مصطفی آصفی –
سلام به شما. ببینید شما دستورات نمایش نهایی خروجی (imshow) رو زیر حلقه for نوشتید. خط های 42 و 43 و 44 رو باید یک shift+tab بزنید تا یک دندانه بیارید عقب. خط های 62 تا 64 سورس بنده میشه.
سیاوش زکی زاده (خریدار محصول) –
سلام استاد آصفی من opencv و face_recognition رو روی سیستم اوبنتو نصب کردم چند تا تستم ازش گرفتم ببینم کتابخانه ها کامل نصب شده یا نه کار کرد درست بود اما واقعیتش میخواستم مثل کد های درس آخری اسمو از یه لیستی که اسم خود فرد روی فایل jpg هستش در بیارم که نیاز نباشه هر سری به صورت دستی وارد کنم اما کد ( ‘{curImage=cv2.imread(f'{path}/{item میزنم خطای invalid syntax میده و وقتی فرمت f رو حذف میکنم خطا نمیده اما به جاش در خطای بعدی به (img=cv2.cvtColor(img,cv2.COLOR_BGR2RGB خطای cv2.error: OpenCV(3.4.3) /home/pi/opencv-3.4.3/modules/imgproc/src/color.cpp:181: error: (-215:Assertion failed) !_src.empty() in function ‘cvtColor’
میده ممنون میشم راهنماییم کنید.
مصطفی آصفی –
سلام به شما. لطفا سورس کدی که تا اینجا نوشتید رو در یک آپلود سنتر مثل پیکوفایل بارگذاری و لینک رو اینجا ارسال کنید تا بتونم کدتون رو بررسی کنم.
آیدا رنجبران (خریدار محصول) –
سلاام وقتتون بخیر من قبلا ویژوال استودیو 2019 روی سیستمم نصب داشتم ولی اون desktop development رو نصب نکردم چجوری باید اونو نصب کنم؟
اگه چیزای دیگش هم نصب باشه مشکلی پیش میاد؟
مصطفی آصفی –
سلام به شما. فرآیند نصب رو انجام بدین مواردی که نصب باشن از قبل، خودشون نصب شده نشون داده میشن. نه مشکلی پیش نمیاد. البته شرایط سیستمها متفاوته ولی به طور کلی نباید مشکلی باشه.
Ashkan (خریدار محصول) –
اسکریپتی که ابتدای دوره ذکر شده بود نوشته نشد!
ولی مفاهیم به قدری عمیق توضیح داده شده بود که نیازی به نوشتن اسکریپت توسط استاد نبود.
منتظر دوره های بعدیتون هستیم…
ممنون از شما.
مصطفی آصفی –
سلام به شما. چرا پسرم نوشته شده. با هم در طول دوره می نویسیمش.
اسکریپتی که در فیلم معرفی دوره (درس صفر) عرض کردم همون چیزی هست که از آغاز دوره ایجادش می کنیم و تا پایان درس هفتم گام به گام با هم کامل می کنیم.
همون اسکریپت 68 خطی که در پایان درس هفتم اگر گام به گام با من پیش اومده باشید شما هم کاملش کردید و اگر نه سورس رو یکجا از لینکی که به دوره پیوست شده می تونید دریافت کنید.
Ashkan –
سلام جناب آصفی خسته نباشید.
این آموزش در نهایت چه کاربردی داره و اینکه بعد از این دوره میتونیم چه دوره های دیگه ای رو شروع کنیم؟
با تشکر
مصطفی آصفی –
سلام به شما. این آموزش با سه هدف ضبط شده:
1- یک پروژه کاربردی برای این آموزش پردازش تصویر (+)
2- استفاده از اون در اپلیکیشن های دسکتاپ یا موبایل مبتنی بر پایتون مثل کیوی (+) به عنوان یک سیستم شناسایی هویت
3- درک نحوه تشخیص چهره و شناسایی هویت در OpenCV که بعد از این درک در موارد لازم امکان پیاده سازی با زبان سیپلاسپلاس هم هست.
مهرداد –
سلام وقت بخیر،
چطور می تونیم این رو روی یه میکروکنترلر پیاده سازی کنیم؟؟؟ که بتونیم مثلا یه دستگاه الکترونیکی جدا داشته باشیم که این کار رو تشخیص بده؟
بعد بخوایم چیزای دیگه رو تشخیص بدیم و استخراج کنیم چطور؟ مثلا یک پلاک یا محتویات یک رسید خرید؟
چطور بانک داده براش تعریف کنیم
مصطفی آصفی –
سلام وقت خوش.
در رابطه با استفاده از پایتون روی میکروکنترلر این آموزش Micropython (+) می تونه یک نقطه شروع براتون باشه. ولی دقت کنید فقط یک نقطه شروع! بعد از فراگیری تا به جایی برسید که بتونید کتابخانههایی مثل cv2 و ماژول های اضافی رو استفاده کنید راه زیادی در پیش دارید.
در مورد سوال دومتون دقت کنید که روش مورد بحث در این آموزش ویژه تشخیص چهره و شناسایی هویت در پردازش تصویر هست. تشخیص اشیا و تشخیص متن موضوع های جداگانه ای در پردازش تصویر هستند که جداگانه باید بحث بشن. مثلا کتابخانه YOLO برای تشخیص اشیا یکی از کتابخانههای پرکاربرد هست که در OpenCV میتونید فراخوانی و استفاده کنید. به زودی در این موارد هم آموزش هایی در هم رویش منتشر خواهد شد (شناسه HamRuyesh رو در شبکه های اجتماعی دنبال کنید تا در صورت انتشار مطلع بشید).
در مورد سوال سومتون هم طبیعتا باید کار با Sqlite در پایتون رو جستجو کنید. در هم رویش در این آموزش kivy (+) در بخش پایانی در مورد کار با پایگاه داده در پایتون برای ذخیره کردن داده ها صحبت شده ولی به صورت مستقل منتشر نشده. در صورتی که به استفاده از پردازش تصویر در اپلیکیشن موبایل علاقه مند نباشید طبیعتا تهیه این بسته برای شما مناسب نیست و باید کار با Sqlite در پایتون رو در گوگل جستجو کنید. چون در حال حاضر آموزش مستقلی برای کار با پایگاه داده در پایتون در هم رویش موجود نیست. یک روش دیگه هم برای ذخیره داده های این الگوریتم، استفاده از کتابخانه pandas و ذخیره فایل ها در یک فایل صفحه گسترده (مثل اکسل) هست.
مهدی –
سلام.
آیا این اموزش محدودیت شناسایی چهره داره؟
یعنی مثلا طبق داده هایش تشخیص دهد و داده ها هم تصاویر مثلا شخیصت های معروف باشند
اینطوریه یا نه میشه هر چهره ای رو تشخیص داد؟
مصطفی آصفی –
سلام به شما. خیر بانک چهره ها توسط خود شما قابل تعریف هست. برای مثال ممکنه شما برای تشخیص هویت و سیستم حضور و غیاب یک شرکت استفاده کنید.
امیر محمد کهنگی (خریدار محصول) –
سلام بر استاد آصفی و تمام عوامل سایت هم رویش.
این آموزش بسیار عالی است (می توان گفت بهترین آموزش در سطح فارسی است) و می تواند در کنار “واقعیت افزوده در پایتون و OpenCV” یک منبع انگیزشی فوق العاده برای فراگیران باشد. از استاد آصفی و مجموعه ی هم رویش بابت چنین آموزش های باکیفیتی تشکر می کنم.
مصطفی آصفی –
سلام و سپاس از لطف شما و این که برای ابراز لطفتون وقت صرف کردین. امیدوارم که کار مفیدی باشه و بتونید کارهای خوبی با دانستههای این بستهها خلق کنید.