face_string = face_string + faceList[j]["face_token"] else: face_string = face_string + ',' + faceList[j]['face_token']; e = True; print(face_string) resu = api.faceset.addface(outer_id = 'test2', face_tokens = face_string) print_result('result of addface', resu) if(e): break''' img_set = [face_search_img, face_search_img2] #serach_res = api.search(image_file = File(face_search_img), outer_id = 'test2'); for i in range(2): serach_res = api.search(image_file=File(img_set[i]), outer_id='test2') print_result('serach result', serach_res) face = serach_res['faces'] face_rect = face[0]['face_rectangle'] width = face_rect['width'] left = face_rect['left'] top = face_rect['top'] height = face_rect['height'] start = (left, top) end = (left + width, top + height) color = (255, 255, 255) thick = 2 cv2.rectangle(img, start, end, color, thick) cv2.namedWindow('after') cv2.imshow('after', img) cv2.waitKey(0)
# 3,开始搜索 # 初始化对象,进行api的调用工作 api = API() # 删除无用的人脸库,这里删除了,如果在项目中请注意是否要删除 api.faceset.delete(outer_id='testset', check_empty=0) # 1.创建一个faceSet ret = api.faceset.create(outer_id='testset', display_name='测试用set', tags='useless') # 2.向faceSet中添加人脸信息(face_token) faceResStr = "" res = api.detect(image_file=File(faceSet_img)) faceList = res["faces"] for index in range(len(faceList)): if index == 0: faceResStr = faceResStr + faceList[index]["face_token"] else: faceResStr = faceResStr + "," + faceList[index]["face_token"] api.faceset.addface(outer_id='testset', face_tokens=faceResStr, user_id='bbb') # 3.开始搜索相似脸人脸信息 search_result = api.search(image_file=File(face_search_img), outer_id='testset') print_result('search', search_result)
class FaceDetection: def __init__(self, faceset, img_file, main_window, speaker, arduino): # 初始化对象,进行api的调用工作 self.api = API() self.faceset = faceset self.img_file = img_file self.main = main_window self.speaker = speaker self.arduino = arduino self.face_ids = [] self.face_tokens = [] self.popupMsg = PopupMsg() try: facetokens = self.api.faceset.getdetail(outer_id=faceset) for facetoken in facetokens.face_tokens: try: res = self.api.face.getdetail(face_token=facetoken) self.face_ids.append(res.user_id) self.face_tokens.append(facetoken) print('faces: ', res) except: self.popupMsg.popupmsg('API error', 'face.getdetail') except: try: ret = self.api.faceset.create(outer_id=faceset) except: self.popupMsg.popupmsg('API error', 'faceset.create') def identify(self): try: search_result = self.api.search(image_file=File(self.img_file), outer_id=self.faceset) face_confidence = search_result.results[0].confidence user_name = search_result.results[0].user_id if face_confidence > 50: self.main.name.setPlainText(user_name) self.speaker.speakMsg(user_name + ',你好,欢迎回来') self.arduino.open_door() else: self.speaker.speakMsg("对不起,没有你的记录") except: self.popupMsg.popupmsg('人脸检测API调用失败', '人脸检测') def addFace(self): user_name = self.main.name.toPlainText() print(user_name) if user_name: try: res = self.api.detect(image_file=File(self.img_file)) faceList = res.faces if len(faceList) > 0: try: self.api.faceset.addface( outer_id=self.faceset, face_tokens=faceList[0].face_token) try: self.api.face.setuserid( face_token=faceList[0].face_token, user_id=user_name) self.face_ids.append(user_name) self.face_tokens.append(faceList[0].face_token) self.popupMsg.popupmsg('加了: ' + user_name, '增加人脸') except: self.popupMsg.popupmsg('设置人脸名字失败', '增加人脸') except: self.popupMsg.popupmsg('增加人脸失败', '增加人脸') else: self.popupMsg.popupmsg('检测不到人脸', '增加人脸') except: self.popupMsg.popupmsg('检测人脸失败', '增加人脸') else: self.popupMsg.popupmsg('请输入名字', '增加人脸') self.main.name.setPlainText("") def deleteFace(self): user_name = self.main.name.toPlainText() name_deleted = False if user_name: i = 0 for user_id in self.face_ids: if user_name == user_id: try: res = self.api.faceset.removeface( outer_id=self.faceset, face_tokens=self.face_token[i]) if res.face_removed > 0: self.face_ids.remove(user_name) self.face_tokens.remove(self.face_token[i]) self.popupMsg.popupmsg('删除了: ' + user_name, '删除人脸') name_deleted = True break else: self.popupMsg.popupmsg('删除人脸失败: ' + user_name, '删除人脸') except: self.popupMsg.popupmsg('删除人脸失败: ' + user_name, '删除人脸') i += 1 if not name_deleted: self.popupMsg.popupmsg('找不到: ' + user_name, '删除人脸') self.main.name.setPlainText("") else: self.popupMsg.popupmsg('请输入名字', '删除人脸')