Commit 02d67ca5 authored by 赵威's avatar 赵威

update inferface

parent 084fc2fe
......@@ -7,10 +7,24 @@ import dlib
import faiss
import numpy as np
from gm_rpcd.all import bind
from utils.cache import redis_client3
from utils.es import es_query
from utils.images import face_to_vec, url_to_ndarray
from face_similarity.utils.cache import redis_client3
from face_similarity.utils.es import es_query
from face_similarity.utils.images import face_to_vec, url_to_ndarray
base_dir = os.getcwd()
print("base_dir: " + base_dir)
model_dir = os.path.join(base_dir, "_models")
facerec_model_path = os.path.join(model_dir, "dlib_face_recognition_resnet_model_v1.dat")
shape_model_path = os.path.join(model_dir, "shape_predictor_68_face_landmarks.dat")
faiss_index_path = os.path.join(base_dir, "_index", "diary_cover.index")
diary_after_cover_vec_file = "./diary_after_cover_vec.txt"
face_rec = dlib.face_recognition_model_v1(facerec_model_path)
face_detector = dlib.get_frontal_face_detector()
shape_predictor = dlib.shape_predictor(shape_model_path)
FACE_TO_VEC_FUN = lambda img: face_to_vec(img, face_rec, face_detector, shape_predictor)
FAISS_DIARY_INDEX = faiss.read_index(faiss_index_path)
@bind("hello")
......@@ -18,7 +32,7 @@ def hello():
return ["hello", "world"]
def save_diary_image_info(save_file, face_to_vec_f):
def save_diary_image_info(save_file):
q = {
"query": {
"bool": {
......@@ -72,7 +86,7 @@ def save_diary_image_info(save_file, face_to_vec_f):
if img.any():
count += 1
print("count: " + str(count) + " " + str(diary_id))
faces = face_to_vec_f(img)
faces = FACE_TO_VEC_FUN(img)
for face in faces:
line = str(diary_id) + "\t" + face["feature"] + "\n"
# print(line)
......@@ -103,13 +117,13 @@ def save_faiss_index(load_file, save_path):
print("faiss index saved")
def get_similar_diary_ids_by_url(url, index, face_to_vec_f, limit=0.1):
def get_similar_diary_ids_by_url(url, limit=0.1):
img = url_to_ndarray(url)
if img.any():
faces = face_to_vec_f(img)
faces = FACE_TO_VEC_FUN(img)
for face in faces:
face_feature = np.array(json.loads(face["feature"])).astype("float32")
_scores, _ids = index.search(np.array([face_feature]), 10)
_scores, _ids = FAISS_DIARY_INDEX.search(np.array([face_feature]), 10)
ids = _ids.flat
scores = _scores.flat
tmp = list(set(zip(ids, scores)))
......@@ -123,9 +137,9 @@ def get_similar_diary_ids_by_url(url, index, face_to_vec_f, limit=0.1):
return []
def get_similar_diary_ids_by_face_features(feature, index, face_to_vec_f, limit=0.1):
def get_similar_diary_ids_by_face_features(feature, limit=0.1):
feature = np.array(feature).astype("float32")
_sources, _ids = index.search(np.array([feature]), 10)
_sources, _ids = FAISS_DIARY_INDEX.search(np.array([feature]), 10)
ids = _ids.flat
scores = _sources.flat
tmp = list(set(zip(ids, scores)))
......@@ -137,56 +151,40 @@ def get_similar_diary_ids_by_face_features(feature, index, face_to_vec_f, limit=
return res
def save_diary_similarity(load_file, index_path, face_to_vec_f):
res_dict = {}
with open(load_file) as f:
lines = f.readlines()
print("lines: " + str(len(lines)))
count = 0
for line in lines:
count += 1
tmp = line.split("\t")
id = tmp[0]
feature = np.array(json.loads(tmp[1]))
print("{} {}".format(count, id))
tup_res = get_similar_diary_ids_by_face_features(feature, index_path, face_to_vec_f)
if tup_res:
res_dict[id] = json.dumps(tup_res)
# def save_diary_similarity(load_file, index_path):
# res_dict = {}
# with open(load_file) as f:
# lines = f.readlines()
# print("lines: " + str(len(lines)))
# count = 0
# for line in lines:
# count += 1
# tmp = line.split("\t")
# id = tmp[0]
# feature = np.array(json.loads(tmp[1]))
# print("{} {}".format(count, id))
# tup_res = get_similar_diary_ids_by_face_features(feature, index_path, FACE_TO_VEC_FUN)
# if tup_res:
# res_dict[id] = json.dumps(tup_res)
print("done: " + str(len(res_dict)))
key = random.choice(list(res_dict.keys()))
print(key + str(res_dict[key]))
# print("done: " + str(len(res_dict)))
# key = random.choice(list(res_dict.keys()))
# print(key + str(res_dict[key]))
redis_key = "doris:diary:face_similary"
redis_client3.hmset(redis_key, res_dict)
# redis_key = "doris:diary:face_similary"
# redis_client3.hmset(redis_key, res_dict)
def main():
base_dir = os.getcwd()
print("base_dir: " + base_dir)
model_dir = os.path.join(base_dir, "_models")
facerec_model_path = os.path.join(model_dir, "dlib_face_recognition_resnet_model_v1.dat")
shape_model_path = os.path.join(model_dir, "shape_predictor_68_face_landmarks.dat")
faiss_index_path = os.path.join(base_dir, "_index", "current.index")
diary_after_cover_vec_file = "./diary_after_cover_vec.txt"
face_rec = dlib.face_recognition_model_v1(facerec_model_path)
face_detector = dlib.get_frontal_face_detector()
shape_predictor = dlib.shape_predictor(shape_model_path)
face_to_vec_f = lambda img: face_to_vec(img, face_rec, face_detector, shape_predictor)
# save_diary_image_info(diary_after_cover_vec_file, face_to_vec_f)
# save_diary_image_info(diary_after_cover_vec_file)
# save_faiss_index(diary_after_cover_vec_file, faiss_index_path)
faiss_index = faiss.read_index(faiss_index_path)
imgs = [
"https://pic.igengmei.com/2020/07/03/1437/1b9975bb0b81-w", "https://pic.igengmei.com/2020/07/01/1812/ca64827a83da-w",
"https://pic.igengmei.com/2020/07/04/1711/24f4131a9b1e-w", "https://pic.igengmei.com/2020/07/04/1507/e17a995be219-w"
]
for img_url in imgs:
res = get_similar_diary_ids_by_url(img_url, faiss_index, face_to_vec_f, limit=0.18232107)
res = get_similar_diary_ids_by_url(img_url, limit=0.18232107)
print(res)
print("@@@@@@@@")
......@@ -218,11 +216,9 @@ def main():
-0.015351934358477592, -0.04335442930459976, -0.26258283853530884, -0.021509556099772453, 0.12185295671224594,
-0.011788002215325832, 0.01337978895753622, -0.008025042712688446
]
res = get_similar_diary_ids_by_face_features(a, faiss_index, face_to_vec_f)
res = get_similar_diary_ids_by_face_features(a)
print(res)
# # save_diary_similarity(diary_after_cover_vec_file, faiss_index, face_to_vec_f)
if __name__ == "__main__":
begin_time = time.time()
......
from django.contrib import admin
# Register your models here.
from django.apps import AppConfig
class UtilsConfig(AppConfig):
name = 'utils'
from django.db import models
# Create your models here.
from django.test import TestCase
# Create your tests here.
from django.shortcuts import render
# Create your views here.
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment