Technically speaking, face recognition has been a solved problem since the early 2000s despite facing few challenges nowadays including non-frontal, tiny or partial real-time detection. The most common algorithm is to output the bounding box (i.e. rectangle) coordinates for each present face, extract the facial landmarks (nose, pupils, mouth, etc.) points for the target face (the more landmarks you have, the more accurate the result is), perform some Euclidean distance calculation (sort of hash) and compare this to the existing face hashes (i.e. police database). The highest score is considered a potential match.
You can develop your own face recognition software providing a good dataset (i.e CelebA, LFW or the fed dataset if you have access to) using our embedded computer vision library[1] that we just released earlier this month or using the PixLab /facecompare HTTP endpoint (https://pixlab.io/cmd?id=facecompare).