4000 грн на місяць

А де наші АйТі, коли вони так потрібні?

  • Автор теми Автор теми Jonhson
  • Дата створення Дата створення
cv собирать под платформу - то еще преключение.
как и ffmpeg
 
Таке собі. ~24FPS на педалі 3,6ГГц.
Python:
import cv2
import time

# Загрузка детектора тела
body_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_fullbody.xml')

# Создание трекера
tracker = cv2.TrackerCSRT_create()

# Загрузка видео
video = cv2.VideoCapture('video_2024-02-16_01-11-35.mp4')
fps = video.get(cv2.CAP_PROP_FPS)  # Получение FPS видео
start_time = time.time()
frame_count = 0
detect_interval = 5  # Обнаружение и инициализация трекера на каждом 5-ом кадре

while True:
    ret, frame = video.read()
    if not ret:
        break

    frame_count += 1
    if frame_count % detect_interval == 0:
        # Обнаружение тела человека
        bodies = body_cascade.detectMultiScale(frame, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))

        if len(bodies) > 0:
            (x, y, w, h) = bodies[0]
            bbox = (x, y, w, h)
            tracker.init(frame, bbox)

    # Отслеживание объекта
    success, bbox = tracker.update(frame)
    if success:
        (x, y, w, h) = [int(v) for v in bbox]
        cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255), 2)

    cv2.putText(frame, f"FPS: {int(1.0 / (time.time() - start_time))}", (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1,
                (0, 255, 0), 2)
    cv2.imshow("Frame", frame)
    start_time = time.time()

    key = cv2.waitKey(1) & 0xFF
    if key == ord("q"):
        break

video.release()
cv2.destroyAllWindows()

Втрачає ціль, якщо та впала, і без сумнівів сприймає за людину найближчий куст.Треба щось інше

P.S. Автор кода - GPT-Chat
 
А може просто не чиплятись за легасі і переходити на щось актуальне?
MOSSE быстр. Остальное намного медленнее. Если речь об одноплатнике, особо не разгуляешься. Конечно на малине этим заниматься - это онанизм, но нвидии у меня нема. Я переклацал все трекеры из списка - на живых пример большой разницы не заметил.
Можно конечно жостко в матан, и пилить шось свое. Но это точно не я :)
укажи ему твою версию cv2
там походу конфликт пакетов
Ставил последнюю - 4.9.0
cv собирать под платформу - то еще преключение.
как и ffmpeg
ХЗ - я собрал без особых проблем. Мануалы по сборке в инете есть.

Таке собі. ~24FPS на педалі 3,6ГГц.
Втрачає ціль, якщо та впала, і без сумнівів сприймає за людину найближчий куст.Треба щось інше

P.S. Автор кода - GPT-Chat
Ну этот алгоритм медленнее, чего ждать. А по поводу потери/ложной цели - никто ж не говорил, что будет легко. Это ж не нейронка, а просто алгоритм. Готового решения никто не выложит.
Заныкалась цель за куст, потом вылезла - все, трекается куст.

Я вообще мимомкрокодил, и нифига в этом не понимаю. Но мне кажется это комплексная задача. Например, если речь идет о трекинге движущейся цели, нужно комбинировать алгоритм трекинга, с алгоритмом обнаружения движения - предполагаю, полученный процент может быть вполне приемлемым.
Т.е. цель трекается, но не двигается, и детектим движение в другой области. Контурим шо там двигается, сравниваем с целью, если процент совпадения больше определенного - переносим трекинг на новый обьект (т.е. с условного куста на реальную цель).
Здесь конечно нюанс что движется не только цель, а и камера... думать нада.
 
Ну этот алгоритм медленнее, чего ждать.
Я прибрав малювалку прямокутника - хуярить аж бігом. Походу - там малювання з пайтона його пригнічує і уповільнює. Треба щось швидше, але вчора в мене GPT-чат поламався і почав хуйню замість кода генерувати.

Я вообще мимомкрокодил, и нифига в этом не понимаю. Но мне кажется это комплексная задача. Например, если речь идет о трекинге движущейся цели, нужно комбинировать алгоритм трекинга, с алгоритмом обнаружения движения - предполагаю, полученный процент может быть вполне приемлемым.
Т.е. цель трекается, но не двигается, и детектим движение в другой области. Контурим шо там двигается, сравниваем с целью, если процент совпадения больше определенного - переносим трекинг на новый обьект (т.е. с условного куста на реальную цель).
Здесь конечно нюанс что движется не только цель, а и камера... думать нада.
Я з самого початку це казав - додавання машинного зору робить можливою автономну роботу дрона, але, виводить його в інший сегмент, в якому "ланцет", а ланцетів і в кацапів не те щоб багато.
Алгоритм визначення руху - для дронів не підходить. В тебе рухається все, взагалі все зображення, бо дрон сука літає. Буде дика кількість об'єктів і ніхуя толку.
Я теж "в цьому ніхуя не розумію", бо я 175 спеціальність, а не 122. Мімокрокожу.
 
detect_interval = 5 - слишком частое обращение к медленному детектору.
измени на 30. Да это приведёт к потерям цели. Но детекция - это слишком расточительно.
Чтобы реже теряло цель посмотри в направлении фильтра Калмана. Он позволяет предсказывать положение цели по ее скорости и ускорению.
 
detect_interval = 5 - слишком частое обращение к медленному детектору.
измени на 30. Да это приведёт к потерям цели. Но детекция - это слишком расточительно.
Чтобы реже теряло цель посмотри в направлении фильтра Калмана. Он позволяет предсказывать положение цели по ее скорости и ускорению.
ну і буде раз в 30 кадрів обробка. А нахуя взагалі тоді трекать? Можна взагалі не трекать - результат такий саме :D
Прискорь малювання. Коли я не малюю прямокутник - проблем немає, відос пролітає за пару секунд.
 
ну і буде раз в 30 кадрів обробка. А нахуя взагалі тоді трекать? Можна взагалі не трекать - результат такий саме :D
Прискорь малювання. Коли я не малюю прямокутник - проблем немає, відос пролітає за пару секунд.
чот странно - у меня такой же cv2.rectangle(frame, p1, p2, (255,0,0), 2, 1) и быстро рисует.
Вообще, рисование нах не нужно - если речь о живом примере, то нужны только координаты фрейма, которые потом будут использоваться при вычислении вектора движения.
 
чот странно - у меня такой же cv2.rectangle(frame, p1, p2, (255,0,0), 2, 1) и быстро рисует.
Вообще, рисование нах не нужно - если речь о живом примере, то нужны только координаты фрейма, которые потом будут использоваться при вычислении вектора движения.
Помилка потрібна. Відхилення від центру, чи точки яка вважається за центр.
 
Прискорь малювання. Коли я не малюю прямокутник - проблем немає, відос пролітає за пару секунд.
питон так устроен. Да и не только питон.
у тебя поток данных от вычисления до отрисовки. Убрав отрисовку, как конечную цель вычислений, оптимизатор не видит необходимости в вычислениях, и не делает их. От сюда ускорение.
Хотя может быть дело и в отрисовке.
 
а вообще, конечно, питон - это прототип.
Нагруженные вычисления реализовываются на C/C++
 
Когда будешь работать в плюсах, чтобы сразу выиграть процентов 300..500, как можно реже выделяй и иннициализируй память.
 
питон так устроен. Да и не только питон.
у тебя поток данных от вычисления до отрисовки. Убрав отрисовку, как конечную цель вычислений, оптимизатор не видит необходимости в вычислениях, и не делает их. От сюда ускорение.
Хотя может быть дело и в отрисовке.
Да все норм у питона с отрисовкой. Это с той стороны какие то проблемы.
Спасибо за совет об алгоритме калмана. Сегодня пол дня проковырялся в этой ерунде. Пришел к выводу, что есть два пути:
1. ресурсная одноплатка+нейронка (условная yolo tiny 4). Обучаем модель, и трекаем что хотим.
2. Наш путь самурая - лепим из говна и палок. Т.е. нересурсный условный rp4 + cv2 + матан.
Мы не ищем легких путей, поэтому берем любой быстрый алгоритм трекинга, и добавляем к нему фильтр калмана. Это чтобы реализовать самый сложный сценарий, где двигается камера + двигается цель + цель хитрожопая, и может заныкаться за ближайший куст.
В моем понимании это так - берем тот же mossi который быстро трекает цель. Добавляем калмана.
Дальше: при каждой итерации запоминаем где будет находиться цель по калману. При следующей итерации, сравниваем то, что мы трекнули, с тем, что вернул калман на предыдущей итерации.
Если совпало - ок, идем дальше
Если не совпало - проверяем область, которую вернул калман.
Ничего нет - ок, идем дальше
А если нашли- значит, трекинг проебался, и потерял цель. Возвращаем куда нужно.
Попробую шо-нибудь сочинить.
 
а вообще, конечно, питон - это прототип.
Нагруженные вычисления реализовываются на C/C++
Ясний хуй, але я по лінухам не сильно спеціаліст, а обробка відео - це те, чим я взагалі не займався.
 
чот странно - у меня такой же cv2.rectangle(frame, p1, p2, (255,0,0), 2, 1) и быстро рисует.
Вообще, рисование нах не нужно - если речь о живом примере, то нужны только координаты фрейма, которые потом будут использоваться при вычислении вектора движения.
Я перевірив композитний вихід малини.
Вона юзає його тупо як другий дисплей, щоб на нього щось вивести - треба проста вікно на нього перетягнути.
Немає там затримки. CSI камера для малини суб'єктивно не має затримки відображення через opencv з цим кодом:
sudo apt-get install build-essential cmake pkg-config
sudo apt-get install libjpeg-dev libtiff-dev libpng-dev libavcodec-dev libavformat-dev libswscale-dev libv4l-dev libxvidcore-dev libx264-dev libgtk-3-dev libatlas-base-dev gfortran
sudo apt-get install libgtk-3-dev
sudo apt-get install python3-dev python3-pip
pip3 install numpy
pip3 install opencv-python

Python:
import cv2

cap = cv2.VideoCapture(0)

if not cap.isOpened():
    print("Ошибка открытия видеопотока")
    exit()

while True:
    ret, frame = cap.read()
    if not ret:
        print("Невозможно прочитать кадр")
        break

    cv2.imshow('Camera', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

P.S. Автор кода - традиційно GPT-chat
 
Назад
Зверху Знизу