def showResults(threshold, key, tasking, people): found = list() uniq = set() #for enc in encodings: #print(type(all_enc),type(sensativity)) for enc in tasking[key]['face_vec']: for candidate in people: c_enc = people[candidate]['face_vec'] c_pic = people[candidate]['pic'] c_tim = people[candidate]['times'] dist = face.face_distance([enc], c_enc) if dist < threshold: #print ('candidate:{0} detections:{1} dist:{2:0.3}'.format(candidate,len(c_tim),dist[0])) RGB_img = cv2.cvtColor(c_pic, cv2.COLOR_BGR2RGB) if candidate not in uniq: uniq.add(candidate) found.append((candidate, len(c_tim), dist[0], RGB_img)) side = math.ceil(math.sqrt(len(found))) plt.figure(figsize=(20, 20)) sorted_by_distance = sorted(found, key=lambda tup: tup[2]) stats = makestats(sorted_by_distance) for idx, f in enumerate(sorted_by_distance): plt.subplot(side, side, idx + 1) plt.title("label:{0} dist:{1:02.3} det:{2:03}".format( f[0], f[2], f[1])) plt.axis('off') plt.imshow(PIL.Image.fromarray(f[3])) print(stats) plt.show()
def post(self): ret_val = {} additional_vectors = None loc_enc_h = handle_post_file(additional_vectors) if len(loc_enc_h) != 2: abort(404, message='expected exactly 2 faces, found {0}'.format( len(loc_enc_h))) ret_val['meta'] = {} ret_val['meta']['vector_set'] = {} ret_val['meta']['vector_set']['count'] = len(loc_enc_h) ret_val['meta']['vector_set']['vectors'] = [] for loc, enc, h in loc_enc_h: d = {} d['hash'] = h d['face_pic_hash'] = h d['face_coordinates'] = list(loc) d['vector'] = list(enc) ret_val['meta']['vector_set']['vectors'].append(d) left = np.array(loc_enc_h[0][1]) right = np.array(loc_enc_h[1][1]) ret_val['results'] = {} ret_val['results']['distance'] = face.face_distance([left], right)[0] return ret_val
def make_result_array(cls, meta): distance = meta['query']['threshold'] #print('meta.keys:', meta.keys()) # sys.stdout.flush() vectors = meta['vector_set']['vectors'] video_array = [] for entity in vectors: query_src_hash = entity['hash'] query_src_enc = np.array(entity['vector']) for key in face_pickle: s_entity = face_pickle[key] s_vec = np.array(s_entity['face_vec']) #s_pic = s_entity['face_pic'] s_videos = s_entity['videos'] left = query_src_enc right = s_vec vector_distance = face.face_distance([left], right)[0] if vector_distance < distance: entry = {} entry['distance'] = vector_distance entry['src'] = query_src_hash entry['uri'] = write_file(s_entity) entry['hash'] = entry['uri'].split('/')[-1].split('.')[0] entry['videos'] = cls.proc_videos(s_videos) video_array.append(entry) video_array.sort(key=lambda temp_d: temp_d['distance']) # print('videoArray*********************************') # print(video_array) # print('videoArray*********************************') return video_array
def post(self): ret_val = {} dist_name = 'threshold' if dist_name not in request.form: abort(404, message='threshold not specified') distance = float(request.form[dist_name]) if distance > 1.0 or distance < 0: abort( 404, message='threshold {0} must be between [0,1]'.format(distance)) if 'vector' not in request.form: abort(404, message='vector not specified') if 'video' not in request.form: abort(404, message='video not specified') search_vector = request.form['vector'] search_vector = json.loads(search_vector) video = request.form['video'] ret_val['meta'] = {} ret_val['meta']['vector_set'] = {} ret_val['meta']['vector_set']['count'] = 1 ret_val['meta']['distance'] = distance ret_val['meta']['video'] = video ret_val['meta']['vector_set']['vectors'] = [] d = {} d['hash'] = None d['face_pic_hash'] = None d['face_coordinates'] = None d['vector'] = search_vector ret_val['meta']['vector_set']['vectors'].append(d) ret_val['results'] = {} video_hits = {} for key in face_pickle: s_entity = face_pickle[key] s_pic = s_entity['face_pic'] s_vec = np.array(s_entity['face_vec']) s_videos = s_entity['videos'] left = search_vector right = s_vec vector_distance = face.face_distance([left], right)[0] if vector_distance < distance: if video in s_videos: d = {} d['face_pic'] = 'comming soon' d['frames'] = [] for frame in s_videos[video]: d['frames'].append(frame) video_hits[key] = d ret_val['results'] = video_hits ret_val['meta']['num_results'] = len(video_hits.keys()) return ret_val
def post(self): ret_val = {} additional_vectors = None dist_name = 'threshold' if dist_name not in request.form: abort(404, message='threshold not specified') distance = float(request.form[dist_name]) if distance > 1.0 or distance < 0: abort( 404, message='threshold {0} must be between [0,1]'.format(distance)) sys.stdout.flush() loc_enc_h = handle_post_file(additional_vectors) if len(loc_enc_h) != 1: abort(404, message='expected exactly 1 faces, found {0}'.format( len(loc_enc_h))) video_hits = defaultdict(int) query_src_loc, query_src_enc, query_src_h = loc_enc_h[0] for key in face_pickle: s_entity = face_pickle[key] s_vec = np.array(s_entity['face_vec']) s_videos = s_entity['videos'] left = query_src_enc right = s_vec vector_distance = face.face_distance([left], right)[0] if vector_distance < distance: for vid_key in s_videos: video_hits[vid_key] += len(s_videos[vid_key]) ret_val['meta'] = {} ret_val['meta']['distance'] = distance ret_val['meta']['vector_set'] = {} ret_val['meta']['vector_set']['count'] = len(loc_enc_h) ret_val['meta']['vector_set']['vectors'] = [] for loc, enc, h in loc_enc_h: d = {} d['hash'] = h d['face_pic_hash'] = h d['face_coordinates'] = list(loc) d['vector'] = list(enc) ret_val['meta']['vector_set']['vectors'].append(d) ret_val['results'] = [] for vh in video_hits: d = {} d['video'] = vh d['count'] = video_hits[vh] ret_val['results'].append(d) return ret_val