yoooooger

This commit is contained in:
yooooger 2025-07-23 17:12:11 +08:00
parent 8bdbfaadb0
commit 766a240a7e

View File

@ -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")