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.3.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.3-py3-none-any.whl (21.3 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: eyewear_counter-0.1.3.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.3.tar.gz
Algorithm Hash digest
SHA256 ca3c510d7854c8c62daf1c1687ed73b497c29d1a88e56646dd2023f74b9b7912
MD5 b72e5e736b754c7ffc55196d7aebd5e1
BLAKE2b-256 2d59e61cc0a1d1cc4e81aab28f398a1ac609c1b552a68c1d6cff9c65d8a25ddb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for eyewear_counter-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 5b9a8dc790f888a2b85f834cd6208aa729cd2290ebb8103143bef6a37161ccaf
MD5 2deb9eb22725b51cc4cc19257dd36bec
BLAKE2b-256 dceb209a3416bea8af86817b671f7d71b0ad8462782e422b64e9a2a02ec7d4b8

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