0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

OpenCV的視頻處理之人臉檢測 2

jf_78858299 ? 來源:小白玩轉(zhuǎn)Python ? 作者:小白 ? 2023-02-07 15:27 ? 次閱讀

我們嘗試模塊化并分離管道構(gòu)建塊,這種方法將為我們提供易于管理的代碼,并使測試更容易編寫:

import os
import cv2


from pipeline.libs.face_detector import FaceDetector
import tests.config as config




class TestFaceDetector:
    def test_face_detector(self):
        prototxt = os.path.join(config.MODELS_FACE_DETECTOR_DIR, "deploy.prototxt.txt")
        model = os.path.join(config.MODELS_FACE_DETECTOR_DIR, "res10_300x300_ssd_iter_140000.caffemodel")
        detector = FaceDetector(prototxt, model)


        test_image = cv2.imread(os.path.join(config.ASSETS_IMAGES_DIR, "friends", "friends_01.jpg"))
        faces = detector.detect([test_image])


        assert len(faces) == 1
        assert len(faces[0])  # Should recognize some faces from friends_01.jpg

使用管道架構(gòu),可以很容易地CascadeDetectFaces從上一篇文章?lián)Q成更準(zhǔn)確的深度學(xué)習(xí)人臉檢測器模型。讓我們FaceDetector在新的DetectFaces管道步驟中使用:

from pipeline.pipeline import Pipeline
from pipeline.libs.face_detector import FaceDetector


class DetectFaces(Pipeline):
    def __init__(self, prototxt, model, batch_size=1, confidence=0.5):
        self.detector = FaceDetector(prototxt, model, confidence=confidence)
        self.batch_size = batch_size


        super(DetectFaces, self).__init__()


    def generator(self):
        batch = []
        stop = False
        while self.has_next() and not stop:
            try:
                # Buffer the pipeline stream
                data = next(self.source)
                batch.append(data)
            except StopIteration:
                stop = True


            # Check if there is anything in batch.
            # Process it if the size match batch_size or there is the end of the input stream.
            if len(batch) and (len(batch) == self.batch_size or stop):
                # Prepare images batch
                images = [data["image"] for data in batch]
                # Detect faces on all images at once
                faces = self.detector.detect(images)


                # Extract the faces and attache them to the proper image
                for image_idx, image_faces in faces.items():
                    batch[image_idx]["faces"] = image_faces


                # Yield all the data from buffer
                for data in batch:
                    if self.filter(data):
                        yield self.map(data)


                batch = []

我們對圖像流(第15–20行)進(jìn)行緩沖,直到到達(dá)batch_size(第24行)為止,然后在所有緩沖的圖像上(第28行)檢測面部,收集面部坐標(biāo)和置信度(第31–32行),然后重新生成圖像(第35-37行)。

當(dāng)我們使用GPU(圖形處理單元)時,我們的武器庫中同時運(yùn)行著數(shù)千個處理內(nèi)核,這些內(nèi)核專門用于矩陣運(yùn)算。批量執(zhí)行推理總是更快,一次向深度學(xué)習(xí)模型展示的圖像多于一張一張。

保存面孔和摘要

SaveFaces并SaveSummary產(chǎn)生輸出結(jié)果。在SaveFaces類,使用map功能,遍歷所有檢測到的面部,從圖像裁剪他們并保存到輸出目錄。

SaveSummary類的任務(wù)是收集有關(guān)已識別面部的所有元數(shù)據(jù),并將它們保存為結(jié)構(gòu)良好的JSON文件,該map函數(shù)用于緩沖元數(shù)據(jù)。接下來,我們使用額外的write功能擴(kuò)展我們的類,我們將需要在管道的末尾觸發(fā)以將JSON文件與摘要一起保存。臉部圖像針對每一幀存儲在單獨(dú)的目錄中。

視頻輸出

為了觀察流水線的結(jié)果,很高興可以顯示帶有帶注釋的面孔的視頻。關(guān)于AnnotateImage(pipeline/annotate_image.py)/DisplayVideo(pipeline/display_video.py)的全部內(nèi)容。

運(yùn)行中的管道

在process_video_pipeline.py文件中我們可以看到,整個管道的定義如下:

pipeline = (capture_video |
            detect_faces |
            save_faces |
            annotate_image |
            display_video |
            save_video |
            save_summary)

上面有很多解釋,但是視頻和圖像勝于雄辯。讓我們來看一下觸發(fā)命令的管道:

python process_video_pipeline.py -i assets/videos/faces.mp4 -p -d -ov faces.avi,M,];

-p將顯示進(jìn)度條,

-d顯示帶有批注面孔的視頻結(jié)果,

-ov faces.avi并將視頻結(jié)果保存到output文件夾。

正如我們在示例視頻中看到的那樣,并不是所有臉孔都能被識別。我們可以降低設(shè)置參數(shù)的深度學(xué)習(xí)模型的置信度confidence 0.2(默認(rèn)值為0.5)。降低置信度閾值會增加假陽性的發(fā)生(在圖像中沒有臉的位置出現(xiàn)臉)。

DetectFaces類的批量處理大?。?/p>

$ python process_video_pipeline.py -i assets/videos/faces.mp4 -p
--batch-size 1
100%|███████████████████████████| 577/577 [00:11<00:00, 52.26it/s]
[INFO] Saving summary to output/summary.json...


$ python process_video_pipeline.py -i assets/videos/faces.mp4 -p
--batch-size 4
100%|███████████████████████████| 577/577 [00:09<00:00, 64.66it/s]
[INFO] Saving summary to output/summary.json...
$ python process_video_pipeline.py -i assets/videos/faces.mp4 -p
--batch-size 8
100%|███████████████████████████| 577/577 [00:10<00:00, 56.04it/s]
[INFO] Saving summary to output/summary.json...

在我們的硬件上(2.20GHz的Core i7–8750H CPU和NVIDIA RTX 2080 Ti),我門每秒獲得52.26幀的圖像--batch-size 1,但是對于--batch-size 4我們來說,速度卻提高到了每秒64.66幀。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • 攝像頭
    +關(guān)注

    關(guān)注

    59

    文章

    4793

    瀏覽量

    95276
  • OpenCV
    +關(guān)注

    關(guān)注

    29

    文章

    624

    瀏覽量

    41214
  • JSON
    +關(guān)注

    關(guān)注

    0

    文章

    116

    瀏覽量

    6929
收藏 人收藏

    評論

    相關(guān)推薦

    基于OPENCV的相機(jī)捕捉視頻進(jìn)行人臉檢測--米爾NXP i.MX93開發(fā)板

    本文將介紹基于米爾電子MYD-LMX93開發(fā)板(米爾基于NXPi.MX93開發(fā)板)的基于OpenCV人臉檢測方案測試。OpenCV提供了一個非常簡單的接口,用于相機(jī)捕捉一個
    的頭像 發(fā)表于 11-07 09:03 ?520次閱讀
    基于<b class='flag-5'>OPENCV</b>的相機(jī)捕捉<b class='flag-5'>視頻</b>進(jìn)行<b class='flag-5'>人臉</b><b class='flag-5'>檢測</b>--米爾NXP i.MX93開發(fā)板

    基于openCV人臉檢測系統(tǒng)的設(shè)計(jì)

    通過對基于Adaboost人臉檢測算法的研究,利用該算法與計(jì)算機(jī)視覺類庫openCV進(jìn)行人臉檢測系統(tǒng)的設(shè)計(jì),實(shí)現(xiàn)了對出現(xiàn)在
    發(fā)表于 12-23 14:19

    【TL6748 DSP申請】基于TMS320C6748 DSP人臉檢測及跟蹤

    申請理由:我們是公司的研發(fā)團(tuán)隊(duì),正在研發(fā)人臉檢測及跟蹤。之前使用的是TI達(dá)芬奇系列DM6446芯片,將OpenCV移植到DM6446的DSP上發(fā)現(xiàn)處理效率太低。分析主要原因是dm644
    發(fā)表于 09-10 11:09

    【NanoPi2申請】基于ARM的智能家居視頻監(jiān)控系統(tǒng)

    獲取圖像或視頻 圖像處理灰度 二值 去噪增強(qiáng) (邊緣檢測 腐蝕 膨脹)等 JPEG/H.264 壓縮編碼解碼TCP/IP網(wǎng)絡(luò)傳輸2.智能家居視頻
    發(fā)表于 12-02 16:10

    【NanoPi2申請】基于opencv人臉識別門禁系統(tǒng)

    opencv API,研究圖像處理算法。5、學(xué)習(xí)機(jī)器學(xué)習(xí),利用模板匹配方法進(jìn)行人臉識別。6、在linux上配置opencv,利用opencv
    發(fā)表于 12-18 14:34

    【NanoPi2申請】基于NanoPi2人臉識別及表情檢測

    本帖最后由 ypw 于 2015-12-19 00:38 編輯 申請理由:目前正在學(xué)習(xí)OpenCV,以及人臉表情檢測的研究,NanoPi2的性價比很高,同時集成了WiFi,是研發(fā)
    發(fā)表于 12-18 14:37

    【HiSpark IPC DIY Camera試用連載 】第二篇 視頻人臉檢測

    haarcascade_frontalface_alt_tree.xml,已經(jīng)保存了人臉特征,不需要我們?nèi)?shí)現(xiàn)cv2.detectMultiScale該函數(shù)用來檢測人臉,是本文
    發(fā)表于 01-14 00:08

    【EASY EAI Nano開源套件試用體驗(yàn)】4AI功能測試之人臉檢測

    ,rknn_context句柄path:輸入?yún)?shù),算法模型路徑input_image:輸入?yún)?shù), Opencv Mat格式圖像result:輸出參數(shù), 人臉檢測的結(jié)果輸出3 代碼分析與修改官方例程使用的是雙目攝像頭
    發(fā)表于 09-27 22:39

    【飛凌RK3568開發(fā)板試用體驗(yàn)】使用OpenCV進(jìn)行人臉識別

    RK3568四核Arm Cortex-A55 處理器的主板,從廠商的宣傳看,其主要市場就是人臉識別等視頻和圖像應(yīng)用。今天就使用OpenCV自帶的DNN模塊進(jìn)行
    發(fā)表于 01-11 22:06

    【飛凌RK3588開發(fā)板試用】實(shí)現(xiàn)人臉檢測

    ))[2:-1] return img_date_url添加代碼后,重新啟動服務(wù),打開網(wǎng)頁,當(dāng)圖像中出現(xiàn)人臉時就可以檢測出來了:CPU占用情況如下圖,占用率非常小?!拘〗Y(jié)】tornado的服務(wù)+
    發(fā)表于 03-09 14:10

    基于openCV人臉檢測識別系統(tǒng)的設(shè)計(jì)

    通過對基于Adaboost人臉檢測算法的研究,利用該算法與計(jì)算機(jī)視覺類庫openCV進(jìn)行人臉檢測系統(tǒng)的設(shè)計(jì),實(shí)現(xiàn)了對出現(xiàn)在
    發(fā)表于 06-15 10:53 ?477次下載
    基于<b class='flag-5'>openCV</b>的<b class='flag-5'>人臉</b><b class='flag-5'>檢測</b>識別系統(tǒng)的設(shè)計(jì)

    Android系統(tǒng)下OpenCV人臉檢測模塊的設(shè)計(jì)

    針對解決OpenCV人臉檢測模塊在Android平臺編譯和移植的問題,提出一種利用JNI技術(shù)(Java Native Interface)調(diào)用OpenCV以及采用Android NDK
    發(fā)表于 11-07 17:40 ?118次下載
    Android系統(tǒng)下<b class='flag-5'>OpenCV</b>的<b class='flag-5'>人臉</b><b class='flag-5'>檢測</b>模塊的設(shè)計(jì)

    openCV人臉檢測系統(tǒng)的設(shè)計(jì)方案探究

    摘要: 通過對基于 Adaboost 人臉檢測算法的研究,利用該算法與計(jì)算機(jī)視覺類庫 openCV 進(jìn)行人臉檢測系統(tǒng)的設(shè)計(jì),實(shí)現(xiàn)了對出現(xiàn)在
    發(fā)表于 10-20 16:39 ?3次下載

    OpenCV視頻處理之人臉檢測 1

    目前可依靠模塊化方式實(shí)現(xiàn)圖像處理管道,檢測一堆圖像文件中的人臉,并將其與漂亮的結(jié)構(gòu)化JSON摘要文件一起保存在單獨(dú)的文件夾中。 讓我們對視頻流也可以進(jìn)行同樣的操作。 首先,
    的頭像 發(fā)表于 02-07 15:27 ?764次閱讀

    Android系統(tǒng)下OpenCV人臉檢測模塊的設(shè)計(jì)

    電子發(fā)燒友網(wǎng)站提供《Android系統(tǒng)下OpenCV人臉檢測模塊的設(shè)計(jì).pdf》資料免費(fèi)下載
    發(fā)表于 10-23 09:37 ?0次下載
    Android系統(tǒng)下<b class='flag-5'>OpenCV</b>的<b class='flag-5'>人臉</b><b class='flag-5'>檢測</b>模塊的設(shè)計(jì)