Solvedimutils 'NoneType' object has no attribute 'shape'

Hello;
I‘m running the real_time_object_detection program,and the problem is :D:\python3.5.2\Model\object-detection-deep-learning>python real_time_object_detection.py --prototxt=MobileNetSSD_deploy.prototxt.txt --model=MobileNetSSD_deploy.caffemodel
[INFO] loading model...
[INFO] starting video stream...
Traceback (most recent call last):
File "real_time_object_detection.py", line 44, in
frame = imutils.resize(frame, width=400)
File "C:\Anaconda3\lib\site-packages\imutils\convenience.py", line 69, in resize
(h, w) = image.shape[:2]
AttributeError: 'NoneType' object has no attribute 'shape'

the code is:

import the necessary packages

from imutils.video import VideoStream
from imutils.video import FPS
import numpy as np
import argparse
import imutils
import time
import cv2

construct the argument parse and parse the arguments

ap = argparse.ArgumentParser()
ap.add_argument("-p", "--prototxt", required=True,
help="path to Caffe'deploy'prototxt file")
ap.add_argument("-m", "--model", required=True,
help="path to Caffe pre-trained model")
ap.add_argument("-c", "--confidence", type=float, default=0.2,
help="minimum probability to filter weak detections")
args = vars(ap.parse_args())

initialize the list of class labels MobileNet SSD was trained to

detect, then generate a set of bounding box colors for each class

CLASSES = ["background", "aeroplane", "bicycle", "bird", "boat",
"bottle", "bus", "car", "cat", "chair", "cow", "diningtable",
"dog", "horse", "motorbike", "person", "pottedplant", "sheep",
"sofa", "train", "tvmonitor"]
COLORS = np.random.uniform(0, 255, size=(len(CLASSES), 3))

load our serialized model from disk

print("[INFO] loading model...")
net = cv2.dnn.readNetFromCaffe(args["prototxt"], args["model"])

initialize the video stream, allow the cammera sensor to warmup,

and initialize the FPS counter

print("[INFO] starting video stream...")
vs = VideoStream(src=1).start()
time.sleep(2.0)
fps = FPS().start()

loop over the frames from the video stream

while True:
# grab the frame from the threaded video stream and resize it
# to have a maximum width of 400 pixels
frame = vs.read()
frame = imutils.resize(frame, width=400)

# grab the frame dimensions and convert it to a blob
(h, w) = frame.shape[:2]
blob = cv2.dnn.blobFromImage(frame, 0.007843, (300, 300), 127.5)

# pass the blob through the network and obtain the detections and
# predictions
net.setInput(blob)
detections = net.forward()

loop over the detections

for i in np.arange(0, detections.shape[2]):
	# extract the confidence (i.e., probability) associated with
	# the prediction
	confidence = detections[0, 0, i, 2]

	# filter out weak detections by ensuring the `confidence` is
	# greater than the minimum confidence
	if confidence > args["confidence"]:
		# extract the index of the class label from the
		# `detections`, then compute the (x, y)-coordinates of
		# the bounding box for the object
		idx = int(detections[0, 0, i, 1])
		box = detections[0, 0, i, 3:7] * np.array([w, h, w, h])
		(startX, startY, endX, endY) = box.astype("int")

		# draw the prediction on the frame
		label = "{}: {:.2f}%".format(CLASSES[idx],
			confidence * 100)
		cv2.rectangle(frame, (startX, startY), (endX, endY),
			COLORS[idx], 2)
		y = startY - 15 if startY - 15 > 15 else startY + 15
		cv2.putText(frame, label, (startX, y),
			cv2.FONT_HERSHEY_SIMPLEX, 0.5, COLORS[idx], 2)

show the output frame

cv2.imshow("Frame", frame)
key = cv2.waitKey(1) & 0xFF

# if the `q` key was pressed, break from the loop
if key == ord("q"):
	break

# update the FPS counter
fps.update()

stop the timer and display FPS information

fps.stop()
print("[INFO] elapsed time: {:.2f}".format(fps.elapsed()))
print("[INFO] approx. FPS: {:.2f}".format(fps.fps()))

do a bit of cleanup

cv2.destroyAllWindows()
vs.stop()

may be the problem is it didn't active the camera when I was running “vs = VideoStream(src=1).start()”?
appreciated for helping me,Thank you.

27 Answers

✔️Accepted Answer

  1. When posting code please format it using pre HTML tags or tilde tags. Otherwise your code is unreadable. Please go back and format it.

  2. For NoneType errors the issue is 99% most likely due to not being able to read frames from your webcam. Ensure that OpenCV can access your webcam before continuing. You can read more about NoneType errors here:

https://www.pyimagesearch.com/2016/12/26/opencv-resolving-nonetype-errors/

And additionally your index of your camera might be incorrect for your system. Instead of:

vs = VideoStream(src=1).start()

Try updating the src

vs = VideoStream(src=0).start()

Related Issues:

42
imutils No module named 'imutils' after pip install
It looks like you pip installed imutils using python2's pip and so that's why python3 can't import i...
8
imutils 'NoneType' object has no attribute 'shape'
When posting code please format it using pre HTML tags or tilde tags Otherwise your code is unreadab...
6
imutils ImportError: No module named imutils
Hm I think you have an issue with your command Hello ...