基于开源模型搭建实时人脸识别系统(五):人脸跟踪

继续填坑,之前已经讲了人脸检测,人脸识别实战之基于开源模型搭建实时人脸识别系统(二):人脸检测概览与模型选型_开源人脸识别模型_CodingInCV的博客-CSDN博客,人脸检测是定位出画面中人脸的位置,理论上把检测到的人脸进行提特征就能做人脸识别了,不过直接这样做是有缺陷,一是存在很大的资源浪费,毕竟同一个人出现在画面,我们实际上应该只需要做一次识别就知道他的身份(理想情况下),而不需要每一帧都去做;二是如果对每一帧都进行独立的检测->识别,就会出现频繁的事件,不利于业务的开发。当然,还有一些其他需要使得我们需要一种方式在不做识别的情况下,就知道当前帧的目标和前面帧的目标是同一个目标,比如我们要对一个门口进行进出的计数,这个领域就是目标跟踪。
多目标跟踪是对于给定的视频序列,找到每一帧图像中的运动 目标,在连续视频帧中对同一个目标分配相同的身份标识号(ID), 从而形成不同物体各自的运动轨迹。这些物体可以是任意的,如行 人、车辆、运动员、动物以及足球等无生命物体,人脸跟踪属于目标跟踪。

基于机器学习的目标跟踪

与其他领域类似,在深度学习爆发前,也有很多基于机器学习的目标跟踪方法,一般是依据目标的颜色分布信息,如Meanshift,或相邻帧的像素匹配,如光流法。感兴趣可以自行搜索。

基于目标检测的跟踪(tracking by detection)

这类方法对每一帧的检测结果与历史跟踪结果进行匹配(对于第一次出现的目标分配新的ID),最简单的一种方式是用目标检测框与历史跟踪框的IOU来评价目标的匹配度,使用贪心算法进行两两匹配,将IOU超过阈值的且最匹配的检测框作为最新的跟踪框,若有检测框未匹配上,则新建ID, 若有跟踪框未匹配上,则删除ID。匹配方法还有匈牙利匹配等。
除了直接使用检测框更新跟踪框外,还有与卡尔曼滤波相结合更新跟踪框的方式,代表性的方式是SORT(Simple Object Realtime Tracking)。

基于目标回归的跟踪

基于目标检测的跟踪比较依赖目标检测框的精度和速度,且实际上没有利用上历史信息来帮助检测。基于目标回归的方法则利用历史跟踪框,回归该目标在当前帧预测目标的位置。比如人脸中,有些方法利用MTCNN的Onet去回归人脸位置,这种方法一般要比每帧检测要快(单目标下)。

基于深度特征的目标跟踪

在发生目标遮挡时,完全基于框匹配或传统机器学习的方法容易出现目标丢失,从而目标ID发生变化。基于深度特征的目标跟踪通过提取目标的特征然后匹配的方式将目标重新关联上,代表方法是DeepSort, 这种方式需要提取目标特征,计算量较高。

基于端到端的目标跟踪

上面的方法基本都是分步骤的实现目标跟踪:目标检测/回归->框匹配,还有一种方式是端到端的方式,不分多个步骤,对硬件要求高,笔者也没有了解过。

本系统的选择

考虑到CPU实时需要,选择基于目标检测的跟踪, 具体而言选择sort方法。

项目源码

https://mbd.pub/o/bread/mbd-ZJyTmZty

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/77368.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言】指针的“最后一站”【进阶版】

欢迎各位看官^_^ 目录 1、字符指针 2、指针数组 3、数组指针 3.1数组指针的定义 3.2数组指针的使用 4、数组指针和指针数组的区别 5、数组参数,指针参数 5.1数组参数定义 5.2指针参数定义 5.3一维数组传参 5.4二维数组传参 5.5一级指针传参 5.6二级指…

《Docker 容器化的艺术:深入理解容器技术》

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🐅🐾猫头虎建议程序员必备技术栈一览表📖: 🛠️ 全栈技术 Full Stack: &#x1f4da…

javaweb04-vue基础

话不多说&#xff0c;参考官网地址Vue官网集成Vue应用。 一、Vue快速入门 &#xff08;1&#xff09;新建HTML页面&#xff0c;引入Vue.js 我这里用的是CDN方式 <script src"https://unpkg.com/vue3/dist/vue.global.js"></script> &#xff08;2&am…

windows10系统下Python3.11中安装Numpy库教程

Python3.11中安装Numpy库目录 项目场景&#xff1a;问题描述解决方案&#xff1a;①下载Numpy文件②把NumPy文件放到Python安装的Scripts文件夹里。③安装numpy④安装验证 项目场景&#xff1a; numpy是开源的数值计算扩展&#xff0c;用于数据分析、机器学习、科学计算的重要…

敲代码常用快捷键

1、代码拖动 PyCharm&#xff1a;按住 shiftalt鼠标选中某一区域来拖动&#xff0c;即可实现拖动这一区域至指定区域。Visual Studio Code (VSCode): - Windows/Linux&#xff1a;Alt 鼠标左键拖动 - MacOS&#xff1a;Option 鼠标左键拖动 IntelliJ IDEA: - Win…

【Java 基础篇】Java TreeSet 详解:红黑树实现的有序集合

Java 集合框架提供了多种数据结构&#xff0c;用于存储和操作数据。其中&#xff0c;TreeSet 是一种特殊类型的集合&#xff0c;它通过红黑树&#xff08;Red-Black Tree&#xff09;数据结构实现了有序的、唯一元素存储。本篇博客将深入探讨 TreeSet&#xff0c;包括其概念、特…

小程序中使用分包

前言 小程序在未使用的分包的情况下仅支持大小为2M,如果图片等资源过多的情况下可以使用分包功能&#xff0c;使用分包的情况下单个分包大小不能超过2M,总大小不能超过20M&#xff0c;分包有两种情况&#xff1a;普通分包和独立分包&#xff0c;下面介绍的是普通分包。官方文档…

《向量数据库指南》——哪些需求推动了如Milvus Cloud等的向量数据库的更新和迭代?

这个问题需要深入讨论大模型与向量数据库之间的关系。从去年 ChatGPT 推出时这个问题就开始引发我们的思考。在当时,我们敏锐地意识到这将是一个机遇。然而,在国内,这个概念的认知需要更长的时间。我个人在去年四五月份的美国之行中注意到,数据库在美国已经是一个非常热门的…

leetcode分类刷题:队列(Queue)(二、优先队列解决TopK简单问题)

1、优先队列好像一般都叫堆&#xff0c;以大顶堆为例&#xff0c;顶部第一个元素最大&#xff0c;底部最后一个元素最小&#xff0c;自顶向底是递减的&#xff08;更准确的说是非递增的&#xff09;&#xff0c;对外只能访问顶部第一个元素&#xff08;对应索引为0&#xff09;…

算法通关村第十九关:青铜-动态规划是怎么回事

青铜挑战-动态规划是怎么回事 动态规划&#xff08;简称DP&#xff0c;Dynamic Programming&#xff09;&#xff1a;最热门、最重要的算法之一。面试中大量出现&#xff0c;整体偏难。 1. 热身&#xff1a;重复计算和记忆化搜索&#xff08;如何说一万次"我爱你"&…

【LeetCode-中等题】59. 螺旋矩阵 II

文章目录 题目方法一&#xff1a;二维数组缩圈填数字方法二&#xff1a; 题目 方法一&#xff1a;二维数组缩圈填数字 定义四个边界条件&#xff0c;每转一圈&#xff0c;把数值填进去&#xff0c;然后缩小一圈&#xff0c;直到不满足条件位置 结束循环条件可以是&#xff1a; …

SpringBoot MongoDB GridFsTemplate实现文件管理

1. 添加maven <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency>2. 配置文件GridFsTemplate实现临时文件和正式文件存储桶分离 Configuration public cl…

科目二试题

int main() {int i 1;int j 0;while (i < 10) {i;if (i % 2 ! 0) {break;}j;}printf("%d %d\n", i, j);system("pause");return 0; }答案&#xff1a; 3 1int x 3;#define ADD(x,y) x * yint main() {int x 2;int y 3;int res ADD(x, y);printf…

QML android 采集手机传感器数据 并通过udp 发送

利用 qt 开发 安卓 app &#xff0c;采集手机传感器数据 并通过udp 发送 #ifndef UDPLINK_H #define UDPLINK_H#include <QObject> #include <QUdpSocket> #include <QHostAddress>class UdpLink : public QObject {Q_OBJECT public:explicit UdpLink(QObjec…

使用ExcelJS快速处理Node.js爬虫数据

什么是ExcelJS ExcelJS是一个用于处理Excel文件的JavaScript库。它可以让你使用JavaScript创建、读取和修改Excel文件。 以下是ExcelJS的一些主要特点&#xff1a; 支持xlsx、xlsm、xlsb、xls格式的Excel文件。可以创建和修改工作表、单元格、行和列。可以设置单元格样式、字…

leetcode:67. 二进制求和

题目&#xff1a; 函数原型&#xff1a; char * addBinary(char * a, char * b) 思路&#xff1a; 二进制相加&#xff0c;首先我们考虑先将字符串逆序。由此要写一个逆序函数reserve。字符串逆序后&#xff0c;从前往后相加&#xff0c;以较长的字符串的长度为标准长度n&#…

Nacos使用JavaSDK,Nacos 动态监听配置,Nacos动态发布配置,Nacos动态获取实例

文章目录 一、概述1、内置SDK2、服务配置管理工具&#xff1a;ConfigService3、服务注册与发现管理工具&#xff1a;NamingService 二、服务配置管理1、获取配置&#xff08;1&#xff09;描述&#xff08;2&#xff09;参数&#xff08;3&#xff09;请求示例 2、监听配置&…

Android | ADB 命令

Android Debug Bridge Android 调试桥&#xff0c;通过 C/S 的形式利用 PC 来操作 Android 设备&#xff0c;通过 ADB 可以利用 shell 直接操作真机或模拟器&#xff0c;比如传输文件、管理应用、拉取日志等。 常用的 ADB 指令 # 开启 ADB 服务 adb start-server# 停止 ADB …

可视化大屏设计模板 | 主题皮肤(报表UI设计)

下载使用可视化大屏设计模板&#xff0c;减少重复性操作&#xff0c;提高报表制作效率的同时也确保了报表风格一致&#xff0c;凸显关键数据信息。 软件&#xff1a;奥威BI系统&#xff0c;又称奥威BI数据可视化工具 所属功能板块&#xff1a;主题皮肤上传下载&#xff08;数…

阿里云k8s服务之间偶尔获取不到dns解析安装ACK NodeLocal DNSCache

1.背景 feign.RetryableException: No route to host (Host unreachable) executing POST http://osale-thirdparty/empty/detect 服务突然会中断&#xff0c;开发在看日志的时候会出现host找不到的情况&#xff0c;阿里云技术推荐安装dns缓存组件&#xff0c;加上这个组件会解…