<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          快速指南:使用OpenCV預(yù)處理神經(jīng)網(wǎng)絡(luò)中的面部圖像的

          共 3797字,需瀏覽 8分鐘

           ·

          2020-07-28 16:42


          點(diǎn)擊上方小白學(xué)視覺”,選擇加"星標(biāo)"或“置頂

          重磅干貨,第一時(shí)間送達(dá)

          本期將介紹臉部檢測、眼睛檢測;圖像拉直、裁剪、調(diào)整大小、歸一化等內(nèi)容

          目前,涉及面部分類的計(jì)算機(jī)視覺問題,通常都需要使用深度學(xué)習(xí)。因此在將圖像輸入神經(jīng)網(wǎng)絡(luò)之前,需要經(jīng)過一個(gè)預(yù)處理階段,以便達(dá)到更好的分類效果。

          圖像預(yù)處理通常來說非常簡單,只需執(zhí)行幾個(gè)簡單的步驟即可輕松完成。但為了提高模型的準(zhǔn)確性,這也是一項(xiàng)非常重要的任務(wù)。對于這些問題,我們可以使用OpenCV完成:一個(gè)針對(實(shí)時(shí))計(jì)算機(jī)視覺應(yīng)用程序的高度優(yōu)化的開源庫,包括C ++,Java和Python語言。

          接下來我們將一起探索可能會(huì)應(yīng)用在每個(gè)面部分類或識(shí)別問題上應(yīng)用的基本原理,示例代碼。

          注意:下面使用的所有圖像均來自memes.


          圖片載入

          我們使用該imread()函數(shù)加載圖像,并指定文件路徑和圖像模式。第二個(gè)參數(shù)對于運(yùn)行基本通道和深度轉(zhuǎn)換很重要。

          img = cv2.imread('path/image.jpg', cv2.IMREAD_COLOR)

          要查看圖像可以使用imshow()功能:

          cv2.imshow(img)

          如果使用的type(img)話,將顯示該圖像的尺寸包括高度、重量通道數(shù)。

          彩色圖像有3個(gè)通道:藍(lán)色,綠色和紅色(在OpenCV中按此順序)。

          我們可以很輕松查看單個(gè)通道:

          # Example for green channel
          img[:, :, 0]; img[:, :, 2]; cv2.imshow(img)

          Grayscale version

          灰度圖像

          為了避免在人臉圖像分類過程中存在的干擾,通常選擇黑白圖像(當(dāng)然也可以使用彩圖!請小伙伴們自行嘗試兩者并比較結(jié)果)。要獲得灰度圖像,我們只需要在圖像加載函數(shù)中通過將適當(dāng)?shù)闹底鳛榈诙€(gè)參數(shù)傳遞來指定它:

          img = cv2.imread('path/image.jpg', cv2.IMREAD_GRAYSCALE)

          現(xiàn)在,我們的圖像只有一個(gè)灰度通道了!

          面部和眼睛檢測

          在處理人臉分類問題時(shí),我們可能需要先對圖形進(jìn)行裁剪和拉直,再進(jìn)行人臉檢測以驗(yàn)證是否有人臉的存在。為此,我們將使用OpenCV中自帶的的基于Haar特征的級(jí)聯(lián)分類器進(jìn)行對象檢測。

          首先,我們選擇用于面部和眼睛檢測的預(yù)訓(xùn)練分類器。以下時(shí)可用的XML文件列表:

          1)對于面部檢測,OpenCV提供了這些(從最松的先驗(yàn)到最嚴(yán)格的先驗(yàn)):

          ? haarcascade_frontalface_default.xml

          ? haarcascade_frontalface_alt.xml

          ? haarcascade_frontalface_alt2.xml

          ? haarcascade_frontalface_alt_tree.xml

          2)對于眼睛檢測,我們可以選擇以下兩種:

          ? haarcascade_eye.xml

          ? haarcascade_eye_tree_eyeglasses.xml(正在嘗試處理眼鏡!)

          我們以這種方式加載預(yù)訓(xùn)練的分類器:

          face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + ‘haarcascade_frontalface_default.xml’)eyes_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + ‘haarcascade_eye.xml’)

          我們可以測試幾種組合,但我們要記住一點(diǎn),沒有一種分類器在所有情況下都是最好的(如果第一個(gè)分類失敗,您可以嘗試第二個(gè)分類,甚至嘗試所有分類)。

          對于人臉檢測,我們可使用以下代碼:

          faces_detected = face_cascade.detectMultiScale(img, scaleFactor=1.1, minNeighbors=5)

          結(jié)果是一個(gè)數(shù)組,其中包含所有檢測到的臉部特征的矩形位置。我們可以很容易地繪制它:

          (x, y, w, h) = faces_detected[0]
          cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 1);
          cv2.imshow(img)

          對于眼睛,我們以類似的方式進(jìn)行,但將搜索范圍縮小到剛剛提取出來的面部矩形框內(nèi):

          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)

          盡管這是預(yù)期的結(jié)果,但是很多時(shí)候再提取的過程中我們會(huì)遇到一些難以解決的問題。比如我們沒有正面清晰的人臉視圖。

          不能正確檢測的案例

          臉部旋轉(zhuǎn)

          通過計(jì)算兩只眼睛之間的角度,我們就可以拉直面部圖像(這很容易)。計(jì)算之后,我們僅需兩個(gè)步驟即可旋轉(zhuǎn)圖像:

          rows, cols = img.shape[:2]
          M = cv2.getRotationMatrix2D((cols/2, rows/2), , 1)
          img_rotated = cv2.warpAffine(face_orig, M, (cols,rows))

          裁臉

          為了幫助我們的神經(jīng)網(wǎng)絡(luò)完成面部分類任務(wù),最好去除外界無關(guān)信息,例如背景,衣服或配件。在這些情況下,面部裁切非常方便。

          我們需要做的第一件事是再次從旋轉(zhuǎn)后的圖像中獲取面部矩形。然后我們需要做出決定:我們可以按原樣裁剪矩形區(qū)域,也可以添加額外的填充,以便在周圍獲得更多空間。這取決于要解決的具體問題(按年齡,性別,種族等分類);也許我們需要保留頭發(fā),也許不需要。

          最后進(jìn)行裁剪(p用于填充):

          cv2.imwrite('crop.jpg', img_rotated[y-p+1:y+h+p, x-p+1:x+w+p])

          現(xiàn)在這張臉的圖像是非常單一的,基本可用于深度學(xué)習(xí):

          圖像調(diào)整大小

          神經(jīng)網(wǎng)絡(luò)需要的所有輸入圖像具有相同的形狀和大小,因?yàn)镚PU應(yīng)用相同的指令處理一批相同大小圖像,可以達(dá)到較快的速度。我們雖然可以隨時(shí)調(diào)整它們的大小,但這并不是一個(gè)好主意,因?yàn)樾枰谟?xùn)練期間將對每個(gè)文件執(zhí)行幾次轉(zhuǎn)換。因此,如果我們的數(shù)據(jù)集包含大量圖像,我們應(yīng)該考慮在訓(xùn)練階段之前實(shí)施批量調(diào)整大小的過程。

          在OpenCV中,我們可以與同時(shí)執(zhí)行縮小和升頻resize(),有幾個(gè)插值方法可用。指定最終大小的示例:

          cv2.resize(img, (, ), interpolation=cv2.INTER_LINEAR)

          要縮小圖像,OpenCV建議使用INTER_AREA插值法,而放大圖像時(shí),可以使用INTER_CUBIC(慢速)或INTER_LINEAR(更快,但效果仍然不錯(cuò))。最后,這是質(zhì)量和時(shí)間之間的權(quán)衡。

          我對升級(jí)進(jìn)行了快速比較:

          前兩個(gè)圖像似乎質(zhì)量更高(但是您可以觀察到一些壓縮偽像)。線性方法的結(jié)果顯然更平滑(沒有對比度)并且噪點(diǎn)更少(黑白圖像證明)。最后一個(gè)像素化。

          歸一化

          我們可以使用normalize()功能使視覺圖像標(biāo)準(zhǔn)化,以修復(fù)非常暗/亮的圖像(甚至可以修復(fù)低對比度)。該歸一化類型是在函數(shù)參數(shù)指定:

          norm_img = np.zeros((300, 300))
          norm_img = cv2.normalize(img, norm_img, 0, 255, cv2.NORM_MINMAX)

          例子:

          當(dāng)使用圖像作為深度卷積神經(jīng)網(wǎng)絡(luò)的輸入時(shí),無需應(yīng)用這種歸一化(上面的結(jié)果對我們來說似乎不錯(cuò),但是并不針對他們的眼睛)。在實(shí)踐中,我們將對每個(gè)通道進(jìn)行適當(dāng)?shù)臍w一化,例如減去均值并除以像素級(jí)別的標(biāo)準(zhǔn)差(這樣我們得到均值0和偏差1)。如果我們使用轉(zhuǎn)移學(xué)習(xí),最好的方法總是使用預(yù)先訓(xùn)練的模型統(tǒng)計(jì)信息。

          結(jié)論

          當(dāng)我們處理面部分類/識(shí)別問題時(shí),如果輸入的圖像不是護(hù)照照片時(shí),檢測和分離面部是一項(xiàng)常見的任務(wù)。

          OpenCV是一個(gè)很好的圖像預(yù)處理任務(wù)庫,不僅限于此。對于許多計(jì)算機(jī)視覺應(yīng)用來說,它也是一個(gè)很好的工具……

          https://www.youtube.com/watch?v=GebcshN4OdE

          https://www.youtube.com/watch?v=z1Cvn3_4yGo

          https://github.com/vjgpt/Face-and-Emotion-Recognition

          交流群

          歡迎加入公眾號(hào)讀者群一起和同行交流,目前有SLAM、三維視覺、傳感器自動(dòng)駕駛、計(jì)算攝影、檢測、分割、識(shí)別、醫(yī)學(xué)影像、GAN、算法競賽等微信群(以后會(huì)逐漸細(xì)分),請掃描下面微信號(hào)加群,備注:”昵稱+學(xué)校/公司+研究方向“,例如:”張三?+?上海交大?+?視覺SLAM“。請按照格式備注,否則不予通過。添加成功后會(huì)根據(jù)研究方向邀請進(jìn)入相關(guān)微信群。請勿在群內(nèi)發(fā)送廣告,否則會(huì)請出群,謝謝理解~


          瀏覽 59
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  最近中文字幕免费MV第二季歌词 | 亚洲一级a人与一级A片 | 亚洲网站视频在线观看 | 外国操逼网站 | 久久精品国产人伦 |