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

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

文章目录

播放声音

pygame

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

复制代码
sudo apt-get update
sudo apt-get install python3-pygame

python3 -m pip install pygame

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

python 复制代码
import pygame

def 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歌曲)

这个装上:

clike 复制代码
sudo apt-get update
sudo apt-get install alsa-utils

sudo apt-get update
sudo apt-get install mpg321

命令行放歌:

clike 复制代码
mpg321 -o alsa tts.mp3

成功播放!

摄像头检测与绑定

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

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

安装这个:

clike 复制代码
apt install v4l-utils

查看树莓派的设备:

clike 复制代码
v4l2-ctl --list-devices

查看usb设备:

clike 复制代码
lsusb

可以看到:

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

clike 复制代码
vim /etc/udev/rules.d/10-webcam.rules

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

clike 复制代码
KERNEL=="video*", ATTRS{idVendor}=="1871", ATTRS{idProduct}=="0341", MODE:="0777", SYMLINK+="people_video"

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

clike 复制代码
sudo udevadm control --reload-rules  # 这步骤好像没用

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

执行:

clike 复制代码
ls -l /dev |grep video

这样,opencv就可以写成:

clike 复制代码
cap = cv2.VideoCapture("/dev/people_video")

行人入侵后放歌

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

python 复制代码
import cv2
import os
import time
from datetime import datetime
from v5lite_e_onnx_end2end import yolov5_lite
import threading


def 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:
            break

        detected_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'):
            break

    cap.release()
    cv2.destroyAllWindows()


if __name__ == '__main__':
    main()

问询、帮助

csharp 复制代码
https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2
相关推荐
AI军哥6 小时前
MySQL8的安装方法
人工智能·mysql·yolo·机器学习·deepseek
白熊18813 小时前
【计算机视觉】CV实战项目 - 基于YOLOv5的人脸检测与关键点定位系统深度解析
人工智能·yolo·计算机视觉
知来者逆17 小时前
计算机视觉——速度与精度的完美结合的实时目标检测算法RF-DETR详解
图像处理·人工智能·深度学习·算法·目标检测·计算机视觉·rf-detr
一勺汤17 小时前
YOLOv11改进-双Backbone架构:利用双backbone提高yolo11目标检测的精度
人工智能·yolo·双backbone·double backbone·yolo11 backbone·yolo 双backbone
拾忆-eleven17 小时前
C语言实战:用Pygame打造高难度水果消消乐游戏
c语言·python·pygame
豆芽81921 小时前
图解YOLO(You Only Look Once)目标检测(v1-v5)
人工智能·深度学习·学习·yolo·目标检测·计算机视觉
@正在学习驰骋的小马21 小时前
九、小白如何用Pygame制作一款跑酷类游戏(添加前进小动物作为动态障碍物)
python·游戏·pygame
Eric.Lee202121 小时前
数据集-目标检测系列- F35 战斗机 检测数据集 F35 plane >> DataBall
人工智能·算法·yolo·目标检测·计算机视觉
早睡早起吧1 天前
目标检测篇---Fast R-CNN
人工智能·目标检测·计算机视觉·cnn
白熊1882 天前
【计算机视觉】CV实战项目 - 基于YOLOv5与DeepSORT的智能交通监控系统:原理、实战与优化
人工智能·yolo·计算机视觉