Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 208новых вакансий за сутки·91 464вакансии открыты сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 137
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 401 кандидат открыт к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python17 131
  • Облачные технологии14 071
  • QA вакансии3 448
  • Backend вакансии2 087
  • Инженер данных1 783
  • Продакт-менеджер1 221

Разработка

  • Android1 862
  • iOS1 700
  • Fullstack вакансии976
  • AI вакансии943
  • Frontend вакансии738
  • Mobile вакансии44

По стеку

  • Go8 685
  • Java6 537
  • Node.js2 024
  • .NET1 723
  • Kotlin1 612
  • Rust1 462
  • C#710
  • PHP682
  • C++574

DevOps и инфраструктура

  • Kubernetes7 766
  • DevOps вакансии6 046
  • Linux-инфраструктура5 493
  • Terraform / IaC4 271
  • CI/CD3 241
  • Мониторинг и Observability1 790
  • SRE564
  • Кибербезопасность445

Аналитика и данные

  • Data Scientist1 120
  • Бизнес-аналитик913
  • Аналитик данных834
  • Системный аналитик150

Другие направления

  • Проджект-менеджер600
  • UI/UX дизайн143
  • Ручное тестирование14

По регионам

  • Вакансии в США43 099
  • Вакансии в Европе23 432
  • Вакансии в Канаде4 376
  • Работа в России3 903

По формату

  • Удалённые вакансии72 764
  • Релокация в США43 097
  • Гибридная работа12 388
  • Офисная работа7 092

По уровню

  • Senior вакансии41 715
  • Middle вакансии20 188
  • Junior вакансии6 560

Сейчас нанимают

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis39 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме OpenCVВсе вопросы
OpenCVMiddleАлгоритмы

Что такое optical flow и в чём разница между методами Lucas-Kanade и Farneback?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

Lucas-Kanade вычисляет разреженный поток для ключевых точек (быстро, через calcOpticalFlowPyrLK), Farneback — плотный вектор смещения для каждого пикселя (медленнее, через calcOpticalFlowFarneback).

Lucas-Kanade: разреженный поток

Предполагает, что пиксели в небольшой окрестности (окно) движутся одинаково. Решает систему линейных уравнений методом наименьших квадратов. Реализован через cv2.calcOpticalFlowPyrLK.

import cv2
import numpy as np

cap = cv2.VideoCapture("video.mp4")
ret, old_frame = cap.read()
old_gray = cv2.cvtColor(old_frame, cv2.COLOR_BGR2GRAY)

# Детекция начальных точек (Shi-Tomasi)
feature_params = dict(maxCorners=200, qualityLevel=0.3,
                      minDistance=7, blockSize=7)
p0 = cv2.goodFeaturesToTrack(old_gray, mask=None, **feature_params)

# Параметры Lucas-Kanade
lk_params = dict(
    winSize=(15, 15),
    maxLevel=2,  # пирамида 3 уровня
    criteria=(cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 0.03)
)

while True:
    ret, frame = cap.read()
    if not ret or p0 is None:
        break

    frame_gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

    # Трекинг точек
    p1, status, error = cv2.calcOpticalFlowPyrLK(
        old_gray, frame_gray, p0, None, **lk_params
    )

    # Только успешно отслеженные точки
    good_new = p1[status == 1]
    good_old = p0[status == 1]

    for new, old in zip(good_new, good_old):
        a, b = new.ravel().astype(int)
        c, d = old.ravel().astype(int)
        cv2.arrowedLine(frame, (c, d), (a, b), (0, 255, 0), 2)

    old_gray = frame_gray.copy()
    p0 = good_new.reshape(-1, 1, 2)

cap.release()

Что такое optical flow

Optical flow (оптический поток) — вектор смещения для каждого пикселя между двумя последовательными кадрами. Описывает, в каком направлении и на сколько пикселей переместилась каждая точка изображения. Применяется для анализа движения, трекинга объектов, стабилизации видео, сжатия видео и вычисления скорости объектов.

Два подхода: разреженный и плотный поток

  • Разреженный (sparse) — вычисляется только для выбранных ключевых точек. Алгоритм Lucas-Kanade.
  • Плотный (dense) — вектор смещения для каждого пикселя. Алгоритм Farneback.

Farneback: плотный поток

Аппроксимирует окрестность каждого пикселя полиномом второго порядка, сравнивает коэффициенты между кадрами. Вычисляет вектор смещения для каждого пикселя. Медленнее Lucas-Kanade, но даёт полную карту движения. Реализован через cv2.calcOpticalFlowFarneback.

import cv2
import numpy as np

cap = cv2.VideoCapture("video.mp4")
ret, prev = cap.read()
prev_gray = cv2.cvtColor(prev, cv2.COLOR_BGR2GRAY)

while True:
    ret, curr = cap.read()
    if not ret:
        break

    curr_gray = cv2.cvtColor(curr, cv2.COLOR_BGR2GRAY)

    # flow.shape = (H, W, 2) — (dx, dy) для каждого пикселя
    flow = cv2.calcOpticalFlowFarneback(
        prev_gray, curr_gray,
        flow=None,
        pyr_scale=0.5,    # масштаб пирамиды
        levels=3,          # уровней пирамиды
        winsize=15,        # размер окна усреднения
        iterations=3,      # итерации на каждом уровне
        poly_n=5,          # размер пикселя полиномиальной экспансии
        poly_sigma=1.2,    # дисперсия гауссиана
        flags=0
    )

    # Визуализация через HSV
    mag, ang = cv2.cartToPolar(flow[..., 0], flow[..., 1])
    hsv = np.zeros_like(prev)
    hsv[..., 1] = 255
    hsv[..., 0] = ang * 180 / np.pi / 2
    hsv[..., 2] = cv2.normalize(mag, None, 0, 255, cv2.NORM_MINMAX)
    bgr = cv2.cvtColor(hsv, cv2.COLOR_HSV2BGR)

    cv2.imshow("Dense Flow", bgr)
    if cv2.waitKey(30) & 0xFF == ord('q'):
        break

    prev_gray = curr_gray

cap.release()
cv2.destroyAllWindows()

Сравнение методов

  • Lucas-Kanade: быстрый, подходит для realtime трекинга небольшого числа точек, требует предварительной детекции ключевых точек, плохо справляется с большими смещениями.
  • Farneback: плотный, даёт полную карту движения, медленнее (~10-20 FPS на CPU для Full HD), лучше для анализа общего движения в сцене.

Подводные камни

  • Lucas-Kanade теряет точки — status-массив содержит 0 для потерянных точек. Без фильтрации по status получите мусорные координаты.
  • Пирамида (maxLevel) нужна для больших смещений — при быстром движении без пирамиды алгоритм расходится. Увеличьте maxLevel до 3-4.
  • Farneback не работает на статичных сценах — шум камеры создаёт ненулевой поток; нужно пороговое отсечение по величине mag.
  • poly_sigma должна соответствовать poly_n — для poly_n=5 используйте poly_sigma=1.1–1.2, для poly_n=7 — poly_sigma=1.5. Несоответствие даёт размытый поток.
  • Предположение о яркостном постоянстве — оба метода предполагают, что яркость пикселя не меняется между кадрами. Изменение освещения или быстрая экспозиция нарушают это допущение.
  • Граничные артефакты в Farneback — края кадра имеют неполные окна усреднения и дают менее точный поток; обрезайте граничную полосу при анализе.

Частые вопросы на собеседовании

  • Что такое пороговая обработка (thresholding) в OpenCV и каковы её типы (binary, Otsu, adaptive)?
  • Что такое OpenCV и каковы его основные области применения?
  • Как преобразовать цветное изображение в оттенки серого в OpenCV?
  • В каких data/AI-задачах OpenCV даёт реальный выигрыш, а где лучше выбрать другой инструмент или более простой pipeline?

Типичные ошибки

  • Объяснять optical flow только синтаксисом без shape, dtype, состояния или режима выполнения.
  • Игнорировать leakage, воспроизводимость, пустые входы и скрытые копии данных.
  • Не проверять production-симптомы: latency, память, ретраи, дрейф качества и несовпадение версий.

Что проверяет интервьюер

  • Может ли связать optical flow с реальным контрактом входов и выходов.
  • Упоминает ли тесты, метрики, reproducibility и диагностику ошибок.
  • Видит ли различие между demo-кодом в ноутбуке и production-пайплайном.

Как вы знаете этот вопрос?

Проверить себя по теме OpenCV →

Источники

  • https://docs.opencv.org/4.x/d4/dee/tutorial_optical_flow.html
←Предыдущий вопросКак диагностировать production-проблемы OpenCV: нестабильное освещение, blur, FPS drops и camera disconnects?Следующий вопрос→В чём разница между `cv2.imread()` и `cv2.imdecode()` в Python/OpenCV?

Связанные темы

OpenCVdata-aidata-processingperformance-debugging