日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > pytorch >内容正文

pytorch

人脸识别准确概率计算——超详细

發布時間:2023/12/8 pytorch 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 人脸识别准确概率计算——超详细 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言:

雖然本段代碼的目標是準確率計算,但識別率只是提供了一個簡單的思路,單純計算了正確的概率。代碼的主要部分還是圖片的匹配識別內容,所有的代碼塊都有響應的詳盡解釋,適合初期接觸和了解的learner閱讀。
在后續準備訓練數據時繁瑣的工作令人頭大,準備了幾十個圖像就花去了我大半時間,圖像處理中往往需要大量圖片進行訓練,顯然這種情況下這種方法是不可行的,不過目前也是一種思路,接下來在接觸的過程中會繼續了解相關的計算和評測方法,爭取找到最佳,計算效果最好的方法進行準確率的計算。本人也是才接觸這部分內容,了解內容有限,大家有比較好的方法方式歡迎評論交流。

文章目錄

  • 前言:
  • 1 概率計算公式
  • 2 實現代碼部分

1 概率計算公式

實現自動計算識別準確概率:

rate=nr/(nc?nu)rate = n^r/(n^c-n^u) rate=nr/(nc?nu)
其中,上式rate為識別準確概率, nr為正確識別人臉圖片個數,nc為文件夾下圖片總數量,nu為未識別到人臉區域圖像數量。

2 實現代碼部分

該方法正確計算前提是:**將測試圖像和訓練的圖像分辨放在一個文件夾下,并將測試圖像與已有的訓練圖像使用相同的圖片文件名稱和格式。**因為我目前采取的是將圖片名稱作為圖像是否正確識別判斷的根據,根據測試圖像名稱和匹配的圖像名稱是否相同,判斷識別是否正確。也嘗試過使用面部編碼數據是否相等進行判斷,測試結果顯然,這種方式是不可行 的,因為同一個人在不同照片中由于角度或者場景等各種因素的影響,編碼方式不可能完全相同。
識別方法采用:opencv + face_recognition
識別率計算代碼如下:

""" import os # class TestAccuracyRate(): import cv2 import face_recognition import numpy as npdef trainImage():train_dir = 'rate_train_data' # 訓練文件夾# 將訓練文件夾下的圖片放到一個列表中train_image_list = os.listdir(train_dir)print("訓練圖片數量:%s"%len(train_image_list))# 定義空列表,存放文讀取的圖片名稱train_image_names_list = []# 存放讀取的圖片相對路徑train_image_paths_list = []# 存放圖片轉化的numpy數組train_image_rec_list = []# 存放每個圖片面部編碼的第一個面部編碼信息train_image_encodings_list = []'源文件讀取訓練數據'# 遍歷列表,讀取列表中的訓練圖片文件名for per_image in train_image_list:name = per_image.strip('.jpg')# print(name)train_image_names_list.append(name) # 將讀取的圖片名稱添加到預先定義好的列表中# 設定每幅圖片的相對路徑,根據路徑讀取每幅圖片train_per_image_path = os.path.join(train_dir,per_image)train_image_paths_list.append(train_per_image_path) #將每幅圖片的路徑添加到預先定義好的列表中# 加載訓練圖像通過face_recognition學習如何識別它,將文檔加載到numpy數組中,以便計算機進行識別。train_per_image_rec = face_recognition.load_image_file(train_per_image_path)train_image_rec_list.append(train_per_image_rec)# print(train_per_image_rec[0])# 獲取每個圖像面部編碼信息train_per_image_encoding = face_recognition.face_encodings(train_per_image_rec)[0]# print("訓練圖片%s人臉檢測完成"%name)train_image_encodings_list.append(train_per_image_encoding)# print(train_per_image_encoding)# print(train_image_names_list)return train_image_names_list,train_image_encodings_listdef testImage():'進行測試文件的自動讀取'# 測試圖片路徑test_dir = 'rate_test_data' # 測試文件夾# 將測試圖片名稱讀取到一個列表中test_image_list = os.listdir(test_dir)# print(test_image_list)# 獲取測試圖像總數量test_date_num = len(test_image_list)print('測試圖片數量為:%s 張'%test_date_num)# 讀取訓練數據train_image_names_list, train_image_encodings_list = trainImage()print('========================')print("源文件讀取完成。。。")# 設置初始人臉識別成功個數為0reco_count = 0 # 成功識別人臉識別數decate_count = 0 # 未成功識別人臉圖片數right_reco_count = 0 #正確匹配人臉圖片數undecate_count = 0 # 未成功檢測到人臉數量unsuccess_reco_count =0 # 未成功識別人人臉數量unsuccess_reco_name_count = [] # 未成功識別人臉列表undecate_name_list = [] # 未成功檢測人臉列表false_right_reco_name_list = [] # 識別并匹配成功,但未正確匹配人臉圖片列表print("圖像識別中。。。")# 遍歷列表,進行測試圖片處理for per_image in test_image_list:# 圖像名稱以人物名命名,讀取人物名name = per_image.strip('.jpg')# 圖像的相對路徑test_per_image_path = os.path.join(test_dir, per_image)# cv讀取圖片,圖像為bgr方式per_image_cv = cv2.imread(test_per_image_path)# print(per_image_cv)# cv2.imshow('per_image_cv',per_image_cv)# cv2.cvtColor():顏色空間轉換函數。把圖像從RGB轉換到RGB顏色空間,對圖片進行預處理。per_image_cvcolor = cv2.cvtColor(per_image_cv,cv2.COLOR_BGR2RGB)# cv2.imshow('per_image_cvcolor', per_image_cvcolor)# cv2.waitKey(0)# 獲取圖像面部編碼中的面部編碼信息'此處圖片沒有檢測到人臉時往下執行則會報錯,需要在下一步之前增加判斷條件:是否檢測到人臉信息!'per_image_encoding = face_recognition.face_encodings(per_image_cvcolor)# print(per_image_encoding)'判斷條件:圖片人臉編碼是否為空!'if len(per_image_encoding)>0:decate_count+=1# 獲取檢測到人臉時面部編碼信息中數組0位置面部編碼per_image_encoding = per_image_encoding[0]"圖像人臉識別部分代碼,同時使用compare_faces和face_distance方法提高訓練結果準確度。"# 根據面部編碼匹配臉,布爾類型列表matchs_bool_list = face_recognition.compare_faces(train_image_encodings_list,per_image_encoding,tolerance=0.46)print(matchs_bool_list)print(train_image_names_list)# 根據面孔之間的歐氏距離,返回一個數值列表face_distances_list = face_recognition.face_distance(train_image_encodings_list,per_image_encoding)# 根據歐式距離,查找最相似面孔的索引print(face_distances_list)best_match_index = np.argmin(face_distances_list)print(best_match_index)# print(train_image_names_list[best_match_index])print("name:%s,match_name:%s" % (name, train_image_names_list[best_match_index]))if matchs_bool_list[best_match_index]:match_name = train_image_names_list[best_match_index]# best_match_encoding = train_image_encodings_list[best_match_index]print('匹配人物姓名:%s'%match_name)reco_count+=1else:unsuccess_reco_count+=1unsuccess_reco_name = name+'.jpg'unsuccess_reco_name_count.append(unsuccess_reco_name)match_name = 'unknown_person'# 設置文件名相同,根據文件名測試準確識別if name == match_name:right_reco_count+=1else:false_right_reco_name = name+'.jpg'false_right_reco_name_list.append(false_right_reco_name)else:undecate_count+=1undecate_name = name+'.jpg'undecate_name_list.append(undecate_name)print("圖片%s.jpg未檢測到有效人臉區域,請檢測上傳圖片是否為人臉正面區域!"%name)# print("識別完成!")print("成功檢測人臉圖片數量:%s,未檢測到人臉圖片數量:%s || 成功識別成功匹配人臉數量:%s,成功識別未成功匹配到人臉圖片數量%s || 正確匹配人臉圖片數量:%s"%(decate_count,undecate_count,reco_count,unsuccess_reco_count,right_reco_count))# print("成功匹配人臉數量:%s"%reco_count)# print("正確匹配人臉圖片數量:%s"%right_reco_count)print("成功識別未成功匹配到人臉圖片名稱列表:%s"%(unsuccess_reco_name_count))print("識別匹配成功,但未正確匹配人臉圖片名稱列表:%s" % (false_right_reco_name_list))print("未成功檢測人臉圖片名稱列表:%s" % (undecate_name_list))reco_rate = reco_count / (test_date_num - undecate_count)# print("識別完成!識別成功率為:%s%%" % (reco_rate * 100)) # 識別準確率百分號顯示right_reco_rate = right_reco_count / (test_date_num - undecate_count)print("識別完成!識別成功率為:%s%%,識別人物姓名準確匹配率為:%s%%" % ((reco_rate * 100),(right_reco_rate * 100))) # 識別準確率百分號顯示 # cv2.destroyAllWindows()

總結

以上是生活随笔為你收集整理的人脸识别准确概率计算——超详细的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。