需要安装opencv(视频)、pygame(音频)
采用双线程(注意修改自己的路径)
源码如下:
#读取视频,添加音频
import pygame
from concurrent.futures import ThreadPoolExecutor, wait
import cv2
import sys
import datetime
is_camera_open = False
def camera_monitor():
# 读取视频/摄像头
video = cv2.VideoCapture(0)
# 命名窗口,第二个参数表示窗口可缩放
cv2.namedWindow('video', 0)
# 摄像头未正确打开则退出
if not video.isOpened():
print('Could not open video')
sys.exit()
print("设置为True")
global is_camera_open
is_camera_open = True
print("已经设置为TRUE")
while True:
# 读取当前帧
ok, frame = video.read()
if not ok:
break
# 函数执行开始时间
timer = cv2.getTickCount()
# 计算fps
fps = cv2.getTickFrequency() / (cv2.getTickCount() - timer)
# 显示提示信息(图像,文字内容,坐标,字体,大小,颜色,字体厚度) #cv2.LINE_AA为抗锯齿,看起来会平滑一些
cv2.putText(frame, "FPS : " + str(int(fps)), (100, 50),
cv2.FONT_HERSHEY_SIMPLEX, 0.75, (50, 170, 50), 2, cv2.LINE_AA)
# 显示时间
datet = str(datetime.datetime.now())
cv2.putText(frame, "Time:" + datet, (100, 20),
cv2.FONT_HERSHEY_SIMPLEX, 0.75, (0, 255, 255), 2, cv2.LINE_AA)
# 显示结果
cv2.imshow("video", frame)
# 按ESC退出
k = cv2.waitKey(1) & 0xff
if k == 27:
is_camera_open = False
break
video.release()
cv2.destroyAllWindows()
# camera_monitor()
def playMusic(filename, loops=0, start=0.0, value=0.5):
played = False
while True:
pygame.mixer.init() # 音乐模块初始化
global is_camera_open
print('\r is_camera_open ' + str(is_camera_open), end='')
if not played and not is_camera_open:
continue
if not played:
pygame.mixer.music.load(filename)
# pygame.mixer.music.play(loops=0, start=0.0) loops和start分别代表重复的次数和开始播放的位置。
pygame.mixer.music.play(loops=5, start=start)
pygame.mixer.music.set_volume(value)
if pygame.mixer.music.get_busy() == True:
played = True
else:
if flag:
pygame.mixer.music.stop() # 停止播放
break
if not is_camera_open and played:
pygame.mixer.music.stop() # 停止播放
break
def main():
pool = ThreadPoolExecutor(max_workers=2)
future = []
camera_thread = pool.submit(camera_monitor)
music_thread = pool.submit(playMusic, r'C:\Users\14392\Desktop\video\jet.wav')
future.append(camera_thread)
future.append(music_thread)
wait(future)
if __name__ == "__main__":
main()