通过摄像头检测步频

通过摄像头识别运动频率,比如步频。

打开摄像头
循环读取视频帧
灰度转换
统计中间一行数值和
人在摄像头前运动,该数值会呈现周期变化
通过快速傅里叶转换,将和步频相似频率显示出来。

(尝试人脸检测,跟着人脸位置变化计算频率。
这个对机器算力要求较高,视频帧处理能力不能满足需求)

import pyqtgraph as pg
import numpy as npimport cv2 from scipy.fftpack import fft, fftfreqimport timetimestamp = time.time()
print("当前时间戳:", timestamp)
print("cv2", cv2)# 训练一组人脸
face_detector = cv2.CascadeClassifier("C:\\Users\\13361\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.9_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python39\\site-packages\\cv2\\data\\haarcascade_frontalface_alt2.xml")data_list = []
fcount = 0
f_periods = []
interval = 0.0
infos = 'TEXT ON VIDEO'def show_info():global fcount, intervalglobal timestampfcount += 1res = []if fcount == 100:fcount = 0new_time = time.time()interval = new_time - timestamptimestamp = new_timeinterval /= 100.0print('show_info interval ', interval)# pos_mask = f_periods[np.where(f_periods < 10)]if len(f_periods) :for period in f_periods:res.append(int(60/(period*interval)))# res = res[np.where(res > 100)]return resdef get_data():global data_list, interval, fcountglobal f_periods, last_y, infosret, frame = vid.read()     # conversion of BGR to grayscale is necessary to apply this operationgray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)# # print(gray.shape)# # 检测人脸(用灰度图检测,返回人脸矩形坐标(4个角))# #  param:    灰度图  图像尺寸缩小比例  至少检测次数(若为3,表示一个目标至少检测到3次才是真正目标)# ret = face_detector.detectMultiScale(gray, 1.05, 5)# ww = 0# for x, y, w, h in ret:#     cv2.rectangle(gray, (x, y), (x + w, y + h), (0, 0, 255), 3)  #画出矩形框#     # print("rect ", x, y, w, h)#     if w > 100 and w > ww:#         ww = w#         last_y = y# # print("pend ", last_y)# data_list.append(last_y)data = np.sum(gray, axis=1)data_list.append(float(data[200]))# print(float(data[200]))if len(data_list) > 200:data_list = data_list[1:]f_periods = do_fft(data_list)plot.setData(data_list,pen='g')res = show_info()if len(res) :infos = ''for info in res:if info > 100:infos += str(info)infos += ' '# infos = str(res)if fcount % 30 == 29:print(f"fft_periods: {f_periods}", interval)print(f"freq : {res}")print(f"infos : {infos}")# describe the type of font  to be used. font = cv2.FONT_HERSHEY_SIMPLEX # Use putText() method for inserting text on video cv2.putText(gray, infos, (50, 50), font, 1,  (0, 255, 255),  2,  cv2.LINE_4) # adaptive thresholding to use different threshold values on different regions of the frame.# Thresh = cv2.adaptiveThreshold(gray, 255, cv2.ADAPTIVE_THRESH_MEAN_C,#                                         cv2.THRESH_BINARY_INV, 11, 2)cv2.imshow('Thresh', gray)def do_fft(dl):# print(data.shape)# print(len(dl))# print(dl[:5])fft_series = fft(dl)     # fft-返回复数数组power = np.abs(fft_series)   # 取模sample_freq = fftfreq(fft_series.size)pos_mask = np.where(sample_freq > 0)freqs = sample_freq[pos_mask]powers = power[pos_mask]top_k_seasons = 3# top K=3 indextop_k_idxs = np.argpartition(powers, -top_k_seasons)[-top_k_seasons:]top_k_power = powers[top_k_idxs]fft_periods = (1 / freqs[top_k_idxs]).astype(int)# pos_mask = fft_periods[np.where(fft_periods > 100)]# print(f"fft_periods: {fft_periods}")# print(f"pos_mask: {pos_mask}")# print(pos_mask)return fft_periodsif __name__ == '__main__':import syssys.setrecursionlimit(10000)# threading.stack_size(200000000)# thread = threading.Thread(target=your_code)# thread.start()vid = cv2.VideoCapture(0) # pyqtgragh初始化app = pg.mkQApp()  # 建立appwin = pg.GraphicsLayoutWidget(show=True)  # 建立窗口win.setWindowTitle(u'pyqtgraph 实时波形显示工具')win.resize(800, 500)  # 小窗口大小# 创建图表historyLength = 200  # 横坐标长度p = win.addPlot()  # 把图p加入到窗口中p.showGrid(x=True, y=True)  # 把X和Y的表格打开p.setRange(xRange=[0, historyLength], yRange=[50000, 150000], padding=0)# p.setRange(xRange=[0, historyLength], yRange=[0, 500], padding=0)p.setLabel(axis='left', text='gray')  # 靠左p.setLabel(axis='bottom', text='时间')p.setTitle('gray graph')  # 表格的名字plot = p.plot()timer = pg.QtCore.QTimer()timer.timeout.connect(get_data) # 定时刷新数据显示timer.start(10) # 多少ms调用一次app.exec_()vid.release()cv2.destroyAllWindows() 

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

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

相关文章

深度学习(十)——神经网络:非线性激活

一、Padding Layers简介 nn.ZeroPad2d&#xff1a;在输入的tensor数据类型周围用0进行填充 nn.ConstantPad2d&#xff1a;在输入的tensor数据类型周围用常数进行填充 这个函数的主要作用是对输入的图像进行填充&#xff0c;但里面所有功能都能用nn.Conv2d实现。 二、Non-li…

一文读懂OpenGVLab带来的最新视觉预训练框架

大模型技术论文不断&#xff0c;每个月总会新增上千篇。本专栏精选论文重点解读&#xff0c;主题还是围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调或者LLM背后的基础模型重新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;则…

为什么直接用 cv2.imwrite 保存 PIL 的图片会导致奇怪的颜色?

在处理图像保存时&#xff0c;使用不同的库可能会导致颜色显示上的差异。特别是 Image.fromarray(synthesis).save 和 cv2.imwrite(save_dir, image) 两种方法之间的区别&#xff0c;会导致保存的图像颜色不同。这篇博客将解释这些方法的区别&#xff0c;以及具体导致颜色差异的…

.NET周刊【6月第3期 2024-06-18】

国内文章 记一次 .NET某游戏币自助机后端 内存暴涨分析 https://www.cnblogs.com/huangxincheng/p/18243233 文章讨论了程序中非托管内存暴涨的问题。作者描述了友人发现内存问题并请他帮助分析的背景&#xff0c;利用WinDbg工具分析Linux平台上的内存泄漏情况。文章介绍了如…

Maven POM:掌握项目对象模型的艺术

Maven POM&#xff1a;掌握项目对象模型的艺术 1. 引言 Maven&#xff0c;作为一个强大的项目管理和构建自动化工具&#xff0c;已经成为了Java社区中不可或缺的一部分。在Maven的世界里&#xff0c;POM&#xff08;Project Object Model&#xff0c;项目对象模型&#xff09…

N32G031 DMA

目录 N32G031 DMA概述 DMA主要特点 DMA总线架构 DMA使用场景 DMA配置和使用 优点&#xff1a; 缺点&#xff1a; N32G031 DMA概述 N32G031系列芯片基于32位ARM Cortex-M0微控制器&#xff0c;其内置了DMA&#xff08;直接内存访问&#xff09;控制器。DMA控制器允许数据…

潮玩宇宙大逃杀APP系统开发成品案例分享指南

这是一款多人游戏&#xff0c;玩家需要选择一个房间躲避杀手。满足人数后&#xff0c;杀手会随机挑选一个房间杀掉里面所有的参与者&#xff0c;其他房间的幸存者将平均瓜分被杀房间的元宝。玩家在选中房间后&#xff0c;倒计时结束前可以自由切换不同房间。 软件项目开发成品…

LabVIEW开发为什么沟通需求非常重要

在LabVIEW开发项目中&#xff0c;需求沟通是项目成功的基石。以下是需求沟通的重要性及其原因&#xff1a; 明确项目目标&#xff1a; 定义清晰的目标&#xff1a;通过与用户的沟通&#xff0c;可以明确项目的目标和范围&#xff0c;确保开发团队理解用户的实际需求&#xff0c…

【Android-Compose】流式布局FlowRow 不能居中对齐的一种解决办法

问题描述&#xff1a; 在安卓Compose 开发中使用LazyColumn 流式布局 FlowRow 有时候比延迟网格布局更灵活&#xff0c;但是也可能出现自动流向下一行之后&#xff0c;末尾处留下一些小空白。如图&#xff1a; 问题解决&#xff1a; 为了尽可能居中对齐&#xff0c;我们可…

专业技能篇---计算机网络篇

文章目录 前言计算机网络基础一、网络分层模型 HTTP一、从输入URL到页面显示发生了什么&#xff1f;二、Http的状态码有哪些&#xff1f;三、 HTTP与HTTPS有什么区别&#xff1f;四、URI 和 URL 的区别是什么?五、Cookie和Session有什么区别&#xff1f;六、GET与POST 前言 主…

dmhs同步因目的端表自增列报错解决方法

dmhs同步因目的端表自增列报错解决方法 1 dmhs copy 装载数据时报错 HY000 CODE:-27232 配置源端捕获器cpt 1 dmhs copy 装载数据时报错 HY000 CODE:-2723 ERR:Only if specified in the column list and SET IDENTITY INSERT is ON, then identity column could be assigned …

2023-2024年新能源汽车市场盘点与展望

本文全面盘点了2023年和2024年新能源汽车市场的新车型、价格走势、智能化趋势以及市场竞争格局&#xff0c;涵盖了各个价格级别和车型类别&#xff0c;为消费者提供购车参考和市场洞察。 文章目录 1.1 2023年新能源汽车市场总结1.2 2024年新能源汽车市场趋势1.3 新车型发布概览…

洛谷 P3379:最近公共祖先(LCA)← RMQ+欧拉序

【题目来源】https://www.luogu.com.cn/problem/P3379【题目描述】 如题&#xff0c;给定一棵有根多叉树&#xff0c;请求出指定两个点直接最近的公共祖先。【输入格式】 第一行包含三个正整数 N,M,S&#xff0c;分别表示树的结点个数、询问的个数和树根结点的序号。 接下来 N−…

PostgreSQL源码分析——INSERT

这里我们对INSERT语句进行分析&#xff0c; 只分析其宏观过程&#xff0c;具体细节后续再分析。我们就分析下面的语句的执行过程。 insert into t1 values(4,4);主流程 主流程如下&#xff1a; exec_simple_query --> pg_parse_query //语法解析--> raw_parser-->…

数据库面试题-ElasticSearch

数据库面试题-ElasticSearch 1、ElasticSearch是什么?2、谈谈ElasticSearch分词与倒排索引的原理?3、说说ElasticSearch分段存储的思想?4、说说你对ElasticSearch段合并的策略思想的认识?5、知道什么是文本相似度TF-IDF吗?6、说说ElasticSearch写索引的逻辑?7、说说Elast…

AI大模型的战场:通用大模型VS垂直大模型,谁会赢?

人不走空 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌赋&#xff1a;斯是陋室&#xff0c;惟吾德馨 目录 &#x1f308;个人主页&#xff1a;人不走空 &#x1f496;系列专栏&#xff1a;算法专题 ⏰诗词歌…

Clickhouse备份恢复_clickhouse-backup方式备份恢复的使用介绍

https://clickhouse.com/docs/zh/operations/backup https://github.com/Altinity/clickhouse-backup?tabreadme-ov-file#readmeclichouse-backup备份的总结 1、clichouse-backup备份的方式是物理备份 2、clichouse-backup只能在数据库本机运行备份&#xff0c;在远程异机去备…

联合类型和交叉类型

联合类型和交叉类型 在TypeScript中,除了基本的类型(如 number、string、boolean 等),我们还可以使用更加高级的类型来描述复杂的数据结构。其中,联合类型和交叉类型就是两个非常有用的高级类型。 联合类型(Union Types) 联合类型允许一个变量可以是多种类型中的任意一种。我…

Mybatis (plus 也适用)原生直接执行某句SQL

场景 想要不论传入什么sql 都能直接执行 示例 Autowiredprivate SqlSessionTemplate sqlSessionTemplate;public void executeSql(String replaceSql) {if (StringUtils.isEmpty(replaceSql)) {return;}try {SqlSession sqlSession sqlSessionTemplate.getSqlSessionFactory…

二、利用YOLOv8解决现实世界的问题

Ultralytics Solutions提供顶尖的YOLO模型应用&#xff0c;提供现实世界的解决方案如&#xff1a;目标记数&#xff0c;模糊和安全系统&#xff0c;提升效率和准确率在各种工业中。探索YOLOv8在实用性和有效性上的强大功能。 解决方案&#xff1a; 下面展示利用Ultralytics So…