[碩一下][week 17]face angle and landmark === # 一、face detection with MTCNN ### 1. 環境 * 原本dlib版本 * version : `19.9.0` * source : `conda-forge` * 遇到問題 * 無法同時安裝tensorflow * 解決 * 更改source並更新dlib * 使用`conda install -c gagphil1 dlib`將dlib更新至`19.16.0` ### 2. 輸出型態改變 * dlib輸出型態 * [(x1, y1), (x2, y2)] * ![](https://i.imgur.com/z8zAx7O.png) * 修改程式碼 * source :: [dlib_box_up_the_head.html](http://johnny88850tw.asuscomm.com/hackmd/meeting/s1d_week15/dlib_box_up_the_head.html) * 修改`dlibLandmark`副程式如下(`detector`使用`MTCNN`) ```python= def MTCNNLandmark(frame): start = timeit.default_timer() bboxes, faces = detector.run(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)) print('face detection time cost : ', timeit.default_timer() - start); start = timeit.default_timer(); faces = dlib.rectangles() for box in bboxes: faces.append(dlib.rectangle(int(box[0]), int(box[1]), int(box[2]), int(box[3]))) gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) result = [] for face in faces: pred = predictor(gray, face) result.append(getDlibLandmark(pred)) print('pred and put landmark time cost : ', timeit.default_timer() - start) return result ``` ### 輸出結果 :: [圖片來源](https://i.ytimg.com/vi/wJFG-O0JpVI/maxresdefault.jpg) * ![](https://i.imgur.com/eqr4vhH.png) :::success 可以發現,dlib在就算有偵測出人臉的情況下,失真程度還是非常高,只有在dlib的face detector有偵測到的情況下較不會失真 ::: ___ # 二、face angle問題 * 選取兩個例子比較 * 旋轉角度 :: [155.41722558 44.15150689 159.04108788] [旋轉結果](http://johnny88850tw.asuscomm.com/hackmd/meeting/s1d_week17/face1.gif) * ![](https://i.imgur.com/2qVIDGY.png) * 旋轉角度 :: [167.46748286 16.41903085 -1.73173953] [旋轉結果](http://johnny88850tw.asuscomm.com/hackmd/meeting/s1d_week17/face2.gif) * ![](https://i.imgur.com/3YI2qjA.png) * 角度是直接由`euler angle`輸出轉換過去的,再用 ___ # 三、pytorch landmark測試準度 > 同樣以上面那個臉當作例子 > ![](https://i.imgur.com/w3aFKIv.png) ### 隨機挑選當作base * 我挑選隨機一個臉來當作base,用[siavashk/pycpd](https://github.com/siavashk/pycpd)程式碼(下載資料夾`pycpd`所有檔案) * 直接看的話會發現其實還滿準的 * ![](https://i.imgur.com/n80BLUl.png) * ![](https://i.imgur.com/cgomuiz.png) * ![](https://i.imgur.com/OvIbtdd.png) * 但是有些匹配結果怪怪的 * ![](https://i.imgur.com/81hHipg.png) * 好像是pycpd在迭代過程出現了問題 ___ # 參考資料 * Issues * [How can i convert python tuple to dlib.rectangle type in python??](https://github.com/davisking/dlib/issues/1359) * dlib * [dlib.rectangles](http://dlib.net/python/index.html#dlib.rectangles.__init__) * [dlib.rectangle](http://dlib.net/python/index.html#dlib.rectangle) * matplotlib animation * [Animation 动画](https://morvanzhou.github.io/tutorials/data-manipulation/plt/5-1-animation/) * [python matplotlib繪製gif動圖以及儲存](https://www.itread01.com/content/1546708090.html) * pycpd * [siavashk/pycpd](https://github.com/siavashk/pycpd) * [PyCPD: Tutorial on the Coherent Point Drift Algorithm](http://siavashk.github.io/2017/05/14/coherent-point-drift/)