不用 NI- Vision 的 人臉偵測 Face Detection from Call Python Dlib
-- coding : utf-8 --
人臉辨識包
import dlib
影像處理包
from skimage import io
視窗對話框包
from tkinter import filedialog
import tkinter as tk
root = tk.Tk()
root.withdraw()
def FaceDetection():
# 圖片檔名路徑
jpg_Path = filedialog.askopenfilename(parent=root, initialdir='.\image Example.jpg', title='請選擇.jpg 圖片檔名', filetypes = (("jpg files","*.jpg"),("all files","*.*")))
if not jpg_Path:
print('選擇圖片檔名錯誤')
elif True:
print(jpg_Path)
# skimage 圖像處理
Image_RGB = io.imread(jpg_Path)
# 人臉檢測器
detector = dlib.get_frontal_face_detector()
# 人臉偵測 ROI (face_rects=矩型座標 scores=辨識率)
face_Rectangle, scores, idx = detector.run(Image_RGB, 0)
FaceROI=[]
# 矩型 Rectangle 座標解析
for i, d in enumerate(face_Rectangle):
left = d.left()
top = d.top()
right = d.right()
bottom = d.bottom()
# idx=臉部方向 0.正臉、1.臉向左、2.臉向右、3.臉向上、4.臉向下
Rotation = idx[i]
ROI = (left,top,right,bottom,Rotation)
FaceROI.append(ROI)
# 輸出 資料
return (Image_RGB, FaceROI)
if name == ‘main’:
# 運行
FaceDetection()
Face Detection from Picture.zip (2.3 MB)
# 在LabVIEW中整合Python程式
這僅適用於LabVIEW 2018或更新的版本
Face Detection from Picture from 2018.vi (33.6 KB)
2個讚
Call Python Dlib 範例分享 - 人臉識別
68特徵點檔案下載
辨識模型檔案下載
解壓後存放於主程式目錄下
-- coding : utf-8 --
import sys,os,glob
import cv2,dlib,numpy
from skimage import io
from tkinter import filedialog
import tkinter as tk
root = tk.Tk()
root.withdraw()
def FaceRecognition():
# 圖片檔名路徑
jpg_Path = filedialog.askopenfilename(parent=root, initialdir='.\image', title='請選擇.jpg 圖片檔名', filetypes = (("jpg files","*.jpg"),("all files","*.*")))
if not jpg_Path:
print('選擇圖片檔名錯誤')
elif True:
# skimage 圖像處理
Image_RGB = io.imread(jpg_Path)
# 人臉檢測器
detector = dlib.get_frontal_face_detector()
# 68特徵點檔案下載 https://github.com/davisking/dlib-models/blob/master/shape_predictor_68_face_landmarks.dat.bz2
# 特徵點檔案存放路徑 主程式目錄下
sp = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
# 檔案下載 https://github.com/davisking/dlib-models/blob/master/dlib_face_recognition_resnet_model_v1.dat.bz2
# 辨識模型檔案存放路徑 主程式目錄下
facerec = dlib.face_recognition_model_v1("dlib_face_recognition_resnet_model_v1.dat")
# 人臉樣本檔案名稱列表
ExampleName = []
# 人臉樣本描述子參數值列表
descriptors = []
# 人臉樣本資料夾
FaceExample = ("./FaceExample")
# 圖片名稱列表(讀取樣本 名稱 & 圖片參數值)
for f in glob.glob(os.path.join(FaceExample , "*.jpg")):
base = os.path.basename(f)
ExampleName.append(os.path.splitext(base)[0])
# 讀取人臉圖片樣本)
img = io.imread(f)
dets = detector(img, 1)
for k, d in enumerate(dets):
# 找出特徵點位置
shape = sp(img, d)
face_descriptor = facerec.compute_face_descriptor(img, shape)
v = numpy.array(face_descriptor)
descriptors.append(v)
# 人臉偵測 ROI (face_rects=矩型座標 scores=辨識率)
face_Rectangle, scores, idx = detector.run(Image_RGB, 0)
FaceROI=[]
ROIName=[]
# 矩型 Rectangle 座標解析
for i, d in enumerate(face_Rectangle):
left = d.left()
top = d.top()
right = d.right()
bottom = d.bottom()
# idx=臉部方向 0.正臉、1.臉向左、2.臉向右、3.臉向上、4.臉向下
Rotation = idx[i]
ROI = (left,top,right,bottom,Rotation)
FaceROI.append(ROI)
# 找出特徵點位置
shape = sp(Image_RGB, d)
# 計算歐式距離人臉比對描述子
cropped_face_descriptor = facerec.compute_face_descriptor(Image_RGB, shape)
# 計算歐式距離人臉比對描述子
dist = []
for k in descriptors:
d_test = numpy.array(cropped_face_descriptor)
dist_ = numpy.linalg.norm(k -d_test)
dist.append(dist_)
# 將比對人名和比對出來的歐式距離組成一個dict
c_d = dict( zip(ExampleName,dist))
# 最小值的键值:
FaceName = min(c_d, key=c_d.get)
# 最小值的键值的 FaceName:
ROIName.append(FaceName)
# 輸出 資料
print(ROIName)
return (Image_RGB, FaceROI,ROIName)
if name == ‘main’:
# 運行
FaceRecognition()
LabView Face Recognition.zip (1.5 MB)
3個讚