Beispiel #1
0
class Face_id(object):
    def __init__(self):
        "your baidu ai APP_ID"
        self.APP_ID = '********'
        "your baidu ai API_KEY"
        self.API_KEY = '***************'
        "your baidu ai SECRET_KEY"
        self.SECRET_KEY = '*******************'
        self.aipFace = AipFace(self.APP_ID, self.API_KEY, self.SECRET_KEY)
        self.photo_name = ''
        self.group = 'Door'

    def get_file_content(self):
        with open(self.photo_name, 'rb') as fp:
            return fp.read()

    def get_file_constcontent(self):
        with open('me.jpg', 'rb') as fp:
            return fp.read()

    def face_detect(self):
        options = {
            'max_face_num': 1,
            'face_fields': 'age,beauty,expression,faceshape,gender,glasses'
        }
        result = self.aipFace.detect(self.get_file_content(), options)
        return result

    def face_add(self, group='Door', uid='', user_info='person'):
        result = self.aipFace.addUser(uid, user_info, group,
                                      self.get_file_content())
        return result

    def face_recognize(self, group):
        options = {'user_top_num': 1}
        result = self.aipFace.identifyUser(group, self.get_file_content(),
                                           options)
        print result
        return result

    def get_user(self, uid='mrlian_door201', group='Door'):
        result = self.aipFace.getUser(uid)
        print result

    def get_group(self, start=0, num=100):
        options = {'start': start, 'num': num}
        result = self.aipFace.getGroupList(options)
        print result

    def get_groupuser(self, group='1', start=0, num=100):
        options = {'start': start, 'num': num}
        result = self.aipFace.getGroupUsers(group, options)
        return result

    def del_user(self, uid):
        result = self.aipFace.deleteUser(uid)
        return result
Beispiel #2
0
class faceAPI():
    def __init__(self):
        """API key information"""
        self.__APP_ID = 'APP_ID'
        self.__API_KEY = 'API_KEY'
        self.__SECRET_KEY = 'SECRET_KEY'
        self.__faceConnect=AipFace(self.__APP_ID,self.__API_KEY,self.__SECRET_KEY)
        #Face Feature configure
        self.feature_get_options = {'max_face_num':1,'face_fields':"race,gender,faceshape,qualities"}
        self.tempFeaturePath='../TempPicture/FaceFeature/Temp.png'
        self.tempFeatureDBPath ="../TempPicture/FaceFeature/TempFeatureDB/TempFeature"
        self.tempFTDBpath="../TempPicture/FaceFeature/TempDB/Temp"
        #Identify configure
        self.identify_option= {"ext_fields": "faceliveness","user_top_num":1}
        self.identify_detect_option={'max_face_num':10,'face_fields':"gender,faceshape,qualities"}
        self.tempIdentifyPath="../TempPicture/Identify/TempIdentify.png"
        self.tempIdentifyFeaturePath="../TempPicture/Identify/IdentifyFeature/FaceFeature"
        self.tempIdentifyDBPath="../TempPicture/Identify/IdentifyRecord/IDT"
    # image  resize
    def rectangle(self,image,width,height,xloc,yloc,path):
        frame = cv2.rectangle(image, (xloc, yloc),
        (xloc+width,yloc+height), (255, 0, 0), 2)
        cv2.imwrite(path,frame)
    def resize(self,image,width,height,xloc,yloc,path):
        frame=cv2.resize(image[yloc:yloc + height, xloc:xloc + width], (width, height))
        cv2.imwrite(path,frame)

    def face_feature_detect(self,image):
        self.__system_time=time.strftime('%Y_%m_%d_%H_%M_%S')
        cv2.imwrite(self.tempFeaturePath,image)
        __faceresult = self.__faceConnect.detect(image=get_file_content(self.tempFeaturePath), options=self.feature_get_options)
        print(__faceresult)
        if __faceresult['result_num'] ==1:
                race=__faceresult['result'][0]['race']
                gender=__faceresult['result'][0]['gender']
                if gender=='male':
                    gender='男'
                else:
                    gender='女'
                face_probability, human_probability = __faceresult['result'][0]['face_probability'],__faceresult['result'][0]['qualities']['type']['human']
                if race=='yellow':
                    race='黃色'
                elif race=='white':
                    race='白色'
                elif race=='black':
                    race='黑色'
                if face_probability<=0.9 or human_probability<=0.9:
                    print("低於取樣標準\n再試一次")
                else:
                    print("性別:{}\n膚色:{}\n臉部置信度:{}\n人臉置信度:{}".format(
                        gender,race,
                        face_probability, human_probability))
                    xloc, yloc = __faceresult['result'][0]['location']['left'], __faceresult['result'][0]['location']['top']
                    width, height = __faceresult['result'][0]['location']['width'], __faceresult['result'][0]['location']['height']
                    # image mark face location
                    self.rectangle(image=image,path=self.tempFeaturePath,
                                   width=width,height=height,xloc=xloc,yloc=yloc)
                    self.rectangle(image=image, path=self.tempFTDBpath+self.__system_time+".png",
                                   width=width, height=height, xloc=xloc, yloc=yloc)
                    #image cut face location
                    self.resize(image=image,path=self.tempFeatureDBPath + self.__system_time + ".png"
                                ,width=width,height=height,xloc=xloc,yloc=yloc)
                    add_result=self.__faceConnect.addUser(uid="test02",group_id="groupTest",
                    user_info="姓名:{}|性別:{}|膚色:{}".format("宋東儒",gender,race),
                            image=get_file_content("../TempPicture/FaceFeature/Temp.png"))
                    print(add_result)
        else:
            print("請勿超過一人或空白畫面")
    def identify_user(self,image):
        self.__system_time = time.strftime('%Y_%m_%d_%H_%M_%S')
        cv2.imwrite(self.tempIdentifyPath,image)
        identify_detect_result=self.__faceConnect.detect(
            image=get_file_content(self.tempIdentifyPath),options=self.identify_detect_option)
        detect_num=identify_detect_result['result_num']
        print(detect_num)
        for index in range(0,detect_num):
            xloc,yloc=identify_detect_result['result'][index]['location']['left'],identify_detect_result['result'][index]['location']['top']
            width,height=identify_detect_result['result'][index]['location']['width'],identify_detect_result['result'][index]['location']['height']
            # image mark face location
            self.rectangle(image=image,width=width,height=height,xloc=xloc,yloc=yloc,
                           path=self.tempIdentifyDBPath+self.__system_time+".png")
            # image cut face location
            self.resize(image=image,width=width,height=height,xloc=xloc,yloc=yloc,
                        path=self.tempIdentifyFeaturePath+str(detect_num)+".png")
            __identify_result = self.__faceConnect.identifyUser(
                group_id='groupTest',image=get_file_content(self.tempIdentifyPath),options=self.identify_option)
            print(__identify_result)
            try:
                    if __identify_result['result'][0]['scores'][-1] >=70:
                        print("使用者ID:{}\n所屬群組:{}\n描述:{}".format(
                        __identify_result['result'][0]['uid'],
                        __identify_result['result'][0]['group_id'],
                        __identify_result['result'][0]['user_info']))
                    else:
                        print("Faild不通過\n不符合任一用戶")
                        cv2.imshow("Suspect",cv2.imread(self.tempIdentifyDBPath+self.__system_time+".png"))
            except :
                print("不存在資料庫")

    def update_user(self):
        __update_result = self.__faceConnect.updateUser(
            uid='test_001',
            group_id='groupTest', user_info='testPhoto',
            image=get_file_content('../TempTake/jia.jpg')
        )
        print(__update_result)
    def delete_user(self):
        __delete_result = self.__faceConnect.deleteUser(uid='test01')
        print(__delete_result)
    def delete_group_user(self):
        __delete_group_result=self.__faceConnect.deleteGroupUser(uid='test_002',group_id="groupTest")
        print(__delete_group_result)
    def all_user_query(self):
        __all_query_result = self.__faceConnect.getUser('test_001')
        print(__all_query_result)
    def user_query(self):
        query_options={"group_id":'groupTest'}
        __query_result = self.__faceConnect.getUser(uid='test_001'
                        ,options=query_options)
        print(__query_result)

    def version(self):
        ver=self.__faceConnect.getVersion()
        print(ver)
    def get_groupList(self):
        __list=self.__faceConnect.getGroupList()
        print(__list)
    def get_groupUser(self,):
        __group_user=self.__faceConnect.getGroupUsers(group_id='groupTest')
        print(__group_user)
Beispiel #3
0
class Face(object):
    def __init__(self,
                 regs,
                 filename,
                 image_type="BASE64",
                 face_type='LIVE',
                 quality_control='LOW'):
        app_id, api_key, secret_key = regs
        self.filename, self.image_type, self.face_type, self.quality_control = filename, image_type, face_type, quality_control
        if 'BASE64' == image_type:
            self.image = base64img(filename).decode('utf-8')
        elif 'URL' == image_type:
            self.image = filename
        else:
            self.image = None
        self.client = AipFace(app_id, api_key, secret_key)

    def __dict__(self):
        return {
            "image": self.image,
            "image_type": self.image_type,
            "face_type": self.face_type,
            "quality_control": self.quality_control
        }

    '''
    def _compare(self, aface):
        res = -1
        params = json.dumps(
            [
                self.__dict__(),
                aface.__dict__()
            ]
        )
        token = access_token(url='https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + self.api_key + '&client_secret=' + self.secret_key,
            key='access_token')
        url = "https://aip.baidubce.com/rest/2.0/face/v3/match?access_token=" + token
        headers = {'Content-Type': 'application/json'}
        data = json.loads(post_json(url, data=params, headers=headers))
        if data is not None:
            error_code = data.get('error_code')
            error_msg = data.get('error_msg')
            result = data.get('result')
            if (0 == error_code) and ('SUCCESS' == error_msg):
                res = result.get('score')
        return res
    '''

    def detect(self, options=None):
        face_num, faces = None, None
        if options is None:
            options = {}


#            options = {"face_field": "age", "max_face_num": 2, "face_type": "LIVE", "liveness_control": "LOW"}
        r = self.client.detect(self.image, self.image_type, options)
        print(r)
        if r is not None:
            result = r.get('result')
            face_num, faces = result.get('face_num'), result.get('face_list')
        return face_num, faces

    def compare(self, aface):
        r = self.client.match([self.__dict__(), aface.__dict__()])
        if r is not None:
            result = r.get('result')
            if (0 == r.get('error_code')) and ('SUCCESS'
                                               == r.get('error_msg')):
                res = result.get('score')
        return res

    def register(self, group_id, user_id, options=None):
        if options is None:
            #            options = {"user_info": "user's info", "quality_control": "NORMAL", "liveness_control": "LOW", "action_type": "REPLACE"}
            options = {}
        if not (group_id in self.client.getGroupList({
                "start": 0,
                "length": 50
        })):
            self.client.groupAdd(group_id)
        self.client.addUser(self.image, self.imageType, group_id, user_id,
                            options)