訂閱
糾錯
加入自媒體

使用Python+OpenCV實現(xiàn)神經(jīng)網(wǎng)絡預處理人臉圖像的快速指南

對于眼睛,我們以類似的方式進行搜索,但將搜索范圍縮小到面部矩形:eyes = eyes_cascade.detectMultiScale(img[y:y+h, x:x+w])for (ex, ey, ew, eh) in eyes:    cv2.rectangle(img, (x+ex, y+ey), (x+ex+ew, y+ey+eh),                   (255, 255, 255), 1)成啦!

雖然這是預期的結(jié)果,但我們會遇到很多其他方面的問題。很多時候,我們沒有正面和清晰的人的臉,甚至……沒有眼睛:

眼睛是被白色包圍的黑色污點:

此處有4只眼,僅檢測到3只眼:

矯正臉部通過計算兩只眼睛之間的角度,我們可以拉直臉部圖像(這很容易)。計算后,我們僅需兩個步驟即可旋轉(zhuǎn)圖像:rows, cols = img.shape[:2]M = cv2.getRotationMatrix2D((cols/2, rows/2), <angle>, 1)img_rotated = cv2.warpAffine(face_orig, M, (cols,rows))

裁剪臉部為了幫助我們的神經(jīng)網(wǎng)絡完成人臉分類任務,最好去掉背景、衣服或配飾等外部干擾信息。在這種情況下,裁剪臉部是一個很好的選擇。我們需要做的第一件事是從矯正的人臉圖像中再次得到人臉矩形。然后我們需要做一個步驟:我們可以按原樣裁剪矩形區(qū)域,或者添加一個額外的填充,這樣我們可以獲得更多的空間。這取決于要解決的具體問題(按年齡、性別、種族等分類);也許你想要更多的頭發(fā);也許不需要。

最后,裁剪(p表示填充):cv2.imwrite('crop.jpg', img_rotated[y-p+1:y+h+p, x-p+1:x+w+p])看!這張臉是孤立的,幾乎可以進行深度學習了

圖像縮放神經(jīng)網(wǎng)絡需要所有的輸入圖像具有相同的形狀和大小,因為GPU在同一時間對一批圖像應用相同的指令,以達到超級快的速度。我們可以動態(tài)地調(diào)整它們的大小,但這可能不是一個好主意,因為在訓練期間將對每個文件執(zhí)行多個轉(zhuǎn)換。因此,如果我們的數(shù)據(jù)集有很多圖像,我們應該考慮在訓練階段之前實現(xiàn)批量調(diào)整大小的過程。在OpenCV中,我們可以使用resize()函數(shù)執(zhí)行向下縮放和向上縮放,有幾種可用的插值方法,指定最終尺寸的例子:cv2.resize(img, (<width>, <height>), interpolation=cv2.INTER_LINEAR)為了縮小圖像,OpenCV建議使用INTER_AREA插值,而要放大圖像,可以使用INTER_CUBIC(慢)或INTER_LINEAR(快,效果仍然不錯)。最后是質(zhì)量和時間之間的權衡。我做了一個快速的升級比較:

<上一頁  1  2  3  下一頁>  
聲明: 本文由入駐維科號的作者撰寫,觀點僅代表作者本人,不代表OFweek立場。如有侵權或其他問題,請聯(lián)系舉報。

發(fā)表評論

0條評論,0人參與

請輸入評論內(nèi)容...

請輸入評論/評論長度6~500個字

您提交的評論過于頻繁,請輸入驗證碼繼續(xù)

暫無評論

暫無評論

    掃碼關注公眾號
    OFweek人工智能網(wǎng)
    獲取更多精彩內(nèi)容
    文章糾錯
    x
    *文字標題:
    *糾錯內(nèi)容:
    聯(lián)系郵箱:
    *驗 證 碼:

    粵公網(wǎng)安備 44030502002758號