使用欧几里德距离进行人脸识别

克雷斯娜·丽塔

我有一个用 Python 进行人脸识别的项目。我想在我的代码中加入欧几里得距离,以了解实时视频和我的数据集(图像)之间的距离。

我很困惑,因为它是实时的。例如,许多项目只是解释图像“X”和图像“Y”之间的欧几里得距离。任何人都可以帮助我了解如何为实时视频执行此操作吗?

这是代码:

import sys
import os
impo rt numpy as np
from face_recognition_system.videocamera import VideoCamera
from face_recognition_system.detectors import FaceDetector
import face_recognition_system.operations as op
import cv2
from cv2 import __version__

def get_images(frame, faces_coord, shape):

if shape == "rectangle":
    faces_img = op.cut_face_rectangle(frame, faces_coord)
    frame = op.draw_face_rectangle(frame, faces_coord)
elif shape == "ellipse":
    faces_img = op.cut_face_ellipse(frame, faces_coord)
    frame = op.draw_face_ellipse(frame, faces_coord)
faces_img = op.normalize_intensity(faces_img)
faces_img = op.resize(faces_img)
return (frame, faces_img)

def add_person(people_folder, shape):
    person_name = raw_input('What is the name of the new person: ').lower()
folder = people_folder + person_name
if not os.path.exists(folder):
    raw_input("I will now take 20 pictures. Press ENTER when ready.")
    os.mkdir(folder)
    video = VideoCamera()
    detector = FaceDetector('face_recognition_system/frontal_face.xml')
    counter = 1
    timer = 0
    cv2.namedWindow('Video Feed', cv2.WINDOW_AUTOSIZE)
    cv2.namedWindow('Saved Face', cv2.WINDOW_NORMAL)
    while counter < 21:
        frame = video.get_frame()
        face_coord = detector.detect(frame)
        if len(face_coord):
            frame, face_img = get_images(frame, face_coord, shape)
            # save a face every second, we start from an offset '5' because
            # the first frame of the camera gets very high intensity
            # readings.
            if timer % 100 == 5:
                cv2.imwrite(folder + '/' + str(counter) + '.jpg',
                            face_img[0])
                print 'Images Saved:' + str(counter)
                counter += 1
                cv2.imshow('Saved Face', face_img[0])

        cv2.imshow('Video Feed', frame)
        cv2.waitKey(50)
        timer += 5
else:
    print "This name already exists."
    sys.exit()

def recognize_people(people_folder, shape):
try:
    people = [person for person in os.listdir(people_folder)]
except:
    print "Have you added at least one person to the system?"
    sys.exit()
print "This are the people in the Recognition System:"
for person in people:
    print "-" + person

print 30 * '-'
print "   POSSIBLE RECOGNIZERS TO USE"
print 30 * '-'
print "1. EigenFaces"
print "2. FisherFaces"
print "3. LBPHFaces"
print 30 * '-'

choice = check_choice()

detector = FaceDetector('face_recognition_system/frontal_face.xml')
if choice == 1:
    recognizer = cv2.face.createEigenFaceRecognizer()
    threshold = 4000
elif choice == 2:
    recognizer = cv2.face.createFisherFaceRecognizer()
    threshold = 300
elif choice == 3:
    recognizer = cv2.face.createLBPHFaceRecognizer()
    threshold = 105
images = []
labels = []
labels_people = {}
for i, person in enumerate(people):
    labels_people[i] = person
    for image in os.listdir(people_folder + person):
        images.append(cv2.imread(people_folder + person + '/' + image, 0))
        labels.append(i)
try:
    recognizer.train(images, np.array(labels))
except:
    print "\nOpenCV Error: Do you have at least two people in the database?\n"
    sys.exit()

video = VideoCamera()
while True:
    frame = video.get_frame()
    faces_coord = detector.detect(frame, False)
    if len(faces_coord):
        frame, faces_img = get_images(frame, faces_coord, shape)
        for i, face_img in enumerate(faces_img):
            if __version__ == "3.1.0":
                collector = cv2.face.MinDistancePredictCollector()
                recognizer.predict(face_img, collector)
                conf = collector.getDist()
                pred = collector.getLabel()
            else:
                pred, conf = recognizer.predict(face_img)
            print "Prediction: " + str(pred)
            print 'Confidence: ' + str(round(conf))
            print 'Threshold: ' + str(threshold)
            if conf < threshold:
                cv2.putText(frame, labels_people[pred].capitalize(),
                            (faces_coord[i][0], faces_coord[i][1] - 2),
                            cv2.FONT_HERSHEY_PLAIN, 1.7, (206, 0, 209), 2,
                            cv2.LINE_AA)
            else:
                cv2.putText(frame, "Unknown",
                            (faces_coord[i][0], faces_coord[i][1]),
                            cv2.FONT_HERSHEY_PLAIN, 1.7, (206, 0, 209), 2,
                            cv2.LINE_AA)

    cv2.putText(frame, "ESC to exit", (5, frame.shape[0] - 5),
                cv2.FONT_HERSHEY_PLAIN, 1.2, (206, 0, 209), 2, cv2.LINE_AA)
    cv2.imshow('Video', frame)
    if cv2.waitKey(100) & 0xFF == 27:
        sys.exit()

def check_choice():
""" Check if choice is good
"""
is_valid = 0
while not is_valid:
    try:
        choice = int(raw_input('Enter your choice [1-3] : '))
        if choice in [1, 2, 3]:
            is_valid = 1
        else:
            print "'%d' is not an option.\n" % choice
    except ValueError, error:
        print "%s is not an option.\n" % str(error).split(": ")[1]
return choice

if __name__ == '__main__':
print 30 * '-'
print "   POSSIBLE ACTIONS"
print 30 * '-'
print "1. Add person to the recognizer system"
print "2. Start recognizer"
print "3. Exit"
print 30 * '-'

CHOICE = check_choice()

PEOPLE_FOLDER = "face_recognition_system/people/"
SHAPE = "ellipse"

if CHOICE == 1:
    if not os.path.exists(PEOPLE_FOLDER):
        os.makedirs(PEOPLE_FOLDER)
    add_person(PEOPLE_FOLDER, SHAPE)
elif CHOICE == 2:
    recognize_people(PEOPLE_FOLDER, SHAPE)
elif CHOICE == 3:
sys.exit()
库西克·克里希南

如果要比较数据集中的人脸与视频中出现的人脸之间的欧氏距离,您必须首先从视频中提取单个帧,检测单个帧中的人脸,然后将人脸图像与数据集中的图像进行比较.

使用 Opencv 可以轻松完成。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用openbr对旋转的图像进行人脸识别?

来自分类Dev

使用PCA-matlab进行人脸识别

来自分类Dev

使用OpenCV进行人脸识别时出现属性错误

来自分类Dev

使用PCA-matlab进行人脸识别

来自分类Dev

使用IBM Watson Visual Recognition进行人脸识别

来自分类Dev

库,用于使用图像中人脸的视觉属性进行人脸识别

来自分类Dev

使用 Codename One 进行人脸检测

来自分类Dev

在Android-x86上使用javaCV进行人脸识别

来自分类Dev

在Spring Boot应用中使用python / tensorflow进行人脸识别

来自分类Dev

使用神经网络进行人脸识别和分类未知数

来自分类Dev

使用android.hardware.Camera2进行人脸检测

来自分类Dev

在Android中使用androidx Biometric API进行人脸验证

来自分类Dev

使用opencv和python进行人脸检测

来自分类Dev

使用android.hardware.Camera2进行人脸检测

来自分类Dev

使用python在视频中进行人脸对齐

来自分类Dev

使用 Siamese Network 进行人脸检测演示

来自分类Dev

有没有可以在照片中进行人脸识别的软件?

来自分类Dev

有没有可以在照片中进行人脸识别的软件?

来自分类Dev

如何使用AT&T数据库在Python中使用skylearn模块进行人脸识别(fetch_olivetti_faces数据集。)

来自分类Dev

如何使用OpenCV绘制3D坐标轴以进行人脸姿势估计?

来自分类Dev

由于缩放无法使用ImageView进行人脸检测和缩放?

来自分类Dev

使用API14中的方法无法进行人脸检测

来自分类Dev

在OpenCV Python中使用Cascade分类器进行人脸检测

来自分类Dev

Caffe Net.Forward 尝试使用 OpenCV 进行人脸检测时出错

来自分类Dev

收集adaboost算法的负样本以进行人脸检测

来自分类Dev

OpenCV和Python:使用haarcascades进行人脸检测可以检测到许多像眼睛一样的盒子。

来自分类Dev

在Matlab中使用计算机视觉工具箱(Viola Jones)进行人脸检测

来自分类Dev

人脸检测,人脸识别

来自分类Dev

使用python和opencv的人脸识别

Related 相关文章

  1. 1

    如何使用openbr对旋转的图像进行人脸识别?

  2. 2

    使用PCA-matlab进行人脸识别

  3. 3

    使用OpenCV进行人脸识别时出现属性错误

  4. 4

    使用PCA-matlab进行人脸识别

  5. 5

    使用IBM Watson Visual Recognition进行人脸识别

  6. 6

    库,用于使用图像中人脸的视觉属性进行人脸识别

  7. 7

    使用 Codename One 进行人脸检测

  8. 8

    在Android-x86上使用javaCV进行人脸识别

  9. 9

    在Spring Boot应用中使用python / tensorflow进行人脸识别

  10. 10

    使用神经网络进行人脸识别和分类未知数

  11. 11

    使用android.hardware.Camera2进行人脸检测

  12. 12

    在Android中使用androidx Biometric API进行人脸验证

  13. 13

    使用opencv和python进行人脸检测

  14. 14

    使用android.hardware.Camera2进行人脸检测

  15. 15

    使用python在视频中进行人脸对齐

  16. 16

    使用 Siamese Network 进行人脸检测演示

  17. 17

    有没有可以在照片中进行人脸识别的软件?

  18. 18

    有没有可以在照片中进行人脸识别的软件?

  19. 19

    如何使用AT&T数据库在Python中使用skylearn模块进行人脸识别(fetch_olivetti_faces数据集。)

  20. 20

    如何使用OpenCV绘制3D坐标轴以进行人脸姿势估计?

  21. 21

    由于缩放无法使用ImageView进行人脸检测和缩放?

  22. 22

    使用API14中的方法无法进行人脸检测

  23. 23

    在OpenCV Python中使用Cascade分类器进行人脸检测

  24. 24

    Caffe Net.Forward 尝试使用 OpenCV 进行人脸检测时出错

  25. 25

    收集adaboost算法的负样本以进行人脸检测

  26. 26

    OpenCV和Python:使用haarcascades进行人脸检测可以检测到许多像眼睛一样的盒子。

  27. 27

    在Matlab中使用计算机视觉工具箱(Viola Jones)进行人脸检测

  28. 28

    人脸检测,人脸识别

  29. 29

    使用python和opencv的人脸识别

热门标签

归档