<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 進行年齡和性別檢測

          共 3011字,需瀏覽 7分鐘

           ·

          2020-12-26 11:37

          作者 | AMAN
          來源 |?Python中文社區(qū)


          在本文中,我將帶您完成用 Python 進行機器學(xué)習(xí)的年齡和性別檢測的任務(wù)。年齡和性別檢測屬于計算機視覺的范疇,因此我將在Python中使用OpenCV庫。
          在開始使用Python進行年齡和性別檢測任務(wù)之前,我將首先帶您了解該概念的含義以及如何處理年齡和性別檢測問題。理解這個概念很重要,以便將來您不僅可以使用python,還可以使用任何編程語言輕松地執(zhí)行年齡和性別檢測任務(wù)。
          年齡和性別檢測簡介
          檢測年齡和性別的任務(wù)是一個固有的難題,比許多其他計算機視覺任務(wù)更為困難。造成這種困難的主要原因在于訓(xùn)練這些類型的系統(tǒng)所需的數(shù)據(jù)。
          盡管一般的對象檢測任務(wù)通常可以訪問成千上萬甚至數(shù)百萬張圖像進行訓(xùn)練,但是帶有年齡或性別標簽的數(shù)據(jù)集卻要小得多,通常只有幾千個,或者最好是幾萬個。
          原因是要為此類圖像添加標簽,我們需要訪問圖像中主題的個人信息。即,我們將需要他們的出生日期和性別,尤其出生日期是很難獲取的信息。
          因此必須解決這個問題的本質(zhì),我們正在用適應(yīng)網(wǎng)絡(luò)體系結(jié)構(gòu)和算法方法來解決這些局限性。
          用Python進行年齡和性別檢測
          按年齡和性別分類的領(lǐng)域已經(jīng)研究了數(shù)十年。多年來,已經(jīng)采取了各種方法來解決該問題,并且取得了不同程度的成功。現(xiàn)在,我們開始使用 Python 來檢測年齡和性別。
          我將把性別檢測問題作為分類問題,將年齡檢測問題作為回歸問題。但是,使用回歸準確估計年齡是困難的。甚至人類也無法通過注視一個人來準確預(yù)測年齡。但是,我們確實知道他們是30多歲還是40多歲。這也是我要使用Python進行的操作。
          現(xiàn)在,讓我們開始使用 Python 語言進行年齡和性別檢測任務(wù)。首先,我將開始編寫用于檢測面部的代碼,因為如果沒有面部檢測,我們將無法繼續(xù)進行年齡和性別預(yù)測任務(wù)。
          您可以從此處下載在年齡和性別檢測任務(wù)中所需的必要的OpenCV預(yù)訓(xùn)練模型。現(xiàn)在,在您的python文件中導(dǎo)入OpenCV模塊后,即可開始使用以下代碼。
          用于人臉檢測的Python代碼:
          def?getFaceBox(net,?frame,?conf_threshold=0.7):
          ????frameOpencvDnn?=?frame.copy()
          ????frameHeight?=?frameOpencvDnn.shape[0]
          ????frameWidth?=?frameOpencvDnn.shape[1]
          ????blob?=?cv.dnn.blobFromImage(frameOpencvDnn,?1.0,?(300,?300),?[104,?117,?123],?True,?False)

          ????net.setInput(blob)
          ????detections?=?net.forward()
          ????bboxes?=?[]
          ????for?i?in?range(detections.shape[2]):
          ????????confidence?=?detections[0,?0,?i,?2]
          ????????if?confidence?>?conf_threshold:
          ????????????x1?=?int(detections[0,?0,?i,?3]?*?frameWidth)
          ????????????y1?=?int(detections[0,?0,?i,?4]?*?frameHeight)
          ????????????x2?=?int(detections[0,?0,?i,?5]?*?frameWidth)
          ????????????y2?=?int(detections[0,?0,?i,?6]?*?frameHeight)
          ????????????bboxes.append([x1,?y1,?x2,?y2])
          ????????????cv.rectangle(frameOpencvDnn,?(x1,?y1),?(x2,?y2),?(0,?255,?0),?int(round(frameHeight/150)),?8)
          ????return?frameOpencvDnn,?bboxes
          現(xiàn)在,下一步是預(yù)測圖像中人的性別。在這里,我將把性別網(wǎng)絡(luò)加載到內(nèi)存中,并通過網(wǎng)絡(luò)將檢測到的面部發(fā)送給性別檢測任務(wù)。
          性別檢測的Python代碼:
          genderProto?=?"gender_deploy.prototxt"
          genderModel?=?"gender_net.caffemodel"
          ageNet?=?cv.dnn.readNet(ageModel,?ageProto)

          genderList?=?['Male',?'Female']

          blob?=?cv.dnn.blobFromImage(face,?1,?(227,?227),?MODEL_MEAN_VALUES,?swapRB=False)
          genderNet.setInput(blob)
          genderPreds?=?genderNet.forward()
          gender?=?genderList[genderPreds[0].argmax()]
          print("Gender?Output?:?{}".format(genderPreds))
          print("Gender?:?{}".format(gender))
          現(xiàn)在的下一個任務(wù)是預(yù)測圖像中人的年齡。在這里,我將使用前向傳遞來獲取輸出。由于網(wǎng)絡(luò)架構(gòu)類似于性別網(wǎng)絡(luò),因此我們可以充分利用所有輸出,以獲取預(yù)期的年齡組,來完成任務(wù)以檢測年齡。
          用于年齡檢測的Python代碼:
          ageProto?=?"age_deploy.prototxt"
          ageModel?=?"age_net.caffemodel"
          ageNet?=?cv.dnn.readNet(ageModel,?ageProto)

          ageList?=?['(0?-?2)',?'(4?-?6)',?'(8?-?12)',?'(15?-?20)',?'(25?-?32)',?'(38?-?43)',?'(48?-?53)',?'(60?-?100)']

          ageNet.setInput(blob)
          agePreds?=?ageNet.forward()
          age?=?ageList[agePreds[0].argmax()]
          print("Gender?Output?:?{}".format(agePreds))
          print("Gender?:?{}".format(age))
          我們需要編寫的最后代碼是顯示輸出:
          label?=?"{},?{}".format(gender,?age)
          cv.putText(frameFace,?label,?(bbox[0],?bbox[1]-20),?cv.FONT_HERSHEY_SIMPLEX,?0.8,?(255,?0,?0),?3,?cv.LINE_AA)
          cv.imshow("Age?Gender?Demo",?frameFace)
          因此,從輸出中可以看到,我們能夠高度準確地預(yù)測性別和年齡。

          瀏覽 59
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  特级西西人体444w w w | 黄色电影管| 色色一区二区 | 人人肏人人摸 | 可以看的三级网站 |