1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        用 OpenCV 進(jìn)行年齡和性別檢測(cè)

        共 3100字,需瀏覽 7分鐘

         ·

        2020-12-24 07:25

        在本文中,我將帶您完成用 Python 進(jìn)行機(jī)器學(xué)習(xí)的年齡和性別檢測(cè)的任務(wù)。年齡和性別檢測(cè)屬于計(jì)算機(jī)視覺的范疇,因此我將在Python中使用OpenCV庫。
        在開始使用Python進(jìn)行年齡和性別檢測(cè)任務(wù)之前,我將首先帶您了解該概念的含義以及如何處理年齡和性別檢測(cè)問題。理解這個(gè)概念很重要,以便將來您不僅可以使用python,還可以使用任何編程語言輕松地執(zhí)行年齡和性別檢測(cè)任務(wù)。
        年齡和性別檢測(cè)簡(jiǎn)介
        檢測(cè)年齡和性別的任務(wù)是一個(gè)固有的難題,比許多其他計(jì)算機(jī)視覺任務(wù)更為困難。造成這種困難的主要原因在于訓(xùn)練這些類型的系統(tǒng)所需的數(shù)據(jù)。
        盡管一般的對(duì)象檢測(cè)任務(wù)通??梢栽L問成千上萬甚至數(shù)百萬張圖像進(jìn)行訓(xùn)練,但是帶有年齡或性別標(biāo)簽的數(shù)據(jù)集卻要小得多,通常只有幾千個(gè),或者最好是幾萬個(gè)。
        原因是要為此類圖像添加標(biāo)簽,我們需要訪問圖像中主題的個(gè)人信息。即,我們將需要他們的出生日期和性別,尤其出生日期是很難獲取的信息。
        因此必須解決這個(gè)問題的本質(zhì),我們正在用適應(yīng)網(wǎng)絡(luò)體系結(jié)構(gòu)和算法方法來解決這些局限性。
        用Python進(jìn)行年齡和性別檢測(cè)
        按年齡和性別分類的領(lǐng)域已經(jīng)研究了數(shù)十年。多年來,已經(jīng)采取了各種方法來解決該問題,并且取得了不同程度的成功。現(xiàn)在,我們開始使用 Python 來檢測(cè)年齡和性別。
        我將把性別檢測(cè)問題作為分類問題,將年齡檢測(cè)問題作為回歸問題。但是,使用回歸準(zhǔn)確估計(jì)年齡是困難的。甚至人類也無法通過注視一個(gè)人來準(zhǔn)確預(yù)測(cè)年齡。但是,我們確實(shí)知道他們是30多歲還是40多歲。這也是我要使用Python進(jìn)行的操作。
        現(xiàn)在,讓我們開始使用 Python 語言進(jìn)行年齡和性別檢測(cè)任務(wù)。首先,我將開始編寫用于檢測(cè)面部的代碼,因?yàn)槿绻麤]有面部檢測(cè),我們將無法繼續(xù)進(jìn)行年齡和性別預(yù)測(cè)任務(wù)。
        您可以從此處下載在年齡和性別檢測(cè)任務(wù)中所需的必要的OpenCV預(yù)訓(xùn)練模型?,F(xiàn)在,在您的python文件中導(dǎo)入OpenCV模塊后,即可開始使用以下代碼。
        用于人臉檢測(cè)的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ù)測(cè)圖像中人的性別。在這里,我將把性別網(wǎng)絡(luò)加載到內(nèi)存中,并通過網(wǎng)絡(luò)將檢測(cè)到的面部發(fā)送給性別檢測(cè)任務(wù)。
        性別檢測(cè)的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)在的下一個(gè)任務(wù)是預(yù)測(cè)圖像中人的年齡。在這里,我將使用前向傳遞來獲取輸出。由于網(wǎng)絡(luò)架構(gòu)類似于性別網(wǎng)絡(luò),因此我們可以充分利用所有輸出,以獲取預(yù)期的年齡組,來完成任務(wù)以檢測(cè)年齡。
        用于年齡檢測(cè)的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)
        因此,從輸出中可以看到,我們能夠高度準(zhǔn)確地預(yù)測(cè)性別和年齡。

        更多閱讀



        5 分鐘完全掌握 Python 協(xié)程


        程序運(yùn)行慢?你怕是寫的假 Python


        賽博朋克科幻文化的起源和意義


        特別推薦


        程序員摸魚指南


        為你精選的硅谷極客資訊,
        來自FLAG巨頭開發(fā)者、技術(shù)、創(chuàng)投一手消息




        點(diǎn)擊下方閱讀原文加入社區(qū)會(huì)員

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

        手機(jī)掃一掃分享

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

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            豆花视频免费在线观看 | 小骚逼操死你 | www操人 | 粉嫩人妻 | 无人区一区二区区别是什么红桃 | 亚洲老妇| 亚洲色图国产视频 | 男人把ji放进女人舒服视频 | 日本欧美在线播放 | 欧美中文字幕在线播放 |