Skip to content

Commit fe57605

Browse files
committed
Extract_v2 and classify new methods.
Extract_v2 can run on different machine since it pass image through base64 image.
1 parent 82f1aa5 commit fe57605

3 files changed

Lines changed: 39 additions & 15 deletions

File tree

src/embedding/FaceProcessing.py

Lines changed: 18 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@
22
from __future__ import division
33
from __future__ import print_function
44

5+
import base64
6+
from StringIO import StringIO
7+
from PIL import Image
58
import numpy as np
69
import argparse
710
import facenet
811
import align.detect_face
912
import cv2
10-
1113
import os
1214
import sys
1315
import time
@@ -173,12 +175,23 @@ def FaceProcessingImageData(imgData,sess,graph):
173175
return features
174176

175177
def FaceProcessingImageData2(img_path):
178+
img_data = misc.imread(img_path)
179+
img = cv2.cvtColor(img_data, cv2.COLOR_BGR2RGB)
180+
return _FaceProcessingImageData2(img)
181+
182+
def FaceProcessingBase64ImageData2(base64_string):
183+
sbuf = StringIO()
184+
sbuf.write(base64.b64decode(base64_string))
185+
pimg = Image.open(sbuf)
186+
img = np.array(pimg)
187+
#img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
188+
return _FaceProcessingImageData2(img)
189+
190+
def _FaceProcessingImageData2(img):
176191
global mod2
177192
global mod3
178-
img = misc.imread(img_path)
179-
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
180-
nimg = np.transpose(img, (2,0,1))
181193

194+
nimg = np.transpose(img, (2,0,1))
182195
resize_img = misc.imresize(nimg, [112, 112], interp='bilinear')
183196
if mod2 is not None:
184197
a = transform_image(resize_img).astype('float32')
@@ -197,6 +210,7 @@ def FaceProcessingImageData2(img_path):
197210
embedding = mod3.get_outputs()[0].asnumpy()
198211
embedding = sklearn.preprocessing.normalize(embedding).flatten()
199212
return embedding
213+
200214
def transform_image(image):
201215
#image = np.array(image) - np.array([123., 117., 104.])
202216
#image /= np.array([58.395, 57.12, 57.375])

src/embedding/faces/save_embedding.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -213,7 +213,14 @@ def read_embedding_string(embedding_path):
213213
embedding_array = [ float(s) for s in embedding_string_array ]
214214
#print("embedding_array={}".format(embedding_array))
215215
return embedding_array
216+
def convert_embedding_to_string(embedding):
217+
embedding_string = ','.join(str(x) for x in embedding)
218+
return embedding_string
216219

220+
def convert_string_to_embedding(embedding_string):
221+
embedding_string_array = embedding_string.split(",")
222+
embedding_array = [ float(s) for s in embedding_string_array ]
223+
return embedding_array
217224

218225
def down_embedding(embedding_url, embedding_path):
219226
try:

src/embedding/upload_api-v2.py

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2741,10 +2741,11 @@ def extract(image):
27412741
return json.dumps({'result': result})
27422742

27432743
@deepeye.task
2744-
def extract_image_feature_only(image):
2744+
def extract_v2(image):
27452745
global e_sess
27462746
global e_graph
2747-
print(">>> extract() {} ".format(image))
2747+
# print(">>> extract() {} ".format(image))
2748+
imgstring=image["base64data"]
27482749
imgpath=image["path"]
27492750
style=image["style"]
27502751
blury=image["blury"]
@@ -2756,22 +2757,23 @@ def extract_image_feature_only(image):
27562757

27572758
if current_groupid is None:
27582759
return json.dumps({"embedding_path":""})
2759-
embedding = featureCalculation2(imgpath)
2760+
embedding = FaceProcessing.FaceProcessingBase64ImageData2(imgstring)
27602761
if embedding is not None:
27612762
if type(trackerid) is not str:
27622763
trackerid = str(trackerid)
27632764

27642765
embedding_path = save_embedding.get_embedding_path(imgpath)
2765-
save_embedding.create_embedding_string(embedding, embedding_path)
2766+
embedding_str = save_embedding.convert_embedding_to_string(embedding)
27662767

2767-
return json.dumps({'embedding_path': embedding_path})
2768+
return json.dumps({'embedding_path': embedding_path,'embedding_str':embedding_str})
27682769

27692770
@deepeye.task
2770-
def classify_on_embedding_file(image):
2771+
def classify(image):
27712772
global e_sess
27722773
global e_graph
27732774
print(">>> extract() {} ".format(image))
2774-
embedding_path=image["path"]
2775+
embedding_path=image["embedding_path"]
2776+
imgpath=image["path"]
27752777
style=image["style"]
27762778
blury=image["blury"]
27772779
ts=image["ts"]
@@ -2790,15 +2792,16 @@ def classify_on_embedding_file(image):
27902792
if embedding_path is not None:
27912793
if type(trackerid) is not str:
27922794
trackerid = str(trackerid)
2793-
2794-
result = face_recognition_on_embedding(None, None, totalPeople, blury, uuid, current_groupid, style, trackerid, timestamp1, ts, embedding_path)
2795+
embedding = save_embedding.read_embedding_string(embedding_path)
2796+
embedding = np.asarray(embedding)
2797+
result = face_recognition_on_embedding(imgpath, embedding, totalPeople, blury, uuid, current_groupid, style, trackerid, timestamp1, ts, embedding_path)
27952798

27962799
return json.dumps({'result': result})
27972800

27982801
deepeye.conf.task_routes = {
27992802
'upload_api-v2.extract': {'queue': 'embedding'},
2800-
'upload_api-v2.extract_image_feature_only': {'queue': 'embedding'},
2801-
'upload_api-v2.classify_on_embedding_file': {'queue': 'classify'}
2803+
'upload_api-v2.extract_v2': {'queue': 'embedding'},
2804+
'upload_api-v2.classify': {'queue': 'embedding'}
28022805
}
28032806

28042807

0 commit comments

Comments
 (0)