Call Python Dlib 範例分享 - 人臉偵測

不用 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個讚