Я использую OpenCV на Python для записи видео с веб-камеры и обработки его с помощью модели YOLOv8 для распознавания транспортных средств. Видеопоток разделен на четыре квадранта, которые анализируются отдельно для подсчета автомобилей. В зависимости от количества транспортных средств я проектирую светофоры с помощью графической библиотеки черепахи.
Однако у меня возникают серьезные задержки при захвате и отображении видео, что приводит к прерывистые и медленные кадры. Вот соответствующая часть моего кода:
Код, над которым я работаю, представлен ниже:
import cv2
import argparse
import numpy as np
from ultralytics import YOLO
import supervision as sv
import turtle
def parse_arguments() -> argparse.Namespace:
parser = argparse.ArgumentParser(description="YOLOv8 live")
parser.add_argument("--webcam-resolution", default=[1280, 720], nargs=2, type=int)
return parser.parse_args()
def draw_signal(x, y, color):
turtle.penup()
turtle.goto(x, y)
turtle.pendown()
turtle.begin_fill()
turtle.color(color)
turtle.circle(30)
turtle.end_fill()
def main():
args = parse_arguments()
frame_width, frame_height = args.webcam_resolution
cap = cv2.VideoCapture(0)
cap.set(cv2.CAP_PROP_FRAME_WIDTH, frame_width)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, frame_height)
model = YOLO("yolov8l.pt")
box_annotator = sv.BoxAnnotator(thickness=2, text_thickness=2, text_scale=1)
turtle.speed(0)
turtle.hideturtle()
turtle.title("Traffic Signal")
while True:
ret, frame = cap.read()
height, width, _ = frame.shape
half_height, half_width = height // 2, width // 2
quadrants = [frame[:half_height, :half_width], frame[:half_height, half_width:], frame[half_height:, :half_width], frame[half_height:, half_width:]]
max_vehicle_count = 0
max_vehicle_quadrant = -1
for i, quadrant in enumerate(quadrants):
result = model(quadrant, agnostic_nms=True)[0]
detections = sv.Detections.from_yolov8(result)
detections = detections[(detections.class_id == 2) | (detections.class_id == 3)]
vehicle_count = len(detections)
if vehicle_count > max_vehicle_count:
max_vehicle_count = vehicle_count
max_vehicle_quadrant = i
labels = [f"Vehicle {j+1}: {model.model.names[class_id]} {confidence:0.2f}" for j, (bbox, confidence, class_id, _) in enumerate(detections)]
quadrant = box_annotator.annotate(scene=quadrant, detections=detections, labels=labels)
cv2.rectangle(quadrant, (0, 0), (quadrant.shape[1], quadrant.shape[0]), (255, 255, 255), 2)
cv2.putText(quadrant, f"Vehicles: {len(detections)}", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
if i == 0:
frame[:half_height, :half_width] = quadrant
elif i == 1:
frame[:half_height, half_width:] = quadrant
elif i == 2:
frame[half_height:, :half_width] = quadrant
elif i == 3:
frame[half_height:, half_width:] = quadrant
turtle.clear()
signal_colors = ["red"] * 4
if max_vehicle_quadrant != -1:
signal_colors[max_vehicle_quadrant] = "green"
for i, color in enumerate(signal_colors):
draw_signal(-frame_width//2 + 100 + i * 150, frame_height//2 - 100, color)
cv2.imshow("yolov8", frame)
if cv2.waitKey(30) == 27:
break
cap.release()
cv2.destroyAllWindows()
if __name__ == "__main__":
main()
Что я пробовал:
Регулировка разрешения кадра: Я пробовал различные разрешения, чтобы посмотреть, влияют ли они на производительность, но отставание сохранялось.
Уменьшение нагрузки на обработку: I упростили обработку модели, чтобы просто оценить два класса, но задержка сохраняется.
Поточность: мы попытались использовать многопоточность для отдельного захвата и обработки видео, но это не сильно уменьшило задержку.
Ожидаемые результаты:
Мне нужен более плавный видеопоток с меньшей задержкой, аналогичный необработанному видео с веб-камеры. Цель — обеспечить обработку и представление данных в режиме реального времени без видимых задержек.
Я использую OpenCV на Python для записи видео с веб-камеры и обработки его с помощью модели YOLOv8 для распознавания транспортных средств. Видеопоток разделен на четыре квадранта, которые анализируются отдельно для подсчета автомобилей. В зависимости от количества транспортных средств я проектирую светофоры с помощью графической библиотеки черепахи. Однако у меня возникают серьезные задержки при захвате и отображении видео, что приводит к прерывистые и медленные кадры. Вот соответствующая часть моего кода: Код, над которым я работаю, представлен ниже: [code]import cv2 import argparse import numpy as np from ultralytics import YOLO import supervision as sv import turtle
for i, color in enumerate(signal_colors): draw_signal(-frame_width//2 + 100 + i * 150, frame_height//2 - 100, color)
cv2.imshow("yolov8", frame) if cv2.waitKey(30) == 27: break
cap.release() cv2.destroyAllWindows()
if __name__ == "__main__": main() [/code] [b]Что я пробовал:[/b] [list] [*]Регулировка разрешения кадра: Я пробовал различные разрешения, чтобы посмотреть, влияют ли они на производительность, но отставание сохранялось.
[*]Уменьшение нагрузки на обработку: I упростили обработку модели, чтобы просто оценить два класса, но задержка сохраняется.
[*]Поточность: мы попытались использовать многопоточность для отдельного захвата и обработки видео, но это не сильно уменьшило задержку.
[/list] [b]Ожидаемые результаты:[/b] Мне нужен более плавный видеопоток с меньшей задержкой, аналогичный необработанному видео с веб-камеры. Цель — обеспечить обработку и представление данных в режиме реального времени без видимых задержек.
Я захватываю видео с помощью OpenCV на Python в Raspberry PI 5 B+, но сталкиваюсь с серьезными проблемами с продолжительностью и качеством видео.
Подробнее:
Проблема с продолжительностью:
Я установил продолжительность захвата видео на 40 секунд, но...
Я захватываю видео с помощью OpenCV на Python в Raspberry PI 5 B+, но сталкиваюсь с серьезными проблемами с продолжительностью и качеством видео.
Подробнее:
Проблема с продолжительностью:
Я установил продолжительность захвата видео на 40 секунд, но...
Я хочу сделать сайт, при заходе на который у пользователя будет включаться веб-камера и обрабатываться кадры с нее. Обработанное изображение должно отобразиться на странице.
Я написал небольшое веб-приложение во flask, но по какой-то причине cap =...
Я использую pjsua2 для Android Kotlin,
Я хочу установить задержку для вывода аудиофайлов.
В pjsip используйте pjmedia_mem_capture_create , pjsua_conf_connect для подключения к порту.
Но в Android я не могу использовать буфер для хранения...
Последнее сообщение
Добрый день. нет исходящего звука, видео есть.
получаю ; sound_port.c EC suspended because of inactivity.
Может есть куда ткнуть?
Это в pjsua2 - kotlin, в pjsua2-java - звук есть.
разобрался:
/* Setup null audio (good for emulator) */...