yoooooger
This commit is contained in:
parent
8bdbfaadb0
commit
766a240a7e
@ -490,45 +490,6 @@ def startAIVideo2(video_path, output_url, m1, cls, confidence):
|
|||||||
|
|
||||||
Thread(target=monitor_ffmpeg_output, args=(pipe,), daemon=True).start()
|
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")
|
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")
|
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")
|
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