Python用dlib 識別了我手機裡所有出現人臉的照片 (優點 準確度高 缺點速度慢,4500張圖片 足足花了我3個半小時才識別玩 效果滿意)
阿新 • • 發佈:2020-10-22
程式碼:
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')#這裡傳入所要讀取資料夾的絕對路徑,加引號(引號不能省略!) 不要有中文