Skip to main content

Fast model for counting eyewear types on faces in large sets of images.

Project description

Eyewear Counter

Быстрая модель для подсчёта количества людей в очках, солнцезащитных очках и без очков на большом наборе изображений. Поддерживает пакетную обработку, асинхронную загрузку и параллельные вычисления для максимальной производительности.

Установка

Через PyPI:

pip install eyewear-counter

Или напрямую из репозитория:

pip install git+https://github.com/qksolov/eyewear-counter.git

Зависимости

torch
torchvision
opencv-python
ultralytics
numpy
pandas
xlsxwriter
aiohttp
nest_asyncio
requests
tqdm
gradio

Для оптимальной производительности рекомендуется запуск на GPU с поддержкой CUDA.

Веб-интерфейс

Запуск веб-приложение через терминал:

eyewear-counter-app

Онлайн-демо доступно на Hugging Face Spaces.

Пример использования

from eyewear_counter import EyewearCounter

imgs = ['img1.jpg', 'img2.jpg']

model = EyewearCounter()
results, num_erorrs = model.run(imgs)

Более подробный пример использования см. в файле example_of_use.py.

Архитектура

Обработка изображений

  • Детекция лиц: На вход подаётся батч изображений. Детектор возвращает bounding boxes с координатами лиц. Используются предобученные модели: по умолчанию — YOLOv11 akanametov/yolo-face, также доступен RetinaFace elliottzheng/batch-face.

  • Извлечение областей: С помощью ROI Align извлекаются области с лицами и приводятся к единому размеру.

  • Классификация: Батч лиц передаётся в свёрточный классификатор для определения наличия и типа очков. По умолчанию используется ResNet18, также доступен MobileNetV3-Large — обе модели обучены на собственном датасете, собранном из лиц на изображениях Open Images.

flowchart TB
    subgraph "Model Batch Process"
        direction LR
        InputBatch[(Image Batch)] --> FaceDetector
        FaceDetector["Face Detector"] -->|"bboxes"| ROIOperation
        InputBatch --> ROIOperation
        ROIOperation["ROI Align"] -->|Face Batch|Classifier-->Results[(Results)]
    end

Пайплайн обработки

  • Producer: Асинхронная загрузка изображений из различных источников (диск, URL).

  • Consumers: Собирают батчи изображений из общей асинхронной очереди и передают их в модель.

  • Параллельная обработка: Каждый батч обрабатывается в отдельном потоке ThreadPoolExecutor. Это предусмотрено для CPU-режима, где даёт истинное распараллеливание. При работе с GPU дает небольшое ускорение за счёт конвейеризации (перекрытие загрузки данных и вычислений), несмотря на последовательное исполнение ядер GPU.

graph LR

    Sources[(Sources
    )] --> Load

    subgraph "Async Tasks"
        subgraph Producer
            Load@{ shape: procs, label: "Async load images"}
        end
        Load -.-> Queue[(Queue)]
        Load -.-> Queue
        Load -.-> Queue

        subgraph Consumers
            Consumer1[Consumer 1]
            Consumer2[Consumer 2]
        end

        Queue -.-> Consumer1
        Queue -.-> Consumer2
    end

    subgraph "Thread Pool Executor"
        direction TB
        Thread1[[Model batch process]]
        Thread2[[Model batch process]]
    end
    Consumer1 --> Thread1
    Consumer2 --> Thread2

    Thread1 --> Results[(Results)]
    Thread2 --> Results
    

Производительность

Конфигурация и параметры тестирования:

  • CPU: тестирование на Intel Core i5-4570 с image_size=640, batch_size=8, max_workers=3 на выборке из 100 изображений.

  • GPU: тестирование в Google Colab с NVIDIA Tesla T4, image_size=640, batch_size=32, max_workers=2 на выборке из 1000 изображений.

Проверка проводилась как на локальных файлах, так и на изображениях по URL (по 3 эксперимента, результаты усреднены). Следует учитывать, что время работы может варьироваться из-за скорости отклика при загрузке изображений по сети.

Детектор Классификатор Среднее время на изображение CPU (сек) Среднее время на изображение GPU (сек)
YoloDetector ResNet18 0.1449 0.0187
YoloDetector MobileNet_v3_large 0.1373 0.0191
RetinaFaceDetector ResNet18 0.0976 0.0206
RetinaFaceDetector MobileNet_v3_large 0.0939 0.0207

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

eyewear_counter-0.1.4.tar.gz (19.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

eyewear_counter-0.1.4-py3-none-any.whl (21.3 kB view details)

Uploaded Python 3

File details

Details for the file eyewear_counter-0.1.4.tar.gz.

File metadata

  • Download URL: eyewear_counter-0.1.4.tar.gz
  • Upload date:
  • Size: 19.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.4

File hashes

Hashes for eyewear_counter-0.1.4.tar.gz
Algorithm Hash digest
SHA256 10eebc4f4c41193e9e1f52a51056e4c1ef4d9ced065d5a8cc2d854c34dd1bcde
MD5 e536a7021db6a8e49fd52cc84cdc088e
BLAKE2b-256 6239bb423f1f283e3207da90a287d8d1b339076257b0fbff313c82c8020f7309

See more details on using hashes here.

File details

Details for the file eyewear_counter-0.1.4-py3-none-any.whl.

File metadata

File hashes

Hashes for eyewear_counter-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 4c6e16799d825ce0e64baad3bb6e48cfd91774a8cc816d423925aba656e56898
MD5 9afc54c6d8ad65f24b9656b3eb8ae448
BLAKE2b-256 e0d8b47ebda7f90a2adf9d69f850320575ab4be4401563a28e1ec24227796ce0

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page