1. 程式人生 > >DLib完成人臉識別專案詳細說明

DLib完成人臉識別專案詳細說明

Dlib介紹

       Dlib是一個現代C++框架,解決包含機器學習演算法以及開發複雜軟體的現實問題,它被廣泛應用在工業和學術研究領域,包括機器人、嵌入式裝置、移動手機以及大規模高效能運算環境中,DLib的開源使得在使用過程中方便,自由。它的主要特點有:文件說明全,高質量的程式碼,機器學習演算法,科學計算演算法,圖模型推理演算法,影象處理,執行緒,網路程式設計,圖形使用者介面,資料壓縮與整合演算法等,可以參考官網說明:http://dlib.net

安裝dlib模組

sudo apt-get install libboost-all-dev
sudo apt-get install cmake
sudo pip install  -i https://pypi.tuna.tsinghua.edu.cn/simple dlib

如何使用在PC環境下使用安卓手機攝像頭?

在百度搜索 【IP攝像頭】,下載並安裝在安卓手機上,保證PC機與手機連線在同一個無線網中,PC機IP最好不好自動獲取,可以先設定自動獲取,然後在CMD下敲入ipconfig /all 檢視分配的ip,然後修改靜態ip,在IP攝像頭軟體的主介面中點選開啟【IP攝像頭伺服器】按鈕,攝像頭就啟動了,可以選擇前置和後置攝像頭。IP攝像頭軟體具體使用可以檢視說明:http://app.mi.com/details?id=com.shenyaocn.android.WebCam

首先安裝opencv模組

sudo pip install  -i https://pypi.tuna.tsinghua.edu.cn/simple opencv-python

python操作攝像頭程式碼示例:

cv2.namedWindow('camera',1)
video = 'http://admin:[email protected]:8081'
cap = cv2.VideoCapture(video)

if False == cap.isOpened():
	cap.open(video)

while (True):
	ret, frame = cap.read()
	if False == ret:
		break
	cv2.imshow('camera', frame)

	key = cv2.waitKey(10)
	if key == 27:
		print ('esc break...')
		break
cap.release()
cv2.destroyAllWindows('camera')

如何使用dlib進行人臉檢測與識別?

    這裡需要下載兩個已經訓練好的人臉識別模型以及人臉關鍵點檢測器,兩個.dat檔案(shape_predictor_68_face_landmarks.dat和dlib_face_recognition_resnet_model_v1.dat),新建一個資料夾candidate-faces資料夾,把庫中的圖片以姓名命名,如下圖所示:

接下來的過程如下:

  1、載入正臉檢測器,使用dlib

detector = dlib.get_frontal_face_detector()

  2、載入人臉關鍵點檢測器

sp = dlib.shape_predictor(predictor_path)

3、載入人臉識別模型

facerec = dlib.face_recognition_model_v1(face_rec_model_path)

4、儲存候選人的人臉描述子

   4.1、先通過候選人影象檢測到候選人臉矩形框

   	image = cv2.imread(faces_folder_path+'/'+filename)
	gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
	dets = detector(gray_image, 1)

dets儲存的是影象中人臉的矩形框,可以有多個

 4.2、通過人臉矩形框獲取人臉的關鍵點(68個關鍵點)

shape = sp(image, d)

4.3、人臉識別模型通過關鍵點獲取人臉描述子

face_descriptor = facerec.compute_face_descriptor(image, shape)

4.4、把人臉描述子與人臉姓名分別一一對應儲存在兩個列表list中

candidate.append(filename.split('.')[0])

 5、被檢測影象人臉識別,這裡是從攝像頭獲取視訊幀,識別沒幀影象中的人臉

  5.1、被檢測影象人臉矩形框獲取

 	cv2.namedWindow('camera',1)

	video = 'http://admin:[email protected]:8081'
	cap = cv2.VideoCapture(video)

	if False == cap.isOpened():
		cap.open(video)
	while (True):
		ret, frame = cap.read()

		#img = cv2.resize(frame, (600,800))
		img = frame
		gray_image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
		dets = detector(gray_image, 1)

   5.2、被檢測影象人臉關鍵點獲取

shape = sp(img, d)

   5.3、被檢測影象人臉描述子獲取

 face_descriptor = facerec.compute_face_descriptor(img, shape)
d_test = numpy.array(face_descriptor)

   5.4、被檢測影象人臉描述子與候選人臉描述子之間計算歐氏距離d

 	for i in descriptors:
		dist_ = numpy.linalg.norm(i - d_test)
		dist.append(dist_)

   5.5、儲存歐式距離d,將d與候選人姓名組合成字典,對字典進行排序

 	c_d = dict(zip(candidate, dist))
	cd_sorted = sorted(c_d.items(), key=lambda d:d[1])

   5.6、對距離進行閾值判斷,並取距離最小的那個候選人姓名

 	if cd_sorted[0][1] < 0.38:
		cv2.rectangle(img, (d.left(),d.top()),(d.right(),d.bottom()),(255,0,0),1,8,0)
		cv2.putText(img, 'unkown rate {}'.format(cd_sorted[0][1]), (d.left(),d.top()-10), cv2.FONT_HERSHEY_COMPLEX, 1, (255,0,0), 1)
		print('the perion is unkown rate{}'.format(cd_sorted[0][1]))
	else:
		cv2.rectangle(img, (d.left(),d.top()),(d.right(),d.bottom()),(255,0,0),1,8,0)
		cv2.putText(img, cd_sorted[0][0], (d.left(),d.top()-10), cv2.FONT_HERSHEY_COMPLEX, 1, (255,0,0), 1)
		print('the perion is {}'.format(cd_sorted[0][0]))

最後完整程式碼可以參考如下:

#-*- encoding:utf-8 -*-

import sys
import os
import dlib
import cv2
import numpy

predictor_path = './shape_predictor_68_face_landmarks.dat'

face_rec_model_path = './dlib_face_recognition_resnet_model_v1.dat'

faces_folder_path = './candidate-faecs'

if not os.path.exists(faces_folder_path):
	os.makedirs(faces_folder_path)

detector = dlib.get_frontal_face_detector()

sp = dlib.shape_predictor(predictor_path)

facerec = dlib.face_recognition_model_v1(face_rec_model_path)

descriptors = []
candidate = []
index=1
for filename in os.listdir(faces_folder_path):
	if filename.endswith('.jpg'):
		print ('start to process picture %s' %index)
	else:
		continue
	candidate.append(filename.split('.')[0])
	image = cv2.imread(faces_folder_path+'/'+filename)

	gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
	dets = detector(gray_image, 1)

	print ('Number of faces detected:{}'.format(len(dets)))

	for k, d in enumerate(dets):
		shape = sp(image, d)
		face_descriptor = facerec.compute_face_descriptor(image, shape)

		v = numpy.array(face_descriptor)
		descriptors.append(v)
	index += 1
test_img_path = './xiaozhi2.jpg'

cv2.namedWindow('camera',1)

video = 'http://admin:[email protected]:8081'
cap = cv2.VideoCapture(video)

if False == cap.isOpened():
	cap.open(video)
while (True):
	ret, frame = cap.read()

	#img = cv2.resize(frame, (600,800))
	img = frame
	gray_image = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
	dets = detector(gray_image, 1)

	dist = []

	for k, d in enumerate(dets):

		print ('In test image Number of faces detected:{}'.format(len(dets)))

		shape = sp(img, d)
		face_descriptor = facerec.compute_face_descriptor(img, shape)
		d_test = numpy.array(face_descriptor)

		for i in descriptors:
			dist_ = numpy.linalg.norm(i - d_test)
			dist.append(dist_)

		c_d = dict(zip(candidate, dist))

		cd_sorted = sorted(c_d.items(), key=lambda d:d[1])

		if cd_sorted[0][1] < 0.38:
			cv2.rectangle(img, (d.left(),d.top()),(d.right(),d.bottom()),(255,0,0),1,8,0)
			cv2.putText(img, 'unkown rate {}'.format(cd_sorted[0][1]), (d.left(),d.top()-10), cv2.FONT_HERSHEY_COMPLEX, 1, (255,0,0), 1)
			print('the perion is unkown rate{}'.format(cd_sorted[0][1]))
		else:
			cv2.rectangle(img, (d.left(),d.top()),(d.right(),d.bottom()),(255,0,0),1,8,0)
			cv2.putText(img, cd_sorted[0][0], (d.left(),d.top()-10), cv2.FONT_HERSHEY_COMPLEX, 1, (255,0,0), 1)
			print('the perion is {}'.format(cd_sorted[0][0]))
	
		dist = []
	if len(dets) == 0:
		cv2.putText(img, 'not detect face', (100,100), cv2.FONT_HERSHEY_COMPLEX, 1, (255,0,0), 1)
	else:
		pass
	cv2.imshow('rectangle', img)
	
	key = cv2.waitKey(10)
	if key == 27:
		print ('esc break...')
		break
cap.release()
cv2.destroyAllWindows('camera')
dlib.hit_enter_to_continue()

相關推薦

DLib完成人臉識別專案詳細說明

Dlib介紹        Dlib是一個現代C++框架,解決包含機器學習演算法以及開發複雜軟體的現實問題,它被廣泛應用在工業和學術研究領域,包括機器人、嵌入式裝置、移動手機以及大規模高效能運算環境中,DLib的開源使得在使用過程中方便,自由。它的主要特點有:文件說明全,高

論程式語言哪個最變態?python:"3行程式碼完成人臉識別"!

軟體開發的概念。Python 程式語言內部二進位制程式碼放大鏡 Face Recognition軟體包 這是世界上最簡單的人臉識別庫了。你可以通過Python引用或者命令列的形式使用它,來管理和識別人臉。 該軟體包使用dlib中最先進的人臉識別深度學習演算法,使得識別準確率在《La

python ubuntu dlib 5 -人臉識別並打分

1.檢測並提取輸入圖片的人臉(座標) 2.對每張人臉質量進行評分 import sys import dlib detector = dlib.get_frontal_face_detector() win = dlib.image_window() for f in sys.ar

dlib實現人臉識別(一)生成描述檔案和標籤檔案

#include <iostream> #include <dlib/dnn.h> #include <dlib/data_io.h> #include <dlib/image_processing.h> #include <dlib/gui

opencv聯合dlib視訊人臉識別例子

本篇文章是在上一篇文章opencv聯合dlib人臉識別例子 的基礎上做了一個實時視訊人臉識別功能。 原理是利用opencv實時提取視訊中的視訊流,然後進入人臉檢測步驟,步驟類似上篇文章。 本篇文章中的程式是在VMware虛擬機器下執行的,比較卡,加入人臉識別

人工智慧 人臉識別專案的改造

背景介紹:從之前的設計模組方面來思考,人工智慧這個專案裡面的上傳功能應該如何完善成一個真正的微服務,之前的呼叫鏈是批量的上傳功能依賴單張入庫的功能,而這裡的單張入庫的功能是一個單獨的服務,其實這裡的單張入庫的模組,需要進行改造。 方案:把單張入庫的模組進行改造,提取公共的模組,減少物件的冗餘

CNN卷積神經網路應用於人臉識別詳細流程+程式碼實現)和相應的超引數解釋

DeepLearning tutorial(5)CNN卷積神經網路應用於人臉識別(詳細流程+程式碼實現) @author:wepon 本文主要講解將CNN應用於人臉識別的流程,程式基於Python+numpy+theano+PIL開發,採用類似LeNet5的

dlib實現人臉識別-python

所用工具 Anaconda 3——Python 3 Dlib scikit-image Dlib Dlib是基於現代C++的一個跨平臺通用的框架,作者非常勤奮,一直在保持更新。Dlib內容涵蓋機器學習、影象處理、數值演算法、資料壓縮等等

C# 基於免費人臉識別SDK完成人臉識別和註冊

一,準備工作 1.Afoge視訊引數類 using AForge.Video.DirectShow; using System; using System.Collections.Generic; using System.Linq; using System.Text; using

人臉識別專案-Faced

黑燈瞎火自己摸了一個web+人臉識別專案,終於有了一點成果,web介面不怎麼絢麗,記錄一下.png 先look-one-look識別後的效果: 還是先貼上專案的網址: https://github.com/iitzco/faced

Android安卓離線人臉考勤人臉識別專案原始碼

Android安卓人臉考勤人臉識別專案原始碼1.Softboy人臉考勤軟體是基於人工智慧演算法分析人臉不同特徵為識別依據的考勤軟體.2.軟體操作簡單高效易用識別準確度高,還可以配置引數滿足你的需求.3.先新增人臉到人臉資料庫,然後進入考勤 即可識別已經新增到人臉資料庫的人.4

基於卷積神經網路的人臉識別專案_使用Tensorflow-gpu+dilib+sklearn

https://www.cnblogs.com/31415926535x/p/11001669.html 基於卷積神經網路的人臉識別專案_使用Tensorflow-gpu+dilib+sklearn 概述 學期末了啊,,,最後這個人臉識別的專案弄完了,,有很多的不足,,很多東西都是隻知道怎麼用,但是不知道其背

Dlib+OpenCV深度學習人臉識別

row 拷貝 too 這一 驗證 message word endif all 目錄(?)[+] DlibOpenCV深度學習人臉識別 前言 人臉數據庫導入 人臉檢測 人臉識別 異常處理 Dlib+OpenCV深度學習人臉識別 前言 人臉

人臉識別相關開源專案彙總

目錄 全任務 人臉檢測 人臉識別 參考 部落格:blog.shinelee.me | 部落格園 | CSDN 人臉識別流程包括人臉檢測、人臉對齊、人臉識別等子任務,這裡優先總結功能相對齊全的開源專案,再總結完成單個子任務的開源專案。本文主要關注方法較流行且提供原始碼的開源專案,忽略

python ubuntu dlib人臉識別3-人臉對齊

人臉對齊主要用於提特徵。其他作用可以自行研究。 import sys import dlib if len(sys.argv) != 3: print( "Call this program like this:\n" " ./face_ali

Dlib人臉識別 版本一(最初cascade)

# -*- coding: UTF-8 -*- import sys,os,dlib,glob,numpy from skimage import io if len(sys.argv) != 5:     print ("請檢查引數是否正確")     exit()

Dlib人臉識別 版本二(socket模式實現快速人臉搜尋)

server端 import socket import sys,os,dlib,glob,numpy from skimage import io import pickle as cpk descriptors = [] current_path = os.getc

大牛教你使用dlib中的深度殘差網路(ResNet)實現實時人臉識別

opencv中提供的基於haar特徵級聯進行人臉檢測的方法效果非常不好,本文使用dlib中提供的人臉檢測方法(使用HOG特徵或卷積神經網方法),並使用提供的深度殘差網路(ResNet)實現實時人臉識別,不過本文的目的不是構建深度殘差網路,而是利用已經訓練好的模型進行實時人臉識

人臉識別:《Arcface》論文詳解,對損失層的改進有較為詳細的講解 人臉識別:《Arcface》論文詳解

轉 人臉識別:《Arcface》論文詳解 2018年08月27日 11:18:20 shentanyue 閱讀數:670

【AI測試】人臉識別中性別識別模型評價(專案例項)

以人臉識別中的性別識別測試為例項,對整個測試過程進行詳細講解。 舉例有一個專案,要求是輸入一張人臉照片,使用演算法對照片中人物的性別進行預測男 或 女。 測試人員需要對演算法模型的表現進行評價,輸出客觀的評價指標。 測試工作開展: 一、需求分析,檢視需求文件,瞭