В этой строке:
print ("{} сохранено!". Формат (имя_кадра, фрейм)
(как указано в комментарии) a ")"отсутствует.
Кроме того, в той же строке синтаксис использования" .format () "равен не правильно , поскольку вы указали две переменные внутри скобок" .format ", а именно:img_name "и" frame ", но в" print "есть только один" {} ". Так что должно быть два "{}", если вы хотите вывести значения двух переменных. Обратите внимание, что это не приведет к возникновению какой-либо ошибки, а только к ее указанию.
Надеюсь, это поможет.
edit:
Проверьте отступ в вашем коде.
После
k = cv2.waitKey(1)
перед строкой "face = face_classifier ..... "есть пробел. (Я не знаю, произошло ли это при вставке кода здесь, или это было так в вашем редакторе)
Кроме того, я не думаю, что вам нужно вложить этот цикл внутри предыдущего цикла. Должен быть в пределах «отступа цикла»
для см. Fy, fy, fw, fh в смайлах: cv2.rectangle (frame, (fx, fy), (fx + fw, fy + fh), (110,100,200), 1,5)
Затем поместите следующие следующие строки кода также в «отступ цикла»
Итак, в конечном итоге ваш код будет выглядеть так:
while True:
#Capture frame by frame
_, frame = video_capture.read()
im_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
k = cv2.waitKey(1)
#Detect faces, eyes and smiles in input frame
faces = face_classifier.detectMultiScale(im_gray,
scaleFactor = 1.5,
minNeighbors = 5,
minSize=(30, 30),
flags=cv2.CASCADE_SCALE_IMAGE)
eyes = eye_classifier.detectMultiScale(im_gray,
scaleFactor = 1.5,
minNeighbors = 3,
minSize=(10, 10),
maxSize=(15,15),
flags = cv2.CASCADE_SCALE_IMAGE)
smiles = smile_classifier.detectMultiScale(im_gray,
scaleFactor = 1.5,
minNeighbors = 3,
minSize = (5,5),
maxSize = (10,15),
flags = cv2.CASCADE_SCALE_IMAGE)
# Draw a rectangle around the faces
for x, y, w, h in faces:
cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
# Draw a rectangle around the eyes
for ex, ey, ew, eh in eyes:
cv2.rectangle(frame, (ex, ey), (ex+ew, ey+eh), (0,0,255), 1)
# Draw a rectangle around the smiles
for fx,fy,fw,fh in smiles:
cv2.rectangle(frame, (fx,fy), (fx+fw, fy+fh), (110,100,200), 1.5)
# Display the resulting frame
cv2.imshow('Our Face Detector', frame)
if k == 27: #ESC Pressed
break
elif k == 32: # SPACE pressed
img_name = "FaceDetect_webcam_{}.png".format(img_counter)
cv2.imwrite(img_name,frame)
print("{} saved!".format(img_name, frame)
img_counter += 1
video_capture.release()
cv2.destroyAllWindows()