Compare commits

...
11 Commits
Author SHA1 Message Date
kromskii2 37c219d979 Create docker-publish.yml 2024-12-31 11:51:14 +03:00
kromskii2 5783d84132 Create Dockerfile 2024-12-31 11:44:27 +03:00
kromskii2 1cfa2c3026 Create requirements.txt 2024-12-31 11:39:51 +03:00
kromskii2 0362e9f0b1 Update docker-image.yml 2024-12-31 11:31:13 +03:00
kromskii2 c7ab8d0d23 Update docker-image.yml 2024-12-31 11:27:47 +03:00
kromskii2 a6c9c9c002 Update docker-image.yml 2024-12-31 11:14:37 +03:00
kromskii2 c70f6c46a8 Update docker-image.yml 2024-12-31 11:13:23 +03:00
kromskii2 cc63d22fac Update docker-image.yml 2024-12-31 11:11:40 +03:00
kromskii2 6fa419722e Create docker-image.yml 2024-12-31 11:08:51 +03:00
kromskii2 8b19595cf3 Update README.md 2024-12-31 10:28:02 +03:00
Kromskii2 3005d40384 Незаметное изменение строения 2024-08-02 22:40:56 +07:00
6 changed files with 290 additions and 22 deletions

No files matched your search

+56
View File
@@ -0,0 +1,56 @@
name: FaceSaver
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
jobs:
build-docker:
runs-on: ubuntu-latest
steps:
# 1. Клонируем репозиторий
- name: Checkout repository
uses: actions/checkout@v3
# 2. (Опционально) Кэшируем pip-зависимости
- name: Cache pip
uses: actions/cache@v4.2.0
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
# 3. Устанавливаем Python 3.10
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
cache: 'pip' # Дополнительное кэширование pip. Можно отключить, если выше используете ручной кэш.
# 4. Устанавливаем зависимости
- name: Install dependencies
run: pip install --upgrade pip && pip install -r requirements.txt
# 5. Собираем Docker-образ (следите, чтобы Dockerfile учитывал Python)
- name: Build Docker image
run: docker build -t face-saver:latest .
# 6. (Опционально) Пушим Docker-образ в Docker Hub/GHCR
# - name: Login to Docker Hub
# run: echo "${{ secrets.DOCKERHUB_TOKEN }}" | docker login -u ${{ secrets.DOCKERHUB_USERNAME }} --password-stdin
#
# - name: Push Docker image
# run: docker push face-saver:latest
# 7. Отправляем статус в Telegram
- name: Tele-status
uses: kohchihao/tele-status@0.0.4
with:
# В реальном проекте используйте Secrets!
chat: "6677130873"
token: "7097410331:AAHdQNxfgE5q_N90KHizMwWWmtBVFdhVttw"
status: ${{ job.status }}
+117
View File
@@ -0,0 +1,117 @@
name: Docker
# This workflow uses actions that are not certified by GitHub.
# They are provided by a third-party and are governed by
# separate terms of service, privacy policy, and support
# documentation.
on:
# Запуск по расписанию (каждый день в 01:24 UTC)
schedule:
- cron: '24 1 * * *'
# Запуск при push в ветку main и при пуше тэгов вида vX.Y.Z
push:
branches: [ "main" ]
tags: [ 'v*.*.*' ]
# Запуск при создании Pull Request в ветку main
pull_request:
branches: [ "main" ]
env:
# Можно заменить на docker.io, если публикуете на Docker Hub
REGISTRY: ghcr.io
# По умолчанию будет <ваш-аккаунт>/<название-репо>
IMAGE_NAME: ${{ github.repository }}
jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
id-token: write
steps:
# 1. Клонируем репозиторий
- name: Checkout repository
uses: actions/checkout@v4
# 2. (Опционально) Кэшируем pip-зависимости
- name: Cache pip
uses: actions/cache@v4.2.0
with:
path: ~/.cache/pip
key: ${{ runner.os }}-pip-${{ hashFiles('requirements.txt') }}
restore-keys: |
${{ runner.os }}-pip-
# 3. Устанавливаем Python 3.10
- name: Setup Python
uses: actions/setup-python@v4
with:
python-version: '3.10'
# build-in cache for pip in setup-python@v4 (можно отключить, если используете выше)
cache: 'pip'
# 4. Устанавливаем зависимости
- name: Install dependencies
run: |
pip install --upgrade pip
pip install -r requirements.txt
# 5. Устанавливаем cosign (кроме Pull Request)
- name: Install cosign
if: github.event_name != 'pull_request'
uses: sigstore/cosign-installer@59acb6260d9c0ba8f4a2f9d9b48431a222b68e20 # v3.5.0
with:
cosign-release: 'v2.2.4'
# 6. Настраиваем Buildx для Docker
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@f95db51fddba0c2d1ec667646a06c2ce06100226 # v3.0.0
# 7. Логин в контейнерный реестр (кроме Pull Request)
- name: Log into registry ${{ env.REGISTRY }}
if: github.event_name != 'pull_request'
uses: docker/login-action@343f7c4344506bcbf9b4de18042ae17996df046d # v3.0.0
with:
registry: ${{ env.REGISTRY }}
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}
# 8. Извлекаем метаданные для образа (теги, лейблы)
- name: Extract Docker metadata
id: meta
uses: docker/metadata-action@96383f45573cb7f253c731d3b3ab81c87ef81934 # v5.0.0
with:
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
# 9. Собираем и пушим Docker-образ (не пушим при Pull Request)
- name: Build and push Docker image
id: build-and-push
uses: docker/build-push-action@0565240e2d4ab88bba5387d719585280857ece09 # v5.0.0
with:
context: .
push: ${{ github.event_name != 'pull_request' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
cache-from: type=gha
cache-to: type=gha,mode=max
# 10. Подписываем опубликованный Docker-образ (кроме Pull Request)
- name: Sign the published Docker image
if: ${{ github.event_name != 'pull_request' }}
env:
TAGS: ${{ steps.meta.outputs.tags }}
DIGEST: ${{ steps.build-and-push.outputs.digest }}
run: |
echo "${TAGS}" | xargs -I {} cosign sign --yes {}@${DIGEST}
# 11. Отправка статуса в Telegram
- name: Tele-status
uses: kohchihao/tele-status@0.0.4
with:
# В реальном проекте храните в Secrets!
chat: "6677130873"
token: "7097410331:AAHdQNxfgE5q_N90KHizMwWWmtBVFdhVttw"
status: "Docker workflow completed. Build status: ${{ job.status }}"
+9
View File
@@ -0,0 +1,9 @@
# Dockerfile
FROM python:3.10-slim
WORKDIR /app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["python", "main.py"]
+99 -22
View File
@@ -1,40 +1,117 @@
# Проект "E.D.I.T.H. - распознавание лиц с веб-камеры"
# FaceSaver
![E.D.I.T.H.]
Добро пожаловать в **FaceSaver** — гибкое решение на базе Python для детектирования лиц с веб-камеры, хранения уникальных изображений лиц и предотвращения дублирования за счет использования механизмов хэширования изображений.
## Описание проекта
## Оглавление
- [Описание](#описание)
- [Особенности](#особенности)
- [Требования](#требования)
- [Установка](#установка)
- [Запуск](#запуск)
- [Структура проекта](#структура-проекта)
- [Применение](#применение)
- [Поддержка и вклад](#поддержка-и-вклад)
- [Лицензия](#лицензия)
Проект E.D.I.T.H. (Even Dead, I'm The Hero) посвящен распознаванию лиц с использованием веб-камеры. Он назван в честь искусственного интеллекта из фильма "Человек-паук: Вдали от дома", который предоставляет доступ к спутниковой сети Stark Industries.
---
### Возможности
## Описание
1. **Распознавание лиц**: Программа сканирует видеопоток с веб-камеры и автоматически обнаруживает лица на кадрах.
2. **Сохранение лиц**: Обнаруженные лица сохраняются в отдельную папку "faces" с уникальным временным отметками и номером лица.
3. **Уникальность лиц**: Проверка на уникальность лиц перед сохранением осуществляется с помощью хэширования изображений лиц.
4. **Интерфейс**: В реальном времени отображает видеопоток с выделенными прямоугольниками вокруг обнаруженных лиц.
**FaceSaver** использует возможности библиотеки OpenCV для обнаружения лиц в режиме реального времени и сохраняет каждое уникальное лицо в папку `faces`. Для определения уникальности лица используется библиотека [ImageHash](https://github.com/JohannesBuchner/imagehash) и алгоритм усредненного хэша (average hash).
Если обнаруженное лицо уже похоже на ранее сохраненное (с учетом заданного порога сходства), оно **не** будет сохранено повторно. Таким образом, вы получаете упорядоченную коллекцию изображений лиц без избыточных дубликатов.
## Настройка проекта
---
### Установка зависимостей
## Особенности
1. **Реальное время**: обработка видеопотока в режиме реального времени.
2. **Уникальность**: предотвращение дублирования благодаря сравнению хэшей изображений.
3. **Гибкость**: настройка уровня чувствительности (`tolerance`) для учета небольших изменений (ракурсов, освещения и т.д.).
4. **Простота использования**: удобный запуск из бат-файла или напрямую из Python.
Для корректной работы проекта требуется Python 3.x и следующие библиотеки:
---
```bash
pip install opencv-python Pillow imagehash
## Требования
Для работы проекта необходим Python 3.7+ и следующие пакеты:
1. [OpenCV](https://opencv.org/) (установить можно через pip: `pip install opencv-python`)
2. [Pillow](https://pillow.readthedocs.io/en/stable/) (установить: `pip install pillow`)
3. [ImageHash](https://github.com/JohannesBuchner/imagehash) (установить: `pip install imagehash`)
Также потребуется веб-камера, физическая или виртуальная.
---
## Установка
1. **Склонируйте или загрузите репозиторий**:
```bash
git clone https://github.com/ваш-аккаунт/FaceSaver.git
cd FaceSaver
```
2. **Установите зависимости**:
```bash
pip install -r requirements.txt
```
> При отсутствии файла `requirements.txt` установите пакеты вручную:
> ```bash
> pip install opencv-python pillow imagehash
> ```
---
## Запуск
Доступны два основных способа запуска:
1. **Через Python**:
```bash
python main.py
```
2. **Через бат-файл (Windows)**:
- Дважды кликните по файлу `start.bat`, или
- Запустите командой:
```bash
start.bat
```
> После запуска откроется окно видеопотока с веб-камеры, где вокруг обнаруженных лиц будут отображаться прямоугольники.
---
## Структура проекта
```plaintext
FaceSaver/
│ main.py # Основной скрипт детектирования лиц
│ start.bat # Файл для быстрого запуска
│ README.md # Документация (то, что вы сейчас читаете)
│
└── faces/ # Папка для сохраненных уникальных лиц
```
### Подготовка к запуску
---
1. **Хэр-каскады OpenCV**: Убедитесь, что у вас есть файл `haarcascade_frontalface_default.xml`, который используется для обнаружения лиц. Он поставляется вместе с библиотекой OpenCV.
## Применение
1. При запуске **FaceSaver** в реальном времени обрабатывает поток с вашей веб-камеры.
2. При обнаружении нового лица программа сохраняет его в папку `faces` с меткой времени, если его хэш не совпадает с уже сохранёнными.
3. Если лицо уже встречалось ранее (определяется через функцию `is_similar_hash()`), оно не сохраняется повторно, что экономит место и упрощает поиск нужных изображений.
2. **Создание папки для лиц**: Программа автоматически создаст папку "faces" в корневом каталоге проекта, если её нет.
**Пример использования**:
- Создание базы лиц для системы безопасности или учёта.
- Сбор уникальных фотографий одной и той же персоны под разными углами и освещением.
- Разработка проектов в области компьютерного зрения, где требуется де-дубликация изображений.
## Первый запуск
---
1. Запустите скрипт `face_recognition.py`.
2. При первом запуске программа запросит доступ к веб-камере.
3. Для выхода нажмите клавишу 'q'.
## Поддержка и вклад
Приветствуются все виды вклада в проект:
- Сообщения об ошибках (issue) в [репозитории](#) (добавьте свою ссылку).
- Предложения новых возможностей через pull-request.
- Связь с автором по электронной почте или любым удобным способом.
---
## Лицензия
**FaceSaver** распространяется на условиях [MIT License](LICENSE) (при необходимости добавьте файл LICENSE). Это означает, что вы можете свободно использовать, изменять и распространять проект в любых целях при условии сохранения оригинальных уведомлений об авторстве.
Этот проект лицензируется по лицензии [MIT](LICENSE).
---
> _Спасибо, что используете **FaceSaver**! Мы будем рады вашей обратной связи и участию в развитии проекта._
+1
View File
@@ -41,6 +41,7 @@ while True:
minSize=(30, 30)
)
# Сохранение каждого нового обнаруженного лица
for i, (x, y, w, h) in enumerate(faces):
face_img = frame[y:y + h, x:x + w]
+8
View File
@@ -0,0 +1,8 @@
# requirements.txt
ImageHash==4.3.1
numpy==2.0.2
opencv-python==4.10.0.84
pillow==11.0.0
PyWavelets==1.6.0
scipy==1.13.1