Spaces:
Sleeping
Sleeping
| import numpy as np | |
| from numpy.linalg import norm as l2norm | |
| #from easydict import EasyDict | |
| class Face(dict): | |
| def __init__(self, d=None, **kwargs): | |
| if d is None: | |
| d = {} | |
| if kwargs: | |
| d.update(**kwargs) | |
| for k, v in d.items(): | |
| setattr(self, k, v) | |
| # Class attributes | |
| #for k in self.__class__.__dict__.keys(): | |
| # if not (k.startswith('__') and k.endswith('__')) and not k in ('update', 'pop'): | |
| # setattr(self, k, getattr(self, k)) | |
| def __setattr__(self, name, value): | |
| if isinstance(value, (list, tuple)): | |
| value = [self.__class__(x) | |
| if isinstance(x, dict) else x for x in value] | |
| elif isinstance(value, dict) and not isinstance(value, self.__class__): | |
| value = self.__class__(value) | |
| super(Face, self).__setattr__(name, value) | |
| super(Face, self).__setitem__(name, value) | |
| __setitem__ = __setattr__ | |
| def __getattr__(self, name): | |
| return None | |
| def embedding_norm(self): | |
| if self.embedding is None: | |
| return None | |
| return l2norm(self.embedding) | |
| def normed_embedding(self): | |
| if self.embedding is None: | |
| return None | |
| return self.embedding / self.embedding_norm | |
| def sex(self): | |
| if self.gender is None: | |
| return None | |
| return 'M' if self.gender==1 else 'F' | |