diff --git a/ai2/cv_video.py b/ai2/cv_video.py index 7a73c05..cc16709 100644 --- a/ai2/cv_video.py +++ b/ai2/cv_video.py @@ -489,46 +489,7 @@ def startAIVideo2(video_path, output_url, m1, cls, confidence): break Thread(target=monitor_ffmpeg_output, args=(pipe,), daemon=True).start() - - def read_frames(cap, frame_queue): - while not stop_event.is_set(): - ret, frame = cap.read() - if not ret: - print("读取失败") - break - timestamp = time.time() - try: - frame_queue.put((timestamp, frame), timeout=1) - except queue.Full: - print("帧队列满,跳帧") - - def process_frames(frame_queue, processed_frame_queue, model, cls, confidence): - while not stop_event.is_set(): - try: - timestamp, frame = frame_queue.get(timeout=1) - result = model.predict(source=frame, classes=cls, conf=confidence, verbose=False) - processed = result[0].plot() - processed_frame_queue.put((timestamp, processed), timeout=1) - except queue.Empty: - continue - except Exception as e: - print(f"处理帧错误: {e}") - - def write_frames(processed_frame_queue, pipe, size): - last_timestamp = 0 - while not stop_event.is_set(): - try: - timestamp, frame = processed_frame_queue.get(timeout=1) - if timestamp < last_timestamp: - print(f"跳过闪回帧 {timestamp} < {last_timestamp}") - continue - last_timestamp = timestamp - frame = cv2.resize(frame, size) - pipe.stdin.write(frame.tobytes()) - except Exception as e: - print(f"写入帧错误: {e}") - break - + read_thread = Thread(target=read_frames, args=(cap, frame_queue), daemon=True, name="ReadThread") process_thread = Thread(target=process_frames, args=(frame_queue, processed_frame_queue, ov_model, cls, confidence), daemon=True, name="ProcessThread") write_thread = Thread(target=write_frames, args=(processed_frame_queue, pipe, size), daemon=True, name="WriteThread")