1. 程式人生 > 實用技巧 >Python用dlib 識別了我手機裡所有出現人臉的照片 (優點 準確度高 缺點速度慢,4500張圖片 足足花了我3個半小時才識別玩 效果滿意)

Python用dlib 識別了我手機裡所有出現人臉的照片 (優點 準確度高 缺點速度慢,4500張圖片 足足花了我3個半小時才識別玩 效果滿意)

程式碼:

import cv2
import os
import dlib
'''
用dlib 識別 用opencv把手機拍的照片大小縮放 不是就不變  識別是否是圖片格式 不是跳過
'''
# 讀取函式,用來讀取資料夾中的所有函式,輸入引數是檔名
def read_directory(directory_name):
    for filename in os.listdir(directory_name):
        a= filename.split(".")[-1]
        if str(a) in ["JPG",'PNG','jpg','png']:
            
# 用matplotlib的路徑 img1 = directory_name + "\\" + filename img3 = cv2.imread(img1) img2 = cv2.imread(img1) if img3.shape[0] >= int(2000): #現在手機畫素高了 識別不了 還是圖片縮小識別 scale_percent = 25 # percent of original size 縮小到原來25% width = int(img3.shape[1] * scale_percent / 100) height
= int(img3.shape[0] * scale_percent / 100) dim = (width, height) img = cv2.resize(img3, dim, interpolation=cv2.INTER_AREA) else: img = img3 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 人臉分類器 detector = dlib.get_frontal_face_detector()
# 獲取人臉檢測器 predictor = dlib.shape_predictor( "shape_predictor_68_face_landmarks.dat" ) dets = detector(gray, 1) if len(dets): # 不為0則檢測到人臉 for face in dets: shape = predictor(img, face) # 尋找人臉的68個標定點 # 遍歷所有點,打印出其座標,並圈出來 for pt in shape.parts(): pt_pos = (pt.x, pt.y) cv2.circle(img, pt_pos, 1, (0, 255, 0), 1) b = filename.split(".")[-2] cv2.imwrite(r"H:\renwu__opencv\%s.%s" % (b, a), img2) # print(filename) cv2.destroyAllWindows() else: print('沒找到人臉!') else: print('跳過!') read_directory(r'H:\renwu__opencv\zhaopian')#這裡傳入所要讀取資料夾的絕對路徑,加引號(引號不能省略!) 不要有中文