• 【树莓派】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
    
    
    • 1
    • 2
    • 3
    • 4
    • 5

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

    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)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

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

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

    这软件可以播放出音乐:

    在这里插入图片描述

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

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

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

    sudo apt-get install alsa-utils
    
    • 1

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

    在这里插入图片描述

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

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

    1. VLC 媒体播放器

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

      sudo apt-get update
      sudo apt-get install vlc
      
      • 1
      • 2

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

    2. MPD(Music Player Daemon)

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

      sudo apt-get update
      sudo apt-get install mpd mpc
      
      • 1
      • 2

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

    3. Mopidy

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

      sudo apt-get update
      sudo apt-get install mopidy
      
      • 1
      • 2

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

    4. Rhythmbox

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

      sudo apt-get update
      sudo apt-get install rhythmbox
      
      • 1
      • 2

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

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

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

    这个装上:

    sudo apt-get update
    sudo apt-get install alsa-utils
    
    sudo apt-get update
    sudo apt-get install mpg321
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    命令行放歌:

    mpg321 -o alsa tts.mp3
    
    • 1

    在这里插入图片描述

    成功播放!

    摄像头检测与绑定

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

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

    安装这个:

    apt install v4l-utils
    
    • 1

    查看树莓派的设备:

    v4l2-ctl --list-devices
    
    • 1

    找到摄像头信息:udevadm info /dev/video5

    在这里插入图片描述
    创建 udev 规则: 使用你喜欢的文本编辑器创建一个新的 udev 规则文件。例如:

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

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

    SUBSYSTEM=="video4linux", ENV{ID_PATH}=="platform-fd500000.pcie-pci-0000:01:00.0-usb-0:1.3:1.0", SYMLINK+="camera1_name"
    
    • 1

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

    sudo udevadm control --reload-rules  # 这步骤好像没用 我重启了
    
    • 1

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

    行人入侵后放歌

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

    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()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61

    问询、帮助

    https://docs.qq.com/sheet/DUEdqZ2lmbmR6UVdU?tab=BB08J2
    
    • 1
  • 相关阅读:
    蛋白组学治疗时点及不同治疗方式疗效差异比较
    种草文案怎么写吸引人?纯干货
    前端技能树,面试复习第 55 天—— 代码输出:同步异步任务 | 事件循环
    uniapp--点击上传图片到oss再保存数据给后端接口
    基于SVM+TensorFlow+Django的酒店评论打分智能推荐系统——机器学习算法应用(含python工程源码)+数据集+模型(二)
    C. Carrying Conundrum
    初识Load Runner
    【JS】把Promise手写明白!
    加完客户微信,第一句话发什么?
    c语言中的fread
  • 原文地址:https://blog.csdn.net/x1131230123/article/details/138201461