yoooooger
This commit is contained in:
parent
8bdbfaadb0
commit
766a240a7e
@ -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")
|
||||
|
Loading…
x
Reference in New Issue
Block a user