當前位置:首頁 » 操作系統 » dlib人臉檢測演算法

dlib人臉檢測演算法

發布時間: 2023-06-18 16:54:27

『壹』 python人臉識別所用的優化演算法有什麼

python三步實現人臉識別

Face Recognition軟體包

這是世界上最簡單的人臉識別庫了。你可以通過Python引用或者命令行的形式使用它,來管理和識別人臉。

該軟體包使用dlib中最先進的人臉識別深度學習演算法,使得識別准確率在《Labled Faces in the world》測試基準下達到了99.38%。

它同時提供了一個叫face_recognition的命令行工具,以便你可以用命令行對一個文件夾中的圖片進行識別操作。

特性

在圖片中識別人臉

找到圖片中所有的人臉

這里是一個例子:

1
  • https://github.com/ageitgey/face_recognition/blob/master/examples/recognize_faces_in_picture
  • 『貳』 誰用過python中的第三方庫face recognition

    簡介
    該庫可以通過python或者命令行即可實現人臉識別的功能。使用dlib深度學習人臉識別技術構建,在戶外臉部檢測資料庫基準(Labeled Faces in the Wild)上的准確率為99.38%。
    在github上有相關的鏈接和API文檔。

    在下方為提供的一些相關源碼或是文檔。當前庫的版本是v0.2.0,點擊docs可以查看API文檔,我們可以查看一些函數相關的說明等。

    安裝配置
    安裝配置很簡單,按照github上的說明一步一步來就可以了。
    根據你的python版本輸入指令:
    pip install face_recognition11

    或者
    pip3 install face_recognition11

    正常來說,安裝過程中會出錯,會在安裝dlib時出錯,可能報錯也可能會卡在那不動。因為pip在編譯dlib時會出錯,所以我們需要手動編譯dlib再進行安裝。

    按照它給出的解決辦法:
    1、先下載下來dlib的源碼。
    git clone

    2、編譯dlib。
    cd dlib
    mkdir build
    cd build
    cmake .. -DDLIB_USE_CUDA=0 -DUSE_AVX_INSTRUCTIONS=1
    cmake --build1234512345

    3、編譯並安裝python的拓展包。
    cd ..
    python3 setup.py install --yes USE_AVX_INSTRUCTIONS --no DLIB_USE_CUDA1212

    注意:這個安裝步驟是默認認為沒有GPU的,所以不支持cuda。
    在自己手動編譯了dlib後,我們可以在python中import dlib了。
    之後再重新安裝,就可以配置成功了。
    根據你的python版本輸入指令:
    pip install face_recognition11

    或者
    pip3 install face_recognition11

    安裝成功之後,我們可以在python中正常import face_recognition了。

    編寫人臉識別程序
    編寫py文件:
    # -*- coding: utf-8 -*-
    #

    # 檢測人臉
    import face_recognition
    import cv2

    # 讀取圖片並識別人臉
    img = face_recognition.load_image_file("silicon_valley.jpg")
    face_locations = face_recognition.face_locations(img)
    print face_locations

    # 調用opencv函數顯示圖片
    img = cv2.imread("silicon_valley.jpg")
    cv2.namedWindow("原圖")
    cv2.imshow("原圖", img)

    # 遍歷每個人臉,並標注
    faceNum = len(face_locations)
    for i in range(0, faceNum):
    top = face_locations[i][0]
    right = face_locations[i][1]
    bottom = face_locations[i][2]
    left = face_locations[i][3]

    start = (left, top)
    end = (right, bottom)

    color = (55,255,155)
    thickness = 3
    cv2.rectangle(img, start, end, color, thickness)

    # 顯示識別結果
    cv2.namedWindow("識別")
    cv2.imshow("識別", img)

    cv2.waitKey(0)
    cv2.destroyAllWindows()

    注意:這里使用了python-OpenCV,一定要配置好了opencv才能運行成功。
    運行結果:
    程序會讀取當前目錄下指定的圖片,然後識別其中的人臉,並標注每個人臉。
    (使用圖片來自美劇矽谷)

    編寫人臉比對程序
    首先,我在目錄下放了幾張圖片:

    這里用到的是一張喬布斯的照片和一張奧巴馬的照片,和一張未知的照片。
    編寫程序:
    # 識別圖片中的人臉
    import face_recognition
    jobs_image = face_recognition.load_image_file("jobs.jpg");
    obama_image = face_recognition.load_image_file("obama.jpg");
    unknown_image = face_recognition.load_image_file("unknown.jpg");

    jobs_encoding = face_recognition.face_encodings(jobs_image)[0]
    obama_encoding = face_recognition.face_encodings(obama_image)[0]
    unknown_encoding = face_recognition.face_encodings(unknown_image)[0]

    results = face_recognition.compare_faces([jobs_encoding, obama_encoding], unknown_encoding )
    labels = ['jobs', 'obama']

    print('results:'+str(results))

    for i in range(0, len(results)):
    if results[i] == True:
    print('The person is:'+labels[i])

    運行結果:

    識別出未知的那張照片是喬布斯的。
    攝像頭實時識別
    代碼:
    # -*- coding: utf-8 -*-
    import face_recognition
    import cv2

    video_capture = cv2.VideoCapture(1)

    obama_img = face_recognition.load_image_file("obama.jpg")
    obama_face_encoding = face_recognition.face_encodings(obama_img)[0]

    face_locations = []
    face_encodings = []
    face_names = []
    process_this_frame = True

    while True:
    ret, frame = video_capture.read()

    small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25)

    if process_this_frame:
    face_locations = face_recognition.face_locations(small_frame)
    face_encodings = face_recognition.face_encodings(small_frame, face_locations)

    face_names = []
    for face_encoding in face_encodings:
    match = face_recognition.compare_faces([obama_face_encoding], face_encoding)

    if match[0]:
    name = "Barack"
    else:
    name = "unknown"

    face_names.append(name)

    process_this_frame = not process_this_frame

    for (top, right, bottom, left), name in zip(face_locations, face_names):
    top *= 4
    right *= 4
    bottom *= 4
    left *= 4

    cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)

    cv2.rectangle(frame, (left, bottom - 35), (right, bottom), (0, 0, 255), 2)
    font = cv2.FONT_HERSHEY_DUPLEX
    cv2.putText(frame, name, (left+6, bottom-6), font, 1.0, (255, 255, 255), 1)

    cv2.imshow('Video', frame)

    if cv2.waitKey(1) & 0xFF == ord('q'):
    break

    video_capture.release()
    cv2.destroyAllWindows()5455

    識別結果:
    我直接在手機上網路了幾張圖試試,程序識別出了奧巴馬。

    這個庫很cool啊!

    『叄』 有一張人臉的側臉圖像,如何用python及相關的庫來計算人臉轉過的角度。

    這個很難辦到,不過可以通過判斷關鍵點的特點進行判斷,但是准確率不高
    前言
    很多人都認為人臉識別是一項非常難以實現的工作,看到名字就害怕,然後心懷忐忑到網上一搜,看到網上N頁的教程立馬就放棄了。這些人里包括曾經的我自己。其實如果如果你不是非要深究其中的原理,只是要實現這一工作的話,人臉識別也沒那麼難。今天我們就來看看如何在40行代碼以內簡單地實現人臉識別。
    一點區分
    對於大部分人來說,區分人臉檢測和人臉識別完全不是問題。但是網上有很多教程有無無意地把人臉檢測說成是人臉識別,誤導群眾,造成一些人認為二者是相同的。其實,人臉檢測解決的問題是確定一張圖上有木有人臉,而人臉識別解決的問題是這個臉是誰的。可以說人臉檢測是是人識別的前期工作。今天我們要做的是人臉識別。
    所用工具
    Anaconda 2——Python 2
    Dlib
    scikit-image
    Dlib
    對於今天要用到的主要工具,還是有必要多說幾句的。Dlib是基於現代C++的一個跨平台通用的框架,作者非常勤奮,一直在保持更新。Dlib內容涵蓋機器學習、圖像處理、數值演算法、數據壓縮等等,涉獵甚廣。更重要的是,Dlib的文檔非常完善,例子非常豐富。就像很多庫一樣,Dlib也提供了Python的介面,安裝非常簡單,用pip只需要一句即可:
    pip install dlib
    上面需要用到的scikit-image同樣只是需要這么一句:
    pip install scikit-image
    註:如果用pip install dlib安裝失敗的話,那安裝起來就比較麻煩了。錯誤提示很詳細,按照錯誤提示一步步走就行了。

    人臉識別
    之所以用Dlib來實現人臉識別,是因為它已經替我們做好了絕大部分的工作,我們只需要去調用就行了。Dlib裡面有人臉檢測器,有訓練好的人臉關鍵點檢測器,也有訓練好的人臉識別模型。今天我們主要目的是實現,而不是深究原理。感興趣的同學可以到官網查看源碼以及實現的參考文獻。今天的例子既然代碼不超過40行,其實是沒啥難度的。有難度的東西都在源碼和論文里。
    首先先通過文件樹看一下今天需要用到的東西:

    准備了六個候選人的圖片放在candidate-faces文件夾中,然後需要識別的人臉圖片test.jpg。我們的工作就是要檢測到test.jpg中的人臉,然後判斷她到底是候選人中的誰。另外的girl-face-rec.py是我們的python腳本。shape_predictor_68_face_landmarks.dat是已經訓練好的人臉關鍵點檢測器。dlib_face_recognition_resnet_model_v1.dat是訓練好的ResNet人臉識別模型。ResNet是何凱明在微軟的時候提出的深度殘差網路,獲得了 ImageNet 2015 冠軍,通過讓網路對殘差進行學習,在深度和精度上做到了比
    CNN 更加強大。
    1. 前期准備
    shape_predictor_68_face_landmarks.dat和dlib_face_recognition_resnet_model_v1.dat都可以在這里找到。
    然後准備幾個人的人臉圖片作為候選人臉,最好是正臉。放到candidate-faces文件夾中。
    本文這里准備的是六張圖片,如下:

    她們分別是

    然後准備四張需要識別的人臉圖像,其實一張就夠了,這里只是要看看不同的情況:

    可以看到前兩張和候選文件中的本人看起來還是差別不小的,第三張是候選人中的原圖,第四張圖片微微側臉,而且右側有陰影。
    2.識別流程
    數據准備完畢,接下來就是代碼了。識別的大致流程是這樣的:
    3.代碼
    代碼不做過多解釋,因為已經注釋的非常完善了。以下是girl-face-rec.py
    # -*- coding: UTF-8 -*-
    import sys,os,dlib,glob,numpy
    from skimage import io
    if len(sys.argv) != 5:
    print "請檢查參數是否正確"
    exit()
    # 1.人臉關鍵點檢測器
    predictor_path = sys.argv[1]
    # 2.人臉識別模型
    face_rec_model_path = sys.argv[2]
    # 3.候選人臉文件夾
    faces_folder_path = sys.argv[3]
    # 4.需識別的人臉
    img_path = sys.argv[4]
    # 1.載入正臉檢測器
    detector = dlib.get_frontal_face_detector()
    # 2.載入人臉關鍵點檢測器
    sp = dlib.shape_predictor(predictor_path)
    # 3. 載入人臉識別模型
    facerec = dlib.face_recognition_model_v1(face_rec_model_path)
    # win = dlib.image_window()
    # 候選人臉描述子list
    descriptors = []
    # 對文件夾下的每一個人臉進行:
    # 1.人臉檢測
    # 2.關鍵點檢測
    # 3.描述子提取
    for f in glob.glob(os.path.join(faces_folder_path, "*.jpg")):
    print("Processing file: {}".format(f))
    img = io.imread(f)
    #win.clear_overlay()
    #win.set_image(img)
    # 1.人臉檢測
    dets = detector(img, 1)
    print("Number of faces detected: {}".format(len(dets)))
    for k, d in enumerate(dets):
    # 2.關鍵點檢測
    shape = sp(img, d)
    # 畫出人臉區域和和關鍵點
    # win.clear_overlay()
    # win.add_overlay(d)
    # win.add_overlay(shape)
    # 3.描述子提取,128D向量
    face_descriptor = facerec.compute_face_descriptor(img, shape)
    # 轉換為numpy array
    v = numpy.array(face_descriptor)
    descriptors.append(v)
    # 對需識別人臉進行同樣處理
    # 提取描述子,不再注釋
    img = io.imread(img_path)
    dets = detector(img, 1)
    dist = []
    for k, d in enumerate(dets):
    shape = sp(img, d)
    face_descriptor = facerec.compute_face_descriptor(img, shape)
    d_test = numpy.array(face_descriptor)
    # 計算歐式距離
    for i in descriptors:
    dist_ = numpy.linalg.norm(i-d_test)
    dist.append(dist_)
    # 候選人名單
    candidate = ['Unknown1','Unknown2','Shishi','Unknown4','Bingbing','Feifei']
    # 候選人和距離組成一個dict
    c_d = dict(zip(candidate,dist))
    cd_sorted = sorted(c_d.iteritems(), key=lambda d:d[1])
    print "\n The person is: ",cd_sorted[0][0]
    dlib.hit_enter_to_continue()

    4.運行結果
    我們在.py所在的文件夾下打開命令行,運行如下命令
    python girl-face-rec.py 1.dat 2.dat ./candidate-faecs test1.jpg
    由於shape_predictor_68_face_landmarks.dat和dlib_face_recognition_resnet_model_v1.dat名字實在太長,所以我把它們重命名為1.dat和2.dat。
    運行結果如下:
    The person is Bingbing。
    記憶力不好的同學可以翻上去看看test1.jpg是誰的圖片。有興趣的話可以把四張測試圖片都運行下試試。
    這里需要說明的是,前三張圖輸出結果都是非常理想的。但是第四張測試圖片的輸出結果是候選人4。對比一下兩張圖片可以很容易發現混淆的原因。
    機器畢竟不是人,機器的智能還需要人來提升。
    有興趣的同學可以繼續深入研究如何提升識別的准確率。比如每個人的候選圖片用多張,然後對比和每個人距離的平均值之類的。全憑自己了。

    『肆』 如何提高python下的dlib人臉檢測速度

    Dlib is capable of detecting faces in very small areas (80x80 pixels). You are probably sending raw WebCam frames at approximately 1280x720 resolution, which is not necessary. I recommend from my experience to rece the frames about a quarter of the original resolution. Yes, 320x180 is fine for Dlib. In consequence you will get 4x speed.

    · try turning on the compilation optimizations while building Dlib, you will get significantly improvement in speed.

    · Dlib works faster with grayscale images. You do not need the color on the webcam frame. You can use OpenCV to convert into grayscale the previously reced in size frame.

    · Dlib takes its time finding faces but is extremely fast finding landmarks on faces. Only if your Webcam provides a high framerate (24-30fps), you could skip some frames because faces normally doesn't move so much.

    『伍』 ai怎麼將眼睛對齊在一起

    ai將眼睛對齊在一起方法如下。
    1、檢測人臉:使用人臉檢測演算法(如Haar或Cascade分類器)來檢測圖像或視頻中的人臉。
    2、提取眼睛區域:通過在人臉圖像上定義一個畢備敗矩形框來標識眼睛區域,並從圖像中提取出眼睛的部分。
    3、關鍵點檢測:對於每個眼睛,使用關鍵點檢測器(如Dlib或OpenCV庫)來查找它們的位置和特徵滾宴,例如瞳孔或睫毛位置。
    4、計算眼睛中心點:由於不同人的眼睛大小和位置可能不同,因此需要通過計手顫算每個眼睛的中心點來將其對齊。中心點可以根據檢測到的關鍵點坐標進行計算。
    5、對齊眼睛:根據計算得到的中心點,對每個眼睛進行調整,使它們的位置對齊。

    熱點內容
    linux字體緩存 發布:2025-03-22 00:49:09 瀏覽:978
    明銳pro為什麼比高爾夫配置還要高 發布:2025-03-22 00:24:43 瀏覽:130
    賣房解壓擔保 發布:2025-03-22 00:18:57 瀏覽:450
    java打開頁面 發布:2025-03-22 00:18:41 瀏覽:448
    mt4ea源碼 發布:2025-03-21 23:59:08 瀏覽:532
    文件夾加密隱藏 發布:2025-03-21 23:56:24 瀏覽:18
    setjava用法 發布:2025-03-21 23:54:59 瀏覽:182
    spring配置的主要標簽有哪些 發布:2025-03-21 23:54:57 瀏覽:174
    python3range 發布:2025-03-21 23:42:56 瀏覽:347
    安卓國外手機在哪個平台買 發布:2025-03-21 23:39:40 瀏覽:118