• В чем заключается ошибка в коде python?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Это типичная ошибка тех, кто не учил язык. Попробуйте так:
    if self.s1 in [color1, color2]:
    Ответ написан
    4 комментария
  • OpenCV. Почему отдельные кадры из видео весят больше чем видео?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Потому что кадры в массивах хранятся в несжатом виде, а исходный видео-ролик сжат кодеком.
    Кодеки сейчас довольно сложные, у них много параметров сжатия и нетривиальные алгоритмы. Вы один и тот же ролик можете расжать и сжать по новой, а в результате получите совсем другой объём и даже немного отличающийся контент, ведь сжатие происходит обычно с потерей качества.
    Ответ написан
    Комментировать
  • Как проверить запустилась ли трансляция FFMPEG через Python?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    UPD: Если вы не можете дождаться завершения дочернего процесса, то не обязательно блокировать программу для получения всего его выхлопа:
    import subprocess
    
    
    if __name__ == '__main__':
        cmd = 'py "(time.sleep(1) or print(i) for i in itertools.count())"'
        cmd = 'ping ya.ru'
        cmd = 'ffmpeg'
    
        with subprocess.Popen([cmd], stdout=subprocess.PIPE, text=True, shell=True) as p:
            for line in p.stdout:
                print(line.strip())

    Так вы можете получать выхлоп построчно или вовсе посимвольно:
    while 1:
        print(p.stdout.read(1), end='')

    Да, это по-прежнему блокирующий вызов, но вы можете читать строки в отдельном треде и по таймауту его закрывать, например.

    UPD2:
    Ну так что, автор, разобрался, или разжевывать надо решение?
    import subprocess
    import threading
    import logging
    import sys
    
    
    log = logging.getLogger(__name__)
    
    
    def check_process_output(process: subprocess.Popen, timeout: float, substring: str):
        def fetch_output():
            try:
                while process.poll() is None:
                    line = p.stdout.readline()
                    log.debug('FETCH: %s', line.strip())
                    data.append(line)
            except ValueError as e:
                pass
    
        data = []
        t = threading.Thread(target=fetch_output)
        t.start()
        log.debug(f'Wait %f s', timeout)
        t.join(timeout)
        result = substring in ''.join(data)
        log.debug('Output is%s contained substring %r', '' if result else ' NOT', substring)
        return result
    
    
    if __name__ == '__main__':
        logging.basicConfig(stream=sys.stderr, level='DEBUG')
        cmd = 'py "(time.sleep(1) or print(i) for i in itertools.count())"'
        cmd = 'ping ya.ru -c 8'
        # cmd = 'ffmpeg'
    
        with (subprocess.Popen([cmd], stdout=subprocess.PIPE, text=True, shell=True) as p):
            print('CHECK RESULT:', check_process_output(p, timeout=5, substring='ya.ru'))


    Можно сделать потомка от Popen, который будет вычитывать в треде свой stdout и на каждую строчку дёргать коллбэк, а также будет валиться по таймауту, если за какое-то время ни один коллбэк не вернул True.
    А можно просто добавить методы readline и read прямо в класс и с таймаутами в аргументах.
    Ответ написан
    4 комментария
  • Как зациклить это действие?

    Vindicar
    @Vindicar
    RTFM!
    Цикл while?
    Не, серьёзно. Это основы языка. Открой учебник и читай.
    Ответ написан
    Комментировать
  • Как "пропустить" напряжение дальше только при подаче напряжение с 2 других провдов?

    @d-stream
    Готовые решения - не подаю, но...
    Так работает обычное электромагнитное реле с нормальноразомкнутыми контактами.
    Провода А и С - на контактную группу, В - на обмотку

    И тогда при появлении напряжения на обмотке (В) контактная группа замкнётся и А и С соединятся между собой.

    Ну а если на B будет напряжение, а на А - нет - то замыкание А-С - даст то же отсутствие напряжения)))

    Ну и реле бывают твердотельными/полупроводниковыми/оптронными/etc

    з.ы. транзистор, тиристор, триод (ежели кто помнит) - поведут себя сходным образом
    Ответ написан
    2 комментария
  • Как отыскать подкартинку в картинке средствами python?

    FanaticExplorer
    @FanaticExplorer
    чел
    Через opencv можно:
    import cv2
    import numpy as np
    
    image = cv2.imread('image.jpg', 0)
    template = cv2.imread('part.jpg', 0)
    
    res = cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED)
    
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)
    
    threshold = 0.8
    if max_val > threshold:
        top_left = max_loc
        print("Подкартинка найдена:", top_left)
    else:
        print("Подкартинка не найдена")

    Со значением threshold надо будет поиграться, что бы работал более корректно.
    Ответ написан
    2 комментария
  • Как определить координаты картинки у которой нет дубликатов, либо с наименьшими повторениями?

    leahch
    @leahch
    Я мастер на все руки, я козлик Элек Мэк :-)
    Смотрите в сторону хеширующих функций, например реализация phash Вас спасет - https://en.m.wikipedia.org/wiki/Perceptual_hashing
    Ну и книжку порекомендую "цифровая обработка изображений" Гонсалес и Вудс.
    Ответ написан
    2 комментария
  • Возможно ли обучить ИИ определять данные анализов по фото?

    vabka
    @vabka
    Токсичный шарпист
    Тут больше задача на OCR и машинное зрение похожа.
    Нужно определить границы таблицы и распознать текст в ячейках.
    Можно попробовать Opencv + tesseract.

    Но скажу, что это сложнее, чем может показаться на первый взгляд (когда-то пробовали такой подход и часто либо границы криво распознавались, либо текст. Причём пробовали сканы, а не фотографии)
    Ответ написан
    1 комментарий
  • Как запустить MATLAB со скриптом через bat файл?

    firedragon
    @firedragon
    Не джун-мидл-сеньор, а трус-балбес-бывалый.
    стандартная практика передать первым аргументом путь к файлу который хотят открыть.
    Это действует практически для всех программ.

    start "C:/Program Files/MATLAB/R2022b/bin/matlab.exe Work.m"
    Ответ написан
    Комментировать
  • Библиотеке os выводит непонятные символы, что делать?

    Vindicar
    @Vindicar
    RTFM!
    Не "библиотека os", а процесс, который ты запускаешь. В какой кодировке он выводит текст, знает разве что он сам (вероятно, или windows-1251, или cp866). Но почти наверняка не в юникоде, с которым работает питон.
    Так что кодировку придётся выяснять опытным путём и самому полученную строку перекодировать.
    Ответ написан
    Комментировать
  • Как из любой точки мира передать сообщение на ESP32 или любую ардуинку без установления подключения?

    nava2002
    @nava2002
    Инженер
    Учитывая все вышесказанное:
    Думаю что данную задачу удобнее можно решить на Raspberry Рi (или аналогов).
    Raspberry Рi имеет достаточные возможности для запуска Вэб сервера ( на Linux ) для организации внешнего доступа через интернет, а также имеет аппаратные выходы (по типу ESP32) для управления любыми устройствами низкого уровня.
    Дополнительно появится возможность не только "отправлять" сообщения, а и получать "ответы" о текущем состоянии оборудования.
    Ответ написан
    Комментировать
  • Как исправить ошибку Scikit-learn?

    Maksim_64
    @Maksim_64
    Data Analyst
    Ну код писал не ты, просто взял откуда-то да и все. Ошибка элементарная. У тебя где то он должен подсветить не совпадают размерности массивов. (1,4901) - это матрица с одним рядом и 4901 колонкой, а второй массив одномерный. Предположу что ошибка происходит при рисовании графика, это matplotlib выдает такую ошибку.
    Я тебе сделал маленький пример с идентичной ошибкой.
    X = np.arange(0,4901)
    y = 1.2 * X + 3
    X = X.reshape(1,4901)
    plt.plot(X,y)

    Вот мой код выдаст такую же ошибку. Как поправить нужно привести размерности массивов, к виду при котором с ними можно работать. ну например либо plt.plot(X.reshape(-1,1),y) сработает либо распрямить X сработает plt.plot(X.ravel(),y). И так и так сработает. Ищи на каком plot'e у тебя ошибка и приводи размерности к подходящему виду.
    Ответ написан
    Комментировать
  • Как делить куб пополам?

    @mayton2019
    Bigdata Engineer
    Дружище Корень

    Я вместо ответа дам тебе несколько советов.

    Первое. Тема Ферма является толстым троллингом для всех кто знает математику. И эксперты qna мне кажется ощущают от тебя усталость. Ты достаточно много продуцируешь потока сознания и это не идет на пользу. Лучше напиши 1 вопрос в неделю но обдумай. Второе Есть разница между операцией деления "/" в Python и в языках C++/Scala. Результат разный. Можно получить 5/2 = 2.5 или можно получить целое 2. Это очень важно для тех кто читает код. И это кардинально меняет взгляд на твою формулу которую ты пишешь в самом начале. Поэтому всегда обозначай язык разработки. Это поможет читающим понять формулу. Иначе будут обиды и непонимания. И если ты тегируешь топик Математикой то не стоит писать всякие исходники с inserts. Это раздражает. Раздели свои проблемы на части. Так будет лучше. Третье. Если ты выступаешь медиатором между Microsoft Bing и прочими чатами то - обозначь это. Пускай это будет джентльменское соглашение. Я всегда пишу если мой ответ был получен с GPT. Тоесть я разделяю за что я лично отвечаю и за что всякие AI.
    Ответ написан
    5 комментариев
  • Сколько длится цикл когда все планеты оказываются в идентичном положении относительно солнца?

    @CBET_TbMbI
    Никогда. Или через какое-нибудь огромное количество лет (миллионы-миллиарды лет), да и то с некой погрешностью.
    Периоды обращения планет соотносятся друг с другом весьма неудобными для этой цели числами.

    Такие вопрос имеет смысл задавать для тел, находящихся в орбитальном резонансе. Например для крупных спутников Юпитера.
    Ответ написан
    Комментировать
  • Как удалить часть контура так, чтобы заливка не обрезалась?

    Разделите объект на обводку и фон, например через expand, а потом ножом отрежьте лишнее. Потом можно получившейся контур ещё раз через expand преобразовать, на всякий случай.
    Ответ написан
    Комментировать
  • Не открываются фотографии после копирования с телефона на флешку, что делать?

    hottabxp
    @hottabxp
    Сначала мы жили бедно, а потом нас обокрали..
    Откройте ваш файл в hex редакторе и увидите там, что весь файл состоит из нулей. Единственный способ восстановить фото, это искать нейросети (очень дорогие!) и писать им что было изображено на фото. И нейросети пусть генерируют фото. Пока (имеется ввиду, пока не изобрели машину времени) восстановить такие фото абсолютно никак.
    Ответ написан
    Комментировать
  • Как делить куб пополам?

    @AlexSku
    Программист по автоматике
    У двух кубов нет a, b, c.
    Проверка такая:
    a**3 == 2 * b**3
    Ответ написан
  • Почему пустой tuple занимает больше памяти, чем tuple с None?

    vabka
    @vabka
    Токсичный шарпист
    В случае b у тебя не tuple, а просто None.
    Чтобы получился tuple из одного элемента - нужно добавить запятую
    b = (None,)
    b.__sizeof__() # 32
    Ответ написан
    1 комментарий
  • Как убрать "дрожание" курсора, двигающегося с помощью детектирования руки?

    leahch
    @leahch
    Я мастер на все руки, я козлик Элек Мэк :-)
    Правильнее всего будет встроить в программу пид-регулятор https://ru.m.wikipedia.org/wiki/%D0%9F%D0%98%D0%94...
    Ответ написан
    1 комментарий