Exemplo n.º 1
0
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()
Exemplo n.º 2
0
    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
Exemplo n.º 3
0
    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
Exemplo n.º 4
0
    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
Exemplo n.º 5
0
    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