綜合了無數網上記錄過這個問題的文章,最後終於安裝成功了!python
首先有些文章說dlib從19.9版本起開始就不用cmake和boost的支持了,多是我安裝的dlib版本的問題?最後仍是經過vs2015 + cmake + dlib19.16安裝上了,以下圖所示函數
最開始我沒有安裝vs2015,而後下載了cmake和dlib19.16,配置好cmake環境變量後直接在dlib目錄下經過python setup.py install進行安裝,結果報錯,後來安裝了vs2015,再運行python setup.py install仍是報同樣的錯誤,後來無心中看到 一篇 外國友人的帖子也是關於cmake報錯的,以下圖所示this
原文地址 https://stackoverflow.com/questions/14807294/how-to-install-cmake-c-compiler-and-cxx-compilerspa
其中寫道remove 'CMakeCache.txt' 讓我恍然大悟,難道編譯錯誤以後下一次編譯還會讀取以前編譯的文件嗎,試着刪除了CMakeCache.txt,而後再執行python setup.py install,竟然就這樣成功了!我覺着CMake應該改進一下這個編譯機制,每次編譯都讀取新的配置文件,這樣就不會形成意想不到的困擾了。code
隨後繼續安裝face_recognition模塊,遇到了資源地址鏈接超時的問題,因而把資源地址指向國內資源地址,問題解決!orm
pip3 install face_recognition -i https://pypi.douban.com/simple/
安裝成功!在pycharm中試了一下導入dlib也沒問題blog
1 import face_recognition 2 from PIL import Image 3 4 image = face_recognition.load_image_file("known_person/uw.jpg") 5 face_locations = face_recognition.face_locations(image) 6 print(type(face_locations)) 7 # 打印:我從圖片中找到了 多少 張人臉 8 print("I found {} faces in this photogragh.".format(len(face_locations))) 9 # 循環找到的全部人臉 10 for face in face_locations: 11 top,right,bottom,left = face 12 print("a face is located at pixel location Top:{},left:{},Bottom:{},Right:{}".format(top,left,bottom,right)) 13 # 指定人臉的位置信息,而後顯示人臉圖片 14 face_image = image[top:bottom,left:right] 15 pil_image = Image.fromarray(face_image) 16 pil_image.show()
上面是在網上查到了一個代碼實例,有的圖片識別準確,不過有些圖片識別的時候會少一我的,好比下面這張圖,識別出來只有三我的,舉手的那個黑人沒有識別出來。不知道是由於陰影的問題仍是胳膊影響了頭像的識別,後續再研究吧。圖片
下面這張圖就成功的識別出了11人ip
再補充一下OpenCV識別出來的結果,更加直觀一些,下面貼出代碼utf-8
1 # -*- coding:utf-8 -*- 2 3 import cv2 4 import face_recognition 5 from PIL import ImageColor 6 import chardet 7 #讀取圖片並識別人臉 8 img = face_recognition.load_image_file("known_person/uw.jpg") 9 face_locations = face_recognition.face_locations(img) 10 print(face_locations) 11 12 #調用opencv函數顯示圖片 13 14 img = cv2.imread("known_person/uw.jpg") 15 cv2.namedWindow("from") 16 17 cv2.imshow("from",img) 18 19 #遍歷每一個人臉,並標註 20 faceNum = len(face_locations) 21 for i in range(0,faceNum): 22 top = face_locations[i][0] 23 right = face_locations[i][1] 24 bottom = face_locations[i][2] 25 left = face_locations[i][3] 26 27 start = (left,top) 28 end = (right,bottom) 29 color = ImageColor.getrgb("#FFFF00") 30 thickness = 2 31 cv2.rectangle(img,start,end,color,thickness) 32 33 #顯示識別結果 34 35 cv2.namedWindow("to") 36 cv2.imshow("to",img) 37 38 cv2.waitKey(0) 39 cv2.destroyAllWindows()
一樣沒有識別出左二的隊員。。。
這張西班牙國家隊全家福無一遺漏!