كما يرى الكمبيوتر





هل تساءلت يومًا كيف يجد الكمبيوتر الأشياء اللازمة للمعالجة من دفق الفيديو؟ للوهلة الأولى ، تبدو هذه مهمة برمجة "عالية" باستخدام عدد كبير من الصيغ من التحليل الرياضي والرياضيات المنفصلة وما إلى ذلك ، وتتطلب قدرًا هائلاً من المعرفة لكتابة برنامج صغير على الأقل مثل "مرحبًا ، أيها العالم" في عالم التعرف الصور على الفيديو. وإذا قيل لك أنه في الواقع أصبح الدخول إلى عالم رؤية الكمبيوتر أسهل بكثير ، وبعد قراءة هذا المقال يمكنك كتابة برنامجك الخاص الذي سيعلم جهاز الكمبيوتر الخاص بك رؤية الوجوه واكتشافها؟ ستجد أيضًا في نهاية المقالة مكافأة يمكنها زيادة أمان جهاز الكمبيوتر الخاص بك باستخدام رؤية الكمبيوتر.



لكي يبدأ جهاز الكمبيوتر الخاص بك في فهم أنك تعرض عليه شيئًا يشبه الوجه ، نحتاج إلى:



  1. الحاسوب؛
  2. كاميرا ويب؛
  3. بايثون 3
  4. محرر الكود المفضل لديك (PyCharm ، Jupyter ، إلخ).


لذلك ، بعد أن جمعت كل ما تحتاجه وفقًا للقائمة أعلاه ، يمكننا البدء في كتابة برنامجنا للتعرف على الوجوه مباشرةً.



أولاً ، قم بتنزيل مكتبات Python الضرورية باستخدام الأمر الموجود في سطر الأوامر:



pip install opencv-python; numpy






باختصار حول سبب حاجتنا إليها:



OpenCV. هذه المكتبة هي العمود الفقري لكل مشروع رؤية كمبيوتر حديث تقريبًا. يضم مئات من خوارزميات الرؤية الحاسوبية ومعالجة الصور. تمت كتابتها في الأصل بلغة C / C ++ ، ولكن تمت إعادة كتابتها لاحقًا بلغة Python أيضًا نظرًا لإقبالها الكبير على هذه اللغة.



نومبي. سيساعد في الحسابات الداخلية لمكتبة OpenCV.



بعد الانتهاء من تثبيت المكتبات التي نحتاجها ، افتح محرر الكود المفضل لدينا وابدأ في كتابة برنامجنا:



إرفاق مكتبة رؤية الكمبيوتر OpenCV



import cv2 as cv


2. نحن نلتقط دفق فيديو من كاميرا ويب باستخدام طريقة VideoCapture (index) ، حيث الفهرس هو الرقم التسلسلي لكاميرا الويب الخاصة بنا في النظام. إذا كانت هناك كاميرا واحدة فقط ، فستكون المعلمة تساوي 0.



capture = cv.VideoCapture(0)


3. للحصول على الفيديو ، سنستخدم طريقة read () ، التي تعيد لنا العلامة rtrn - توضح نجاح التقاط إطار من دفق الفيديو والصورة - إطار دفق الفيديو الخاص بنا (مصفوفة صغيرة). سنقرأ البيانات من دفق الفيديو باستمرار حتى يتم الضغط على مفتاح Escape.



while True:
    rtrn, image = capture.read()
    cv.imshow("Capture from Web-camera", image) #      
    if cv.waitKey(1) == 27:  #      Esc
        break
capture.release()
cv.destroyAllWindows()


نقوم بحفظ ملفنا ، وتشغيله من سطر الأوامر باستخدام python our_file_name.py. الآن يمكن لبرنامجنا تلقي دفق فيديو من كاميرا الويب! هذا يعني أننا بالفعل في منتصف الطريق إلى حقيقة أن الكمبيوتر يمكنه التعرف على الوجوه.



4. لنجعله حتى يتمكن الكمبيوتر أيضًا من كتابة فيديو إلى ملف:



حدد برنامج الترميز لحفظ الفيديو ، وحدد اسم الملف المحفوظ ، و fps والأحجام. لمهمتنا ، نأخذ برنامج الترميز XVID.



import cv2 as cv
capture = cv.VideoCapture(0)
codec = cv.VideoWriter_fourcc(*'XVID')


5. نقوم بإخراج الإطارات بالتتابع إلى نافذة الفيديو ، ثم نحفظ النتيجة في متغير الإخراج. ثم يتم نقل البيانات الناتجة بعد انتهاء دفق الفيديو إلى ملف "save_from_camera.avi":



output = cv.VideoWriter('saved_from_camera.avi ', codec, 25.0, (640, 480))
while capture.isOpened():
    rtrn, image = capture.read()
    if cv.waitKey(1) == 27 or rtrn == False:
        break
    cv.imshow('video for save', image)
    output.write(image)
output.release()
capture.release()
cv.destroyAllWindows()


بعد أن تعلمنا كيفية التقاط مقطع فيديو من كاميرا ويب وحفظه في ملف ، يمكننا المتابعة إلى الشيء الأكثر إثارة للاهتمام - التعرف على الوجوه في دفق فيديو. للعثور على الوجه في الإطارات ، سنستخدم ما يسمى بميزات Haar. جوهرها هو أنه إذا أخذنا مناطق مستطيلة في الصورة ، فعند الاختلاف في الشدة بين وحدات البكسل في المستطيلات المجاورة ، يمكننا التمييز بين السمات المتأصلة في الوجوه.



على سبيل المثال ، في الصور ذات الوجوه ، تكون المنطقة المحيطة بالعيون أغمق من حول الخدين. لذلك ، يمكن تسمية إحدى علامات Haar للوجوه بمستطيلين متجاورين عند الخدين والعينين.



هناك عدد كبير من الطرق الأخرى والأسرع والأكثر دقة لاكتشاف الأشياء في الصورة ، ولكن لفهم المبادئ العامة ، سنحتاج فقط إلى معرفة علامات Haar في الوقت الحالي.



لقد قام مطورو OpenCV بالفعل بالعمل على تعريف Haar Signs وقدموا للجميع نتائج لقدرات معالجة دفق الفيديو.



لنبدأ في كتابة كاشف للوجه من كاميرا الويب لدينا:



6. أولاً وقبل كل شيء ، احصل على ميزات Haar وحدد المعلمات لالتقاط دفق فيديو. يوجد ملف السمات في المسار حيث تم تثبيت مكتبات بايثون. بشكل افتراضي ، تكون موجودة في المجلد



C:/Python3X/Lib/sitepackages/cv2/data/haarcascade_frontalface_default.xml


حيث X هو تخريب Python 3 الخاص بك.



import cv2 as cv
cascade_of_face = cv.CascadeClassifier('C:/Python3.X/Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml ')
capture = cv.VideoCapture(0)
capture.set(cv.CAP_PROP_FPS, 25) #   25   


7. بعد ذلك ، في الحلقة ، سنتناوب على قراءة الإطارات من كاميرا الويب وإرسالها إلى جهاز كشف الوجه الخاص بنا:



while True:
    rtrn, image = capture.read()
    gr = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
    faces_detect = cascade_of_face.detectMultiScale(
        image=gr,
        minSize=(15, 15),
        minNeighbors=10,
        scaleFactor=1.2
    )
    for (x_face, y_face, w_face, h_face) in faces_detect:
        cv.rectangle(image, (x_face, y_face), (x_face + w_face, y_face + h_face), (0, 0, 255), 2)
    cv.imshow("Image", image)
    if cv.waitKey(1) == 27:  # Esc key
        break
capture.release()
cv.destroyAllWindows()


8. الآن دعونا نجمع كل شيء في كل واحد ونحصل على برنامج يلتقط الفيديو من كاميرا ويب ، ويتعرف على الوجوه الموجودة عليها ويحفظ النتيجة في ملف:



import cv2 as cv
faceCascade = cv.CascadeClassifier('C:/Users/Zet/Desktop/Python/test_opencv/Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml')
capture = cv.VideoCapture(0)
capture.set(cv.CAP_PROP_FPS, 25)
codec = cv.VideoWriter_fourcc(*'XVID')
output = cv.VideoWriter('saved_from_camera.avi', codec, 25.0, (640, 480))
while True:
    rtrn, image = capture.read()
    gr = cv.cvtColor(image, cv.COLOR_BGR2GRAY)
    faces_detect = faceCascade.detectMultiScale(
        image=gr,
        minSize=(15, 15),
        minNeighbors=10,
        scaleFactor=1.2
    )
    for (x_face, y_face, w_face, h_face) in faces_detect:
        cv.rectangle(image, (x_face, y_face), (x_face + w_face, y_face + h_face), (255, 0, 0), 2)
    cv.imshow("Image", image)
    output.write(image)
    if cv.waitKey(1) == 27:  # Esc key
        break
output.release()
capture.release()
cv.destroyAllWindows()


الكل! لقد كتبت برنامجًا يمثل الخطوة الأولى في فهم كيف يرى الكمبيوتر. علاوة على ذلك ، يمكنك تحسين التعرف على الوجوه ، على سبيل المثال ، بحيث يتعرف الكمبيوتر على أشخاص معينين في الفيديو عن طريق تدريب الشبكات العصبية. يمكنك أيضًا كتابة كاشف تم تكوينه للتعرف على الكائنات الأكثر تعقيدًا (على سبيل المثال ، تتبع حركة المرور) مع القدرة على تحليلها. وأيضًا لحل المهام الأخرى التي لا تقل أهمية عن رؤية الكمبيوتر.



BONUS



دعنا نطبق البرنامج عمليًا - سنتعقب عمليات تسجيل الدخول تحت الحساب.



  1. دعنا نذهب إلى برنامج جدولة المهام (يمكن العثور عليه من خلال بحث Windows القياسي) ؛
  2. لنقم بإنشاء مهمة بسيطة ، ونعطيها عنوانًا ووصفًا موجزًا ​​؛






3. انقر فوق "التالي" وانتقل إلى عنصر المشغل. هنا نختار الحدث الذي سيحدث فيه إطلاق مهمتنا. نختار "عند دخول Windows" ؛



4. بعد ذلك ، في العمل ، نشير إلى "تشغيل البرنامج" ؛



5. في العملية ، حدد المسار إلى python.exe ، وفي المعلمات ، المسار إلى برنامجنا:







تم! نتيجة لذلك ، عند تسجيل الدخول ، سيتم تسجيل الشخص الذي قام بتسجيل الدخول تحت الحساب ، وسيتم حفظ الفيديو. وبالتالي ، يمكنك تتبع من عمل على الكمبيوتر في غيابك ، مع الاحتفاظ بسجل للأدلة.



All Articles