OpenCV waitKey в Python не работает на Mac - PullRequest
0 голосов
/ 20 января 2019

Я пишу код для распознавания лиц в Python и использую Open Cv на Mac (PyCharm). Я не понимаю, почему:

            if cv2.waitKey(1) & 0xFF == ord('q'):
                break

не работает на Mac, но на Windows этот код работает. В частности, q не вызывает if.

Я пытаюсь изменить с помощью: k = cv2.waitKey (0) если k == 27: перерыв

Ниже напишите мой код

def run(self):
    video_capture = cv2.VideoCapture(0)
    try:
        while self.active:
            # Grab a single frame of video
            ret, frame = video_capture.read()

            # Convert the image from BGR color (which OpenCV uses) to RGB color (which face_recognition uses)
            rgb_frame = frame[:, :, ::-1]

            # Find all the faces and face enqcodings in the frame of video
            face_locations = face_recognition.face_locations(rgb_frame)
            face_encodings = face_recognition.face_encodings(rgb_frame, face_locations)

            # Loop through each face in this frame of video
            for (top, right, bottom, left), face_encoding in zip(face_locations, face_encodings):
                # See if the face is a match for the known face(s)
                matches = face_recognition.compare_faces(self.known_face_encodings, face_encoding)

                name = "Unknown"

                # If a match was found in known_face_encodings, just use the first one.
                if True in matches:
                    first_match_index = matches.index(True)
                    name = self.known_face_names[first_match_index]

                # Draw a box around the face
                cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)

                # Draw a label with a name below the face
                cv2.rectangle(frame, (left, bottom - 35), (right, bottom), (0, 0, 255), cv2.FILLED)
                font = cv2.FONT_HERSHEY_DUPLEX
                cv2.putText(frame, name, (left + 6, bottom - 6), font, 1.0, (255, 255, 255), 1)
                if (name != "Unknown"):
                    self.reco.emit(name)
                    self.deactivate()
                    video_capture.release()
                    cv2.destroyAllWindows()
                else:
                    self.unreco.emit()
                    self.deactivate()
                    video_capture.release()
                    cv2.destroyAllWindows()
            # Display the resulting image
            # cv2.imshow('Video', frame)
            # Hit 'q' on the keyboard to quit!
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break
    except:
        print("error while recognize")
...