فهرست مطالب:

تشخیص چهره+تشخیص: 8 مرحله (همراه با تصاویر)
تشخیص چهره+تشخیص: 8 مرحله (همراه با تصاویر)

تصویری: تشخیص چهره+تشخیص: 8 مرحله (همراه با تصاویر)

تصویری: تشخیص چهره+تشخیص: 8 مرحله (همراه با تصاویر)
تصویری: گوز زدن پریانکا چوپرا هنرپیشه بالیوود در یکی از برنامه های لایف تلویزیونی |C&C 2024, جولای
Anonim
Image
Image
تشخیص چهره+تشخیص
تشخیص چهره+تشخیص

این یک مثال ساده از اجرای تشخیص و تشخیص چهره با OpenCV از دوربین است. توجه: من این پروژه را برای مسابقه سنسور تهیه کردم و از دوربین به عنوان سنسور برای ردیابی و شناسایی چهره ها استفاده کردم. بنابراین ، هدف ما در این جلسه ، 1. Anaconda را نصب کنید 2. بارگیری بسته CV باز 3. تنظیم متغیرهای محیطی 4. آزمایش برای تأیید 5 ایجاد کد برای تشخیص چهره 6. ایجاد کد برای ایجاد مجموعه داده 7. ایجاد کد برای آموزش تشخیص 8. ایجاد کد برای تشخیص چهره ها و نتیجه.

مرحله 1: Anaconda را نصب کنید

Anaconda را نصب کنید
Anaconda را نصب کنید

Anaconda در اصل یک IDE پایتون با بسته بندی زیبا است که با تعداد زیادی بسته مفید مانند NumPy ، Pandas ، IPython Notebook و غیره حمل می شود. به نظر می رسد در همه جای جامعه علمی توصیه می شود. برای نصب آن Anaconda را بررسی کنید.

مرحله 2: بسته باز CV را بارگیری کنید

بارگیری بسته CV باز
بارگیری بسته CV باز

ابتدا برای بارگیری کامل بسته OpenCV به سایت رسمی OpenCV بروید. نسخه ای را که دوست دارید (2.x یا 3.x) انتخاب کنید. من در Python 2.x و OpenCV 2.x هستم - عمدتا به این دلیل است که آموزشهای OpenCV -Python/بر اساس آنها تنظیم شده است.

در مورد من ، من بسته (در اصل یک پوشه) را مستقیماً به درایو F خود استخراج کرده ام. (F: / opencv).

مرحله 3: تنظیم متغیرهای محیطی

تنظیم متغیرهای محیطی
تنظیم متغیرهای محیطی

فایل cv2.pyd را کپی و جایگذاری کنید

دایرکتوری بسته های Anaconda Site (به عنوان مثال بسته های F: / Program Files / Anaconda2 / Lib / site- در مورد من) شامل بسته های پایتون است که می توانید وارد کنید. هدف ما کپی و جایگذاری فایل cv2.pyd در این فهرست (به طوری که بتوانیم از cv2 واردات در کدهای پایتون خود استفاده کنیم.)

برای انجام این کار ، فایل cv2.pyd را کپی کنید…

از این فهرست OpenCV (قسمت ابتدایی ممکن است در دستگاه شما کمی متفاوت باشد):

# پایتون 2.7 و دستگاه 64 بیتی: F: / opencv / build / python / 2.7 / x64# پایتون 2.7 و دستگاه 32 بیتی: F: / opencv / build / python / 2.7 / x84

به این فهرست آناکوندا (قسمت ابتدایی ممکن است در دستگاه شما کمی متفاوت باشد):

F: / Program Files / Anaconda2 / Lib / site-packages

پس از انجام این مرحله ، اکنون می توانیم از import cv2 در کد پایتون استفاده کنیم. اما ، ما هنوز باید کمی بیشتر کار کنیم تا FFMPEG (کدک ویدئویی) کار کند (به ما این امکان را می دهد که کارهایی مانند پردازش فیلم ها را انجام دهیم.)

روی "رایانه من" (یا "این رایانه" در ویندوز 8.1) راست کلیک کنید-> ویژگیهای چپ کلیک کنید-> برگه "پیشرفته" را کلیک راست کنید-> دکمه "محیط متغیرها …" را کلیک چپ کنید. یک متغیر کاربر جدید اضافه کنید برای اشاره به OpenCV (یا x86 برای سیستم 32 بیتی یا x64 برای سیستم 64 بیتی.) من در حال حاضر روی یک دستگاه 64 بیتی هستم.

32 بیتی OPENCV_DIRC: / opencv / build / x86 / vc12

64 بیتی OPENCV_DIRC: / opencv / build / x64 / vc12

٪ OPENCV_DIR٪ / bin را به مسیر متغیر کاربر اضافه کنید.

به عنوان مثال ، متغیر کاربر PATH من به این شکل است…

قبل از:

F: / Users / Johnny / Anaconda؛ C: / Users / Johnny / Anaconda / Scripts

بعد از:

F: / Users / Johnny / Anaconda؛ C: / Users / Johnny / Anaconda / Scripts؛٪ OPENCV_DIR٪ / bin

این تمام کار ماست! FFMPEG آماده استفاده است!

مرحله 4: برای تأیید آزمایش کنید

برای تأیید آزمایش کنید
برای تأیید آزمایش کنید
برای تأیید آزمایش کنید
برای تأیید آزمایش کنید

ما باید آزمایش کنیم که آیا اکنون می توانیم این کارها را در Anaconda (از طریق Spyder IDE) انجام دهیم:

  • وارد کردن بسته OpenCV
  • از ابزار FFMPEG (برای خواندن/نوشتن/پردازش فیلم) استفاده کنید

تست 1: آیا می توانیم OpenCV را وارد کنیم؟

برای این که آناکوندا اکنون بتواند بسته OpenCV-Python (یعنی cv2) را وارد کند ،

این موارد را در کنسول IPython صادر کنید:

واردات cv2

چاپ cv2._ نسخه_

اگر بسته cv2 بدون خطا وارد شود و نسخه cv2 چاپ شود ، پس همه ما خوب هستیم!

تست 2: آیا می توانیم از کدک FFMPEG استفاده کنیم؟

یک نمونه قرار دهید

input_video.mp4

فایل ویدئویی در یک فهرست ما می خواهیم آزمایش کنیم که آیا می توانیم:

  • این فایل ویدئویی.mp4 را بخوانید ، و
  • نوشتن یک فایل ویدیویی جدید (می تواند.avi یا.mp4 و غیره باشد)

برای این کار باید یک کد پایتون آزمایشی داشته باشیم ، آن را test.py بنامید. آن را در همان فهرست نمونه قرار دهید

input_video.mp4

فایل.

این چیزی است که

test.py

ممکن است به نظر برسد (توجه: با تشکر فراوان از پیشنهادات پیت و وارن در قسمت نظرات - من کد اصلی تست خود را با کد او جایگزین کرده ام - لطفاً خودتان آن را آزمایش کنید و در صورت کارکرد بهتر به ما اطلاع دهید):

واردات cv2

cap = cv2. VideoCapture ("input_video.mp4") cap cap.isOpened () # True = خواندن ویدئو با موفقیت. غلط - در خواندن ویدئو کوتاهی می شود. fourcc = cv2. VideoWriter_fourcc (*'XVID') out = cv2. VideoWriter ("output_video.avi"، Fourcc، 20.0، (640، 360)) print out.isOpened () # True = با موفقیت فیلم را بنویسید غلط - در نوشتن ویدئو کوتاهی کنید. cap.release () out.release ()

این آزمون بسیار مهم است. اگر می خواهید فایل های ویدئویی را پردازش کنید ، باید اطمینان حاصل کنید که Anaconda / Spyder IDE می تواند از FFMPEG (کدک ویدیویی) استفاده کند. روزها طول کشید تا کار کنم. اما امیدوارم زمان شما بسیار کمتر باشد!:) توجه: یک نکته بسیار مهم دیگر هنگام استفاده از Anaconda Spyder IDE. مطمئن شوید که دایرکتوری کاری فعلی (CWD) را بررسی کرده اید !!!

مرحله 5: ایجاد کد برای تشخیص چهره

ایجاد کد برای تشخیص چهره
ایجاد کد برای تشخیص چهره
ایجاد کد برای تشخیص چهره
ایجاد کد برای تشخیص چهره

هدف

در این جلسه ،

  • ما اصول تشخیص چهره با استفاده از طبقه بندی کننده های آبشار مبتنی بر ویژگی Haar را مشاهده خواهیم کرد
  • ما همان را برای تشخیص چشم و غیره بسط می دهیم

تشخیص آبشار هار در OpenCV

در اینجا به تشخیص می پردازیم. OpenCV قبلاً شامل طبقه بندی کننده های از پیش آموزش دیده برای صورت ، چشم ، لبخند و غیره است. آن فایل های XML در پوشه opencv/data/haarcascades/ذخیره می شوند. بیایید آشکارساز صورت و چشم را با OpenCV ایجاد کنیم. ابتدا باید طبقه بندی کننده های XML مورد نیاز را بارگذاری کنیم. سپس تصویر ورودی (یا فیلم) ما را در حالت خاکستری بارگذاری کنید یا می توانیم از دوربین (برای تشخیص چهره در زمان واقعی) استفاده کنیم

وارد کردن numpy به عنوان np

import cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/resources/data/haarcascades/haarcascade_frontalface_default.xml') eye_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/resources/data/haarcasceye/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/haarcascades/.xml ') cap = cv2. VideoCapture (0) while 1: ret، img = cap.read () gray = cv2.cvtColor (img، cv2. COLOR_BGR2GRAY) face = face_cascade.detectMultiScale (خاکستری ، 1.5 ، 5) برای (x ، y ، w ، h) در صورتها: cv2 مستطیل (img ، (x ، y) ، (x+w ، y+h) ، (255 ، 0 ، 0) ، 2) roi_gray = خاکستری [y: y +h، x: x+w] roi_color = img [y: y+h، x: x+w] eyes = eye_cascade.detectMultiScale (roi_gray) for (ex، ey، ew، eh) in eyes: cv2.rectangle (roi_color، (ex، ey)، (ex +ew، ey +eh)، (0، 255، 0)، 2) print "found" +str (len (چهره)) +"face (s)" cv2.imshow ('img'، img) k = cv2.waitKey (30) & 0xff if k == 27: break cap.release () cv2.destroyAllWindows ()

مرحله 6: ایجاد کد برای ایجاد مجموعه داده

ایجاد کد برای ایجاد مجموعه داده
ایجاد کد برای ایجاد مجموعه داده
ایجاد کد برای ایجاد مجموعه داده
ایجاد کد برای ایجاد مجموعه داده

ما در حال انجام تشخیص چهره هستیم ، بنابراین شما به برخی از تصاویر چهره نیاز دارید! شما می توانید مجموعه داده خود را ایجاد کنید یا با یکی از پایگاه های داده موجود چهره شروع کنید ، https://face-rec.org/databases/ یک نمای کلی به روز به شما می دهد. سه پایگاه داده جالب (بخش هایی از توضیحات از https://face-rec.org نقل شده است):

  • AT & T Facedatabase
  • پایگاه اطلاع رسانی ییل A
  • Extended Yale Facedatabase B

در اینجا من از مجموعه داده خودم استفاده می کنم …. با کمک کدی که در زیر آورده شده است:

وارد کردن numpy به عنوان np

import cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/resources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) id = raw_input ('id user id') sampleN = 0؛ در حالی 1 = نمونه N+1 ؛ cv2.imwrite ("F:/Program Files/projects/face_rec /acesData/User."+str (id)+"."+str (sampleN)+".jpg" ، خاکستری [y: y+h، x: x+w]) cv2. rectangle (img، (x، y)، (x+w، y+h)، (255، 0، 0)، 2) cv2.waitKey (100) cv2.imshow ('img' ، img) cv2.wait کلید (1) اگر نمونه N> 20: break cap.release () cv2.destroyAllWindows ()

مرحله 7: برای آموزش تشخیص دهنده ، کد ایجاد کنید

برای آموزش تشخیص دهنده ، کد ایجاد کنید
برای آموزش تشخیص دهنده ، کد ایجاد کنید

تابع آماده سازی مجموعه آموزشی را ایجاد کنید

اکنون ، یک تابع را تعریف می کنیم

getImagesWithID (مسیر)

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

حالا صورت های مجموعه داده (که در مرحله 6 ایجاد شده است) را با کمک کد زیر که به صورت زیر است به فایل.yml تبدیل کنید:

وارد کردن سیستم عامل

وارد کردن numpy به عنوان np وارد کردن cv2 از PIL وارد کردن تصویر # برای تشخیص چهره ما LBPH Face Recognizer را تشخیص می دهیم = cv2. path = "F:/Program Files/projects/face_rec/faceData" def getImagesWithID (path): imagePaths = [os.path.join (path، f) for f in os.listdir (path)] # print image_path #getImagesWithID (path) face = IDs = for imagePath in imagePaths: # تصویر را بخوانید و به چهره های مقیاس خاکستری تبدیل کنید # برچسب شناسه تصویر = int (os.path.split (imagePath) [-1].split (".") [1]) # تشخیص چهره در چهره ها. پیوست (faceNP) ID ها. پیوست (ID) cv2.imshow ("افزودن چهره ها برای ترانزیت" ، faceNP) cv2.waitKey (10) np.array (IDs) ، چهره های Ids ، چهره ها = getImagesWithID (path) nasifikator.train (چهره ها ، شناسه ها) شناسه کننده (save) ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml") cv2.destroyAllWindows ()

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

مرحله 8: کد را برای تشخیص چهره ها و نتیجه ایجاد کنید

Guyzz این آخرین مرحله ای است که در آن ما می توانیم کد را برای تشخیص چهره ها با کمک وب کم خود ایجاد کنیم. در این مرحله دو عملیات وجود دارد که در حال انجام هستند…. 1. گرفتن فیلم از cam 2. آن را با فایل.yml خود مقایسه کنید

import numpy as npimport cv2 face_cascade = cv2. CascadeClassifier ('F:/Program Files/opencv/resources/data/haarcascades/haarcascade_frontalface_default.xml') cap = cv2. VideoCapture (0) rec = cv2.createLBPHFaceRecizer؛ rec.load ("F:/Program Files/projects/face_rec/faceREC/trainingdata.yml") id = 0 font = cv2.cv. InitFont (cv2.cv. CV_FONT_HERSHEY_COMPLEX_SMALL، 5، 1، 0، 4) در حالی که 1: ret، img = cap.read () خاکستری = cv2.cvtColor (img، cv2. COLOR_BGR2GRAY) چهره = face_cascade.detectMultiScale (خاکستری ، 1.5 ، 5) برای (x ، y ، w ، h) در صورتها: cv2.rectangle (img، (x، y)، (x+w، y+h)، (255، 0، 0)، 2) id، conf = rec. پیش بینی (خاکستری [y: y+h، x: x+w]) if (id == 2): id = "alok" if id == 1: id = "alok" if id == 3: id = "anjali" if id == 4: id = "Gaurav" if id = = 5: id = 'rahul' if id == 6: id = "akshay" cv2.cv. PutText (cv2.cv.fromarray (img) ، str (id) ، (x ، y+h) ، فونت ، 255) cv2.imshow ('img'، img) if cv2.waitKey (1) == ord ('q'): break cap.release ()

cv2.destroyAllWindows ()

و در نهایت نتیجه در مقابل چشم شما قرار می گیرد …… همچنین می توانید فایل زیپ را از زیر پیوند بارگیری کنید: برای بارگیری کدها اینجا را کلیک کنید بنابراین ، در این دستورالعمل ما کار تشخیص چهره+تشخیص را با استفاده از OpenCV انجام دادیم … مانند این قابل آموزش….. plzzz من را مشترک کنید و به من رای دهید….. ممنون از دوستان:)

توصیه شده: