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

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

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

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

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

目前可依靠模塊化方式實現(xiàn)圖像處理管道,檢測一堆圖像文件中的人臉,并將其與漂亮的結(jié)構(gòu)化JSON摘要文件一起保存在單獨的文件夾中。

讓我們對視頻流也可以進(jìn)行同樣的操作。

首先,我們需要捕獲視頻流。該管線任務(wù)將從視頻文件或網(wǎng)絡(luò)攝像頭(逐幀)生成一系列圖像。接下來,我們將檢測每個幀上的臉部并將其保存。接下來的三個塊是可選的,它們的目標(biāo)是創(chuàng)建帶有注釋的輸出視頻,例如在檢測到的人臉周圍的框。我們可以顯示帶注釋的視頻并將其保存。最后一個任務(wù)將收集有關(guān)檢測到的面部的信息,并保存帶有面部的框坐標(biāo)和置信度的JSON摘要文件。

如果尚未設(shè)置jagin / image-processing-pipeline存儲庫以查看源代碼并運行一些示例,則可以立即執(zhí)行以下操作:

$ git clone git://github.com/jagin/image-processing-pipeline.git
$ cd image-processing-pipeline
$ git checkout 7df1963247caa01b503980fe152138b88df6c526
$ conda env create -f environment.yml
$ conda activate pipeline

如果已經(jīng)克隆了存儲庫并設(shè)置了環(huán)境,請使用以下命令對其進(jìn)行更新:

$ git pull
$ git checkout 7df1963247caa01b503980fe152138b88df6c526
$ conda env update -f environment.yml

拍攝影片

使用OpenCV捕獲視頻非常簡單。我們需要創(chuàng)建一個VideoCapture對象,其中參數(shù)是設(shè)備索引(指定哪個攝像機(jī)的數(shù)字)或視頻文件的名稱。然后,我們可以逐幀捕獲視頻流。

我們可以使用以下CaptureVideo擴(kuò)展類來實現(xiàn)捕獲視頻任務(wù)Pipeline:

import cv2
from pipeline.pipeline import Pipeline


class CaptureVideo(Pipeline):
    def __init__(self, src=0):
        self.cap = cv2.VideoCapture(src)
        if not self.cap.isOpened():
            raise IOError(f"Cannot open video {src}")


        self.fps = int(self.cap.get(cv2.CAP_PROP_FPS))
        self.frame_count = int(self.cap.get(cv2.CAP_PROP_FRAME_COUNT))


        super(CaptureVideo, self).__init__()


    def generator(self):
        image_idx = 0
        while self.has_next():
            ret, image = self.cap.read()
            if not ret:
                # no frames has been grabbed
                break


            data = {
                "image_id": f"{image_idx:05d}",
                "image": image,
            }


            if self.filter(data):
                image_idx += 1
                yield self.map(data)


    def cleanup(self):
        # Closes video file or capturing device
        self.cap.release()

使用__init__我們創(chuàng)建VideoCapture對象(第6行)并提取視頻流的屬性,例如每秒幀數(shù)和幀數(shù)。我們將需要它們顯示進(jìn)度條并正確保存視頻。圖像幀將在具有字典結(jié)構(gòu)的generator函數(shù)(第30行)中產(chǎn)生:

data = {
    "image_id": f"{image_idx:05d}",
    "image": image,
}

當(dāng)然,數(shù)據(jù)中也包括圖像的序列號和幀的二進(jìn)制數(shù)據(jù)。

檢測人臉

我們準(zhǔn)備檢測面部。這次,我們將使用OpenCV的深度神經(jīng)網(wǎng)絡(luò)模塊,而不是我在上一個故事中所承諾的Haar級聯(lián)。我們將要使用的模型更加準(zhǔn)確,并且還為我們提供了置信度得分。

從版本3.3開始,OpenCV支持許多深度學(xué)習(xí)框架,例如Caffe,TensorFlow和PyTorch,從而使我們能夠加載模型,預(yù)處理輸入圖像并進(jìn)行推理以獲得輸出分類。

有一位優(yōu)秀的博客文章中阿德里安·羅斯布魯克(Adrian Rosebrock)解釋如何使用OpenCV和深度學(xué)習(xí)實現(xiàn)人臉檢測。我們將在FaceDetector類中使用部分代碼:

import cv2
import numpy as np


class FaceDetector:
    def __init__(self, prototxt, model, confidence=0.5):
        self.confidence = confidence


        self.net = cv2.dnn.readNetFromCaffe(prototxt, model)


    def detect(self, images):
        # convert images into blob
        blob = self.preprocess(images)


        # pass the blob through the network and obtain the detections and predictions
        self.net.setInput(blob)
        detections = self.net.forward()
        # Prepare storage for faces for every image in the batch
        faces = dict(zip(range(len(images)), [[] for _ in range(len(images))]))


        # loop over the detections
        for i in range(0, detections.shape[2]):
            # extract the confidence (i.e., probability) associated with the prediction
            confidence = detections[0, 0, i, 2]


            # filter out weak detections by ensuring the `confidence` is
            # greater than the minimum confidence
            if confidence < self.confidence:
                continue


            # grab the image index
            image_idx = int(detections[0, 0, i, 0])
            # grab the image dimensions
            (h, w) = images[image_idx].shape[:2]
            # compute the (x, y)-coordinates of the bounding box for the object
            box = detections[0, 0, i, 3:7] * np.array([w, h, w, h])


            # Add result
            faces[image_idx].append((box, confidence))


        return faces


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

    關(guān)注

    59

    文章

    4793

    瀏覽量

    95294
  • OpenCV
    +關(guān)注

    關(guān)注

    29

    文章

    625

    瀏覽量

    41218
  • JSON
    +關(guān)注

    關(guān)注

    0

    文章

    117

    瀏覽量

    6929
收藏 人收藏

    評論

    相關(guān)推薦

    樹莓派上使用OpenCV和Python實現(xiàn)實時人臉檢測

    本文介紹了如何在樹莓派上,使用 OpenCV 和 Python 完成人臉檢測項目。該項目不僅描述了識別人臉所需要的具體步驟,同時還提供了很多擴(kuò)展知識。此外,該項目并不需要讀者了解詳細(xì)的
    的頭像 發(fā)表于 03-06 09:00 ?5.1w次閱讀

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

    本文將介紹基于米爾電子MYD-LMX93開發(fā)板(米爾基于NXPi.MX93開發(fā)板)的基于OpenCV人臉檢測方案測試。OpenCV提供了一個非常簡單的接口,用于相機(jī)捕捉一個
    的頭像 發(fā)表于 11-07 09:03 ?677次閱讀
    基于<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è)計

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

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

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

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

    進(jìn)行實時采集,隨后opencv對圖像進(jìn)行特征采樣,并與學(xué)習(xí)樣本對比,進(jìn)行人臉匹配。該系統(tǒng)內(nèi)還搭載一個嵌入式服務(wù)器,通過以太網(wǎng)接入局域網(wǎng)絡(luò),可以使用客戶端與系統(tǒng)建立聯(lián)系,實現(xiàn)配置與反饋結(jié)果。學(xué)習(xí)計劃:1
    發(fā)表于 12-18 14:34

    【AI技能解析】人臉識別是怎么做到的?

    環(huán)境搭建2、opencv對圖像和視頻進(jìn)行基本操作3、opencv圖像濾波及形態(tài)學(xué)處理4、opencv人臉
    發(fā)表于 03-16 11:25

    基于QT+OpenCV人臉識別-米爾iMX8M Plus開發(fā)板的項目應(yīng)用

    opencv人臉檢測分類器。OpenCV編譯完成后已經(jīng)提供好了的。因為這里還需要涉及到訓(xùn)練模型,有了模型后才能更好地識別,所以還是簡單介紹下怎么訓(xùn)練的吧。CascadeClassi
    發(fā)表于 05-17 17:43

    【EASY EAI Nano開源套件試用體驗】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ā)板試用體驗】使用OpenCV進(jìn)行人臉識別

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

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

    【目的】在實現(xiàn)視頻監(jiān)控的基礎(chǔ)上,加入opencv人臉檢測模型,快速的實現(xiàn)人臉檢測功能。實現(xiàn)方式
    發(fā)表于 03-09 14:10

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

    通過對基于Adaboost人臉檢測算法的研究,利用該算法與計算機(jī)視覺類庫openCV進(jìn)行人臉檢測系統(tǒng)的設(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è)計

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

    針對解決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è)計

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

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

    OpenCV視頻處理之人臉檢測 2

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

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

    電子發(fā)燒友網(wǎng)站提供《Android系統(tǒng)下OpenCV人臉檢測模塊的設(shè)計.pdf》資料免費下載
    發(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è)計