در قسمت پانزدهم از مجموعه آموزشی پردازش تصویر در پایتون، در رابطه با حذف پس زمینه صحبت کردیم و توانستیم برنامهای بنویسیم که تصویر متحرک و در حال حرکت را نگه دارد و پس زمینهی آن تصویر را حذف کند. در این قسمت میخواهیم در رابطه با تشخیص چهره صحبت کنیم.
تشخیص چهره
تشخیص چهره یکی از کاربردیترین کارهایی است که ما در پردازش تصویر انجام میدهیم. برای اینکه بتوانیم چهره و به طور کلی بقیه اجسام یا اشیا را تشخیص بدهیم، الگوهای از قبل آماده شدهای برای ما وجود دارد که میتوانیم از آنها استفاده کنیم.
البته خودمان نیز میتوانیم این الگوها را بنویسیم، اما راحتتر این است که از الگوهای استانداردی که برای این کار وجود دارد استفاده کنیم.
برای دریافت این الگوهای آماده میتوانید از طریق سایت opencv و یا گیتهاب آن استفاده کنید.
این الگوها در سایت گیتهاب در این آدرس قرار دارند.
در آدرس ذکر شده الگوهای متفاوتی برای کل بدن، چشم چپ یا راست، عینک، پلاک و بسیاری از چیزهای دیگر وجود دارد.
برنامهای که ما در ادامه خواهیم نوشت توانایی این را دارد که صورت و چشمها را تشخیص دهد.
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 | import cv2 import numpy as np faceXML = cv2.CascadeClassifier('face.xml') eyeXml = cv2.CascadeClassifier('eye.xml') cap = cv2.VideoCapture(0) while True: _, frame = cap.read() gray = cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY) faces = faceXML.detectMultiScale(gray) for(x,y,w,h) in faceXML: cv2.rectangle(frame,(x,y),(x+w,y+h),(255,0,0), 2) roi_gray = gray[y:y+h, x:x+h] roi_color = frame[y:y+h, x:x+h] eyes = eyeXml.detectMultiScale(roi_gray) for(ex,ey,ew,eh) in eyes: cv2.rectangle(roi_color,(ex, ey), (ex+ew, ey+eh), (0, 0, 255), 2) cv2.imshow('face', frame) k = cv2.waitKey(27) & 0xFF if(k == 27): break cv2.destroyAllWindows() |
پس از اجرای برنامه بالا خروجی برنامه به صورت زیر خواهد بود:
به پایان آمد این دفتر حکایت همچنان باقیست. این قسمت آخرین قسمت از این مجموعه آموزشی هست، امیدوارم که این مجموعه آموزشی برای شما مفید واقع شود و بتوانید بهره لازم را از آن ببرید.
سلام ممنون از مطالب و فیلم های ارزشمندتون
من هنگام اجرا با خطای
File “c:\Users\city notebook\Desktop\OpenCv-sisoog\16.py”, line 14, in
for(x,y,w,h) in faceXML:
TypeError: ‘cv2.CascadeClassifier’ object is not iterable
مواجه شدم که گفته شده object مربوط به cv2.CascadeClassifier
iterable نیست باید چکار کنم؟
ممنون از پاسخگویی شما
سلام مرسی اموزشتون خیلی بدردم خورد
فقط این ارور دلیلش چیه ؟
Traceback (most recent call last):
File “c:\Users\tayye\Desktop\AMIRALI\pythone files\1 .py”, line 13, in
faces = faceXML.detectMultiScale(gray)
cv2.error: OpenCV(4.5.2) C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-sgoydvi3\opencv\modules\objdetect\src\cascadedetect.cpp:1689: error: (-215:Assertion failed) !empty() in function ‘cv::CascadeClassifier::detectMultiScale’
[ WARN:0] global C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-sgoydvi3\opencv\modules\videoio\src\cap_msmf.cpp (438) `anonymous-namespace’::SourceReaderCB::~SourceReaderCB terminating async callback
سلام
من وقتی برنامه رو ران میکنم این ارورو میده
لطفا راهنمایی کنید
Traceback (most recent call last):
File “C:\Users\LENOVO\Desktop\programing\python projrct\time.py”, line 12, in
faces = faceXML.detectMultiScale(gray)
cv2.error: OpenCV(4.4.0) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-95hbg2jt\opencv\modules\objdetect\src\cascadedetect.cpp:1689: error: (-215:Assertion failed) !empty() in function ‘cv::CascadeClassifier::detectMultiScale’
اون یوزری هم ک اون بالا نوشته رو من اصلا توی یوزر هام ندارم
ممنون
سلام.
فولدر haarcascades از جایی که open cv را extract کردید کپی کنید و به پوشه ای که کد را در اون اجرا می کنید قرار دهید.
سپس از دو دستور زیر استفاده کنید:
faceXML = cv2.CascadeClassifier(‘haarcascades/haarcascade_frontalface_default.xml’)
eyeXML = cv2.CascadeClassifier(‘haarcascades/haarcascade_eye.xml’)
درود.
با سپاس فراوان از این آموزش
کدی که ارایه شده ، برای جلسه ی15 هست.
درود محمد نازنین. سپاس بابت توجهتان. کد تصحیح شد و کد جلسه 16 جایگزین شد.