Ejemplo n.º 1
0
    def verify(self, account, test_signature):
        # TODO: get reference signatures from db.

        reference_signatures = self.database.load(account)
        if not reference_signatures:
            return Ret(False, ErrorCode.ReferenceSignatureShortage)
        print reference_signatures
        print "reference signature count : %d" % len(reference_signatures)
        test_signature = self._pre_process_for_signle_signature(test_signature)
        test_signature = self._reconstruct_signature(test_signature)
        personTest = PersonTest(self.config, reference_signatures)
        features = personTest.calc_dis(test_signature)
        res = self.model.predict(features)
        return Ret(res, None)
Ejemplo n.º 2
0
    def test(self):
        self.config.logger.info("Start test")
        count = 1
        test_set = self.test_set
        if self.config.TrainSetInclude:
            test_set.extend(self.train_set)
        forgery_test_result = []
        genuine_test_result = []
        random_test_result = []

        genuine_test_dis = []
        forgery_test_dis = []

        falseRejectCount = 0
        falseAcceptSkillCount = 0
        falseAcceptRandomCount = 0

        for i in range(len(test_set)):
            one_test_set = test_set[i]
            self.config.logger.info("Test signature: %d" % count)
            count += 1
            personTest = PersonTest(
                self.config, one_test_set["genuine"][0:self.config.RefCount])
            genuine_set = one_test_set["genuine"][self.config.RefCount:]
            forgery_set = one_test_set["forgery"]
            random_set = []

            for j in range(len(genuine_set)):
                sig = genuine_set[j]
                dis = personTest.calc_dis(sig)
                if self.config.Regressor == "PCA":
                    res = self.driver.transform(dis)
                    res = res.tolist()[0][0]
                else:
                    res = self.driver.predict(dis)
                    res = res.tolist()[0]
                genuine_test_dis.append(res)
                self.config.logger.debug("Genuine Test: Result: %s, %s" %
                                         (res, dis))
                genuine_test_result.append(res)
                if (res > 0.5):
                    self.config.logger.debug("FalseReject: uid: %d, sid: %d" %
                                             (i, j))
                    falseRejectCount += 1

            for j in range(len(forgery_set)):
                sig = forgery_set[j]
                dis = personTest.calc_dis(sig)
                if self.config.Regressor == "PCA":
                    res = self.driver.transform(dis)
                    res = res.tolist()[0][0]
                else:
                    res = self.driver.predict(dis)
                    res = res.tolist()[0]
                forgery_test_dis.append(res)
                self.config.logger.debug("Forgery Test: Result: %s, %s" %
                                         (res, dis))
                forgery_test_result.append(res)
                if (res <= 0.5):
                    self.config.logger.debug("FalseAccept: uid: %d, sid: %d" %
                                             (i, j))
                    falseAcceptSkillCount += 1

            if self.config.RandomForgeryInclude:
                for j in range(len(test_set)):
                    if i == j:
                        continue
                    random_set.extend(test_set[j]["genuine"])
                    random_set.extend(test_set[j]["forgery"])

                # train set included
                for one_train_set in self.train_set:
                    random_set.extend(one_train_set["genuine"])
                    random_set.extend(one_train_set["forgery"])

                for j in range(len(random_set)):
                    sig = random_set[j]
                    dis = personTest.calc_dis(sig)
                    if self.config.Regressor == "PCA":
                        res = self.driver.transform(dis)
                        res = res.tolist()[0][0]
                    else:
                        res = self.driver.predict(dis)
                        res = res.tolist()[0]
                    forgery_test_dis.append(res)
                    self.config.logger.debug("Random Test: Result: %s, %s" %
                                             (res, dis))
                    random_test_result.append(res)
                    if (res <= 0.5):
                        self.config.logger.debug(
                            "FalseAccept: uid: %d, sig: %d" % (i, j))
                        falseAcceptRandomCount += 1

        self.config.logger.info("genuine test set count: %d" %
                                len(genuine_test_result))
        self.config.logger.info("false reject count: %d" % falseRejectCount)
        self.config.logger.info(
            "false rejected rate: %f" %
            (float(falseRejectCount) / float(len(genuine_test_result))))

        self.config.logger.info("forgery test set count: %d" %
                                len(forgery_test_result))
        self.config.logger.info("false accepted count: %d" %
                                falseAcceptSkillCount)
        self.config.logger.info(
            "false accepted rate: %f" %
            (float(falseAcceptSkillCount) / float(len(forgery_test_result))))

        if self.config.RandomForgeryInclude:
            self.config.logger.info("random test set count: %d" %
                                    len(random_test_result))
            self.config.logger.info("false accepted count: %d" %
                                    falseAcceptRandomCount)
            self.config.logger.info("false accepted rate: %f" %
                                    (float(falseAcceptRandomCount) /
                                     float(len(random_test_result))))

        # Compute Equal Error Rate
        genuine_test_dis_list = sorted(genuine_test_dis,
                                       reverse=True)  # desending order
        forgery_test_dis_list = sorted(forgery_test_dis)  # asending order

        lastGap = 100.0
        genuineCount = len(genuine_test_dis_list)
        forgeryCount = len(forgery_test_dis_list)
        falseRejectRate = None
        falseAcceptRate = None
        for i in range(genuineCount):
            pivotal = genuine_test_dis_list[i]
            falseRejectRate = float(i) / genuineCount
            j = 0
            while j < forgeryCount and forgery_test_dis_list[j] <= pivotal:
                j += 1
            falseAcceptRate = float(j) / forgeryCount
            gap = abs(falseAcceptRate - falseRejectRate)
            if gap == 0.0:
                break
            elif gap < lastGap:
                lastGap = gap
            else:
                break
        self.config.logger.info(
            "falseRejectRate: %f, falseAcceptRate: %f, gap: %f" %
            (falseRejectRate, falseAcceptRate, lastGap))
        self.config.logger.info("TestResultGenuine : %s" % genuine_test_dis)
        self.config.logger.info("TestResultForgery : %s" % forgery_test_dis)
Ejemplo n.º 3
0
    def test(self):
        self.config.logger.info("Start test")
        count = 1
        test_set = self.test_set
        if self.config.TrainSetInclude:
            test_set.extend(self.train_set)
        forgery_test_result = []
        genuine_test_result = []
        random_test_result = []

        genuine_test_dis = []
        forgery_test_dis = []

        falseRejectCount = 0
        falseAcceptSkillCount = 0
        falseAcceptRandomCount = 0

        for i in range(len(test_set)):
            one_test_set = test_set[i]
            self.config.logger.info("Test signature: %d" % count)
            count += 1
            personTest = PersonTest(self.config, one_test_set["genuine"][0 : self.config.RefCount])
            genuine_set = one_test_set["genuine"][self.config.RefCount :]
            forgery_set = one_test_set["forgery"]
            random_set = []

            for j in range(len(genuine_set)):
                sig = genuine_set[j]
                dis = personTest.calc_dis(sig)
                if self.config.Regressor == "PCA":
                    res = self.driver.transform(dis)
                    res = res.tolist()[0][0]
                else:
                    res = self.driver.predict(dis)
                    res = res.tolist()[0]
                genuine_test_dis.append(res)
                self.config.logger.debug("Genuine Test: Result: %s, %s" % (res, dis))
                genuine_test_result.append(res)
                if res > 0.5:
                    self.config.logger.debug("FalseReject: uid: %d, sid: %d" % (i, j))
                    falseRejectCount += 1

            for j in range(len(forgery_set)):
                sig = forgery_set[j]
                dis = personTest.calc_dis(sig)
                if self.config.Regressor == "PCA":
                    res = self.driver.transform(dis)
                    res = res.tolist()[0][0]
                else:
                    res = self.driver.predict(dis)
                    res = res.tolist()[0]
                forgery_test_dis.append(res)
                self.config.logger.debug("Forgery Test: Result: %s, %s" % (res, dis))
                forgery_test_result.append(res)
                if res <= 0.5:
                    self.config.logger.debug("FalseAccept: uid: %d, sid: %d" % (i, j))
                    falseAcceptSkillCount += 1

            if self.config.RandomForgeryInclude:
                for j in range(len(test_set)):
                    if i == j:
                        continue
                    random_set.extend(test_set[j]["genuine"])
                    random_set.extend(test_set[j]["forgery"])

                # train set included
                for one_train_set in self.train_set:
                    random_set.extend(one_train_set["genuine"])
                    random_set.extend(one_train_set["forgery"])

                for j in range(len(random_set)):
                    sig = random_set[j]
                    dis = personTest.calc_dis(sig)
                    if self.config.Regressor == "PCA":
                        res = self.driver.transform(dis)
                        res = res.tolist()[0][0]
                    else:
                        res = self.driver.predict(dis)
                        res = res.tolist()[0]
                    forgery_test_dis.append(res)
                    self.config.logger.debug("Random Test: Result: %s, %s" % (res, dis))
                    random_test_result.append(res)
                    if res <= 0.5:
                        self.config.logger.debug("FalseAccept: uid: %d, sig: %d" % (i, j))
                        falseAcceptRandomCount += 1

        self.config.logger.info("genuine test set count: %d" % len(genuine_test_result))
        self.config.logger.info("false reject count: %d" % falseRejectCount)
        self.config.logger.info("false rejected rate: %f" % (float(falseRejectCount) / float(len(genuine_test_result))))

        self.config.logger.info("forgery test set count: %d" % len(forgery_test_result))
        self.config.logger.info("false accepted count: %d" % falseAcceptSkillCount)
        self.config.logger.info(
            "false accepted rate: %f" % (float(falseAcceptSkillCount) / float(len(forgery_test_result)))
        )

        if self.config.RandomForgeryInclude:
            self.config.logger.info("random test set count: %d" % len(random_test_result))
            self.config.logger.info("false accepted count: %d" % falseAcceptRandomCount)
            self.config.logger.info(
                "false accepted rate: %f" % (float(falseAcceptRandomCount) / float(len(random_test_result)))
            )

        # Compute Equal Error Rate
        genuine_test_dis_list = sorted(genuine_test_dis, reverse=True)  # desending order
        forgery_test_dis_list = sorted(forgery_test_dis)  # asending order

        lastGap = 100.0
        genuineCount = len(genuine_test_dis_list)
        forgeryCount = len(forgery_test_dis_list)
        falseRejectRate = None
        falseAcceptRate = None
        for i in range(genuineCount):
            pivotal = genuine_test_dis_list[i]
            falseRejectRate = float(i) / genuineCount
            j = 0
            while j < forgeryCount and forgery_test_dis_list[j] <= pivotal:
                j += 1
            falseAcceptRate = float(j) / forgeryCount
            gap = abs(falseAcceptRate - falseRejectRate)
            if gap == 0.0:
                break
            elif gap < lastGap:
                lastGap = gap
            else:
                break
        self.config.logger.info(
            "falseRejectRate: %f, falseAcceptRate: %f, gap: %f" % (falseRejectRate, falseAcceptRate, lastGap)
        )
        self.config.logger.info("TestResultGenuine : %s" % genuine_test_dis)
        self.config.logger.info("TestResultForgery : %s" % forgery_test_dis)
Ejemplo n.º 4
0
    def test(self):
        self.config.logger.info("Start test")
        count = 1
        test_set = self.test_set
        if self.config.TrainSetInclude:
            test_set.extend(self.train_set)
        forgery_test_result = []
        genuine_test_result = []
        random_test_result = []

        genuine_test_dis = []
        forgery_test_dis = []

        for i in range(len(test_set)):
            one_test_set = test_set[i]
            self.config.logger.info("Test signature: %d" % count)
            count += 1
            personTest = PersonTest(
                self.config, one_test_set["genuine"][0:self.config.RefCount])
            genuine_set = one_test_set["genuine"][self.config.RefCount:]
            forgery_set = one_test_set["forgery"]
            random_set = []

            for j in range(len(genuine_set)):
                sig = genuine_set[j]
                dis = personTest.calc_dis(sig)
                res = self.driver.predict(dis)
                self.config.logger.info("Genuine Test: Result: %s, %s" %
                                        (res, dis))
                genuine_test_result.append(res)
                if (res != 1):
                    self.config.logger.fatal("FalseReject: uid: %d, sid: %d" %
                                             (i, j))

            for j in range(len(forgery_set)):
                sig = forgery_set[j]
                dis = personTest.calc_dis(sig)
                res = self.driver.predict(dis)
                self.config.logger.info("Forgery Test: Result: %s, %s" %
                                        (res, dis))
                forgery_test_result.append(res)
                if (res != 0):
                    self.config.logger.fatal("FalseAccept: uid: %d, sid: %d" %
                                             (i, j))

            if self.config.RandomForgeryInclude:
                for j in range(len(test_set)):
                    if i == j:
                        continue
                    random_set.extend(test_set[j]["genuine"])
                    random_set.extend(test_set[j]["forgery"])

                # train set included
                for one_train_set in self.train_set:
                    random_set.extend(one_train_set["genuine"])
                    random_set.extend(one_train_set["forgery"])

                for j in range(len(random_set)):
                    sig = random_set[j]
                    dis = personTest.calc_dis(sig)
                    res = self.driver.predict(dis)
                    self.config.logger.info("Random Test: Result: %s, %s" %
                                            (res, dis))
                    random_test_result.append(res)
                    if (res != 0):
                        self.config.logger.fatal(
                            "FalseAccept: uid: %d, sig: %d" % (i, j))

        self.config.logger.info("genuine test set count: %d" %
                                len(genuine_test_result))
        self.config.logger.info("true accepted count: %d" %
                                sum(genuine_test_result))
        self.config.logger.info(
            "false rejected rate: %f" %
            (sum(genuine_test_result) / float(len(genuine_test_result))))

        self.config.logger.info("forgery test set count: %d" %
                                len(forgery_test_result))
        self.config.logger.info("false accepted count: %d" %
                                sum(forgery_test_result))
        self.config.logger.info(
            "false accepted rate: %f" %
            (1 - sum(forgery_test_result) / float(len(forgery_test_result))))

        if self.config.RandomForgeryInclude:
            self.config.logger.info("random test set count: %d" %
                                    len(random_test_result))
            self.config.logger.info("false accepted count: %d" %
                                    sum(random_test_result))
            self.config.logger.info(
                "false accepted rate: %f" %
                (1 - sum(random_test_result) / float(len(random_test_result))))
Ejemplo n.º 5
0
    def test(self):
        self.config.logger.info("Start test")
        count = 1
        test_set = self.test_set
        if self.config.TrainSetInclude:
            test_set.extend(self.train_set)
        forgery_test_result = []
        genuine_test_result = []
        random_test_result = []

        genuine_test_dis = []
        forgery_test_dis = []

        for i in range(len(test_set)):
            one_test_set = test_set[i]
            self.config.logger.info("Test signature: %d" % count)
            count += 1
            personTest = PersonTest(self.config, one_test_set["genuine"][0 : self.config.RefCount])
            genuine_set = one_test_set["genuine"][self.config.RefCount :]
            forgery_set = one_test_set["forgery"]
            random_set = []

            for j in range(len(genuine_set)):
                sig = genuine_set[j]
                dis = personTest.calc_dis(sig)
                res = self.driver.predict(dis)
                self.config.logger.info("Genuine Test: Result: %s, %s" % (res, dis))
                genuine_test_result.append(res)
                if res != 1:
                    self.config.logger.fatal("FalseReject: uid: %d, sid: %d" % (i, j))

            for j in range(len(forgery_set)):
                sig = forgery_set[j]
                dis = personTest.calc_dis(sig)
                res = self.driver.predict(dis)
                self.config.logger.info("Forgery Test: Result: %s, %s" % (res, dis))
                forgery_test_result.append(res)
                if res != 0:
                    self.config.logger.fatal("FalseAccept: uid: %d, sid: %d" % (i, j))

            if self.config.RandomForgeryInclude:
                for j in range(len(test_set)):
                    if i == j:
                        continue
                    random_set.extend(test_set[j]["genuine"])
                    random_set.extend(test_set[j]["forgery"])

                # train set included
                for one_train_set in self.train_set:
                    random_set.extend(one_train_set["genuine"])
                    random_set.extend(one_train_set["forgery"])

                for j in range(len(random_set)):
                    sig = random_set[j]
                    dis = personTest.calc_dis(sig)
                    res = self.driver.predict(dis)
                    self.config.logger.info("Random Test: Result: %s, %s" % (res, dis))
                    random_test_result.append(res)
                    if res != 0:
                        self.config.logger.fatal("FalseAccept: uid: %d, sig: %d" % (i, j))

        self.config.logger.info("genuine test set count: %d" % len(genuine_test_result))
        self.config.logger.info("true accepted count: %d" % sum(genuine_test_result))
        self.config.logger.info(
            "false rejected rate: %f" % (sum(genuine_test_result) / float(len(genuine_test_result)))
        )

        self.config.logger.info("forgery test set count: %d" % len(forgery_test_result))
        self.config.logger.info("false accepted count: %d" % sum(forgery_test_result))
        self.config.logger.info(
            "false accepted rate: %f" % (1 - sum(forgery_test_result) / float(len(forgery_test_result)))
        )

        if self.config.RandomForgeryInclude:
            self.config.logger.info("random test set count: %d" % len(random_test_result))
            self.config.logger.info("false accepted count: %d" % sum(random_test_result))
            self.config.logger.info(
                "false accepted rate: %f" % (1 - sum(random_test_result) / float(len(random_test_result)))
            )