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

+1 128новых вакансий за сутки·93 813вакансий открыто сейчас·Новое:Talanto осенью: фильтры с числами, отклик по шагам и каталог компаний

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

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

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

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

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

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

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

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

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

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

Все подборки
  • Python17 196
  • Облачные технологии14 160
  • QA вакансии3 451
  • Backend вакансии2 107
  • Инженер данных1 800
  • Продакт-менеджер1 247

Разработка

  • Android1 855
  • iOS1 695
  • Fullstack вакансии995
  • AI вакансии952
  • Frontend вакансии751
  • Mobile вакансии43

По стеку

  • Go8 754
  • Java6 595
  • Node.js2 038
  • .NET1 738
  • Kotlin1 617
  • Rust1 473
  • C#718
  • PHP692
  • C++582

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

  • Kubernetes7 778
  • DevOps вакансии6 088
  • Linux-инфраструктура5 502
  • Terraform / IaC4 276
  • CI/CD3 275
  • Мониторинг и Observability1 793
  • SRE563
  • Кибербезопасность453

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

  • Data Scientist1 141
  • Бизнес-аналитик921
  • Аналитик данных860
  • Системный аналитик154

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

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

По регионам

  • Вакансии в США44 164
  • Вакансии в Европе24 016
  • Вакансии в Канаде4 533
  • Работа в России3 837

По формату

  • Удалённые вакансии75 134
  • Релокация в США44 163
  • Гибридная работа12 456
  • Офисная работа7 066

По уровню

  • Senior вакансии42 633
  • Middle вакансии20 971
  • Junior вакансии6 706

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

Все компании
  • Rakuten189 вакансий
  • Wise189 вакансий
  • ASML166 вакансий
  • Grab137 вакансий
  • Celonis38 вакансий
  • Spotify37 вакансий
  • Adyen28 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace17 вакансий

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

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

Как обнаруживать лица в OpenCV с помощью Haar cascades и DNN-детекторов?

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

Haar cascade (detectMultiScale) быстр на CPU, но чувствителен к наклону и освещению. DNN SSD ResNet-10 (dnn.readNetFromTensorflow + blobFromImage) точнее и устойчивее — предпочтителен для production-сценариев.

Haar Cascades

import cv2
import numpy as np

# Файлы каскадов поставляются с OpenCV
# Путь: cv2.data.haarcascades + 'haarcascade_frontalface_default.xml'
face_cascade = cv2.CascadeClassifier(
    cv2.data.haarcascades + "haarcascade_frontalface_default.xml"
)
eye_cascade = cv2.CascadeClassifier(
    cv2.data.haarcascades + "haarcascade_eye.xml"
)

img = cv2.imread("photo.jpg")
if img is None:
    raise FileNotFoundError("photo.jpg")

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Опциональная эквализация гистограммы улучшает качество при плохом освещении
gray_eq = cv2.equalizeHist(gray)

# scaleFactor=1.1  — уменьшение пирамиды на 10% каждый шаг
# minNeighbors=5   — минимум соседних прямоугольников для подтверждения
# minSize=(30,30)  — минимальный размер лица в пикселях
faces = face_cascade.detectMultiScale(
    gray_eq,
    scaleFactor=1.1,
    minNeighbors=5,
    minSize=(30, 30),
    flags=cv2.CASCADE_SCALE_IMAGE
)

print(f"Найдено лиц: {len(faces)}")
for (x, y, w, h) in faces:
    cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
    # Поиск глаз внутри области лица
    roi_gray = gray[y:y+h, x:x+w]
    eyes = eye_cascade.detectMultiScale(roi_gray, scaleFactor=1.1, minNeighbors=10)
    for (ex, ey, ew, eh) in eyes:
        cv2.circle(img, (x + ex + ew//2, y + ey + eh//2), ew//2, (0, 255, 0), 2)

cv2.imwrite("result_haar.jpg", img)

Два подхода к обнаружению лиц в OpenCV

OpenCV предоставляет два принципиально разных метода: классические Haar cascades (алгоритм Виолы–Джонса, 2001) и современные DNN-детекторы на основе SSD/ResNet. Выбор зависит от требований к скорости, точности и доступному железу.

DNN-детектор (SSD + ResNet-10)

import cv2
import numpy as np

# Модель: opencv_face_detector_uint8.pb + opencv_face_detector.pbtxt
# Скачать: https://github.com/opencv/opencv/tree/master/samples/dnn/face_detector
net = cv2.dnn.readNetFromTensorflow(
    "opencv_face_detector_uint8.pb",
    "opencv_face_detector.pbtxt"
)
# Для CUDA: net.setPreferableBackend(cv2.dnn.DNN_BACKEND_CUDA)
# net.setPreferableTarget(cv2.dnn.DNN_TARGET_CUDA)

img = cv2.imread("photo.jpg")
h, w = img.shape[:2]

# Предобработка: blob 300x300, mean subtraction (104, 117, 123) — BGR средние ImageNet
blob = cv2.dnn.blobFromImage(
    img, scalefactor=1.0, size=(300, 300),
    mean=(104.0, 117.0, 123.0), swapRB=False, crop=False
)
net.setInput(blob)

# Выход: (1, 1, N, 7) — N детекций, каждая: [batch, class, conf, x1, y1, x2, y2]
detections = net.forward()

confidence_threshold = 0.5
for i in range(detections.shape[2]):
    confidence = detections[0, 0, i, 2]
    if confidence < confidence_threshold:
        continue
    # Координаты нормализованы [0, 1]
    box = detections[0, 0, i, 3:7] * np.array([w, h, w, h])
    x1, y1, x2, y2 = box.astype(int)
    cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
    label = f"{confidence:.2f}"
    cv2.putText(img, label, (x1, y1 - 10),
                cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 1)

cv2.imwrite("result_dnn.jpg", img)

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

  • Haar cascade: ~5–10 мс/кадр на CPU, работает без GPU, но даёт много ложных срабатываний при наклоне лица >30°, плохом освещении, частичном перекрытии. Подходит для embedded/IoT.
  • DNN SSD ResNet-10: ~15–30 мс на CPU, ~2–5 мс на GPU, точность значительно выше, устойчив к наклону до 45°, но требует модельных файлов (~2.7 MB) и зависимости от DNN-модуля OpenCV.
  • Альтернативы: YuNet (cv2.FaceDetectorYN) — лёгкая DNN-модель, встроенная с OpenCV 4.5.4; dlib HOG+SVM — высокая точность, медленнее; MediaPipe Face Detection — оптимизирован для мобильных устройств.

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

  • Haar cascade не работает с профилем лица: для обнаружения профиля нужен отдельный файл haarcascade_profileface.xml, а не frontalface_default.xml.
  • scaleFactor слишком маленький (<1.05) — резкий рост времени обработки; слишком большой (>1.3) — пропуск лиц нестандартного размера.
  • DNN blob mean subtraction: значения (104, 117, 123) специфичны для данной модели. Использование других значений или swapRB=True со значениями BGR-порядка даёт деградацию качества.
  • Координаты DNN выходят за границы: нормализованные координаты могут быть немного меньше 0 или больше 1 из-за паддинга — всегда применяйте np.clip(box, 0, [w, h, w, h]).
  • detectMultiScale на цветном изображении: метод ожидает grayscale; передача BGR-изображения приведёт к ошибке или неверным результатам.
  • Ложные срабатывания при minNeighbors=1–2: типичное значение 4–6; снижение увеличивает recall, но вместе с ним — число false positives.
  • YuNet как современная альтернатива: cv2.FaceDetectorYN.create() требует отдельной загрузки ONNX-файла; путь к модели должен быть абсолютным или корректно разрешаться относительно cwd.
  • Работа с видеопотоком: для реального времени применяйте ROI-трекинг (обновлять детектор каждые N=5 кадров, между кадрами использовать cv2.TrackerCSRT), иначе DNN-детектор не даст 30 FPS на CPU.

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

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

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

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

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

  • Может ли связать face detection с реальным контрактом входов и выходов.
  • Упоминает ли тесты, метрики, reproducibility и диагностику ошибок.
  • Видит ли различие между demo-кодом в ноутбуке и production-пайплайном.
  • Предлагает ли observability, rollback, ограничения стоимости и стратегию incident replay.

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

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

Источники

  • https://docs.opencv.org/4.x/d2/d58/tutorial_table_of_content_dnn.html
  • https://docs.opencv.org/4.x/db/d28/tutorial_cascade_classifier.html

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

OpenCVdata-aidata-processingperformance-debugging