Currently using Windows 10 with Python 3.7 I tried running with this code in order to get the webcam to function for use in number recognition
def get_img_contour_thresh(img):
   x, y, w, h = 0, 0, 300, 300
   gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
   blur = cv2.GaussianBlur(gray, (5, 5), 0)
   ret, thresh1 = cv2.threshold(blur, 175, 255, cv2.THRESH_BINARY_INV + 
     cv2.THRESH_OTSU)
   thresh1 = thresh1[y:y + h, x:x + w]
   contours, hierarchy = cv2.findContours(thresh1, cv2.RETR_TREE, 
     cv2.CHAIN_APPROX_SIMPLE)[-2:]
   return img, contours, thresh1
def show_webcam(mirror=False):
   # load json and create model
   json_file = open('model.json', 'r')
   loaded_model_json = json_file.read()
   json_file.close()
   model = model_from_json(loaded_model_json)
   # load weights into new model
   model.load_weights("model.h5")
   print("Loaded model from disk")
model.compile(loss='categorical_crossentropy',
              optimizer='adam',
              metrics=['accuracy'])
cap = cv2.VideoCapture(0)
while True:
    ret, img = cap.read()
    img, contours, thresh = get_img_contour_thresh(img)
    ans = ''
    if len(contours) > 0:
        contour = max(contours, key=cv2.contourArea)
        if cv2.contourArea(contour) > 500:
            x, y, w, h = cv2.boundingRect(contour)
            newImage = thresh[y:y + h, x:x + w]
            newImage = cv2.resize(newImage, (28, 28))
            newImage = np.array(newImage)
            newImage = newImage.astype('float32')
            newImage /= 255
            if K.image_data_format() == 'channels_first':
                newImage = newImage.reshape(1, 28, 28)
            else:
                newImage = newImage.reshape(28, 28, 1)
            newImage = np.expand_dims(newImage, axis=0)
            ans = model.predict(newImage).argmax()
    x, y, w, h = 0, 0, 300, 300
    cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2)
    cv2.putText(img, "CNN : " + str(ans), (10, 320),
                cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)
    cv2.imshow("Frame", img)
    cv2.imshow("Contours", thresh)     
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()
def main():
   show_webcam(mirror=True)
if __name__ == '__main__':
   main()
I receive this error
 File "cam.py", line 75, in <module>
   main()
 File "cam.py", line 71, in main
   show_webcam(mirror=True)
 File "cam.py", line 34, in show_webcam
   img, contours, thresh = get_img_contour_thresh(img)
 File "cam.py", line 10, in get_img_contour_thresh
   gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
 cv2.error: OpenCV(3.4.4) C:\projects\opencv- 
   python\opencv\modules\imgproc\src\color.cpp:181: error: (-215:Assertion 
   failed) !_src.empty() in function 'cv::cvtColor'
Iv been looking for a solution for a while but havent had any luck in figuring this out, tried looking around but just cant figure it out, what do you guys think? Appreciate the help given
The error you're seeing is one that happens if None gets passed on cv2.cvtColor.
After
ret, img = cap.read()
it's a good idea to check that img is not None before proceeding. Depending on your input source, cap.read() can fail. On one my laptops, it fails at least once before starting to return valid images.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With