Пример #1
0
def do_search(table_name, molecular_name, metric, top_k):
    try:
        feats = []
        index_client = milvus_client()
        feat = smiles_to_vec(molecular_name)
        feats.append(feat)
        # print(feats)
        time1 = time.time()
        vectors = search_vectors(index_client, table_name, feats, metric,
                                 top_k)
        time2 = time.time()
        print("milvus search:", time2 - time1)
        vids = [x.id for x in vectors[0]]
        # print("-----------------", vids)

        conn = connect_postgres_server()
        cur = conn.cursor()
        res_smi = []
        for i in vids:
            # index = search_loc_in_pg(cur, i, table_name)
            if i < 0:
                break
            index = search_loc_in_pg(cur, i)
            res_smi.append(index)
        # print(res_smi)

        return res_smi

    except Exception as e:
        logging.error(e)
        return "Fail with error {}".format(e)
    finally:
        if conn:
            cur.close()
            conn.close()
Пример #2
0
def op_search(table_name,
              img_path,
              top_k,
              model,
              graph,
              sess,
              mycol,
              partition=None):
    try:
        feats = []
        client = milvus_client()
        if partition:
            status, ok = has_partition(client, table_name, partition)
            if not ok:
                return False, ''
        feat = vgg_extract_feat(img_path, model, graph, sess)
        feats.append(feat)
        _, vectors = search_vectors(client, table_name, feats, top_k,
                                    partition)
        if len(vectors) > 0:
            vids = [x.id for x in vectors[0]]
            res = filter_data(vids, mycol, vectors[0])
            return True, res
        else:
            return True, vectors
    except Exception as e:
        logging.error(e)
        return '发生错误'.format(e)
Пример #3
0
def do_search(image_encoder, table_name, img_path, top_k):
    try:
        #print(top_k)
        detector = Detector()
        run(detector, img_path)
        vect, obj_images = get_object_vector(image_encoder,
                                             img_path + '/object')
        #print("search...after detect:", len(vect), obj_images)
        index_client = milvus_client()
        #vect = normaliz_vec(vect)
        status, results = search_vectors(index_client, table_name, vect, top_k)
        # print(status, results)
        vids = []
        dis = []
        for result in results:
            for j in result:
                vids.append(j.id)
                dis.append(j.distance)
        res_id = [x for x in query_name_from_ids(vids)]
        #print("------------------res", vids, dis, res_id)
        shutil.rmtree(img_path + '/object')
        return res_id, dis
    except Exception as e:
        logging.error(e)
        return "Fail with error {}".format(e)
Пример #4
0
def do_search(table_name, molecular_name, top_k):
    try:
        feats = []
        index_client = milvus_client()
        feat = smiles_to_vec(molecular_name)
        feats.append(feat)
        status, vectors = search_vectors(index_client, table_name, feats,
                                         top_k)
        print(status)
        vids = [x.id for x in vectors[0]]

        conn = connect_postgres_server()
        cur = conn.cursor()
        res_smi = []
        for i in vids:
            # index = search_loc_in_pg(cur, i, table_name)
            if i < 0:
                break
            index = search_loc_in_pg(cur, i)
            res_smi.append(index)

        return res_smi

    except Exception as e:
        logging.error(e)
        return "Fail with error {}".format(e)
    finally:
        if index_client:
            index_client.disconnect()
        if conn:
            cur.close()
            conn.close()
Пример #5
0
def do_search_face(face_encoder, index_client, conn, cursor, table_name, filename):
    if not table_name:
        table_name = FACE_TABLE
    faces = face_encoder.execute(filename)
    results = search_vectors(index_client, table_name, faces, "L2")
    info = get_face_info(conn, cursor, table_name, results)
    return info
Пример #6
0
def do_only_her(face_encoder, index_client, conn, cursor, table_name, filename):
    if not table_name:
        table_name = FACE_TABLE

    prefix = filename.split("/")[2].split(".")[0] + "-" + uuid.uuid4().hex
    images = extract_frame(filename, 1, prefix)
    vectors, face_images = get_face_vector(face_encoder, DATA_PATH + '/' + prefix)
    global_info = []
    for faces in vectors:
        results = search_vectors(index_client, table_name, faces, "L2")
        info = get_face_info(conn, cursor, table_name, results)
        global_info.append(info)
    return global_info
Пример #7
0
def do_search_logo(image_encoder, index_client, conn, cursor, table_name, filename):
    detector = Detector()
    if not table_name:
        table_name = LOGO_TABLE

    prefix = filename.split("/")[2].split(".")[0] + "-" + uuid.uuid4().hex
    images = extract_frame(filename, 1, prefix)
    run(detector, DATA_PATH + '/' + prefix)

    vectors, obj_images = get_object_vector(image_encoder, DATA_PATH + '/' + prefix + '/object')
    results = search_vectors(index_client, table_name, vectors, "L2")

    info, times = get_object_info(conn, cursor, table_name, results, obj_images)
    return info, times
Пример #8
0
def do_search(img, voice):
    try:
        conn = None
        feats_img = img_to_vec(img)
        feats_voc = voc_to_vec(voice)
        # print(feats_voc,feats_img)

        res = ['false', -1, '-1']
        index_client = milvus_client()
        _, re_img = search_vectors(index_client, IMG_TABLE, [feats_img], 1)
        _, re_voc = search_vectors(index_client, VOC_TABLE, [feats_voc], 1)

        ids_img = re_img[0][0].id
        ids_voc = re_voc[0][0].id
        dis_img = float(re_img[0][0].distance)
        dis_voc = float(re_voc[0][0].distance)
        print(ids_img, ids_voc, dis_img)

        if dis_img > 0.75 and dis_voc > 0.65 and ids_img == ids_voc:
            conn = connect_postgres_server()
            cur = conn.cursor()
            print(ids_voc)
            index = search_loc_in_pg(cur, ids_voc)
            res = ['true', ids_img, index]
        print("-----search:", res)
        return res

    except Exception as e:
        logging.error(e)
        print("Fail with error {}".format(e))
        return "Fail with error {}".format(
            "please confirm only one face in camera")
    finally:
        if conn:
            cur.close()
            conn.close()
Пример #9
0
def do_search(index_client, conn, cursor, img_to_vec, img_list, table_name):
    if not table_name:
        table_name = DEFAULT_TABLE
    vectors_img = img_to_vec(img_list)
    print("the num of search images:", len(vectors_img))
    print("doing search, table_name:", table_name)
    status, ids_milvus = search_vectors(index_client, table_name, vectors_img)

    # print("distance_array:", ids_milvus.distance_array)
    re_ids_img = []
    for ids in ids_milvus:
        vids = [x.id for x in ids]

        re_ids = search_by_milvus_ids(conn, cursor, vids, table_name)
        re_ids_img.append(re_ids)

    return re_ids_img, ids_milvus.distance_array
Пример #10
0
def do_search(index_client, conn, cursor, Text, Image):

    #_, vector_item = get_vector_by_ids(index_client, Text, Image)

    status, results = search_vectors(index_client, Text, vector_item)
    print("-----milvus search status------", status)

    results_ids = []
    for results_id in results.id_array:
        for i in results_id:
            img = str(i) + '.jpg'
            if img in img_list and i not in search_id:
                results_ids.append(img)
    # print(results_ids)
    try:
        list_ids = random.sample(results_ids, 10)
    except:
        list_ids = results_ids
    return list_ids
Пример #11
0
def do_search(index_client, conn, cursor, img_list, search_id, table_name):
    if not table_name:
        table_name = MILVUS_TABLE

    _, vector_item = get_vector_by_ids(index_client, table_name, search_id)
    status, results = search_vectors(index_client, table_name, vector_item)
    print("-----milvus search status------", status)

    results_ids = []
    for results_id in results.id_array:
        for i in results_id:
            img = str(i) + '.jpg'
            if img in img_list and i not in search_id:
                results_ids.append(img)
    # print(results_ids)
    try:
        list_ids = random.sample(results_ids, 100)
    except:
        list_ids = results_ids
    return list_ids
def do_search(table_name, molecular_name, top_k):
    try:
        feats = []
        index_client = milvus_client()
        feat = smiles_to_vec(molecular_name)
        feats.append(feat)
        _, vectors = search_vectors(index_client, table_name, feats, top_k)
        vids = [x.id for x in vectors[0]]
        # print(vids)

        res_smi = [x.decode('utf-8') for x in query_smi_from_ids(vids)]
        # print("vids:",vids)
        res_distance = [x.distance for x in vectors[0]]
        res_ids = [x.id for x in vectors[0]]
        # print(res_distance,res_smi)

        return res_smi, res_distance, res_ids
    except Exception as e:
        logging.error(e)
        return "Fail with error {}".format(e)
Пример #13
0
def do_search(table_name, caption, topk, model, args):
    try:
        index_client = milvus_client()
        feat = extract_caption_feat(caption, model, args)
        feat = (feat / feat.norm()).tolist()
        _, vectors = search_vectors(index_client, table_name, [feat], 2 * topk)
        print('cap_vec:', vectors)
        vids = [x.id for x in vectors[0]]
        # print(vids)
        # res = [x.decode('utf-8') for x in query_name_from_ids(vids)]

        res_id = [x.decode('utf-8') for x in query_name_from_ids(vids)]
        print(res_id)
        res_distance = [x.distance for x in vectors[0]]
        # print(res_distance)
        # res = dict(zip(res_id,distance))

        return res_id, res_distance
    except Exception as e:
        logging.error(e)
        return "Fail with error {}".format(e)
Пример #14
0
def do_search(table_name, img_path, top_k, model, graph, sess):
    try:
        feats = []
        index_client = milvus_client()
        feat = extract_feat(img_path, model, graph, sess)
        feats.append(feat)
        _, vectors = search_vectors(index_client, table_name, feats, top_k)
        vids = [x.id for x in vectors[0]]
        # print(vids)
        # res = [x.decode('utf-8') for x in query_name_from_ids(vids)]

        res_id = [x.decode('utf-8') for x in query_name_from_ids(vids)]
        # print(res_id)
        res_distance = [x.distance for x in vectors[0]]
        # print(res_distance)
        # res = dict(zip(res_id,distance))

        return res_id, res_distance
    except Exception as e:
        logging.error(e)
        return "Fail with error {}".format(e)
Пример #15
0
def do_search(index_client, conn, cursor, img_list, search_id, table_name):
    if not table_name:
        table_name = MILVUS_TABLE

    _, vector_item = get_vector_by_ids(index_client, table_name, search_id)
    status, results = search_vectors(index_client, table_name, vector_item)
    print("-----milvus search status------", status)

    results_ids = []
    search_num = len(search_id)
    num = 100 / search_num
    print("-----num:", num)
    for results_id in results.id_array:
        k = 0
        for i in results_id:
            if k >= num:
                break
            img = str(i) + '.jpg'
            if img in img_list and i not in search_id:
                results_ids.append(img)
                k += 1
    # print(results_ids)

    return results_ids
Пример #16
0
def do_search(index_client, conn, cursor, Text, Image, table_name, img_list,
              host):
    if not table_name:
        table_name = MILVUS_TABLE

    def parse_opt():
        """Parses the input arguments."""
        parser = argparse.ArgumentParser()
        parser.add_argument('-f', type=str, default='')
        parser.add_argument('--comment', type=str, default='test_notebook')
        parser.add_argument('--dataset', type=str, default='css3d')
        parser.add_argument('--dataset_path', type=str, default='./css')
        parser.add_argument('--model', type=str, default='tirg')
        parser.add_argument('--embed_dim', type=int, default=512)
        parser.add_argument('--learning_rate', type=float, default=1e-2)
        parser.add_argument('--learning_rate_decay_frequency',
                            type=int,
                            default=9999999)
        parser.add_argument('--batch_size', type=int, default=32)
        parser.add_argument('--weight_decay', type=float, default=1e-6)
        parser.add_argument('--num_iters', type=int, default=10000)
        parser.add_argument('--loss', type=str, default='soft_triplet')
        parser.add_argument('--loader_num_workers', type=int, default=4)
        args = parser.parse_args()
        return args

    one_queries = []

    opt = parse_opt()

    opt.model == 'tirg'

    opt = parse_opt()
    transform = torchvision.transforms.Compose([
        torchvision.transforms.ToTensor(),
        torchvision.transforms.Normalize([0.485, 0.456, 0.406],
                                         [0.229, 0.224, 0.225])
    ])

    def normaliz_vec(vec_list):
        for i in range(len(vec_list)):
            vec = vec_list[i]
            square_sum = reduce(lambda x, y: x + y, map(lambda x: x * x, vec))
            sqrt_square_sum = np.sqrt(square_sum)
            coef = 1 / sqrt_square_sum
            vec = list(map(lambda x: x * coef, vec))
            vec_list[i] = vec
        return vec_list

    texts = [Text]
    img_path = Image
    img = PIL.Image.open(img_path)
    img = img.convert('RGB')
    imgs = transform(img)
    imgs = Variable(torch.unsqueeze(imgs, dim=0).float(), requires_grad=False)
    model = img_text_composition_models.TIRG(texts, embed_dim=opt.embed_dim)
    pthfile = '/data1/workspace/jingjing/ctirg/tirg/webserver/src/tirg/runs/Aug/latest_checkpoint.pth'
    model.load_state_dict(torch.load(pthfile), strict=False)
    model.eval()
    model.cuda()
    f = model.compose_img_text(imgs.cuda(), texts).data.cpu().numpy()
    one_queries += [f]
    one_queries = np.concatenate(one_queries)
    # for i in range(one_queries.shape[0]):
    # one_queries[i, :] /= np.linalg.norm(one_queries[i, :])
    one_queries = normaliz_vec(one_queries.tolist())
    status, results = search_vectors(index_client, table_name, one_queries)
    print("-----milvus search status------", status, results)

    results_ids = []
    for results_id in results.id_array:
        for i in results_id:
            img = 'css_test_' + str(i).rjust(6, '0') + '.png'
            if img in img_list:
                res = "http://" + str(host) + "/getImage?img="
                results_ids.append(res + img)

        list_ids = results_ids
    return list_ids