判断到人体骨骼就拍视频 判断不到就停止拍视频 一直循环 有人就一直循环拍视频导致之前视频没有保存怎么解决
要解决这个问题,你可以在拍摄视频时设置一个标志位,判断到人体骨骼时开始录制视频,判断不到人体骨骼时停止录制,并将录制的视频保存。下面是一个基本的实现思路:
设置一个布尔类型的标志位,例如 isRecording
,初始值设为 false
,表示是否正在录制视频。
在循环中进行人体骨骼检测,并根据检测结果更新 isRecording
的值。
当检测到人体骨骼且 isRecording
的值为 false
时,表示第一次检测到人体骨骼,此时开始记录视频并将 isRecording
设为 true
。
当检测不到人体骨骼且 isRecording
的值为 true
时,表示人体离开,此时停止记录视频并将 isRecording
设为 false
。
确保在每次开始或停止记录视频时,都能够保存之前录制的视频。
这样,当连续有人出现时,会不断录制视频,并保存之前录制的视频。以下是一个伪代码的示例:
isRecording = False
previousVideo = None
while True:
# 进行人体骨骼检测
skeleton = detectSkeleton()
if skeleton is not None:
if not isRecording:
# 开始记录视频
startRecording()
isRecording = True
else:
if isRecording:
# 停止记录视频
stopRecording()
isRecording = False
saveVideo(previousVideo) # 保存之前录制的视频
if isRecording:
# 实时记录视频
recordFrame()
# 更新 previousVideo
previousVideo = currentVideo
请注意,这只是一个基本的示例,具体的实现方式会根据你使用的人体骨骼检测工具和录制视频的方法而有所不同。你需要根据实际情况进行具体的编码和操作。
希望这个解决方案对你有帮助!如果还有其他问题,请随时提问。
【以下回答由 GPT 生成】
我可以解决这个问题。
首先,你需要确保你已经安装了OpenCV和MediaPipe库,并且将视频保存路径修改为你的实际路径。
然后,你可以使用下面的代码来实现这个功能:
import cv2
import datetime
import time
import mediapipe as mp
def record_video():
# 初始化摄像头
cap = cv2.VideoCapture(0)
while not cap.isOpened():
pass
# 设置视频帧大小
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1920)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 1080)
# 初始化姿态检测模型
mp_pose = mp.solutions.pose
pose = mp_pose.Pose(static_image_mode=False, min_detection_confidence=0.5)
# 获取当前时间作为视频文件名
now = datetime.datetime.now()
fourcc = cv2.VideoWriter_fourcc(*"mp4v")
filename = f"D:/桌面/编程/python/Camera/视频/{now.strftime('%m.%d.%H.%M.%S')}.mp4"
out = cv2.VideoWriter(filename, fourcc, 15, (1920, 1080))
while cap.isOpened():
# 读取视频帧
ret, frame = cap.read()
frame = cv2.flip(frame, 1)
if not ret:
break
frame = cv2.resize(frame, (1920, 1080))
# 检测姿态
result = pose.process(frame)
if result.pose_landmarks:
# 如果检测到人体骨骼,写入视频文件
out.write(frame)
else:
# 如果没有检测到人体骨骼,停止录制视频并保存之前的视频
out.release()
break
# 显示画面
cv2.imshow('Frame', frame)
# 按q键退出
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 释放资源
cap.release()
cv2.destroyAllWindows()
def main():
while True:
time.sleep(1)
record_video()
main()
这个程序通过调用OpenCV和MediaPipe库来实现视频录制和人体骨骼检测。它会循环执行record_video()函数,检测到人体骨骼时会持续拍摄并保存视频,如果没有检测到人体骨骼,则停止拍摄并保存之前的视频。你可以通过按下键盘上的q键来退出程序。
请注意,根据你的实际需要,你可能需要调整一些参数,如摄像头索引、视频帧大小和保存路径。
【相关推荐】