关于逐帧读取视频,并且读取视频帧图片标注

import cv2
import json
from collections import defaultdict
from collections import deque
from pynput import keyboard

frame_objects = defaultdict(list)
frame_buffer = deque(maxlen=300)
queue_index = -1
load_new_frame = True
frame_index = -1

def read_log_file(log_file_path):
    global frame_objects
    with open(log_file_path, 'r') as f:
        for line in f:
            data = json.loads(line)
            frame_index = int(data["imagePath"])
            shapes = data["shapes"]
            frame_objects[frame_index] = shapes

def on_press(key):
    global queue_index, load_new_frame
    if key == keyboard.Key.right or key == keyboard.Key.down or key == keyboard.Key.space:  # Right arrow key, Down arrow key, Space
        if queue_index < len(frame_buffer) - 1:
            queue_index += 1
        else:
            load_new_frame = True
    elif key == keyboard.Key.left or key == keyboard.Key.up:  # Left arrow key, Up arrow key
        if queue_index > 0:
            queue_index -= 1
        load_new_frame = False
    elif str(key) == "'q'":  # Press 'q' to exit
        return False

def play_video_with_annotation(log_file_path, video_file_path):
    global frame_objects, frame_buffer, queue_index, load_new_frame, frame_index
    read_log_file(log_file_path)
    cap = cv2.VideoCapture(video_file_path)

    # 启动键盘监听器
    listener = keyboard.Listener(on_press=on_press)
    listener.start()

    while cap.isOpened():
        if load_new_frame:
            ret, frame = cap.read()
            if not ret:
                print('video end')
                break

            frame_index += 1
            cv2.putText(frame, str(frame_index), (20, 70), cv2.FONT_HERSHEY_SIMPLEX, 0.8, (0, 0, 255), 2)
            frame_buffer.append(frame)
            queue_index = len(frame_buffer) - 1
            load_new_frame = False

        if len(frame_buffer) > 0:
            view_index = frame_index - len(frame_buffer) + queue_index + 1
            imshow = frame_buffer[queue_index]
            if max(imshow.shape[:2]) > 1280:
                imshow = cv2.resize(imshow, (1280, 720))

            if view_index in frame_objects:
                shapes = frame_objects[view_index]
                for shape in shapes:
                    label = shape.get("label", "")
                    points = shape.get("points")
                    if points:
                        cv2.rectangle(imshow, tuple(points[0]), tuple(points[1]), (0, 255, 0), 2)
                        cv2.putText(imshow, label, (points[0][0], points[0][1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.8,
                                    (0, 255, 0), 2)

            cv2.imshow('Video', imshow)

        key = cv2.waitKey(1)
        if key == ord('q'):
            break

    cap.release()
    cv2.destroyAllWindows()

def main():
    log_file_path = r'D:\GZ_renti\output.log'
    video_file_path = r'D:\GZ_renti\output.mp4'
    play_video_with_annotation(log_file_path, video_file_path)

if __name__ == "__main__":
    main()

相关推荐

  1. 关于读取视频并且读取视频图片标注

    2024-05-03 08:46:03       13 阅读
  2. opencv获取视频图片

    2024-05-03 08:46:03       19 阅读
  3. opencv-python库 cv2读取视频cv2.VideoCapture()

    2024-05-03 08:46:03       11 阅读
  4. 【备忘】利用FFMpeg读取视频第一作为封面

    2024-05-03 08:46:03       17 阅读
  5. 视频中截取指定图片

    2024-05-03 08:46:03       38 阅读
  6. 视频-数-FPS

    2024-05-03 08:46:03       39 阅读
  7. Python截取视频

    2024-05-03 08:46:03       25 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-05-03 08:46:03       14 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-05-03 08:46:03       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-05-03 08:46:03       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-05-03 08:46:03       18 阅读

热门阅读

  1. 机器翻译常用指标BLEU

    2024-05-03 08:46:03       12 阅读
  2. 【DevOps】使用Docker Compose 部署Web应用

    2024-05-03 08:46:03       12 阅读
  3. 软件架构设计模式:微服务与单体架构的比较

    2024-05-03 08:46:03       11 阅读
  4. Linux下深度学习虚拟环境的搭建与模型训练

    2024-05-03 08:46:03       13 阅读
  5. 深度学习的核心数学知识点

    2024-05-03 08:46:03       12 阅读
  6. Vue 3 Hooks: 深入理解 Composition API 的魅力

    2024-05-03 08:46:03       9 阅读
  7. selenium自动化,Chrome 启动参数

    2024-05-03 08:46:03       11 阅读
  8. docker 获取离线镜像包

    2024-05-03 08:46:03       11 阅读
  9. 深信服超融合部署Ubuntu22.04 LTS

    2024-05-03 08:46:03       12 阅读