Пример #1
0
class FaceRecognizer(AbstractRecognizer):
    def __init__(self):
        AbstractRecognizer.__init__(self)

        self._name = "[FaceRecognizer]"
        self._profiler = Profiler("[Profiler:Main]")

    def recognize(self, cb, args=None):
        recognized_name = None

        if args is None:
            EventLogger.warning(self._name + " did not get any args!")
            cb("NO NAME")

        if len(args) != 2:
            EventLogger.error("Please start this Program with the parameter 1 or 0")
            cb("NO NAME")

        if args[1] == 1:  # ------------------------------------------------| Create_Database_Mode
            EventLogger.info("Start Mode 1: Create Face Database")
            fdb = gfd.GenerateFaceDatabase("Roland")
            fdb.generate_face_database()
            cb("NO NAME")

        elif args[1] == 2:  # ------------------------------------------------| Face_Recognition_Mode
            EventLogger.info("Start Mode 2: Face Recognition")
            fr_instance = fr.faceRecognition(cb)
            fr_instance.start_process()

        else:  # -----------------------------------------------------------------| Face_Detection_Mode
            EventLogger.info("Start Mode default: Detecting Faces")
            start_new_thread(face_detection_webcam, (self.__found_face,))
            cb("NO NAME")


    def __found_face(self, frame, faces):
        '''
        This function is just for debugging purpose

        :param frame:
        :param faces:
        :return:
        '''
        if frame is None or faces is None:
            print "found_face: one param is None"

        max = len(faces)
        print "Found " + str(len(faces)) + " images"

        # process the faces
        for i, val in enumerate(faces):
            rnd = str(randint(0, 1000000))
            util.save_image("./image_" + str(i) + "_" + str(rnd) + ".pgm", val)

        #start_new_thread(self.__profile_process, (self.__callback_profile_process, "Marv", ))

    def cb_recognize(self, recognized_name):
        print "callbacked: " + str(recognized_name)
        self._profiler.start_profile_routine(recognized_name, False)
Пример #2
0
 def cb_recognize(self, recognized_name):
     print "callbacked: " + str(recognized_name)
     p = Profiler("[Profiler-Main]")
     p.start_profile_routine(recognized_name, True)
Пример #3
0
class NfcRfidRecognizer(AbstractRecognizer):
    def __init__(self):
        AbstractRecognizer.__init__(self)

        self._name = "[NfcRfidRecognizer]"
        self._profiler = Profiler("[Profiler-NfcRfidRecognizer]")
        # self._gui._nfc_init()

        self._counter = 0
        self._exit_timer = None
        self._exit_cb = None

    def recognize(self, cb, args=None):
        if args != None:
            self.__write_mode(args[0])

        EventLogger.info("NFC/RFID Recognizer started...")
        self._counter = 0

        if self._gui._nfc is None:
            EventLogger.warning(self._name + " NFC/RFID Component was initialized!")

        # Rufe request_tag_id() auf

        self._gui._nfc_cb_to_profiler = cb
        self._exit_cb = cb

        self._gui._nfc.request_tag_id(self._gui._nfc.TAG_TYPE_TYPE2)
        self._exit_timer = threading.Timer(2, self.__cb_retry)
        self._exit_timer.start()

    def cb_recognize(self, recognized_name):
        self._exit_timer.cancel()
        self._gui._nfc_write_name = None
        self._gui._nfc_write_mode = False

        EventLogger.debug(self._name + " cd_recognized= " + str(recognized_name))
        EventLogger.info("NFC/RFID Recognizer finished...")

        if recognized_name != "NO NAME":
            self._profiler.start_profile_routine(recognized_name)

    def __cb_retry(self):
        EventLogger.info("Try to read the Tag...")
        # print "Counter: " + str(self._counter)

        if self._counter >= 5:
            EventLogger.info("Tried 5 times to read the Tag!")
            self._exit_cb("NO NAME")
            return

        self._counter += 1
        self._gui._nfc.request_tag_id(self._gui._nfc.TAG_TYPE_TYPE2)
        # TODO thread.restart?
        self._exit_timer = threading.Timer(2, self.__cb_retry)
        self._exit_timer.start()

    def __write_mode(self, name):
        EventLogger.info("NFC/RFID write Mode: Writing " + str(name) + " to the Tag.")
        self._gui._nfc_write_name = name
        self._gui._nfc_write_mode = True