face_verification.recognition package¶
Submodules¶
face_verification.recognition.recognition module¶
Contains the code related for face recognition/verification.
-
class
face_verification.recognition.recognition.DefaultMTCNN[source]¶ Bases:
facenet_pytorch.models.mtcnn.MTCNNDefault MTCNN with predefined parameters, not meant to be called directly.
-
face_verification.recognition.recognition.display_image(img: Union[PIL.Image.Image, numpy.ndarray], ax: Optional = None) → None[source]¶ Displays PIL image, optionally can be used to stack images together
- Parameters
img (PIL Image) – Image to be displayed.
ax ([Axes], optional) – Axes from the previous plt call to stack together. Defaults to None.
-
face_verification.recognition.recognition.extract_face(img: Union[numpy.ndarray, PIL.Image.Image], mtcnn=DefaultMTCNN( (pnet): PNet( (conv1): Conv2d(3, 10, kernel_size=(3, 3), stride=(1, 1)) (prelu1): PReLU(num_parameters=10) (pool1): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=True) (conv2): Conv2d(10, 16, kernel_size=(3, 3), stride=(1, 1)) (prelu2): PReLU(num_parameters=16) (conv3): Conv2d(16, 32, kernel_size=(3, 3), stride=(1, 1)) (prelu3): PReLU(num_parameters=32) (conv4_1): Conv2d(32, 2, kernel_size=(1, 1), stride=(1, 1)) (softmax4_1): Softmax(dim=1) (conv4_2): Conv2d(32, 4, kernel_size=(1, 1), stride=(1, 1)) ) (rnet): RNet( (conv1): Conv2d(3, 28, kernel_size=(3, 3), stride=(1, 1)) (prelu1): PReLU(num_parameters=28) (pool1): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=True) (conv2): Conv2d(28, 48, kernel_size=(3, 3), stride=(1, 1)) (prelu2): PReLU(num_parameters=48) (pool2): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=True) (conv3): Conv2d(48, 64, kernel_size=(2, 2), stride=(1, 1)) (prelu3): PReLU(num_parameters=64) (dense4): Linear(in_features=576, out_features=128, bias=True) (prelu4): PReLU(num_parameters=128) (dense5_1): Linear(in_features=128, out_features=2, bias=True) (softmax5_1): Softmax(dim=1) (dense5_2): Linear(in_features=128, out_features=4, bias=True) ) (onet): ONet( (conv1): Conv2d(3, 32, kernel_size=(3, 3), stride=(1, 1)) (prelu1): PReLU(num_parameters=32) (pool1): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=True) (conv2): Conv2d(32, 64, kernel_size=(3, 3), stride=(1, 1)) (prelu2): PReLU(num_parameters=64) (pool2): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=True) (conv3): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1)) (prelu3): PReLU(num_parameters=64) (pool3): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=True) (conv4): Conv2d(64, 128, kernel_size=(2, 2), stride=(1, 1)) (prelu4): PReLU(num_parameters=128) (dense5): Linear(in_features=1152, out_features=256, bias=True) (prelu5): PReLU(num_parameters=256) (dense6_1): Linear(in_features=256, out_features=2, bias=True) (softmax6_1): Softmax(dim=1) (dense6_2): Linear(in_features=256, out_features=4, bias=True) (dense6_3): Linear(in_features=256, out_features=10, bias=True) ) )) → PIL.Image.Image[source]¶ Extracts the bounding box containing only the first face and return a crop of only that face.
- Returns
shape 160,160,3
- Return type
PIL Image
-
face_verification.recognition.recognition.get_embedding(image: Union[numpy.ndarray, PIL.Image.Image], model, mtcnn=DefaultMTCNN( (pnet): PNet( (conv1): Conv2d(3, 10, kernel_size=(3, 3), stride=(1, 1)) (prelu1): PReLU(num_parameters=10) (pool1): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=True) (conv2): Conv2d(10, 16, kernel_size=(3, 3), stride=(1, 1)) (prelu2): PReLU(num_parameters=16) (conv3): Conv2d(16, 32, kernel_size=(3, 3), stride=(1, 1)) (prelu3): PReLU(num_parameters=32) (conv4_1): Conv2d(32, 2, kernel_size=(1, 1), stride=(1, 1)) (softmax4_1): Softmax(dim=1) (conv4_2): Conv2d(32, 4, kernel_size=(1, 1), stride=(1, 1)) ) (rnet): RNet( (conv1): Conv2d(3, 28, kernel_size=(3, 3), stride=(1, 1)) (prelu1): PReLU(num_parameters=28) (pool1): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=True) (conv2): Conv2d(28, 48, kernel_size=(3, 3), stride=(1, 1)) (prelu2): PReLU(num_parameters=48) (pool2): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=True) (conv3): Conv2d(48, 64, kernel_size=(2, 2), stride=(1, 1)) (prelu3): PReLU(num_parameters=64) (dense4): Linear(in_features=576, out_features=128, bias=True) (prelu4): PReLU(num_parameters=128) (dense5_1): Linear(in_features=128, out_features=2, bias=True) (softmax5_1): Softmax(dim=1) (dense5_2): Linear(in_features=128, out_features=4, bias=True) ) (onet): ONet( (conv1): Conv2d(3, 32, kernel_size=(3, 3), stride=(1, 1)) (prelu1): PReLU(num_parameters=32) (pool1): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=True) (conv2): Conv2d(32, 64, kernel_size=(3, 3), stride=(1, 1)) (prelu2): PReLU(num_parameters=64) (pool2): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=True) (conv3): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1)) (prelu3): PReLU(num_parameters=64) (pool3): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=True) (conv4): Conv2d(64, 128, kernel_size=(2, 2), stride=(1, 1)) (prelu4): PReLU(num_parameters=128) (dense5): Linear(in_features=1152, out_features=256, bias=True) (prelu5): PReLU(num_parameters=256) (dense6_1): Linear(in_features=256, out_features=2, bias=True) (softmax6_1): Softmax(dim=1) (dense6_2): Linear(in_features=256, out_features=4, bias=True) (dense6_3): Linear(in_features=256, out_features=10, bias=True) ) )) → torch.Tensor[source]¶ Runs the PIL image though the model after preprocessing
- Parameters
image (Image.Image) – PIL image
model (nn.Module) – Pytorch model
mtcnn (optional) – Defaults to None.
- Returns
[description]
- Return type
[type]
-
face_verification.recognition.recognition.get_model(model_name: str = 'vgg') → torch.nn.modules.module.Module[source]¶ Return the most up to date model
- Returns
Pytorch model set to eval
- Return type
nn.Module
-
face_verification.recognition.recognition.load_image(image: Union[str, numpy.ndarray, PIL.Image.Image]) → numpy.ndarray[source]¶
-
face_verification.recognition.recognition.torch_to_np(array: torch.Tensor) → numpy.ndarray[source]¶ - Coverts torch tensor to numpy array, handles the case when torch tensor is
stuck in cuda.
- Parameters
array (torch.Tensor) – Pytorch Tensor
- Returns
np.ndarray
-
face_verification.recognition.recognition.verify(img1: Union[PIL.Image.Image, str], img2: Union[PIL.Image.Image, str], model: torch.nn.modules.module.Module, mtcnn: facenet_pytorch.models.mtcnn.MTCNN = DefaultMTCNN( (pnet): PNet( (conv1): Conv2d(3, 10, kernel_size=(3, 3), stride=(1, 1)) (prelu1): PReLU(num_parameters=10) (pool1): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=True) (conv2): Conv2d(10, 16, kernel_size=(3, 3), stride=(1, 1)) (prelu2): PReLU(num_parameters=16) (conv3): Conv2d(16, 32, kernel_size=(3, 3), stride=(1, 1)) (prelu3): PReLU(num_parameters=32) (conv4_1): Conv2d(32, 2, kernel_size=(1, 1), stride=(1, 1)) (softmax4_1): Softmax(dim=1) (conv4_2): Conv2d(32, 4, kernel_size=(1, 1), stride=(1, 1)) ) (rnet): RNet( (conv1): Conv2d(3, 28, kernel_size=(3, 3), stride=(1, 1)) (prelu1): PReLU(num_parameters=28) (pool1): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=True) (conv2): Conv2d(28, 48, kernel_size=(3, 3), stride=(1, 1)) (prelu2): PReLU(num_parameters=48) (pool2): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=True) (conv3): Conv2d(48, 64, kernel_size=(2, 2), stride=(1, 1)) (prelu3): PReLU(num_parameters=64) (dense4): Linear(in_features=576, out_features=128, bias=True) (prelu4): PReLU(num_parameters=128) (dense5_1): Linear(in_features=128, out_features=2, bias=True) (softmax5_1): Softmax(dim=1) (dense5_2): Linear(in_features=128, out_features=4, bias=True) ) (onet): ONet( (conv1): Conv2d(3, 32, kernel_size=(3, 3), stride=(1, 1)) (prelu1): PReLU(num_parameters=32) (pool1): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=True) (conv2): Conv2d(32, 64, kernel_size=(3, 3), stride=(1, 1)) (prelu2): PReLU(num_parameters=64) (pool2): MaxPool2d(kernel_size=3, stride=2, padding=0, dilation=1, ceil_mode=True) (conv3): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1)) (prelu3): PReLU(num_parameters=64) (pool3): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=True) (conv4): Conv2d(64, 128, kernel_size=(2, 2), stride=(1, 1)) (prelu4): PReLU(num_parameters=128) (dense5): Linear(in_features=1152, out_features=256, bias=True) (prelu5): PReLU(num_parameters=256) (dense6_1): Linear(in_features=256, out_features=2, bias=True) (softmax6_1): Softmax(dim=1) (dense6_2): Linear(in_features=256, out_features=4, bias=True) (dense6_3): Linear(in_features=256, out_features=10, bias=True) ) ), dist_fn: str = 'euclidean', plot: bool = True, decision: bool = True) → Union[Tuple[bool, float], float][source]¶ Compares two images by the distance between their embeddings
- Parameters
img1 (Union[Image.Image, str]) – Either PIL or path
img2 (Union[Image.Image, str]) – Either PIL or path
model (nn.Module) – A pytorch model.
mtcnn (MTCNN, optional) – User defined MTCNN. Defaults to None.
dist_fn (str, optional) – Current opetions are euclidean or cosine. Defaults to “euclidean”.
plot (bool, optional) – Matplotlib plot. Defaults to True.
decision (bool, optional) – [description]. Defaults to True.
- Returns
Distance between the embeddings
- Return type
Union[Tuple[bool, float]]
face_verification.recognition.utils module¶
This module contains helpful utilities for recognition package.
face_verification.recognition.vgg module¶
Taken from https://github.com/prlz77/vgg-face.pytorch/blob/master/models/vgg_face.py