Ответы пользователя по тегу Python
  • Как вытащить все белые объекты и измерить их белизну OpenCV?

    Vindicar
    @Vindicar
    RTFM!
    Преобразуй кадр в цветовую систему HSV, ищи пиксели, у которых канал Saturation ниже заданного порога (т.е. они более-менее серые), а канал Value выше заданного порога (т.е. они более-менее яркие). По полученной маске уже отбирай пиксели для анализа.

    Либо можно схитрить, если использовать более сложный эталон, например, шахматную доску. cv2.findChessboardCorners() позволит найти координаты углов *внутри* доски известного размера, например, для доски 8х4 нужно указывать размер 7х3. Найди крайние угловые точки, извлеки этот кусок кадра. На нём точно будут только светлые и тёмные пиксели твоего эталона, чей цвет ты контролируешь. Прогони пороговое преобразование алгоритмом Otsu (есть в опенцв из коробки), получишь маску светлых пикселей. Их уже анализируешь.
    Ответ написан
    5 комментариев
  • Как вставить данные в строку Python?

    Vindicar
    @Vindicar
    RTFM!
    Фигурная скобка в начале строки (и в пачке других мест) тебя не смутила? Заэкранируй её.
    Ну или просто используй старый стиль форматирования, через %. В нём фигурные скобки не являются спецсимволами.
    Ответ написан
  • Как подключить к mysql по SSH спомощью библиотеки aiomysql?

    Vindicar
    @Vindicar
    RTFM!
    Что ты вообще подразумееваешь под "подключиться к mysql по SSH"? Сделать проброс порта через SSH, чтобы достучаться до сервера БД, который иначе не доступен?
    Так это не задача либы mysql вообще. Либо держи SSH-туннель поднятым отдельной программой, либо используй специализированную библиотеку типа sshtunnel. В обоих случаях отдавай aiomysql тот локальный порт, на котором заканчивается твой SSH-туннель.
    Ответ написан
  • Как сделать так, чтобы цикл не прерывался при срабатывании alarm clock?

    Vindicar
    @Vindicar
    RTFM!
    если код выполняется дольше n секунд

    Вынеси выполняемый код в отдельный процесс через multiprocessing, по истечении таймаута либо оставляй процесс "как есть", либо убивай принудительно.
    В противном случае ты скорее всего не сможешь принудительно завершить код, который делает неизвестно что, и при этом не оставить программу в непредсказуемом состоянии.
    Ответ написан
    Комментировать
  • Как с помощью дискорд бота отправлять фотографии в телеграм канал?

    Vindicar
    @Vindicar
    RTFM!
    Во-первых, причем тут парсинг?
    Во-вторых, какая библиотека используется для телеги и как в неё отправлять фото? Найди этот кусок документации, он потребуется.
    В-третьих, нужно проверить наличие приложенных фото в сообщении дискорда, скачать их в файл, отправить в телегу, удалить файл. Каждое из этих действий гуглится.
    Если либа для телеги принимает для отправки фото файловый объект (а не имя файла!), то можно схитрить и использовать что-то типа пакета requests для скачивания. requests даёт для скачиваемого ресурса "как бы файл", который можно напрямую скормить в библиотеку для телеграмма. Тогда не придётся возиться со временными файлами, будет чуток проще.
    Готовый код не проси.
    Ответ написан
    Комментировать
  • Имеется скрипт на Python с OpenCV как транслировать результат(сделать источником видео) в skype, zoom или любую другую программу в реальном времени?

    Vindicar
    @Vindicar
    RTFM!
    Это НЕ простая задача, и сделать её самостоятельно малореально. Про кросплатформенность можно забыть, портируемость обеспечить тоже будет не столь тривиально.
    В качестве костыльного решения можно попробовать установить пакет pyvirtualcam, но у него нетривиальные зависимости. Может потребоваться установить OBS и плагин OBS Virtual Сamera в придачу.
    Ответ написан
    Комментировать
  • Как достать все файлы из субдиректории, перенести и переименовать?

    Vindicar
    @Vindicar
    RTFM!
    Сразу скажу, я исхожу из того, что целевые каталоги находятся НЕ там же, где исходные. Иначе программа усложняется раз в пять.

    Пишем алгоритм.
    1. Для каждого каталога:
    2. Для каждого файла в каталоге:
    3. Определяем каталог, куда этот файл дожен быть перемещён.
    4. Проверяем, есть ли в каталоге файл с таким именем.
    5. Если есть, то добавляем к исходному имени суффикс (i). Увеличиваем i, пока не найдём незанятое имя.
    6. Определив имя, переносим/копируем файл в целевой каталог.

    Перенести это на питоне не будет сложно, модуль pathlib очень удобен для таких манипуляций. Максимум, написать небольшую функцию для реализации п. 5.

    def find_unused_name(dir: pathlib.Path, basename: str) -> str:
        ...  # тут реализуем пункт 5, и возвращаем имя с правильным суффиксом.
    Ответ написан
    Комментировать
  • Как обработать ошибку?

    Vindicar
    @Vindicar
    RTFM!
    Что-то типа
    @DataBase.error
    async def DataBase_error(ctx, error):
        pass  # тут твоя обработка. error - объект исключения, потомок discord.ext.commands.CommandError

    По точному классу исключения можно понять, что именно произошло.
    Ответ написан
    Комментировать
  • Как указать второй параметр?

    Vindicar
    @Vindicar
    RTFM!
    Включить логику.
    options, судя по виду - список из словарей. Один словарь описывает один параметр. Значит, первое, что нужно сделать - попробовать описать список из двух словарей. У тебя сейчас один словарь, но с дублирующимися ключами. Нужно из него сделать два отдельных словаря.

    Вообще посоветую поучить азы питона сначала. Подобное умозаключение не должно быть запредельно трудным, как и его реализация. А если оно трудное - значит, за ботов браться рановато.
    Ответ написан
    Комментировать
  • Как можно сделать примитивный интерфейс для скрипта на pyrogram?

    Vindicar
    @Vindicar
    RTFM!
    Адекватно никак по очень простой причине:
    • Боту обычно требуется вечный цикл ожидания-приёма-отправки данных в сеть.
    • Оконному интерфейсу требуется вечный цикл ожидания-обработки оконных сообщений.
    • Эти два вечных цикла нельзя разместить в одном потоке, так как они не знают друг от друге.

    Отсюда вывод: я бы использовал изкоробочный tkinter, чтобы не тащить kivy или pyqt ради этого. Для двух кнопок ткинтер хватит за глаза. Вот только запускать его придётся в отдельном потоке, и ОЧЕНЬ осторожно организовывать взаимодействие между ботом и интерфейсом...
    Ответ написан
    Комментировать
  • Как сделать асинхронное выполнение функций в Python3?

    Vindicar
    @Vindicar
    RTFM!
    inpit() асинхронным сделать можно как показано выше.

    А дальше
    async def sender():
        while True:
            ...
    
    async def getter():
        ...
    
    async def main():
        asyncio.create_task(sender())
        await getter()
    
    asyncio.run(main())
    Ответ написан
    Комментировать
  • Как выписать значения user_id в таблице users через запятую?

    Vindicar
    @Vindicar
    RTFM!
    1. fetchall() возвращает список из кортежей. Эти две структуры в питоне встречаются очень часто, приёмы работы с ними нужно знать.
    2. Когда ты организовал цикл по строкам, и вытащил из каждой строки id, используй f-строки для подстановки значения в строку. Полученные отформатированные строки складывай в ещё один список (ты ведь прочитал ссылку выше и освоил работу со списками?)
    3. Когда у тебя готов список строк вида @idXXXXXX, собери его в одну строку методом join().

    И да, всё вышеперечисленное - азы языка. Если ты не знаешь их, хвататься за базы данных рановато.
    Ответ написан
    Комментировать
  • Не отображается окно tkinter при выполнение функции, из-за чего?

    Vindicar
    @Vindicar
    RTFM!
    Потому что ты не понимаешь разницу между передачей ссылки на функцию и вызовом функции.
    screen.protocol("WM_DELETE_WINDOW", block_mouse())
    Ты пытаешься задать в качестве обработчика результат вызова функции block_mouse(), а не саму функцию.
    А поскольку это происходит в block_mouse(), то программа уходит в рекурсию.
    Ответ написан
  • Как заставить работать двух ботов одновременно без использования двух консолей?

    Vindicar
    @Vindicar
    RTFM!
    Как правило, точкой входа в бота является функция, которая уходит в вечный цикл и сидит там. Код после этой функции тупо не выполнится, пока бот не завершит работу.
    Таким образом, при попытке активировать двух ботов "наивным" образом работать будет только первый.
    Тебе придётся запускать их в разных потоках или даже в разных процессах.
    Ответ написан
    1 комментарий
  • Здравствуйте. Как создать удаление правил на Aiogram?

    Vindicar
    @Vindicar
    RTFM!
    Gagak,
    1. Документация тебя выведет на два метода.
    а) bot.delete_message() подходит, если тебе известно только id сообщения.
    б) Message.delete() это обёртка над предыдущим. Удобно, если у тебя есть объект сообщения (экземпляр класса Message), который нужно удалить.
    Первый метод вообще гуглится первой строкой по "aiogram delete message".
    2. Тебе нужно хранить список пользователей, которые обращались к твоему боту, например, в таблице БД.
    Хранить можно в виде пар id пользователя - id сообщения с правилами. При каждом обращении к боту проверяем наличие пользователя в списке.
    Если пользователя нет в списке, он обращается в первый раз - отправляем сообщение с правилами, заносим в таблицу id пользователя и id сообщения.
    Если пользователь есть в списке и у него есть id сообщения - проверяем, согласился ли он. Если согласился, удаляем сообщение по id (если получится - сообщение старше 48 часов уже не удалить), затем очищаем id сообщения (например ставим NULL), но оставляем пользователя в списке.
    Если пользователь есть в списке и у него id сообщения пустое (NULL), то он уже согласился с правилами, можно работать.
    Ответ написан
  • Как получить ошибку из os.system?

    Vindicar
    @Vindicar
    RTFM!
    Никак.
    Используй модуль subprocess, он позволяет общаться с запускаемой программой через стандартынй ввод/вывод, в т.ч. стандартный вывод ошибок.
    Ответ написан
    Комментировать
  • Как написать красивый и понятный код?

    Vindicar
    @Vindicar
    RTFM!
    Разбей программу на две части.
    1. Класс "игровое поле". Хранит и сообщает (но не показывает на экране!) текущее состояние поля игры, позволяет делать ходы, отслеживает их очерёдность и корректность, определяет завершение игры и победителя (если есть). Словом, содержит в себе собственно логику игры.
    2. Класс "окно игры". Держит у себя ссылку на экземпляр класса "игровое поле", показывает его состояние, т.ч. состояние игры в целом, вызывает метод хода согласно действиям пользователя.
    2,5. Основная программа. Создаёт поле, создаёт окно игры, показывает его на экране, уходит в рабочий цикл (mainloop).
    Ответ написан
    Комментировать
  • Как отнять текущую дату от даты?

    Vindicar
    @Vindicar
    RTFM!
    Твой реальный вопрос: как распарсить строку в объект datetime.
    Для простых строк работает datetime.datetime.strptime()

    После того как обе даты представлены как datetime, их можно вычесть.
    Ответ написан
    Комментировать
  • Как скопировать папку в другое место?

    Vindicar
    @Vindicar
    RTFM!
    Если у папки есть иконка, она наверняка заведомо не пустая. Проверь наличие скрытых файлов.
    А вообще посмотри в сторону shutil.copytree()
    Ответ написан
    Комментировать