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
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)
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)