Python 3 использует Dlib 19.7 для реализации распознавания лиц камеры.

Python

 

0 Предисловие

Использование разработки Python, использование библиотеки Dlib для захвата лица в камере, извлечения черт лица и сравнения с предварительно сохраненными чертами лица путем вычисления евклидова расстояния для достижения цели распознавания лиц;

Он может автоматически извлекать изображения лиц с камеры и сохранять их локально;

Извлеките значение признака 128D в соответствии с извлеченными/существующими изображениями нескольких лиц одного и того же человека, а затем рассчитайте среднее значение признака 128D человека;

Затем вычислите евклидово расстояние с собственными значениями, извлеченными из лица, полученными в режиме реального времени с камеры, чтобы определить, является ли это одним и тем же лицом;

 

распознавание лицаинструкция:

википедия осистема распознавания лицописание:they work by comparing selected facial features from given image with faces within a database.

В этом проекте сравнениеПредустановленные черты лицаиЧерты лица, полученные камерой в режиме реального времени;

ЯдроИзвлеките функции лица 128D, а затем рассчитайте функции лица камеры и предустановленное собственное лицо.Евклидово расстояние,сравнивать;

 

Эффект следующий (камера распознает, что я лицо по умолчанию для default_person / другой человек не является лицом по умолчанию и отображает разницу):

Рис. 1. Эффект распознавания лиц камерой в формате gif.

 

1. Общий процесс

Скажи это первымраспознавание лицираспознавание лица, первое предназначено для достижения цели обнаружения лица в сцене, в то время как второе необходимо не только обнаружить лицо, но иСравните существующие данные о лицах, определить, находится ли он в базе данных, или выполнить обработку, такую ​​​​как маркировка личности, обнаружение лица и распознавание лица, иногда могут быть перепутаны;

Некоторые из моих предыдущих проектов использовали dlib для обнаружения лиц.Функция, которую этот проект хочет реализовать, — это функция распознавания лиц, которая использует подпрограмму face_recognition.py на официальном сайте dlib (ссылка:spree.net/face_Горячая еда, домашняя...);

Суть в том, чтобы использовать модель "dlib_face_recognition_resnet_model_v1.dat" для извлечения128D особенности изображения лица, а затем сравните характеристики 128D разных изображений лиц и установите пороговое значениеВычислить евклидово расстояниесудить, является ли это одним и тем же лицом;

1 # face recognition model, the object maps human faces into 128D vectors
2 facerec = dlib.face_recognition_model_v1("dlib_face_recognition_resnet_model_v1.dat")
3 
4 shape = predictor(img, dets[0])
5 face_descriptor = facerec.compute_face_descriptor(img, shape)

 

Рис. 2 Общий процесс проектирования

 

2. Введение исходного кода

Есть get_face_from_camera.pyget_features_into_CSV.pyи face_reco_from_camera.py Эти три файла py;

 

2.1 get_face_from_camera.py/Собрать и создать данные о лицах XXX

Распознавание лиц должно извлекать данные изображения исуществующие данные изображенияСравните и проанализируйте, поэтому функция, реализованная этим файлом py,Соберите данные о лицах для построения XXX;

Программа сгенерирует окно для отображения изображения в реальном времени, полученного вызываемой камерой (метод вызова камеры см. в другом моем блогеБлог Woohoo.cn на.com/Adamin X IE/Afraid…);

Нажмите клавишу s, чтобы сохранить изображение лица в текущем видеопотоке, а сохраненный путь задается path_save = «xxxx/get_from_camera/»;

Нажмите клавишу q, чтобы выйти из окна;

Вызов камеры заключается в использовании библиотеки opencvcv2.VideoCapture(0), Параметр здесь равен 0, что означает, что вызывается камера ноутбука по умолчанию.Вы также можете сделать так, чтобы она вызывала и передала существующий видеофайл;

Рис. 3 Интерфейс get_face_from_camera.py

 

Таким образом, вы можете получить набор захваченных лиц в каталоге, указанном в path_save;

Рис. 4 Набор захваченных лиц

Исходный код выглядит следующим образом:

  1 # 2018-5-11
  2 # By TimeStamp
  3 # cnblogs: http://www.cnblogs.com/AdaminXie
  4 
  5 import dlib  # 人脸识别的库dlib
  6 import numpy as np  # 数据处理的库numpy
  7 import cv2  # 图像处理的库OpenCv
  8 
  9 # dlib预测器
 10 detector = dlib.get_frontal_face_detector()
 11 predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')
 12 
 13 # 创建cv2摄像头对象
 14 cap = cv2.VideoCapture(0)
 15 
 16 # cap.set(propId, value)
 17 # 设置视频参数,propId设置的视频参数,value设置的参数值
 18 cap.set(3, 480)
 19 
 20 # 截图screenshoot的计数器
 21 cnt_ss = 0
 22 
 23 # 人脸截图的计数器
 24 cnt_p = 0
 25 
 26 # 保存
 27 path_save = "F:/code/python/P_dlib_face_reco/data/get_from_camera/"
 28 
 29 # cap.isOpened() 返回true/false 检查初始化是否成功
 30 while cap.isOpened():
 31 
 32     # cap.read()
 33     # 返回两个值:
 34     #    一个布尔值true/false,用来判断读取视频是否成功/是否到视频末尾
 35     #    图像对象,图像的三维矩阵q
 36     flag, im_rd = cap.read()
 37 
 38     # 每帧数据延时1ms,延时为0读取的是静态帧
 39     kk = cv2.waitKey(1)
 40 
 41     # 取灰度
 42     img_gray = cv2.cvtColor(im_rd, cv2.COLOR_RGB2GRAY)
 43 
 44     # 人脸数rects
 45     rects = detector(img_gray, 0)
 46 
 47     # print(len(rects))
 48 
 49     # 待会要写的字体
 50     font = cv2.FONT_HERSHEY_SIMPLEX
 51 
 52     if (len(rects) != 0):
 53         # 检测到人脸
 54 
 55         # 矩形框
 56         for k, d in enumerate(rects):
 57 
 58             # 计算矩形大小
 59             # (x,y), (宽度width, 高度height)
 60             pos_start = tuple([d.left(), d.top()])
 61             pos_end = tuple([d.right(), d.bottom()])
 62 
 63             # 计算矩形框大小
 64             height = d.bottom() - d.top()
 65             width = d.right() - d.left()
 66 
 67             # 根据人脸大小生成空的图像
 68             im_blank = np.zeros((height, width, 3), np.uint8)
 69 
 70             im_rd = cv2.rectangle(im_rd, tuple([d.left(), d.top()]), tuple([d.right(), d.bottom()]), (0, 255, 255), 2)
 71             im_blank = np.zeros((height, width, 3), np.uint8)
 72 
 73             # 保存人脸到本地
 74             if (kk == ord('s')):
 75                 cnt_p += 1
 76                 for ii in range(height):
 77                     for jj in range(width):
 78                         im_blank[ii][jj] = im_rd[d.top() + ii][d.left() + jj]
 79                 print(path_save + "img_face_" + str(cnt_p) + ".jpg")
 80                 cv2.imwrite(path_save + "img_face_" + str(cnt_p) + ".jpg", im_blank)
 81         cv2.putText(im_rd, "faces: " + str(len(rects)), (20, 50), font, 1, (0, 0, 255), 1, cv2.LINE_AA)
 82 
 83     else:
 84         # 没有检测到人脸
 85         cv2.putText(im_rd, "no face", (20, 50), font, 1, (0, 0, 255), 1, cv2.LINE_AA)
 86 
 87     # 添加说明
 88     im_rd = cv2.putText(im_rd, "s: save face", (20, 400), font, 0.8, (255, 255, 255), 1, cv2.LINE_AA)
 89     im_rd = cv2.putText(im_rd, "q: quit", (20, 450), font, 0.8, (255, 255, 255), 1, cv2.LINE_AA)
 90   
 91     # 按下q键退出
 92     if (kk == ord('q')):
 93         break
 94 
 95     # 窗口显示
 96     cv2.imshow("camera", im_rd)
 97 
 98 # 释放摄像头
 99 cap.release()
100 
101 # 删除建立的窗口
102 cv2.destroyAllWindows()

 

2.2 get_features_into_CSV.py/извлечение функций в CSV

Я получил набор изображений лица XXX, и теперь мне нужно извлечь его черты лица;

Здесь мы используем модель распознавания лиц библиотеки dlib;

 1 # face recognition model, the object maps human faces into 128D vectors
 2 facerec = dlib.face_recognition_model_v1("dlib_face_recognition_resnet_model_v1.dat")
 3 
 4 # detector to find the faces
 5 detector = dlib.get_frontal_face_detector()
 6 
 7 # shape predictor to find the face landmarks
 8 predictor = dlib.shape_predictor("shape_predictor_5_face_landmarks.dat")
 9 
10 # 读取图片
11 img = io.imread(path_img)
12 img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
13 
14 dets = detector(img_gray, 1)
15 shape = predictor(img_gray, dets[0])
16 face_descriptor = facerec.compute_face_descriptor(img_gray, shape)

Мы можем посмотреть на вывод face_descriptor для изображения:

Внутри зеленого прямоугольника находится наша функция, которая возвращает функции 128D;

Вызовите эту функцию в красном поле, чтобы вычислить img_face_13.jpg;

Вы можете видеть, что вывод в желтом поле представляет собой вектор 128D;

Рис. 5. Возвращает результат вычисления функции 128D одного изображения.

 

Таким образом, мы можем выполнять пакетные вычисления функций для изображений в path_save, а затем записывать их в CSV (используяwrite_into_CSV функция), мой csv называется default_person.csv;

Вы можете получить функцию CSV с количеством строк (количество граней) * 128 столбцов;

Это черта лица определенного человека, затем вычислите среднее значение характеристик 128D и найдите среднее значение (используяcompute_the_mean функция)

Выходной результат операции, значение свойства этого 128D, является свойством default_person;

это мыВстроенные/предустановленные лица,Позже Лицо, захваченное камерой, будет сравниваться с этим значением функции для обработки распознавания лиц.;

[-0.030892765492592986, 0.13333227054068916, 0.054221574805284799, -0.050820438289328626, -0.056331159841073189, 0.0039378538311116004, -0.044465327145237675, -0.13096490031794497, 0.14215188983239627, -0.084465635842398593, 0.34389359700052363, -0.062936659118062566, -0.24372901571424385, -0.13270603316394905, -0.0472818422866495, 0.15475224742763921, -0.24415240554433121, -0.11213862150907516, 0.032288033417180964, 0.023676671577911628, 0.098508275653186594, -0.010117797634417289, 0.0048202000815715448, -0.014808513420192819, -0.060100053486071135, -0.34934839135722112, -0.095795629448012301, -0.050788544706608117, 0.032316677762489567, -0.099673464894294739, -0.080181991975558434, 0.096361607705291952, -0.1823408101734362, -0.045472671817007815, -0.0066827326326778062, 0.047393877549391041, -0.038414973079373964, -0.039067085930391363, 0.15961966781239761, 0.0092458106136243598, -0.16182226570029007, 0.026322136191945327, -0.0039144184832510193, 0.2492692768573761, 0.19180528427425184, 0.022950534855848866, -0.019220497949342979, -0.15331173021542399, 0.047744840089427795, -0.17038608616904208, 0.026140184680882254, 0.19366614363695445, 0.066497623724372762, 0.07038829416820877, -0.0549700813073861, -0.11961311768544347, -0.032121153940495695, 0.083507449611237169, -0.14934051350543373, 0.011458799806668571, 0.10686114273573223, -0.10744074888919529, -0.04377919611962218, -0.11030520381111848, 0.20804878441910996, 0.093076545941202266, -0.11621182490336268, -0.1991656830436305, 0.10751579348978244, -0.11251544991606161, -0.12237925866716787, 0.058218707869711672, -0.15829276019021085, -0.17670038891466042, -0.2718416170070046, 0.034569320955166689, 0.30443575821424784, 0.061833358712886512, -0.19622498672259481, 0.011373612000361868, -0.050225612756453063, -0.036157087079788507, 0.12961127491373764, 0.13962576616751521, -0.0074232793168017737, 0.020964263007044792, -0.11185114399382942, 0.012502493042694894, 0.17834208513561048, -0.072658227462517586, -0.041312719401168194, 0.25095899873658228, -0.056628625839948654, 0.10285118379090961, 0.046701753217923012, 0.042323612264896691, 0.0036216247826814651, 0.066720707440062574, -0.16388990533979317, -0.0193739396421925, 0.027835704435251261, -0.086023958105789985, -0.05472404568603164, 0.14802298341926776, -0.10644183582381199, 0.098863413851512108, 0.00061285014778963834, 0.062096107555063146, 0.051960245755157973, -0.099548895108072383, -0.058173993112225285, -0.065454461562790375, 0.14721672511414477, -0.25363486848379435, 0.20384312381869868, 0.16890435312923632, 0.097537552447695477, 0.087824966562421697, 0.091438713434495431, 0.093809676797766431, -0.034379941362299417, -0.085149037210564868, -0.24900743130006289, 0.021165960517368819, 0.076710369830068792, -0.0061752907196549996, 0.028413473285342519, -0.029983982541843465]

Источник:

 1 # 2018-5-11
 2 # By TimeStamp
 3 # cnblogs: http://www.cnblogs.com/AdaminXie
 4 
 5 #   return_128d_features()          获取某张图像的128d特征
 6 #   write_into_csv()                将某个文件夹中的图像读取特征兵写入csv
 7 #   compute_the_mean()              从csv中读取128d特征,并计算特征均值
 8 
 9 import cv2
10 import os
11 import dlib
12 from skimage import io
13 import csv
14 import numpy as np
15 import pandas as pd
16 
17 path_pics = "F:/code/python/P_dlib_face_reco/data/get_from_camera/"
18 path_csv = "F:/code/python/P_dlib_face_reco/data/csvs/"
19 
20 # detector to find the faces
21 detector = dlib.get_frontal_face_detector()
22 
23 # shape predictor to find the face landmarks
24 predictor = dlib.shape_predictor("shape_predictor_5_face_landmarks.dat")
25 
26 # face recognition model, the object maps human faces into 128D vectors
27 facerec = dlib.face_recognition_model_v1("dlib_face_recognition_resnet_model_v1.dat")
28 
29 # 返回单张图像的128D特征
30 def return_128d_features(path_img):
31     img = io.imread(path_img)
32     img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
33     dets = detector(img_gray, 1)
34 
35     if(len(dets)!=0):
36         shape = predictor(img_gray, dets[0])
37         face_descriptor = facerec.compute_face_descriptor(img_gray, shape)
38     else:
39         face_descriptor = 0
40         print("no face")
41 
42    # print(face_descriptor)
43     return face_descriptor
44 
45 #return_128d_features(path_pics+"img_face_13.jpg")
46 
47 # 将文件夹中照片特征提取出来,写入csv
48 # 输入input:
49 #   path_pics:  图像文件夹的路径
50 #   path_csv:   要生成的csv路径
51 
52 def write_into_csv(path_pics ,path_csv):
53     dir_pics = os.listdir(path_pics)
54 
55     with open(path_csv, "w", newline="") as csvfile:
56         writer = csv.writer(csvfile)
57         for i in range(len(dir_pics)):
58             # 调用return_128d_features()得到128d特征
59             print(path_pics+dir_pics[i])
60             features_128d = return_128d_features(path_pics+dir_pics[i])
61           #  print(features_128d)
62             # 遇到没有检测出人脸的图片跳过
63             if features_128d==0:
64                 i += 1
65             else:
66                 writer.writerow(features_128d)
67 
68 #write_into_csv(path_pics, path_csv+"default_person.csv")
69 
70 path_csv_rd = "F:/code/python/P_dlib_face_reco/data/csvs/default_person.csv"
71 
72 # 从csv中读取数据,计算128d特征的均值
73 def compute_the_mean(path_csv_rd):
74     column_names = []
75 
76     for i in range(128):
77         column_names.append("features_" + str(i + 1))
78 
79     rd = pd.read_csv(path_csv_rd, names=column_names)
80 
81     # 存放128维特征的均值
82     feature_mean = []
83 
84     for i in range(128):
85         tmp_arr = rd["features_"+str(i+1)]
86         tmp_arr = np.array(tmp_arr)
87 
88         # 计算某一个特征的均值
89         tmp_mean = np.mean(tmp_arr)
90 
91         feature_mean.append(tmp_mean)
92 
93     print(feature_mean)
94     return feature_mean
95 
96 compute_the_mean(path_csv_rd)

 

2.3 face_reco_from_camera.py/Сравнительный анализ распознавания лиц в реальном времени

Этот py должен вызвать камеру для захвата лица в камере, а затем, если лицо обнаружено, извлечь функцию 128D лица в камере, а затем вычислить евклидово расстояние с функцией 128D стандартного default_person, если он мал, о нем можно судить как о человеке, иначе он не человек;

Пороговое значение контраста евклидова расстояния находится вreturn_euclidean_distance функциональныйdist Переменная;

Здесь я указал в программе 0,4, и конкретный порог может быть изменен в соответствии с реальной ситуацией или результатами измерений;

Исходный код:

  1 # 2018-5-11
  2 # By TimeStamp
  3 # cnblogs: http://www.cnblogs.com/AdaminXie
  4 
  5 import dlib         # 人脸识别的库dlib
  6 import numpy as np  # 数据处理的库numpy
  7 import cv2          # 图像处理的库OpenCv
  8 
  9 # face recognition model, the object maps human faces into 128D vectors
 10 facerec = dlib.face_recognition_model_v1("dlib_face_recognition_resnet_model_v1.dat")
 11 
 12 # 计算两个向量间的欧式距离
 13 def return_euclidean_distance(feature_1,feature_2):
 14     feature_1 = np.array(feature_1)
 15     feature_2 = np.array(feature_2)
 16     dist = np.sqrt(np.sum(np.square(feature_1 - feature_2)))
 17     print(dist)
 18 
 19     if dist > 0.4:
 20         return "diff"
 21     else:
 22         return "same"
 23 
 24 
 25 features_mean_default_person = [-0.030892765492592986, 0.13333227054068916, 0.054221574805284799, -0.050820438289328626, -0.056331159841073189, 0.0039378538311116004, -0.044465327145237675, -0.13096490031794497, 0.14215188983239627, -0.084465635842398593, 0.34389359700052363, -0.062936659118062566, -0.24372901571424385, -0.13270603316394905, -0.0472818422866495, 0.15475224742763921, -0.24415240554433121, -0.11213862150907516, 0.032288033417180964, 0.023676671577911628, 0.098508275653186594, -0.010117797634417289, 0.0048202000815715448, -0.014808513420192819, -0.060100053486071135, -0.34934839135722112, -0.095795629448012301, -0.050788544706608117, 0.032316677762489567, -0.099673464894294739, -0.080181991975558434, 0.096361607705291952, -0.1823408101734362, -0.045472671817007815, -0.0066827326326778062, 0.047393877549391041, -0.038414973079373964, -0.039067085930391363, 0.15961966781239761, 0.0092458106136243598, -0.16182226570029007, 0.026322136191945327, -0.0039144184832510193, 0.2492692768573761, 0.19180528427425184, 0.022950534855848866, -0.019220497949342979, -0.15331173021542399, 0.047744840089427795, -0.17038608616904208, 0.026140184680882254, 0.19366614363695445, 0.066497623724372762, 0.07038829416820877, -0.0549700813073861, -0.11961311768544347, -0.032121153940495695, 0.083507449611237169, -0.14934051350543373, 0.011458799806668571, 0.10686114273573223, -0.10744074888919529, -0.04377919611962218, -0.11030520381111848, 0.20804878441910996, 0.093076545941202266, -0.11621182490336268, -0.1991656830436305, 0.10751579348978244, -0.11251544991606161, -0.12237925866716787, 0.058218707869711672, -0.15829276019021085, -0.17670038891466042, -0.2718416170070046, 0.034569320955166689, 0.30443575821424784, 0.061833358712886512, -0.19622498672259481, 0.011373612000361868, -0.050225612756453063, -0.036157087079788507, 0.12961127491373764, 0.13962576616751521, -0.0074232793168017737, 0.020964263007044792, -0.11185114399382942, 0.012502493042694894, 0.17834208513561048, -0.072658227462517586, -0.041312719401168194, 0.25095899873658228, -0.056628625839948654, 0.10285118379090961, 0.046701753217923012, 0.042323612264896691, 0.0036216247826814651, 0.066720707440062574, -0.16388990533979317, -0.0193739396421925, 0.027835704435251261, -0.086023958105789985, -0.05472404568603164, 0.14802298341926776, -0.10644183582381199, 0.098863413851512108, 0.00061285014778963834, 0.062096107555063146, 0.051960245755157973, -0.099548895108072383, -0.058173993112225285, -0.065454461562790375, 0.14721672511414477, -0.25363486848379435, 0.20384312381869868, 0.16890435312923632, 0.097537552447695477, 0.087824966562421697, 0.091438713434495431, 0.093809676797766431, -0.034379941362299417, -0.085149037210564868, -0.24900743130006289, 0.021165960517368819, 0.076710369830068792, -0.0061752907196549996, 0.028413473285342519, -0.029983982541843465]
 26 
 27 
 28 # dlib预测器
 29 detector = dlib.get_frontal_face_detector()
 30 predictor = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')
 31 
 32 # 创建cv2摄像头对象
 33 cap = cv2.VideoCapture(0)
 34 
 35 # cap.set(propId, value)
 36 # 设置视频参数,propId设置的视频参数,value设置的参数值
 37 cap.set(3, 480)
 38 
 39 def get_128d_features(img_gray):
 40     dets = detector(img_gray, 1)
 41     if (len(dets) != 0):
 42         shape = predictor(img_gray, dets[0])
 43         face_descriptor = facerec.compute_face_descriptor(img_gray, shape)
 44     else:
 45         face_descriptor=0
 46     return face_descriptor
 47 
 48 # cap.isOpened() 返回true/false 检查初始化是否成功
 49 while (cap.isOpened()):
 50 
 51     # cap.read()
 52     # 返回两个值:
 53     #    一个布尔值true/false,用来判断读取视频是否成功/是否到视频末尾
 54     #    图像对象,图像的三维矩阵
 55     flag, im_rd = cap.read()
 56 
 57     # 每帧数据延时1ms,延时为0读取的是静态帧
 58     kk = cv2.waitKey(1)
 59 
 60     # 取灰度
 61     img_gray = cv2.cvtColor(im_rd, cv2.COLOR_RGB2GRAY)
 62 
 63     # 人脸数rects
 64     rects = detector(img_gray, 0)
 65 
 66     # print(len(rects))
 67 
 68     # 待会要写的字体
 69     font = cv2.FONT_HERSHEY_SIMPLEX
 70 
 71     cv2.putText(im_rd, "q: quit", (20, 400), font, 0.8, (0, 255, 255), 1, cv2.LINE_AA)
 72 
 73     if (len(rects) != 0):
 74         # 检测到人脸
 75 
 76         # 将捕获到的人脸提取特征和内置特征进行比对
 77         features_rd = get_128d_features(im_rd)
 78         compare = return_euclidean_distance(features_rd, features_mean_default_person)
 79 
 80         im_rd = cv2.putText(im_rd, compare.replace("same", "default_person"), (20, 350), font, 0.8, (0, 255, 255), 1, cv2.LINE_AA)
 81 
 82         # 矩形框
 83         for k, d in enumerate(rects):
 84 
 85             # 绘制矩形框
 86             im_rd = cv2.rectangle(im_rd, tuple([d.left(), d.top()]), tuple([d.right(), d.bottom()]), (0, 255, 255), 2)
 87 
 88         cv2.putText(im_rd, "faces: " + str(len(rects)), (20, 50), font, 1, (0, 0, 255), 1, cv2.LINE_AA)
 89 
 90     else:
 91         # 没有检测到人脸
 92         cv2.putText(im_rd, "no face", (20, 50), font, 1, (0, 0, 255), 1, cv2.LINE_AA)
 93 
 94 
 95     # 按下q键退出
 96     if (kk == ord('q')):
 97         break
 98 
 99     # 窗口显示
100     cv2.imshow("camera", im_rd)
101 
102 # 释放摄像头
103 cap.release()
104 
105 # 删除建立的窗口
106 cv2.destroyAllWindows()

 

Выходные результаты в реальном времени:

Рисунок 6 Раньшее расстояние в реальном времени

 

Благодаря результатам вывода в реальном времени это более очевидно;

Выходная зеленая часть: когда это я (то есть функция, извлеченная из предыдущего анализаdefault_person), рассчитанное евклидово расстояние в основном равно0,2X или около того;

Выведите красную часть: и измените картинку, например Трампа, вы можете ясно увидеть результат расчета евклидова расстояниявырос до 0,8X, в это время можно определить, что эта грань не является заданной нами гранью;

 

3. Резюме

Я написал это после обнаружения лица камерой раньше, но обновление было отложено до сих пор, и письмо относительно грубое.Вы можете изменить его, если у вас есть особые потребности и сценарии применения.Если у вас есть какие-либо вопросы, вы можете оставить сообщение или напишите мне напрямую. . . Прошу прощения

ЯдроИзвлеките элементы лица, затем рассчитайте евклидово расстояние и сравните с предустановленным собственным лицом;

Однако при этом сравнении лица камеры в реальном времени собственные значения лица камеры вычисляются в реальном времени, а затем вычисляется евклидово расстояние, поэтому объем вычислений относительно велик, а видеопоток камеры может быть застрявший;

 

Напиши мне:

coneypo@foxmail.com

 

# Просим уважать чужие результаты труда, при перепечатке или использовании исходного кода указывать источник:www.cnblogs.com/AdaminXie

# Код загружен на мой GitHub, если он вам поможет, поставьте звездочку:GitHub.com/coneybroken/DLI…