Same code was runed on PC(Ubuntu 16.04), Xavier(Jetpack 4.2.1) and Nano(Jetpack 4.2.1) seperately.
Same normal result was obtained on PC and Xavier, abnormal result was obtained on Nano.
It is a simple code using dlib to realize face recognition. It feels like numpy.linalg.norm(), a function to calculate norm, has a bug on Nano.
The code and two kind of results are shown below. What causes this problem and how to solve it? Humbly request your advice.
Code:
#-*- coding:utf-8 -*-
import dlib
import os
import numpy
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')
facerec = dlib.face_recognition_model_v1('dlib_face_recognition_resnet_model_v1.dat')
win = dlib.image_window()
def create_known(known_path):
person_names = []
face_features = []
print("Creating Known Face Library...")
for file_name in os.listdir(known_path):
if (file_name.find('png')<0) and (file_name.find('jpg')<0):
continue
img = dlib.load_rgb_image(os.path.join(known_path,file_name))
dets = detector(img)
if (len(dets) == 0):
continue
det = dets[0]
shape = predictor(img, det)
descriptor = facerec.compute_face_descriptor(img, shape)
person_name = file_name[:file_name.rfind('.')]
person_names.append(person_name)
face_features.append(descriptor)
print('Appending [' + person_name + '] ...')
dlib.hit_enter_to_continue()
return person_names, face_features
if __name__ == "__main__":
person_names, face_features = create_known('known')
img = dlib.load_rgb_image('nina_victory.jpg')
dets = detector(img)
for det in dets:
shape = predictor(img, det)
descriptor = facerec.compute_face_descriptor(img, shape)
min_dist = 1.0
person_name = 'unknown'
for i in range(len(face_features)):
dist = numpy.linalg.norm(numpy.array(descriptor)-numpy.array(face_features[i]))
print(person_names[i], dist)
if dist < min_dist:
min_dist = dist
person_name = person_names[i]
print('Found [' + person_name + '] !')
dlib.hit_enter_to_continue()
Normal Result on PC and Xavier:
nvidia@nvidia:~/workspace/facereg$ python test_facereg.py
Creating Known Face Library...
Appending [vitory] ...
Hit enter to continue
Appending [nina] ...
Hit enter to continue
Appending [lidandan] ...
Hit enter to continue
('vitory', 0.6371401155718989)
('nina', 0.4089912978192962)
('lidandan', 0.9013869084740994)
Found [nina] !
Hit enter to continue
('vitory', 0.3036043206987178)
('nina', 0.6542178530243183)
('lidandan', 0.8145808738380327)
Found [vitory] !
Hit enter to continue
nvidia@nvidia:~/workspace/facereg$ python
Python 2.7.15+ (default, Nov 27 2018, 23:36:35)
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>> numpy.__version__
'1.14.0'
>>> import dlib
>>> dlib.__version__
u'19.17.0'
>>>
Abnormal Result on Nano:
nvidia@nvidia:~/workspace/facereg$ python test_facereg.py
Creating Known Face Library...
Appending [nina] ...
Hit enter to continue
Appending [lidandan] ...
Hit enter to continue
Appending [vitory] ...
Hit enter to continue
('nina', 2.7818110035028154e+24)
('lidandan', 2.781277577877308e+24)
('vitory', 1.1984561081838429e+25)
Found [unknown] !
Hit enter to continue
('nina', nan)
('lidandan', nan)
('vitory', nan)
Found [unknown] !
Hit enter to continue
nvidia@nvidia:~/workspace/facereg$ python
Python 2.7.15+ (default, Nov 27 2018, 23:36:35)
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>> numpy.__version__
'1.14.0'
>>> import dlib
>>> dlib.__version__
u'19.17.0'
>>>