Абьюзер СhatGPT 💄 REBORN
9.46K subscribers
318 photos
47 videos
56 files
164 links
ЕСЛИ БЕРЁТЕ МОИ ПРОЕКТЫ - УКАЗЫВАЙТЕ АВТОРА
Download Telegram
🚀 А вот и интерфейс вкладки с апскейлом видео, который я уже впилил в апскейлер картинок. Но даю не только интерфейс, а и пример - небольшой отрывок видео. В отличие от прошлого, который я давал - здесь есть динамические сцены. И, вопреки мыслителям из ТикТок, артефактов почему-то нет... :D

Время на такой 40-секундный ролик, около 2-х минут. То есть, серию Берсерка за час обработать получится. Если у вас по-более VRAM, и карта ПОТУЖНЕЕ, то и результат будет лучше. У меня 2070 Super.

✍️ Сегодня собрать вряд ли успею, думаю, будет завтра.

Как вам результат
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
42🤬18🔥10
🚀 Устали от онлайн-конвертеров? Я - да.

Поэтому потратил вечер и написал свой собственный десктопный конвертер медиафайлов. Полностью на Python + PyQt6, в качестве ядра - FFMPEG.

Главная цель была — сделать быстро, удобно и без рекламы. Никаких подписок (только на мой канал ❤️), рекламы и отправки ваших данных в облако. Всё происходит локально на вашем компьютере. Написано на Python, работает на любой ОС.

👀 Ключевые фишки:

- кидаешь файлы пачкой (batch processing);
- удобный Drag & Drop;
- фото к фото, видео к видео — без путаницы;
- работает офлайн, никакой интернет не нужен.

Как и сказал, под капотом трудится всеядный FFmpeg, так что на входе можно "скармливать" ему почти всё что угодно, от старых .flv до профессиональных .mov.

😜 Скачать код тут. Много реакций и соберу в .exe с FFMPEG внутри для обычных, не шарящих работяг.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍80🔥13👏135🤯3👾1
two_claps_open-main.rar
7.4 KB
👀 Скрипт ловит два хлопка, на них можно настроить что угодно.

В проекте две реализации:

- открытие ДОТЫ2;
- запуск голосового ассистена Gemini (нужен API-ключ)
.

Забавно, можно найти применение.

⚙️ Как это работает:

В основе всего лежит технология обнаружения хлопков в реальном времени. Этот процесс реализован как в Python-скриптах, так и в прототипах на MATLAB:

- захват аудио: скрипты непрерывно слушают аудиопоток с микрофона с частотой дискретизации 44100 Гц. Аудио делится на короткие фрагменты (фреймы) длительностью 20 мс;
- фильтрация: хлопок имеет характерный частотный спектр. Чтобы отсеять посторонние шумы (голос, музыку, звуки улицы), каждый фрейм проходит через полосовой фильтр Баттерворта. Фильтр пропускает только частоты в диапазоне от 1400 Гц до 1800 Гц. К фреймам применяется оконная функция Ханна для сглаживания и уменьшения спектральных искажений;
- детекция пиков: в отфильтрованном сигнале скрипт ищет резкие всплески амплитуды (пики), которые превышают заданный порог (например, 0.2);
- защита от ложных срабатываний: Чтобы один громкий хлопок не был засчитан как два, установлена минимальная задержка между обнаруженными пиками — 0.2 секунды.


✍️ Отличный пример того, как можно объединить классические алгоритмы обработки сигналов для создания надёжного триггера и подключить к нему мощь современных нейросетей для выполнения осмысленных задач.
Please open Telegram to view this post
VIEW IN TELEGRAM
🥰1913🗿5😁3🤬2💘1
🚀 Часто в инфо-поле начал появляться n8n. Хочу о нем рассказать, может кто-то не знаком.

И главный вопрос:

Что лучше для автоматизации — использовать готовый инструмент типа n8n или писать все с нуля, то есть заниматься ручной разработкой?


🤷‍♂️ Что такое n8n?

n8n — это платформа для визуальной автоматизации. Вы соединяете кубики-«ноды» (приложения и сервисы) между собой, чтобы они обменивались данными и выполняли задачи без вашего участия. Гибко, наглядно и не всегда требует навыков программирования.

Что же выбрать: n8n или код? 🤔

🏹 n8n — ваш выбор, если:

- Скорость — главный приоритет. Собрать рабочий сценарий в n8n можно за минуты, а не за дни или недели;
- Бюджет ограничен. Использование готовых интеграций и визуального конструктора значительно дешевле, чем оплата часов разработчика;
- Задача типовая. Нужно связать популярные сервисы (Telegram, Google Sheets, CRM, Trello)? В n8n для этого уже все готово;
- Нужна гибкость без хардкора. Вы не программист, но хотите иметь возможность легко менять логику процесса.


👨‍💻 Ручная разработка — ваш выбор, если:

- Нужна 100% кастомизация. У вас уникальная бизнес-логика, нестандартные API или требования к интерфейсу;
- Требуется максимальная производительность. Для высоконагруженных систем, обрабатывающих тысячи запросов в секунду, кастомный код, написанный под конкретную задачу, будет эффективнее;
- Интеграция очень специфична. Нужно подключить редкий или внутренний корпоративный софт, для которого нет готовых «нод»;
- Полный контроль над кодом и окружением является критически важным в серьезных проектах.


Итог таков: не стоит противопоставлять эти два подхода. Это инструменты для разных задач. Для 60% стандартных кейсов автоматизации n8n будет быстрее, дешевле и проще в поддержке. Например, бот для записи на маникюр, в больницу и т.д.

Для масштабных же проектов, рассчитанных на тысячи пользователей, n8n - это шутка. Где нужна уникальная логика и высокая производительность, — без ручной разработки не обойтись. ⚙️

#automation #n8n #dev #nocode #tools
Please open Telegram to view this post
VIEW IN TELEGRAM
🤬10👏71👍1😁1
⚙️ Генерирует QR со ссылки, любого текста.

import qrcode
from PIL import Image

def generate_qr_code(data, filename="qr_code.png"):
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_L,
box_size=10,
border=4,
)
qr.add_data(data)
qr.make(fit=True)

img = qr.make_image(fill_color="black", back_color="white")
img.save(filename)
return filename

if __name__ == "__main__":
print("Генератор QR-кодов")
input_data = input("Введите текст или ссылку для кодирования в QR-код: ")
output_filename = input("Введите имя файла для сохранения QR-кода (например, my_qr.png) или нажмите Enter для 'qr_code.png': ")

if not output_filename:
output_filename = "qr_code.png"
elif not output_filename.lower().endswith(('.png', '.jpg', '.jpeg', '.bmp', '.gif')):
output_filename += ".png"

saved_file = generate_qr_code(input_data, output_filename)
print(f"QR-код успешно создан и сохранен как '{saved_file}'")


Ниже зависимости:

pip install qrcode Pillow
Please open Telegram to view this post
VIEW IN TELEGRAM
🤣20🔥8🤬4🤪32👍2❤‍🔥1
Кстати, а что такое "PEP" в Python, и почему это важно? 🤔 Вчера вечером писал об этом "PEP" пост и как-то не удосужился даже рассказать, что это такое...

🖥 PEP (Python Enhancement Proposal)это официальное предложение по развитию Python. Прежде чем в языке появится новая крутая фича, она проходит долгий путь обсуждения и утверждения в виде PEP.

Это не просто скучные документы 🖥, а источник самых важных изменений:

- Стиль кода? Это PEP 8. Он диктует, как форматировать код, чтобы его было легко читать.
- Удобные f-строки? Спасибо PEP 498.
- Подсказки типов (type hints)? Их стандартизировал PEP 484, изменив подход к написанию большого и сложного кода.
- Философия Python? Прочитайте PEP 20 («The Zen of Python»), чтобы понять дух языка.

🫰 PEP - это открытый диалог между разработчиками ядра Python и сообществом. Именно благодаря этому процессу язык остаётся последовательным, современным и удобным для миллионов программистов.

Теперь вы знаете чуть больше :)
Please open Telegram to view this post
VIEW IN TELEGRAM
18🔥3🤬3❤‍🔥1👏1🌚1🤪1
🖥 Зависимости в Python: как быстро навести порядок и почему это важно

Часто встречаю проекты, от заказчиков, которые стоит доработать, или просто на GitHub, где в requirements указывается просто библиотека, без конкретной версии. И часто из-за этого у конечного пользователя не получается запустить проект. Почему так?

Дело в том, что разные версии библиотек могут иметь разный синтаксис. Например, популярный aiogram, который используют для написания асинхронных телеграм-ботов, во всех версиях 2. имеет совершенно иные методы/функции, нежели в версии 3. И даже внутри одного поколения, к примеру, aiogram 3.7 и aiogram 3.18 - есть значительные отличия. К чему это ведет? Проект написанный на какой-то конкретной, актуальной версии библиотеки, может просто не "стартовать" у пользователя уже через полгода. Для неопытного/начинающего разработчика - это беда.


То есть, мы определили, что зависимости вида:

requests
aiogram
pillow


Это нормально в момент, когда вы разрабатываете проект, знакомитесь с актуальными библиотеками и используете методы/функции, которые представлены в них. Но если вы хотите передавать/распространять/выкладывать свой код в общий доступ, рекомендую выучить команду:

pip freeze > requirements.txt


🚀 Это - классика, быстро и грубо сохраняет все зависимости.

Есть и более чистый вариант через pip install pip-tools. Что нужно делать?:

1) Создайте (или активируйте) venv.
2) Установите инструмент:


pip install pip-tools


3) Напишите верхнеуровневые пакеты в requirements.in (те, которые без версий!).
4) Скомпилируйте замороженный список:

pip-compile requirements.in -o requirements.txt


👀 У этой команды также есть несколько опций:

- "--upgrade" - обновить всё до свежих допустимых версий
- "-P httpx" - обновить только httpx
- " --generate-hashes" - добавить SHA256-хеши для безопасности


5) После этого, выполните установку пакетов из сформированного requirements.txt:

pip-sync requirements.txt


pip-sync удалит лишние пакеты из venv и установит ровно те, что в файле.


Таким образом можно и разделять Prod и Dev инструменты, чтобы не тащить лишнее в продакшн. Создаете requirements.in - это прод зависимости и requirements-dev.in - инструменты для разработки. Типичное содержание такого файла:

-r requirements.in
pytest
ruff
mypy


То есть, включаем тесты и т.д., а также базовый requirements.in. Дальше компилируем и получаем два файла requirements.txt и requirements-dev.txt, с актуальными версиями, для разработчика и для продакшена:

pip-compile requirements.in -o requirements.txt
pip-compile requirements-dev.in -o requirements-dev.txt


🚀 При разработке, устанавливаем оба:

pip-sync requirements.txt requirements-dev.txt


Не рекомендую, кстати, смешивать prod и dev в один файл — тяжёлые и нестабильные билды получаются...

🤷‍♂️ Дальше разберем, pyproject.toml + lock (uv/Poetry/PDM) и почему стоит постепенно уходить от requirements.txt.
Please open Telegram to view this post
VIEW IN TELEGRAM
😡8👍53🙈2👏1
🖥 В очередной раз прочитал комментарии гениев о том, что Python медленный, а С++ и Java - быстрые. Вероятно, люди не совсем еще понимают, в чем идея огромного количества языков программирования и что у каждого из них своя задача. Я же не идиот, что начал Python учить, зная могучий C++ (или мне просто нечего делать было?)

Давайте сравним на казуальной задаче: парсинг веб-страницы. Задача
- собрать все заголовки с главной страницы Wikipedia.

На Python для этого нужно использовать только: requests, BeautifulSoup. А вот на C++ придется по-мучится с libcurl и Gumbo-parser.

Что у нас получается на Python
? Буквально 7 строк. А вот, что получится для С++:

#include <iostream>
#include <string>
#include <vector>
#include <curl/curl.h>
#include <gumbo.h>

size_t write_callback(void *contents, size_t size, size_t nmemb, std::string *s) {
size_t new_length = size * nmemb;
try {
s->append((char*)contents, new_length);
} catch(std::bad_alloc &e) {
return 0;
}
return new_length;
}

void search_for_headers(GumboNode* node, std::vector<std::string>& headers) {
if (node->type != GUMBO_NODE_ELEMENT) {
return;
}

GumboTag tag = node->v.element.tag;
if (tag >= GUMBO_TAG_H1 && tag <= GUMBO_TAG_H6) {
GumboVector* children = &node->v.element.children;
for (unsigned int i = 0; i < children->length; ++i) {
GumboNode* child = static_cast<GumboNode*>(children->data[i]);
if (child->type == GUMBO_NODE_TEXT) {
headers.push_back(child->v.text.text);
}
}
}

GumboVector* children = &node->v.element.children;
for (unsigned int i = 0; i < children->length; ++i) {
search_for_headers(static_cast<GumboNode*>(children->data[i]), headers);
}
}

int main() {
CURL *curl;
CURLcode res;
std::string html_content;

curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, "https://ru.wikipedia.org/wiki/Заглавная_страница");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &html_content);

res = curl_easy_perform(curl);
if (res != CURLE_OK) {
std::cerr << "Ошибка curl_easy_perform(): " << curl_easy_strerror(res) << std::endl;
}

curl_easy_cleanup(curl);
}

if (html_content.empty()) {
std::cerr << "Не удалось загрузить HTML." << std::endl;
return 1;
}

GumboOutput* output = gumbo_parse(html_content.c_str());

std::vector<std::string> headers;
search_for_headers(output->root, headers);

std::cout << "Найденные заголовки:" << std::endl;
for (const auto& header : headers) {
std::cout << "- " << header << std::endl;
}

gumbo_destroy_output(&kGumboDefaultOptions, output);

return 0;
}


Как видите, код на C++ требует:

- ручного управления зависимостями: нужно установить и слинковать библиотеки;
- более низкоуровневой работы: вы вручную настраиваете curl, пишете callback-функцию для сохранения данных;
- явного обхода дерева: вы рекурсивно обходите DOM-дерево, построенное Gumbo;
- ручного управления памятью: вы обязаны вызвать gumbo_destroy_output, чтобы избежать утечек памяти.

🚀 Задача одна, объем кода и время на выполнение - кардинально разные. На С++ это +- час, на Python - 5 минут. А в скорости работы при таком сценарии разницы нет. Я это к чему: у всех языков свои преимущества, назначения. Python не существует для того, чтобы на уровне ядра с ОС взаимодействовать. Он нужен, чтобы упростить разработку в типизированных сценариях, сделать ее быстрой и приятной.
Please open Telegram to view this post
VIEW IN TELEGRAM
😍128👍6😁1🤨1😡1
🐳 Я иногда даю тут проекты, которые Docker-ready. Вы спрашиваете, как запустить... И клиенты тоже иногда интересуются, как это запустить на своем сервере...

Так вот, полный список команд с объяснениями (Linux!!!):

1) Установка и проверка:

# Обновляем список пакетов
sudo apt update

# Устанавливаем Docker
sudo apt install -y docker.io

# Запускаем и добавляем Docker в автозагрузку
sudo systemctl start docker
sudo systemctl enable docker

# Устанавливаем Docker Compose
sudo apt install -y docker-compose


Чтобы проверить, что все сделали четко:

docker --version
docker-compose --version


Должно показать версии Docker и Docker-compose.

2) Разворачивание, запуск контейнера.

После того, как вы установили это все (делать нужно 1 раз(!!!)), нужно перейти в директорию с файлами проекта (где лежат Dockerfile, docker-compose.yml).

Пример:
cd /root/dialog_bot/


После этого, пишите команду:

sudo docker-compose up --build -d


Если сделали все четко, контейнер соберется и сразу же будет в работе.

Вот что делают "флажки":

- up: Создает и запускает контейнеры.
- --build: Принудительно пересобирает образ перед запуском. Это полезно, если ты внес изменения в Dockerfile или файлы проекта.
- -d: Запускает контейнеры в фоновом (detached) режиме.

Просмотреть логи с контейнера после можно по команде:

sudo docker-compose logs -f


3) А что на Windows?

Чтобы запустить на Win 10, 11, нужно:

1. Перейдите на официальный сайт Docker и скачай установщик для Windows.
2. Установите Docker Desktop:
- Запустите скачанный установщик.
- Следуйте инструкциям на экране. Очень важно: убедитесь, что выбрана опция "Use WSL 2 instead of Hyper-V" (Использовать WSL 2 вместо Hyper-V), если она доступна и твой Windows 10 это поддерживает (версия 2004 и выше, сборка 19041 и - выше). WSL 2 обеспечивает лучшую производительность. Если опции нет или твоя система старее, Docker Desktop может использовать Hyper-V.
- Установка может потребовать включения функций "Контейнеры" и "Подсистема Windows для Linux" (WSL). Установщик обычно предлагает сделать это автоматически или дает инструкции.

3. Запусти Docker Desktop после установки. Иконка кита появится в системном трее. При первом запуске может потребоваться некоторое время на инициализацию. Убедись, что Docker Desktop показывает, что он запущен (иконка кита в трее статична и не анимирована).


Важно: каждый раз, когда захотите собрать контейнер на Win 10, 11, нужно запускать Docker Desktop!

Дальше можете прямо в IDE, в папке с проектом в консоли писать:

docker-compose up --build -d


И все. Команды тут те же, что и на Linux.

Полезно?
Please open Telegram to view this post
VIEW IN TELEGRAM
😭15😡76👍6👌2💘1
main.py
6.9 KB
🚀 Всем доброго утра! Код для автоматической закупки новых подарков в Телеграм!

Работает на Pyrofork. Выводит в консоль количество существующих подарков, баланс звезд Вашего аккаунта, обновляется раз в 300 секунд (ставьте КД меньше, около минуты). Не забудьте в начале свои API HASH и API ID указать.

pip install pyrofork


Видел, в комментариях часто такое решение упоминали - держите.

🖥 P.S. заявок - очень много. Буду разбирать, всех просмотрю.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤯20😁53😢2
Для работы использовал FFMPEG.

Как легкий пример для поста выше.

import os
import ffmpeg

class VideoToGifConverter:
def __init__(self, source_dir="video", target_dir="gif", frame_rate=2):
self.source_dir = source_dir
self.target_dir = target_dir
self.frame_rate = frame_rate
os.makedirs(self.source_dir, exist_ok=True)
os.makedirs(self.target_dir, exist_ok=True)

def get_video_files(self):
return [
file_name
for file_name in os.listdir(self.source_dir)
if file_name.lower().endswith(".mp4")
]

def convert_videos_to_gif(self):
video_files = self.get_video_files()
for video_file in video_files:
base_name = os.path.splitext(video_file)[0]
gif_file_name = base_name + ".gif"
input_path = os.path.join(self.source_dir, video_file)
output_path = os.path.join(self.target_dir, gif_file_name)
stream = ffmpeg.input(input_path)
stream = stream.filter("fps", fps=self.frame_rate)
stream = ffmpeg.output(stream, output_path)
ffmpeg.run(stream)

def main():
converter = VideoToGifConverter(source_dir="video", target_dir="gif", frame_rate=2)
converter.convert_videos_to_gif()

if __name__ == "__main__":
main()
🤬16👍32💋1😨1
🖥 Продолжу тему баз данных, об одной ключевой вчера не рассказал.

Сегодня о классической связке, которая лежит в основе многих крутых проектов: Python и MySQL.

🤔 Как они "дружат?"

Python "общается" с базами данных MySQL с помощью специальных библиотек-коннекторов. Самые популярные — mysql-connector-python (официальный от Oracle) и PyMySQL. 👀 Вы просто устанавливаете нужную библиотеку, импортируете ее в свой скрипт и можете выполнять любые SQL-запросы: создавать таблицы, добавлять данные, делать сложные выборки. Все просто и по-питоновски элегантно.

🚀 Где это используется?

1. Веб-приложения на Django & Flask: Это самая частая сфера применения. Интернет-магазины, блоги, CRM-системы, социальные сети — везде, где нужно надежно хранить данные о пользователях, товарах или постах, MySQL отлично справляется с ролью хранилища. Django и Flask имеют прекрасную интеграцию с этой СУБД.
2. Аналитика и ETL-процессы: Представьте, что вы парсите данные с сайтов. Python-скрипт собирает информацию, обрабатывает ее и аккуратно записывает в таблицы MySQL. Позже эти данные можно легко анализировать и строить отчеты.
3. Телеграм-боты: Ваш бот должен помнить пользователей, их настройки или историю сообщений? MySQL — отличный и надежный выбор для хранения этой информации.
4. Системы мониторинга: Скрипты, которые следят за состоянием серверов или приложений, могут записывать логи и метрики в базу MySQL для последующего анализа.

Python + MySQL — это надежное и масштабируемое решение для огромного спектра задач.

P.S. я вижу сообщения от ВСЕХ в боте, не нужно писать по несколько раз. Я закрываю вопрос с 2-3 людьми, потом иду дальше.

Если я начну отвечать всем и сразу - никто решение своей проблемы не получит, а я к тому, что сейчас кушаю золофт, еще пару таблеток у психиатра выпишу.
До всех очередь дойдет, компенсирую работой/деньгами.
Please open Telegram to view this post
VIEW IN TELEGRAM
🤬76
❤️‍🔥 Нашел скрин своего старенького творения, ахахаха.

🔥 Создал среду разработки внутри среды разработки...

Из интереса и ради практики делал.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🤬37🔥13😁3👍1
🚀 Скоро выложу вам ReelsMaker свой (собранный в .exe), с фикшенными багами, редизайном, возможность качать видосы с YouTube для обработки прямо в программе, поддежкой кодеков для обработки через видеокарты AMD/nVidia.

Также добавлена область предпросмотра, чтобы вы могли видеть, какое видео у вас получится в итоге, со всеми эффектами, обрезками, наложенным баннером и далее.

Обновил и темную, и светлую тему - теперь не колхоз.

Еще будет "частная версия", с авто-постингом по расписанию в YouTube, YT-reels, TikTok.
👏35🔥7👍6❤‍🔥5😡421
💥 Для разработчиков в Telegram может быть полезно - скрипт для парсинга ID всех доступных к покупке подарков 🎁 в ТГ, их ID.

import asyncio
from telegram import Bot

async def get_telegram_gifts(bot_token):
bot = Bot(token=bot_token)
gifts = await bot.get_available_gifts()
for gift in gifts.gifts:
print(f"ID подарка: {gift.id}, Эмодзи: {gift.sticker.emoji}, Размер файла стикера: {gift.sticker.file_size}, Стоимость: {gift.star_count}")



# Замените на токен бота!
bot_token = "ТОКЕН_АДМИН_КРАСАВЧИК"
asyncio.run(get_telegram_gifts(bot_token))


 pip install python-telegram-bot


🤔В дальнейшем можно использовать в своих проектах для авто-выдачи/выплаты/обмена подарков в Телеграм. Используйте, потому что интернет пока не пишет, как найти ID подарков в Телеграм)

P.S. пост со старого канала, но видел в обсуждениях, кому-то нужно было.
Please open Telegram to view this post
VIEW IN TELEGRAM
5🤬4🤔1😢1😭1🦄1😡1
🚀 Парни, код для свапа лиц между двумя фото. При первом запуске подкачает модельку.

import requests
import cv2
import os
from insightface.app import FaceAnalysis
from insightface.model_zoo import get_model

app = FaceAnalysis(name='buffalo_l')
app.prepare(ctx_id=0, det_size=(640, 640))


def download_model(url, model_path):
if not os.path.exists(model_path):
print(f"Загрузка модели с {url}...")
response = requests.get(url)
response.raise_for_status()
with open(model_path, 'wb') as file:
file.write(response.content)
print(f"Модель сохранена как {model_path}")


model_url = "https://huggingface.co/ezioruan/inswapper_128.onnx/resolve/main/inswapper_128.onnx?download=true"
model_path = "inswapper_128.onnx"

download_model(model_url, model_path)

swapper = get_model(model_path)


def swap_face_between_images(source_image_path, target_image_path, output_image_path):
source_img = cv2.imread(source_image_path)
if source_img is None:
print(f"Ошибка: Не удалось загрузить изображение-источник по пути: {source_image_path}")
return

target_img = cv2.imread(target_image_path)
if target_img is None:
print(f"Ошибка: Не удалось загрузить изображение-цель по пути: {target_image_path}")
return

print("Анализ лиц на изображении-источнике...")
source_faces = app.get(source_img)
if not source_faces:
print("Ошибка: Лица на изображении-источнике не найдены.")
return
source_face = source_faces[0]

print("Анализ лиц на изображении-цели...")
target_faces = app.get(target_img)
if not target_faces:
print("Ошибка: Лица на изображении-цели не найдены.")
return
target_face_to_replace = target_faces[0]

print("Выполнение замены лица...")
result_img = target_img.copy()
result_img = swapper.get(result_img, target_face_to_replace, source_face)

cv2.imwrite(output_image_path, result_img)
print(f"Изображение с замененным лицом сохранено как: {output_image_path}")


if __name__ == "__main__":
path_to_source_photo = 'rojers.jpg'
path_to_target_photo = 'stark.jpg'
output_filename = 'swapped_result.png'

if not os.path.exists(path_to_source_photo):
print(
f"Файл источника не найден: {path_to_source_photo}. Пожалуйста, создайте его или укажите правильный путь.")
elif not os.path.exists(path_to_target_photo):
print(f"Файл цели не найден: {path_to_target_photo}. Пожалуйста, создайте его или укажите правильный путь.")
else:
swap_face_between_images(path_to_source_photo, path_to_target_photo, output_filename)


requirements.txt:

opencv-python
onnxruntime
insightface


Чем лучше качество исходных фоток, тем лучше будет результат.
Please open Telegram to view this post
VIEW IN TELEGRAM
😁154👍4❤‍🔥1😭1
⚡️Даю бота, для погоды, он довольно прикольный, хоть и крайне простой. Новичкам как пример точно пойдет ;)

Скачать проект можно тут.


🖥 Проект представляет собой погодного бота, реализованного с использованием aiogram и APScheduler. Он получает настройки каждого пользователя (город и время уведомлений) из SQLite, запрашивает данные о погоде через OpenWeather API и отправляет их по расписанию или по запросу.


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

1) OpenWeather API - бесплатный, вроде как 1000 запросов в сутки.
2) Погоду можно получить состоянием на сейчас/на ближайшие 5 дней.
3) Город флексится.
4) По заданному времени будет давать актуальную погоду в указанном городе.


‼️ Оставил комментарии 💬 внутри, чтобы можно было понять что к чему.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
8🤪4😁3🔥1🤣1😭1
two_claps_open-main.rar
7.4 KB
👀 Скрипт ловит два хлопка, на них можно настроить что угодно.

В проекте две реализации:

- открытие ДОТЫ2;
- запуск голосового ассистена Gemini (нужен API-ключ)
.

Забавно, можно найти применение.

⚙️ Как это работает:

В основе всего лежит технология обнаружения хлопков в реальном времени. Этот процесс реализован как в Python-скриптах, так и в прототипах на MATLAB:

- захват аудио: скрипты непрерывно слушают аудиопоток с микрофона с частотой дискретизации 44100 Гц. Аудио делится на короткие фрагменты (фреймы) длительностью 20 мс;
- фильтрация: хлопок имеет характерный частотный спектр. Чтобы отсеять посторонние шумы (голос, музыку, звуки улицы), каждый фрейм проходит через полосовой фильтр Баттерворта. Фильтр пропускает только частоты в диапазоне от 1400 Гц до 1800 Гц. К фреймам применяется оконная функция Ханна для сглаживания и уменьшения спектральных искажений;
- детекция пиков: в отфильтрованном сигнале скрипт ищет резкие всплески амплитуды (пики), которые превышают заданный порог (например, 0.2);
- защита от ложных срабатываний: Чтобы один громкий хлопок не был засчитан как два, установлена минимальная задержка между обнаруженными пиками — 0.2 секунды.


✍️ Отличный пример того, как можно объединить классические алгоритмы обработки сигналов для создания надёжного триггера и подключить к нему мощь современных нейросетей для выполнения осмысленных задач.
Please open Telegram to view this post
VIEW IN TELEGRAM
😡298🔥2😭2