【python+OpenCV+dlib】實現(xiàn)從視頻中檢測人臉數(shù)并保存最清晰的人臉

運行環(huán)境:python 3.7.4+OpenCV 4.1.2.30+dlib 19.16.0+cmake 3.15.3冈爹,此外還有visual studio2019和boost必須也要有,這些都可以在百度上搜到并下載奋构,注意版本手趣,dlib和cmake是我無數(shù)次失敗后才找到的對應的版本晌该,不然會在配置時出錯。
本程序的整體思路是先利用OpenCV加載視頻,利用dlib提供的predictor和model獲取人臉及特征气笙,最后再利用cv2.Laplacian(face1次企,face2).var()方法獲取清晰度評估。
利用dlib進行人臉識別時需要以下兩個文件:1潜圃、shape_predictor_68_face_landmarks.dat缸棵;
2、dlib_face_recognition_resnet_model_v1.dat
下載地址:http://dlib.net/files/
如果對你有所幫助請點關(guān)注谭期,謝謝堵第!
提醒一下,2020年4月之前不要作為研究生結(jié)課作業(yè)使用

import cv2,dlib,os,glob,numpy,time


# 聲明各個資源路徑
super_path = os.path.abspath("..")+"/resourses/"
predictor_path = super_path + "shape_predictor_68_face_landmarks.dat"
model_path = super_path + "dlib_face_recognition_resnet_model_v1.dat"
img_path = super_path + "pictures"
video_path = super_path + "111.mp4"

# 加載視頻
video = cv2.VideoCapture(video_path)

# 加載模型
detector = dlib.get_frontal_face_detector()
sp = dlib.shape_predictor(predictor_path)
facerec = dlib.face_recognition_model_v1(model_path)

# 創(chuàng)建窗口
cv2.namedWindow("人臉識別", cv2.WINDOW_KEEPRATIO)
cv2.resizeWindow("人臉識別", 300,540)

descriptors = []
faces = []
# 處理視頻隧出,按幀處理
suc,frame = video.read()
flag = True                  # 標記是否是第一次迭代
i = 0                        # 記錄當前迭代到的幀位置
while suc:
    if i % 3 == 0:           # 每3幀截取一幀
        # 轉(zhuǎn)為灰度圖像處理
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        dets = detector(gray, 1)        # 檢測幀圖像中的人臉
        # 處理檢測到的每一張人臉
        for k,d in enumerate(dets):
            shape = sp(gray,d)
            # print(d, d.left(), d.right(), d.bottom(), d.top())
            cv2.rectangle(frame, (d.left(), d.top()), (d.right(), d.bottom()), (0, 255, 0), 2)   # 對人臉畫框
            face_descriptor = facerec.compute_face_descriptor(frame, shape)      # 提取特征
            v = numpy.array(face_descriptor)
            # 將第一張人臉照片直接保存
            if flag:
                descriptors.append(v)
                faces.append(frame)
                flag = False
            else:
                sign = True                 # 用來標記當前人臉是否為新的
                l = len(descriptors)
                for i in range(l):
                    distance = numpy.linalg.norm(descriptors[i] - v)    # 計算兩張臉的距離
                    # 取閾值0.5踏志,距離小于0.5則認為人臉已出現(xiàn)過
                    if distance < 0.5:
                        # print(faces[i].shape)
                        face_gray = cv2.cvtColor(faces[i], cv2.COLOR_BGR2GRAY)
                        # 比較兩張人臉的清晰度,保存更清晰的人臉
                        if cv2.Laplacian(gray, cv2.CV_64F).var() > cv2.Laplacian(face_gray, cv2.CV_64F).var():
                            faces[i] = frame
                        sign = False
                        break
                # 如果是新的人臉則保存
                if sign:
                    descriptors.append(v)
                    faces.append(frame)
        cv2.imshow("人臉識別", frame)      # 在窗口中顯示
        index = cv2.waitKey(1)
        if index == 27:
            video.release()
            cv2.destroyWindow("人臉識別")
            break
    suc,frame = video.read()
    i += 1

print(len(descriptors))     # 輸出不同的人臉數(shù)

# 將不同的比較清晰的人臉照片輸出到本地
j = 1
for fc in faces:
    cv2.imwrite(super_path + "/result/" + str(j) +".jpg", fc)
    j += 1
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末胀瞪,一起剝皮案震驚了整個濱河市针余,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌凄诞,老刑警劉巖圆雁,帶你破解...
    沈念sama閱讀 222,627評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異帆谍,居然都是意外死亡伪朽,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評論 3 399
  • 文/潘曉璐 我一進店門汛蝙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來烈涮,“玉大人,你說我怎么就攤上這事窖剑〖崆ⅲ” “怎么了?”我有些...
    開封第一講書人閱讀 169,346評論 0 362
  • 文/不壞的土叔 我叫張陵西土,是天一觀的道長酪术。 經(jīng)常有香客問我,道長翠储,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 60,097評論 1 300
  • 正文 為了忘掉前任橡疼,我火速辦了婚禮援所,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘欣除。我一直安慰自己住拭,他們只是感情好,可當我...
    茶點故事閱讀 69,100評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著滔岳,像睡著了一般杠娱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上谱煤,一...
    開封第一講書人閱讀 52,696評論 1 312
  • 那天摊求,我揣著相機與錄音,去河邊找鬼刘离。 笑死室叉,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的硫惕。 我是一名探鬼主播茧痕,決...
    沈念sama閱讀 41,165評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼恼除!你這毒婦竟也來了踪旷?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,108評論 0 277
  • 序言:老撾萬榮一對情侶失蹤豁辉,失蹤者是張志新(化名)和其女友劉穎令野,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體秋忙,經(jīng)...
    沈念sama閱讀 46,646評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡彩掐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,709評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了灰追。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片堵幽。...
    茶點故事閱讀 40,861評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖弹澎,靈堂內(nèi)的尸體忽然破棺而出朴下,到底是詐尸還是另有隱情,我是刑警寧澤苦蒿,帶...
    沈念sama閱讀 36,527評論 5 351
  • 正文 年R本政府宣布殴胧,位于F島的核電站,受9級特大地震影響佩迟,放射性物質(zhì)發(fā)生泄漏团滥。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,196評論 3 336
  • 文/蒙蒙 一报强、第九天 我趴在偏房一處隱蔽的房頂上張望灸姊。 院中可真熱鬧,春花似錦秉溉、人聲如沸力惯。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽父晶。三九已至哮缺,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間甲喝,已是汗流浹背尝苇。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留俺猿,地道東北人茎匠。 一個月前我還...
    沈念sama閱讀 49,287評論 3 379
  • 正文 我出身青樓,卻偏偏與公主長得像押袍,于是被迫代替她去往敵國和親诵冒。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,860評論 2 361

推薦閱讀更多精彩內(nèi)容