Example #1
0
    cap = cv2.VideoCapture(0)
    fd = FaceDetector()
    scale = 0.00392

    net = cv2.dnn.readNet('new_face_det.weights', 'new_face_det.cfg')

    with open('classes.txt', 'r') as f:
        classes = [line.strip() for line in f.readlines()]

    COLORS = numpy.random.uniform(0, 255, size=(len(classes), 3))
    face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')

    if (args.type == 0):
        while True:
            ret, frame = cap.read()
            fd.drawFacesImg(frame)

            emotions, emotion_confs = ec.classify_emotion(frame, fd.boxes)
            genders, gender_confs = go.classify_gender(frame, fd.boxes)
            frame = edit_frame(frame, emotions, genders, emotion_confs,
                               gender_confs, fd.boxes)
            cv2.imshow('Face with emotion', frame)
            if cv2.waitKey(1) & 0xFF == ord('q'):
                break

    elif (args.type == 1):
        name = input("Name of video: ")
        cap = cv2.VideoCapture(name)
        while True:
            read_bool, frame = cap.read()
            # frame = cv2.flip(frame, 1)
Example #2
0
class MyWindow:
    def __init__(self):
        self.window = tk.Tk()
        self.window.wm_title(
            "Face detection, gender and emotion classification")
        self.window.config(background="#FFFFFF")
        self.cap = None
        self.mode = "camera"
        self.file_path = ""
        self.video_thread = Thread(target=self.display_video)

        self.imageFrame = tk.Frame(self.window, width=640, height=480)
        self.imageFrame.grid(row=0, column=0, padx=10, pady=2)

        self.combobox_types = ttk.Combobox(
            self.imageFrame,
            values=["Video", "Picture", "Camera"],
            state="readonly")
        self.combobox_types.set("Camera")
        self.combobox_types.grid(row=0, column=0, sticky=tk.W, pady=2, padx=4)

        self.path_label = tk.Label(self.imageFrame, text="File path:")
        self.path_label.grid(row=0, column=1, sticky=tk.W, pady=2, padx=4)

        self.path_entry = tk.Entry(self.imageFrame, width=50)
        self.path_entry.grid(row=0, column=2, sticky=tk.W, pady=2, padx=4)

        self.ldBtn = tk.Button(self.imageFrame,
                               text="Load",
                               command=self.display_file,
                               width=5)
        self.ldBtn.grid(row=0, column=3, sticky=tk.E, pady=2, padx=4)

        self.main_frame = tk.Label(self.imageFrame)
        self.main_frame.grid(row=1, column=0, columnspan=4, sticky=tk.S)

        self.faceDetector = FaceDetector()
        self.ec = EmotionClassifier()
        self.go = GenderClassifier()
        self.video_thread.start()
        self.window.mainloop()

    def display_file(self):
        self.file_path = self.path_entry.get()
        self.mode = self.combobox_types.get()

    def display_video(self):
        while True:
            if self.mode == "Camera":
                self.cap = cv2.VideoCapture(0)
                while True:
                    if self.mode != "Camera":
                        break
                    _, frame = self.cap.read()
                    frame = cv2.flip(frame, 1)
                    self.faceDetector.drawFacesImg(frame)

                    emotions, emotion_confs = self.ec.classify_emotion(
                        frame, self.faceDetector.boxes)
                    genders, gender_confs = self.go.classify_gender(
                        frame, self.faceDetector.boxes)
                    frame = edit_frame(frame, emotions, genders, emotion_confs,
                                       gender_confs, self.faceDetector.boxes)

                    cv2image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGBA)
                    img = Image.fromarray(cv2image)
                    imgtk = ImageTk.PhotoImage(image=img)
                    self.main_frame.imgtk = imgtk
                    self.main_frame.configure(image=imgtk)
            elif self.mode == "Video":
                self.cap = cv2.VideoCapture(self.file_path)
                while True:
                    if self.mode != "Video":
                        break
                    read_bool, frame = self.cap.read()
                    if not read_bool:
                        break
                    frame = cv2.flip(frame, 1)

                    self.faceDetector.drawFacesImg(frame)

                    emotions, emotion_confs = self.ec.classify_emotion(
                        frame, self.faceDetector.boxes)
                    genders, gender_confs = self.go.classify_gender(
                        frame, self.faceDetector.boxes)
                    frame = edit_frame(frame, emotions, genders, emotion_confs,
                                       gender_confs, self.faceDetector.boxes)

                    cv2image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGBA)
                    img = Image.fromarray(cv2image)
                    imgtk = ImageTk.PhotoImage(image=img)
                    self.main_frame.imgtk = imgtk
                    self.main_frame.configure(image=imgtk)
            elif self.mode == "Picture":
                frame = cv2.imread(self.file_path)
                if frame is None:
                    break
                self.faceDetector.drawFacesImg(frame)

                emotions, emotion_confs = self.ec.classify_emotion(
                    frame, self.faceDetector.boxes)
                genders, gender_confs = self.go.classify_gender(
                    frame, self.faceDetector.boxes)
                frame = edit_frame(frame, emotions, genders, emotion_confs,
                                   gender_confs, self.faceDetector.boxes)
                cv2image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGBA)
                img = Image.fromarray(cv2image)
                imgtk = ImageTk.PhotoImage(image=img)
                self.main_frame.imgtk = imgtk
                self.main_frame.configure(image=imgtk)