0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

OpenCV的视频处理之人脸检测 1

jf_78858299 来源:小白玩转Python 作者:小白 2023-02-07 15:27 次阅读

目前可依靠模块化方式实现图像处理管道,检测一堆图像文件中的人脸,并将其与漂亮的结构化JSON摘要文件一起保存在单独的文件夹中。

让我们对视频流也可以进行同样的操作。

首先,我们需要捕获视频流。该管线任务将从视频文件或网络摄像头(逐帧)生成一系列图像。接下来,我们将检测每个帧上的脸部并将其保存。接下来的三个块是可选的,它们的目标是创建带有注释的输出视频,例如在检测到的人脸周围的框。我们可以显示带注释的视频并将其保存。最后一个任务将收集有关检测到的面部的信息,并保存带有面部的框坐标和置信度的JSON摘要文件。

如果尚未设置jagin / image-processing-pipeline存储库以查看源代码并运行一些示例,则可以立即执行以下操作:

$ 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

如果已经克隆了存储库并设置了环境,请使用以下命令对其进行更新:

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

拍摄影片

使用OpenCV捕获视频非常简单。我们需要创建一个VideoCapture对象,其中参数是设备索引(指定哪个摄像机的数字)或视频文件的名称。然后,我们可以逐帧捕获视频流。

我们可以使用以下CaptureVideo扩展类来实现捕获视频任务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__我们创建VideoCapture对象(第6行)并提取视频流的属性,例如每秒帧数和帧数。我们将需要它们显示进度条并正确保存视频。图像帧将在具有字典结构的generator函数(第30行)中产生:

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

当然,数据中也包括图像的序列号和帧的二进制数据。

检测人脸

我们准备检测面部。这次,我们将使用OpenCV的深度神经网络模块,而不是我在上一个故事中所承诺的Haar级联。我们将要使用的模型更加准确,并且还为我们提供了置信度得分。

从版本3.3开始,OpenCV支持许多深度学习框架,例如Caffe,TensorFlow和PyTorch,从而使我们能够加载模型,预处理输入图像并进行推理以获得输出分类。

有一位优秀的博客文章中阿德里安·罗斯布鲁克(Adrian Rosebrock)解释如何使用OpenCV和深度学习实现人脸检测。我们将在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))
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 摄像头
    +关注

    关注

    59

    文章

    4836

    浏览量

    95600
  • OpenCV
    +关注

    关注

    31

    文章

    634

    浏览量

    41338
  • JSON
    +关注

    关注

    0

    文章

    117

    浏览量

    6963
收藏 人收藏

    评论

    相关推荐

    树莓派上使用OpenCV和Python实现实时人脸检测

    本文介绍了如何在树莓派上,使用 OpenCV 和 Python 完成人脸检测项目。该项目不仅描述了识别人脸所需要的具体步骤,同时还提供了很多扩展知识。此外,该项目并不需要读者了解详细的
    的头像 发表于 03-06 09:00 5.1w次阅读

    基于OPENCV的相机捕捉视频进行人脸检测--米尔NXP i.MX93开发板

    本文将介绍基于米尔电子MYD-LMX93开发板(米尔基于NXPi.MX93开发板)的基于OpenCV人脸检测方案测试。OpenCV提供了一个非常简单的接口,用于相机捕捉一个
    的头像 发表于 11-07 09:03 1083次阅读
    基于<b class='flag-5'>OPENCV</b>的相机捕捉<b class='flag-5'>视频</b>进行<b class='flag-5'>人脸</b><b class='flag-5'>检测</b>--米尔NXP i.MX93开发板

    如何用OpenCV的相机捕捉视频进行人脸检测--基于米尔NXP i.MX93开发板

    本篇测评由优秀测评者“eefocus_3914144”提供。 本文将介绍基于米尔电子MYD-LMX93开发板(米尔基于NXP i.MX93开发板)的基于OpenCV人脸检测方案测试。 Ope
    发表于 11-15 17:58

    基于openCV人脸检测系统的设计

    通过对基于Adaboost人脸检测算法的研究,利用该算法与计算机视觉类库openCV进行人脸检测系统的设计,实现了对出现在
    发表于 12-23 14:19

    【TL6748 DSP申请】基于TMS320C6748 DSP人脸检测及跟踪

    申请理由:我们是公司的研发团队,正在研发人脸检测及跟踪。之前使用的是TI达芬奇系列DM6446芯片,将OpenCV移植到DM6446的DSP上发现处理效率太低。分析主要原因是dm644
    发表于 09-10 11:09

    【NanoPi2申请】基于opencv人脸识别门禁系统

    进行实时采集,随后opencv对图像进行特征采样,并与学习样本对比,进行人脸匹配。该系统内还搭载一个嵌入式服务器,通过以太网接入局域网络,可以使用客户端与系统建立联系,实现配置与反馈结果。学习计划:1
    发表于 12-18 14:34

    【AI技能解析】人脸识别是怎么做到的?

    环境搭建2、opencv对图像和视频进行基本操作3、opencv图像滤波及形态学处理4、opencv人脸
    发表于 03-16 11:25

    【EASY EAI Nano开源套件试用体验】4AI功能测试之人脸检测

    ,rknn_context句柄path:输入参数,算法模型路径input_image:输入参数, Opencv Mat格式图像result:输出参数, 人脸检测的结果输出3 代码分析与修改官方例程使用的是双目摄像头
    发表于 09-27 22:39

    【飞凌RK3568开发板试用体验】使用OpenCV进行人脸识别

    RK3568四核Arm Cortex-A55 处理器的主板,从厂商的宣传看,其主要市场就是人脸识别等视频和图像应用。今天就使用OpenCV自带的DNN模块进行
    发表于 01-11 22:06

    【飞凌RK3588开发板试用】实现人脸检测

    【目的】在实现视频监控的基础上,加入opencv人脸检测模型,快速的实现人脸检测功能。实现方式
    发表于 03-09 14:10

    基于openCV人脸检测识别系统的设计

    通过对基于Adaboost人脸检测算法的研究,利用该算法与计算机视觉类库openCV进行人脸检测系统的设计,实现了对出现在
    发表于 06-15 10:53 477次下载
    基于<b class='flag-5'>openCV</b>的<b class='flag-5'>人脸</b><b class='flag-5'>检测</b>识别系统的设计

    Android系统下OpenCV人脸检测模块的设计

    针对解决OpenCV人脸检测模块在Android平台编译和移植的问题,提出一种利用JNI技术(Java Native Interface)调用OpenCV以及采用Android NDK
    发表于 11-07 17:40 118次下载
    Android系统下<b class='flag-5'>OpenCV</b>的<b class='flag-5'>人脸</b><b class='flag-5'>检测</b>模块的设计

    openCV人脸检测系统的设计方案探究

    摘要: 通过对基于 Adaboost 人脸检测算法的研究,利用该算法与计算机视觉类库 openCV 进行人脸检测系统的设计,实现了对出现在
    发表于 10-20 16:39 3次下载

    OpenCV视频处理之人脸检测 2

    目前可依靠模块化方式实现图像处理管道,检测一堆图像文件中的人脸,并将其与漂亮的结构化JSON摘要文件一起保存在单独的文件夹中。 让我们对视频流也可以进行同样的操作。 首先,
    的头像 发表于 02-07 15:27 498次阅读

    Android系统下OpenCV人脸检测模块的设计

    电子发烧友网站提供《Android系统下OpenCV人脸检测模块的设计.pdf》资料免费下载
    发表于 10-23 09:37 0次下载
    Android系统下<b class='flag-5'>OpenCV</b>的<b class='flag-5'>人脸</b><b class='flag-5'>检测</b>模块的设计