• 屏幕距离识别加语音提醒


    语音播放

    1. import pygame
    2. pygame.mixer.init() #初始化
    3. pygame.mixer.music.load(r"7359.wav") #文件位置
    4. pygame.mixer.music.play(1) #播放语音
    5. while pygame.mixer.music.get_busy(): # 在音频播放为完成之前不退出程序
    6. pass

    完整代码

    1.多线程使语音可以播放完,预防卡音。

    2.小于35厘米语音提醒并更换距离提醒字体颜色,一般情况下用蓝色字体显示。

    3.使用过程中可以把倒数第二行注释掉,不进行窗口的显示,仅判断距离

    1. import cv2
    2. from cvzone.FaceMeshModule import FaceMeshDetector
    3. import pygame
    4. import threading
    5. from PIL import Image, ImageDraw, ImageFont
    6. import numpy as np
    7. # 初始化pygame.mixer
    8. pygame.mixer.init()
    9. # 加载音频文件
    10. pygame.mixer.music.load('7359.wav') # 靠的太近啦 #音频文件自行修改
    11. # 设置摄像头
    12. cap = cv2.VideoCapture(0)
    13. detector = FaceMeshDetector(maxFaces=1)
    14. # 定义播放音频的函数
    15. def play_audio():
    16. pygame.mixer.music.play(1)
    17. while pygame.mixer.music.get_busy():
    18. continue
    19. # 开始检测人脸
    20. while True:
    21. success, img = cap.read()
    22. img, faces = detector.findFaceMesh(img, draw=False)
    23. if faces:
    24. face = faces[0]
    25. pointLeft = face[145]
    26. pointRight = face[374]
    27. w, _ = detector.findDistance(pointLeft, pointRight)
    28. W = 6.3
    29. f = 600
    30. d = (W * f) / w
    31. print(d)
    32. # 设置距离颜色
    33. if d < 35:
    34. print("过近提醒")
    35. # 检查是否正在播放音频
    36. if not pygame.mixer.music.get_busy():
    37. # 使用线程播放音频,避免阻塞主程序
    38. audio_thread = threading.Thread(target=play_audio)
    39. audio_thread.start()
    40. text_color = (255, 0, 0) # 红色
    41. else:
    42. text_color = (0, 0, 255) # 蓝色
    43. # 将 Depth 文本显示为汉语
    44. pil_img = Image.fromarray(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))
    45. draw = ImageDraw.Draw(pil_img)
    46. font = ImageFont.truetype("msyh.ttc", 36) # 使用微软雅黑字体,大小为36
    47. draw.text((face[10][0] - 95, face[10][1] - 5), f'距离:{int(d)}厘米', font=font, fill=text_color)
    48. img = cv2.cvtColor(np.array(pil_img), cv2.COLOR_RGB2BGR)
    49. cv2.imshow("Distance recognition", img) # 窗口名只能是英文
    50. cv2.waitKey(1)
  • 相关阅读:
    java计算机毕业设计基于ssm的社区失物招领+房屋租赁+停车+宠物互助平台
    使用java调用C语言程序教程
    【网络工程师8个疑难杂症解决方案】
    ceph分布式存储系统
    JavaScript--循环优化
    Frida安装到使用一目了然
    如何在公网环境下使用笔记本的Potplayer访问本地群晖webdav中的影视资源
    YOLOX-PAI 详细解读(一)论文解读
    C语言的break、continue、switch、goto语句
    <图像处理> 空间滤波基础二
  • 原文地址:https://blog.csdn.net/2301_76620728/article/details/137378179