【树莓派】yolov5 Lite,目标检测,行人检测入侵报警,摄像头绑定

延续之前的程序:
https://qq742971636.blog.csdn.net/article/details/138172400

文章目录

  • 播放声音
    • pygame
    • 不出声音怎么办(调节音量)
    • 树莓派上的音乐播放器(可选)
    • 命令行直接放歌(尝试放mp3歌曲)
  • 摄像头检测与绑定
    • 如何绑定usb摄像头(我没有绑定成功)
  • 行人入侵后放歌
  • 问询、帮助

播放声音

pygame

可以使用Python的pygame库来在树莓派上播放MP3音频文件。首先,你需要确保你的树莓派上已经安装了pygame库。你可以使用以下命令在树莓派上安装pygame:

sudo apt-get update
sudo apt-get install python3-pygamepython3 -m pip install pygame

安装完成后,你可以使用以下Python代码在树莓派上播放MP3文件:

import pygamedef play_mp3(file_path):pygame.mixer.init()pygame.mixer.music.load(file_path)pygame.mixer.music.play()if __name__ == "__main__":mp3_file = "tts.mp3"  # 替换为你的MP3文件路径play_mp3(mp3_file)

这个简单的程序将初始化pygame的音频模块,加载指定的MP3文件,并开始播放。请确保将example.mp3替换为你实际的MP3文件路径。

需要注意的是,这段代码在执行pygame.mixer.init()时会占用音频设备,可能会导致其他音频应用无法使用。

这软件可以播放出音乐:

在这里插入图片描述

不出声音怎么办(调节音量)

我的pygame无法播放,我查了一些播放软件:

alsa-utilsalsa-utils是一个包含了一系列音频工具的软件包,你可以使用其中的工具来管理和调试音频设备。你可以通过以下命令安装:

sudo apt-get install alsa-utils

安装完成后,你可以使用alsamixer命令来打开一个交互式的音频控制界面,可以在这里调整音量和其他设置。

在这里插入图片描述

树莓派上的音乐播放器(可选)

在树莓派上安装播放音乐的软件通常很简单。你可以使用现有的软件包管理器(如apt)来安装各种音乐播放器。以下是几个常用的音乐播放器及其安装方法:

  1. VLC 媒体播放器

    VLC是一个功能强大的跨平台媒体播放器,它支持播放各种音频和视频格式。

    sudo apt-get update
    sudo apt-get install vlc
    

    安装完成后,你可以在图形界面中打开VLC并播放音乐。

  2. MPD(Music Player Daemon)

    MPD是一个轻量级的音乐播放器,它以守护进程的方式运行,可以通过各种客户端控制。

    sudo apt-get update
    sudo apt-get install mpd mpc
    

    安装完成后,你可以通过命令行或MPD的客户端来控制音乐播放。

  3. Mopidy

    Mopidy是一个使用Python编写的音乐播放器,支持各种音乐源和插件。

    sudo apt-get update
    sudo apt-get install mopidy
    

    安装完成后,你可以配置Mopidy以连接到各种音乐源,并使用其扩展功能。

  4. Rhythmbox

    Rhythmbox是一个简单易用的音乐播放器,集成于GNOME桌面环境中。

    sudo apt-get update
    sudo apt-get install rhythmbox
    

    安装完成后,你可以在图形界面中打开Rhythmbox并播放音乐。

这些是一些常见的音乐播放器,在树莓派上安装这些软件非常简单。根据你的偏好和需求选择合适的播放器进行安装即可。

命令行直接放歌(尝试放mp3歌曲)

这个装上:

sudo apt-get update
sudo apt-get install alsa-utilssudo apt-get update
sudo apt-get install mpg321

命令行放歌:

mpg321 -o alsa tts.mp3

在这里插入图片描述

成功播放!

摄像头检测与绑定

如何绑定usb摄像头(我没有绑定成功)

每次摄像头接入后可能会变,如何绑定usb摄像头?

安装这个:

apt install v4l-utils

查看树莓派的设备:

v4l2-ctl --list-devices

查看usb设备:

lsusb

可以看到:
在这里插入图片描述

创建 udev 规则: 使用你喜欢的文本编辑器创建一个新的 udev 规则文件。例如:

vim /etc/udev/rules.d/10-webcam.rules

在文件中添加一条规则,用于匹配你的摄像头,并指定固定的设备名称,比如写入:

KERNEL=="video*", ATTRS{idVendor}=="1871", ATTRS{idProduct}=="0341", MODE:="0777", SYMLINK+="people_video"

重新加载 udev 规则: 保存文件后,重新加载 udev 规则以使更改生效:

sudo udevadm control --reload-rules  # 这步骤好像没用

重新插入摄像头: 现在,重新插入你的摄像头,它应该被分配到指定的设备名称 /dev/camera1_name。

执行:

ls -l /dev |grep video

在这里插入图片描述

这样,opencv就可以写成:

cap = cv2.VideoCapture("/dev/people_video")

行人入侵后放歌

之前的代码加上这个代码即可:

import cv2
import os
import time
from datetime import datetime
from v5lite_e_onnx_end2end import yolov5_lite
import threadingdef play_audio_thread(file_path):"""在新线程中播放音频文件"""os.system(f'mpg321 -o alsa {file_path}')  # 使用os.system调用命令行播放音频def play_audio(file_path):"""播放音频文件"""threading.Thread(target=play_audio_thread, args=(file_path,)).start()def take_screenshot(frame, folder='images'):"""保存截图"""os.makedirs(folder, exist_ok=True)  # 创建文件夹now = datetime.now().strftime('%Y%m%d_%H%M%S')  # 当前日期时间作为文件名img_name = f'{folder}/{now}.jpg'cv2.imwrite(img_name, frame)print(f'Screenshot saved as {img_name}')def main():cap = cv2.VideoCapture(0)modelpath = 'v5lite-e_end2end.onnx'classfile = 'coco.names'net = yolov5_lite(modelpath, classfile)last_alert_time = 0  # 上次报警的时间while True:ret, frame = cap.read()if not ret:breakdetected_img, haveobj = net.detect(frame)cv2.imshow('Intrusion Alert', detected_img)current_time = time.time()if haveobj and current_time - last_alert_time > 5:  # 如果检测到人且距离上次报警超过5秒play_audio('tts.mp3')  # 播放音频last_alert_time = current_time  # 更新报警时间# 确保音频播放结束通常需要音频播放器的支持,这里简化处理直接截图take_screenshot(detected_img)if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release()cv2.destroyAllWindows()if __name__ == '__main__':main()

问询、帮助

https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2

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

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

相关文章

word添加行号

打开页面设置,找到行号

Java设计模式 _创建型模式_工厂模式(普通工厂和抽象工厂)

一、工厂模式 属于Java设计模式创建者模式的一种。在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。 二、代码示例 场景:花店有不同的花,通过工厂模式来获取花。 1、普通工厂模式 逻辑步骤&#…

【算法每日一练】

蛮有意思的的一道题,最后要判断能否成为一种1~n的全排列,我最这样做的: 整个数组先排序一下。假设遍历到了i,那就判断前面b和r的个数,但是有想到了后面可能还会对前面的结果产生影响,所以就抛弃了这个想法…

安卓intent+传递Serializable接口

从Mainactivity1传递对象给MainActivity2可以通过Serializable对象。 <?xml version"1.0" encoding"utf-8"?> <LinearLayoutxmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.co…

鸿蒙开发HarmonyOS4.0入门与实践

鸿蒙开发HarmonyOS4.0 配合视频一起食用&#xff0c;效果更佳 课程地址&#xff1a;https://www.bilibili.com/video/BV1Sa4y1Z7B1/ 源码地址&#xff1a;https://gitee.com/szxio/harmonyOS4 准备工作 官网地址 鸿蒙开发者官网&#xff1a;https://developer.huawei.com/con…

纯血鸿蒙APP实战开发——全局状态保留能力弹窗

全局状态保留能力弹窗 介绍 全局状态保留能力弹窗一种很常见的能力&#xff0c;能够保持状态&#xff0c;且支持全局控制显隐状态以及自定义布局。使用效果参考评论组件 效果图预览 使用说明 使用案例参考短视频案例 首先程序入口页对全局弹窗初始化&#xff0c;使用Globa…

高扬程水泵,提升水源新选择!— 恒峰智慧科技

在炎炎夏日&#xff0c;阳光炙烤着大地&#xff0c;森林火灾的发生频率也随之上升。火势猛烈&#xff0c;烟雾弥漫&#xff0c;给森林带来了极大的破坏。为了保护森林资源&#xff0c;我们必须采取有效的措施来扑灭火灾。而在这其中&#xff0c;高扬程水泵成为了提升水源新选择…

笔记:编写程序,绘制一个展示马尾松、樟树、杉木、 桂花 4 个树种不同季节的细根生物量的误差棒图。

文章目录 前言一、分析题目二、什么是误差棒图&#xff1f;二、编写程序总结 前言 编写程序&#xff0c;绘制一个展示马尾松、樟树、杉木、 桂花 4 个树种不同季节的细根生物量的误差棒图&#xff0c;实现过程如下&#xff1a; &#xff08;1&#xff09; 导入 matplotlib.pyp…

【数据结构与算法(C语言)】1. 线性表的顺序存储

文章目录 前言一. 线性表插入和删除1. 元素的插入2. 元素的删除 二. 代码三. 优缺点 前言 线性表的顺序存储结构&#xff0c;指的是用一段地址连续的存储单元依次存储线性表的数据结构 一. 线性表插入和删除 1. 元素的插入 插入位置之后的数据都向后移一位&#xff0c;上图中元…

银行业ESB架构:构建安全高效的金融信息交换平台

在金融行业&#xff0c;信息交换是银行业务运作的核心。为了实现不同系统之间的数据交互和业务流程的协同&#xff0c;银行通常采用企业服务总线&#xff08;ESB&#xff09;架构。本文将探讨银行业ESB架构的设计理念、关键技术以及实践经验&#xff0c;帮助银行构建安全高效的…

《软件过程与管理》复习

《软件过程与管理》复习 1 高质量编程及测试 1.1 如何选择正确的评审方法 选择评审方法最有效的标准是&#xff1a; “对于最可能产生风险的工作成果&#xff0c;要采用最正式的评审方法.” 例如&#xff1a;核心代码的失效也会带来很严重的后果&#xff0c;所以也应该采用…

【Unity学习笔记】第十四 Prefab 概念解惑

目录 1 prefab、prefab变体、prefab覆盖和prefab 嵌套2 connect 与unpack3 prefab到底是什么&#xff0c;它和gameobject又有什么区别&#xff1f;4 为什么要用prefab&#xff1f;5 代码动态加载prefab6 为什么我unity PrefabUtility.InstantiatePrefab() 得到的是null7 Prefab…

卫浴品牌商家做展示预约小程序的作用是什么

卫浴品牌类别多、普通/智能、场景化等&#xff0c;无论企业还是经销商市场门店都比较饱满&#xff0c;虽然市场需求度高&#xff0c;但同样需要商家不断拓宽销售渠道和挖掘客户价值&#xff0c;破圈增长。 线上多平台发展尤为重要&#xff0c;而小程序作为连接点&#xff0c;对…

PostgreSQL的学习心得和知识总结(一百三十九)|深入理解PostgreSQL数据库GUC参数 allow_alter_system 的使用和原理

目录结构 注&#xff1a;提前言明 本文借鉴了以下博主、书籍或网站的内容&#xff0c;其列表如下&#xff1a; 1、参考书籍&#xff1a;《PostgreSQL数据库内核分析》 2、参考书籍&#xff1a;《数据库事务处理的艺术&#xff1a;事务管理与并发控制》 3、PostgreSQL数据库仓库…

C++ //练习 14.2 为Sales_data编写重载的输入、输出、加法和复合赋值运算符。

C Primer&#xff08;第5版&#xff09; 练习 14.2 练习 14.2 为Sales_data编写重载的输入、输出、加法和复合赋值运算符。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /************************************************…

Windows使用bat远程操作Linux并执行命令

背景&#xff1a;让客户可以简单在Windows中能自己执行 Linux中的脚本&#xff0c;傻瓜式操作&#xff01; 方法&#xff1a;做一个简单的bat脚本&#xff01;能远程连接到Linux&#xff0c;并执行Linux命令&#xff01;客户双击就能使用&#xff01; 1、原先上网查询到使用P…

Java | Leetcode Java题解之第55题跳跃游戏

题目&#xff1a; 题解&#xff1a; public class Solution {public boolean canJump(int[] nums) {int n nums.length;int rightmost 0;for (int i 0; i < n; i) {if (i < rightmost) {rightmost Math.max(rightmost, i nums[i]);if (rightmost > n - 1) {retu…

社交技巧:网络社交有哪些优点?

既然网络社交已经成为了我们进行社交的一个必不可少的方式&#xff0c;那今天就来和大家分析一下&#xff0c;网络社交有哪些优点&#xff0c;以帮助大家更恰当地使用社交媒体 1.拓展更多的关系机会 有很多人在现实生活中可能过于内向腼腆&#xff0c;有社交焦虑&#xff0c;这…

C#-快速剖析文件和流,并使用(持续更新)

目录 一、概述 二、文件系统 1、检查驱动器信息 2、Path 3、文件和文件夹 三、流 1、FileStream 2、StreamWriter与StreamReader 3、BinaryWriter与BinaryReader 一、概述 文件&#xff0c;具有永久存储及特定顺序的字节组成的一个有序、具有名称的集合&#xff1b; …

Pandas dataframe 中显示包含NaN值的单元格

大部分教程只讲如何打印含有NA的列或行。这个函数可以直接定位到单元格&#xff0c;当dataframe的行和列都很多的时候更加直观。 # Finding NaN locations for df.loc def locate_na(df):nan_indices set()nan_columns set()for col, vals in df_descriptors.items():for in…