• Можно ли подключить дешевый датчик дыма к ардуино или raspberry pi?

    nava2002
    @nava2002
    Инженер
    Да можно.
    Смотрим тестером, что там появляется на выходе (пищалке, светодиоде) и учитывая, что на вход Arduino нужно подавать сигнал 0-5в подключаем и используем.
    Ответ написан
    Комментировать
  • Как достать значения из двух тхт файлов, чтобы работало в зипе?

    AlexNest
    @AlexNest Куратор тега Python
    Работаю с Python/Django
    Разделите файлы построчно и с полученными списками работайте.
    Ответ написан
    Комментировать
  • Как правильно работать с циклом?

    Vindicar
    @Vindicar
    RTFM!
    Вместо итерации по списку сделай цикл по индексам. Цикл должен быть не for, а while, так как ты будешь менять параметр цикла (текущий индекс в списке) самостоятельно.
    Сначала текущий индекс 0.
    Если введена пустая строка, то индекс +1. Если индекс стал равен длине списка, решай что делать дальше.
    Если введена не пустая строка, то используешь метод index() чтобы найти индекс введённого элемента. Имей ввиду, если такого элемента нет, будет выброшено исключение. Его надо поймать.
    Ответ написан
    5 комментариев
  • Как сигнализировать когда объект выходит за границы?

    Vindicar
    @Vindicar
    RTFM!
    Вопрос и впрямь не по питону, алгоритм легко портируется.
    Если нужно детектить именно пересечение любой из точек границы, и именно для круга и квадрата, то это очень просто. Уменьши квадрат, сдвинь каждую сторону внутрь на радиус круга.
    Например, у тебя был квадрат от (0;0) до (100;100), круг радиусом 10 (диаметром 20). Новый квадрат будет от (10;10) до (90;90).
    После этого проверяй, входит ли центр круга внутрь нового квадрата. Если входит - круг внутри исходного квадрата. Если центр на стороне - круг касается стороны исходного квадрата. Если центр вне нового квадрата - круг вышел за границу исходного.
    Проверка вхождения точки внутрь ортогонального (стороны параллельны осям координат) прямоугольника выполняется тривиально, сам догадаешься как.

    Есть второй способ, базируется на массивах numpy (python-opencv их использует для хранения массивов пикселей изображения).
    Делаешь два изображения-маски (одноканальных, одного размера), одно для одного объекта, другое для другого. В твоём случае одно (A) будет содержать белый круг на чёрном фоне, а другое (B) - чёрный квадрат на белом фоне.
    Тогда можно будет сделать так:
    intersection = numpy.logical_and(A, B)
    if intersection.any():
        print('Collision!')

    logical_and() вернёт логический массив того же размера, что A и B. Элемент массива будет истиннен только если соотвествующие элементы в A и B будут ненулевыми.
    Таким образом, если два объекта пересекаются, то logical_and() вернёт True для пересёкшихся пикселей.
    А метод any() вернёт True если любой элемент массива истинен, т.е. если есть хоть один пересёкшийся пиксель.

    Этот метод куда более ресурсоёмкий, чем то что я описал в выше,но зато работает для объектов произвольной формы. Только нарисуй их.
    Кроме того, можно сделать numpy.count_nonzero(intersection), чтобы узнать, насколько велико пересечение (сколько пикселей в нём). Это тоже может быть полезно если ты хочешь "прощать" небольшие пересечения.
    Ответ написан
    2 комментария
  • Как сигнализировать когда объект выходит за границы?

    @NIKROTOS
    Начинающий программист.
    Ты подразумеваешь, что кружок выходит за границы квадрата, когда одна из его точек за пределами этого квадрата? Или когда его центр за пределами квадрата? Или когда все его точки за пределами квадрата?

    "Есть вершины квадрата: (x1,y1), (x2,y2), (x3,y3), (x4,y4). Для определенности и не ограничивая общности допустим, что вершины перечисляются от левой верхней по часовой стрелке. Точка имеет координаты (x0,y0) и попадает в квадрат, если истинно условие:
    (x0>x1 И y0>y1 И x0 Вот так, кажется..."
    источник(https://forum.na-svyazi.ru/?showtopic=212014)

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

    @swimmwatch
    Python software engineer
    Можете воспользоваться модулем pathlib, в частности Path.glob(pattern):
    path = Path('some_dir')
    abc = path.glob('ABC#[0-9].png')
    def_ = path.glob('DEF#[0-9].png')
    Ответ написан
    1 комментарий
  • Как вытащить все белые объекты и измерить их белизну OpenCV?

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

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

    trapwalker
    @trapwalker
    Программист, энтузиаст
    А в чем, собственно, проблема? Веб-интерфейс - нормальный вариант. Сделайте его бэкенд на flask, фронтом будет простенькая страничка. Можно в рамках MVP аставить её обновляться с некоторой периодичностью, а можно перезагружать только одну картинку. Потом уже можно и вебсокеты прикрутить, если чем-то не устроит простой вариант, чтобы пуши с сервера прилетали и всё такое, но зачем?
    Ответ написан
    Комментировать
  • Мониторинг на основе Python в интерфейсе, что посоветуете?

    AlexNest
    @AlexNest
    Работаю с Python/Django
    Единого решения не будет.
    Для периодических задач:
    • cron - linux-подсистема, позволяющая выполнять действия (в т.ч. скрипты) по расписанию.
    • shelude - библиотека, делающая то-же самое, но на уровне кода и ос-независимая.
    • celery - комбайн, в данном случае избыточный но обладающий нужным функционалом.

    Если нужно прям под веб:
    Бекэнд, чтобы работать со скриптами:
    • flask - микро-фреймворк, минимальный набор функций. Если нужно чисто взаимодействовать со скриптами - лучший вариант.
    • django - комбайн с админкой, авторизацией, orm и прочим.


    Для взаимодействия с клиентской стороной в реальном времени (если обновление страницы не устраивает):
    • WebSockets
    • SocketIO

    Если отслеживать будете с одного компа - веб-интерфейс несколько излишен, лучше реализовать в рамках одного приложения с pyQt5
    Ответ написан
    Комментировать
  • Как сделать Python loop +1/-1?

    Vindicar
    @Vindicar
    RTFM!
    Избавиться от цикла for, вместо него используй while True, и внутри вручную меняй индекс текущего изображения в диапазоне от 0 до len(imList)-1.
    А вообще у тебя код кривой.
    cv2.imshow() требует два параметра - заголовок окна и загруженное в память изображение (массив пикселей).
    cv2.waitKey() и cv2.waitKeyEx() возвращают код нажатой клавиши, анализируй его, чтобы понять, что делать (идти вперёд, идти назад, прервать цикл).
    Ответ написан
    5 комментариев
  • Как заставить бота Telegram отсылать мне ответы?

    @bot.message_handler(content_types=['text'])
    def lalala(message):
        bot.send_message(message.chat.id, 'Человек написал: ' + message.text)
    Ответ написан
    3 комментария