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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ca3c510d7854c8c62daf1c1687ed73b497c29d1a88e56646dd2023f74b9b7912
|
|
| MD5 |
b72e5e736b754c7ffc55196d7aebd5e1
|
|
| BLAKE2b-256 |
2d59e61cc0a1d1cc4e81aab28f398a1ac609c1b552a68c1d6cff9c65d8a25ddb
|
File details
Details for the file eyewear_counter-0.1.3-py3-none-any.whl.
File metadata
- Download URL: eyewear_counter-0.1.3-py3-none-any.whl
- Upload date:
- Size: 21.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5b9a8dc790f888a2b85f834cd6208aa729cd2290ebb8103143bef6a37161ccaf
|
|
| MD5 |
2deb9eb22725b51cc4cc19257dd36bec
|
|
| BLAKE2b-256 |
dceb209a3416bea8af86817b671f7d71b0ad8462782e422b64e9a2a02ec7d4b8
|