pythonopencvimutils

Python OpenCV--MAC WebCam doesn't close


I am running a face recognition code and my issue is that after running the code, my webcam doesn't close. The green light is still activated and in order to close it, i have to close my computer in order to have the cam ok. What do you suggest, why is like that?

from imutils.video import VideoStream
import argparse, imutils, time, cv2, os, sys
import time
import smtplib, os
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.mime.image import MIMEImage
from email.message import Message
from email.mime.audio import MIMEAudio
from email import encoders


   detector = cv2.CascadeClassifier("haarcascade_frontalface_default.xml")
# vs = VideoStream(src=0).start()
vs = VideoStream
vs(src=0).start()
# time.sleep(2.0)
total = 0

while True:
    frame = vs.read()
    orig = frame.copy()
    frame = imutils.resize(frame, width=600)
    rects = detector.detectMultiScale(
        cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY), scaleFactor=1.1, 
        minNeighbors=5, minSize=(30, 30))
    for (x, y, w, h) in rects:
        cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 255, 0), 2)
        if rects is not None and total <5:
            p="/Users/Desktop/atentie/mail/"+str(total)+".png"
            cv2.imwrite(p, orig)
            total+=1

    break   

cv2.destroyAllWindows()
vs(src=0).stop()
time.sleep(5)

Solution

  • VideoStream from imutils library is a class object, so when you assign it to vs you ought to treat it like one.

    Here is the fix:

    #--- import libraries ---
    from imutils.video import VideoStream
    
    vs = VideoStream
    #--- start the video stream ---
    vs(src=0).start()
    
    #--
    # rest of your program 
    #--
    
    #--- stop the video stream ---
    vs(src=0).stop()