хорошо, вот полный код, который сохраняет захваченные изображения с камеры. Сохраняет все окно камеры (лицо и все тело). Я хочу сохранить только лицо, покрытое прямоугольником
import uuid
import cv2
import sys
faceCascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
video_capture = cv2.VideoCapture('http://192.168.43.1:8080/video')
img_counter = 0
def my_random_string(string_length=10):
"""Returns a random string of length string_length."""
random = str(uuid.uuid4()) # Convert UUID format to a Python string.
random = random.upper() # Make all characters uppercase.
random = random.replace("-","") # Remove the UUID '-'.
return random[0:string_length] # Return the random string.
while True:
# Capture frame-by-frame
ret, frame = video_capture.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
k = cv2.waitKey(1)
faces = faceCascade.detectMultiScale(
gray,
scaleFactor=1.5,
minNeighbors=5,
minSize=(30, 30),
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)
if k%256 == 32:
# SPACE pressed
print(my_random_string(9)) # For example, D9E50C
img_name = "face_{}.png".format(img_counter)
#cv2.imwrite(img_name, frame)
cv2.imwrite(img_name, frame[[[(x, y), (x+w, y+h), (0, 255, 0), 2]]])
print("{} written!".format(img_name))
img_counter += 1
# Display the resulting frame
cv2.imshow('FaceDetection', frame)
if k%256 == 27: #ESC Pressed
break
elif k%256 == 32:
# SPACE pressed
print('')
#print(my_random_string(9)) # For example, D9E50C
#img_name = "facedetect_webcam_{}.png".format(img_counter)
#cv2.imwrite(img_name, frame)
#print("{} written!".format(img_name))
#img_counter += 1
# When everything is done, release the capture
video_capture.release()
cv2.destroyAllWindows()
эта строка сохраняет все изображение с камеры:
cv2.imwrite(img_name, frame)
Я пытаюсь сохранить только прямоугольное изображение под этим кодом:
cv2.imwrite(img_name, frame[[[(x, y), (x+w, y+h), (0, 255, 0), 2]]])
, но все еще получаю эту ошибку