Задать вопрос
  • Я преобразовал этот код из py в ехе, но теперь при запуске команды переменная n выводится не в файл, а в командную строк(cmd), что делать?

    phaggi
    @phaggi Куратор тега Python
    лужу, паяю, ЭВМы починяю
    Открытый в цикле файл надо в цикле же и закрывать после записи в него. Либо в цикле использовать with, тогда автоматически будет закрываться. Либо открыть файл до входа в цикл, а закрыть после выхода из цикла.
    Ответ написан
    Комментировать
  • Как на Python3.10 на хостинге Ubuntu импортировать модули?

    Vindicar
    @Vindicar
    RTFM!
    А) Найди pip от питона 3.10 и запусти его явно. Например, командой pip3.10.
    Б) Используй виртуальное окружение, и ставь пакеты в него. Только убедись, что используешь правильный питон для создания venv.
    Ответ написан
    Комментировать
  • Как создать свой каскад для распознавания объектов?

    Vindicar
    @Vindicar
    RTFM!
    Я создавал лабораторную по этой теме, могу привести инструкцию.
    1. Загрузите набор утилит opencv(гугл-диск, но я советую поискать самостоятельно), в частности opencv_createsamples и opencv_traincascade, а также необходимые им DLL-библиотеки. Распакуйте их в рабочий каталог в корне диска, без русских букв и пробелов в названии. Здесь и далее предполагается, что C:\MyDirName - ваш рабочий каталог.
    2. Подготовьте фото вашего объекта. Используйте контрастный объект без движущихся частей, и желательно не дающий бликов. Для этой цели хорошо подходят логотипы.
    3. Подготовьте отрицательные примеры (не менее 100 изображений). Для этого можно снять короткое видео помещения, затем написать программу, которая разделяет это видео на отдельные кадры. Рекомендуется поместить их в отдельный подкаталог negatives.
    4. Подготовьте файлы, содержащие список файлов в этом каталоге. Их можно сгенерировать следующей парой команд в терминале:
      dir C:\MyDirName\negatives\*.jpg /B /S >C:\MyDirName\negatives\negatives_abs.txt

      dir C:\MyDirName\negatives\*.jpg /B >C:\MyDirName\negatives\negatives_rel.txt

    5. Создайте пустые подкаталоги C:\MyDirName\positives и C:\MyDirName\training. Поместите ваше изображение - положительный пример в каталог C:\MyDirName\ и назовите его positive.jpg. В качестве положительного примера желательно разместить ваш объект на светлом фоне, если он тёмный, и наоборот.
    6. Сгенерируйте положительные примеры с помощью утилиты opencv_createsamples. Команда будет выглядеть примерно следующим образом:
      C:\MyDirName\opencv_createsamples.exe -info positives\info.lst -img positive.jpg -bg negatives\negatives_rel.txt -maxxangle 0.1 -maxyangle 0.1 -maxzangle 0.1 -bgcolor 0 -bgthresh 0 -w 50 -h 50 -num 100

      Параметры:
      -info - выходной файл.
      -img - входное изображение - положительный пример
      -bg - фоновые изображения. Положительный пример будет наложен на них (в оттенках серого).
      -max?angle - допустимые углы поворота примера. Утилита выполнит перспективное преобразование примера перед наложением.
      -bgcolor и -bgthresh задают яркость (среднее и диапазон изменения) для "прозрачного цвета". Например, если ваш объект на белом фоне, задайте эти параметры равными 240 и 15 (диапазон яркости 225-255). Задав оба параметра равными 0, вы отключите эту функцию и все цвета будут непрозрачными.
      -w и -h задают минимальный размер для размещаемой копии вашего образца.
      -num - количество примеров, которые стоит генерировать. Не должно превышать количество изображений в каталоге.
      Утилита должна вывести ряд сообщений вида "Open background image", а в конце вывести "Done".
    7. Сгенерируйте vec файл следующей командой:
      C:\MyDirName\opencv_createsamples.exe -info positives\info.lst -num 100 -w 20 -h 20 -vec positives\positives.vec

      где info.lst был сгенерирован в ходе пункта 6.
      -w и -h задают минимальный размер для объекта, распознаваемого в ходе работы каскада.
      -num - количество сгенерированных примеров. Столько же, сколько и в пункте 6.
    8. Проведите обучение каскада с помощью утилиты opencv_traincascade. Команда будет иметь примерно следующий вид:
      C:\MyDirName\opencv_traincascade.exe -data training -vec positives\positives.vec -bg negatives\negatives_abs.txt -numStages 100 -numPos 100 -numNeg 100 -featureType haar -w 20 -h 20 -minHitRate 0.999 -maxFalseAlarmRate 0.4 -precalcValBufSize 4048 -precalcIdxBufSize 4048 -numThreads 24 -acceptanceRatioBreakValue 10e-5

      -data - каталог для рабочих данных, который вы создали в пункте 5.
      -vec - индекс, который был создан в пункте 7.
      -bg - файл со списком отрицательных примеров (используйте абсолютные пути!)
      -numPos и -numNeg - количество положительных примеров (пункт 6) и отрицательных примеров (пункт 3).
      -numStages - максимальное количество этапов каскада. Итоговый каскад может содержать меньшее количество этапов.
      -featureType - определяет тип признаков. Признаки Хаара обучаются медленнее, но зато более точны.
      -w и -h задают минимальный размер для объекта, распознаваемого в ходе работы каскада. Должны строго совпадать с заданными в пункте 7.
      -minHitRate и -maxFalseAlarmRate задают качество работы одного каскада.
      -acceptanceRatioBreakValue определяет момент, когда каскад перестаёт обучаться.
      -precalcValBufSize и -precalcIdxBufSize задают потребление памяти процессом.
      -numThreads определяет число рабочих потоков.
    9. По итогам обучения в каталоге training должен появиться файл cascade.xml, который можно загружать так же, как типовые каскады, поставляемые с opencv. Обратите внимание, что если вы хотите запустить обучение с начала, нужно очистить содержимое каталога training, иначе утилита будет дообучать существующий каскад.
    Ответ написан
    5 комментариев
  • Как циклом Python for пройти несколько (сотен) range?

    Vindicar
    @Vindicar
    RTFM!
    Ответ написан
    Комментировать
  • Как убрать нумерацию в строке python?

    Lord_of_Rings
    @Lord_of_Rings Куратор тега Python
    Дунадан - северный странник. Злой, но очень добрый
    from re import sub
    
    print(sub(r'[^\w\s]+|[\d]+', '', '1. Дизайнер 2. Программист 3. Таргетолог '))
    Ответ написан
    Комментировать
  • Почему функция y=x^x начинает возрастать, начиная с аргумента 1/e?

    Maksim_64
    @Maksim_64
    Data Analyst
    Потому что точка (1/e, f(1/e)), это критическая точка. Критическая точкой называется точки где функция либо не дифференцируема, либо производная функции равна нулю.
    Соответственно наша функция, y = x^x, ее производная будет x^x*(ln(x) + 1). далее приравниваем производную к нулю x^x*(ln(x) + 1) = 0 и решаем для x. Решением данного уравнения будет 1/e Подставляем 1/e в исходное функцию и получаем это вы уже нашли округленно 0.692. (1/e,0.692) - Критическая точка. А в критических точках функция меняет свое направление, то есть если до этого шла на убавление проходя через критическую точку она пойдет на возрастание и наоборот.
    И так ответ Потому что (1/e, f(1/e)) Является критической точкой.
    Также далее посредством тестов можно найти является ли критическая точка локальным минимумом или максимум в нашем случае глобальным потому что она одна. В данном случае тест легко покажет что это точка глобальный минимум. А минимум слева убывает проходит через критическую точку и начинает возрастать.
    ДОПОЛНЕНИЕ К ответу.
    Выходит, что до 1/e функция убывает, а после - возрастает. Откуда берется такая связь?

    Здесь дело в том что данная критическая точка как указал выше является минимумом в контексте вашего вопроса даже не важно глобальным или локальным. Что бы критическая точка называлась минимум производная функции должна быть отрицательной слева от критической точки и положительной справа от критической точки если подставим в производную (ее я привел в самом начале) число не много меньшее чем критическая точка то мы получим отрицательное значение (что значит функция убывает) а если не много большее то положительное значит (функция возрастает). Поскольку функция убывает слева от критической точки и возрастает после нее это и есть определение минимума. Мы сейчас математическим методом нашли минимум. То есть ваша функция убывает до критической точки и возрастает после нее. Потому что точка является минимумом (в данном случае глобальным). Так будет не много точнее.
    Ответ написан
    Комментировать
  • Как получить PNG из NumPy array без сохранения?

    Maksim_64
    @Maksim_64
    Data Analyst
    PIL.Image.Open() это для открытия файлов. То что вы спрашиваете должно звучать так как конвертировать numpy массив в PIL.Image объект. Для это существует метод PIL.Image.fromarray(array), Возможно придется сделать rehape у массива, возможно придется задать какие то дополнительные параметры у метода fromarray. Но ваш вопрос решается этим методом.
    Ответ написан
    2 комментария
  • Почему функция возвращает None?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Если условие не выполняется, то функция ничего не возвращает и в переменной ans оказывается None.
    Ответ написан
    4 комментария
  • Можно ли как-то объединить две фигуры в Inkscape - чтобы из первой вырезать вторую?

    LenovoId
    @LenovoId Куратор тега SVG
    svg, css,js
    Применяете любой из списка - еcли не нето то отменя ctl+z

    63b810c1d6bb1494045710.png
    Ответ написан
    Комментировать
  • Альтернатива PyCharm?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    У вас 3.11 питон. Гляньте есть ли совместмость у ваших библиотек с этой версией. Возможно они еще не сделали релиз под 3.11.
    Ответ написан
    3 комментария
  • Arduino Uno, Nano и простой Arduino, в чем отличия?

    Что жи никто не дал ссылку на офсайт? Разве может кто-то рассказать лучше разработчиков?
    Ответ написан
    Комментировать
  • Как сгладить график?

    AgentSmith
    @AgentSmith
    Это мой правильный ответ на твой вопрос
    import numpy as np
    import matplotlib.pyplot as plt
    from scipy.interpolate import make_interp_spline
    ...
    x_sm = np.array(z)
    y_sm = np.array(y)
    X_Y_Spline = make_interp_spline(x_sm, y_sm)
    
    X_ = np.linspace(x_sm.min(), x_sm.max(), 500)
    Y_ = X_Y_Spline(X_)
    
    plt.plot(X_, Y_)
    Ответ написан
    Комментировать
  • Что покажет тестер измерив им выход RS485?

    hint000
    @hint000
    у админа три руки
    Дежавю какое-то.
    Это же вы задавали вопрос 9 месяцев назад: https://qna.habr.com/q/1129050
    И это вы (а не кто-то ещё) в вопрос добавили картинку, из которой вроде бы очевидно, что нет какой-то фиксированной полярности. Полярность всё время меняется при передаче.
    И Армянское Радио там в комментариях приводил пример осциллограммы.
    И VT100 вразумлял в комментариях к своему ответу.

    А и что покажет тестер на принимающем приборе
    Опять же, я там в комментариях писал про высокоимпедансное состояние.
    Получается, все эти ответы уходят, как вода в песок? Печально.
    Ответ написан
    4 комментария
  • Почему ResNet дает слишком хорошие результаты?

    Maksim_64
    @Maksim_64
    Data Analyst
    На практике такие метрики могут означать лишь одно вы тренируете и тестируете на одних и тех же данных. Первое место для проверки
    test_dataset = ASDataset(client_file="raw/client_train_raw.txt", imposter_file="raw/imposter_train_raw.txt", \
        transforms=preprocess)
    train_dataset = ASDataset(client_file="raw/client_test_raw.txt", imposter_file="raw/imposter_test_raw.txt", \
        transforms=preprocess)
    train_dataloader = DataLoader(train_dataset, batch_size=128, shuffle=True)
    test_dataloader = DataLoader(test_dataset, batch_size=128, shuffle=True)

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

    В каком случае возможны такие метрики ну например данные на которых вы учитесь в них входная переменная это температура в цельсии а то что нужно "предсказать" температура в фаренгейтах. Ваши тестовые данные по структуре такие же но сам датасет алгоритм никогда не видел. На тех данных что алгоритм тренировался он благополучно выучит школьную формулу перевода из цельсии в фаренгейты и справится со 100 точностью. По простой причине в данная проблема состоит только из детерминистической составляющей, т.е вариативность отсутствует. (Данный пример специально примитивен. Это может и Unsupervised Learning это может задача где на вход "features" пойдут десятки переменных и.т.д лишь бы отсутствовала вариативность). Подобные примеры как этот будут выдавать такие метрики.
    Ответ написан
    Комментировать
  • Как предотвратить деформацию картинок в ролике?

    trapwalker
    @trapwalker
    Программист, энтузиаст
    Самый простой вариант - подготовить картинки заранее обрезав и качественно смасштабировав их под нужный формат кадра.
    Можно воспользоваться вот этой распространенной утилитой https://imagemagick.org
    Или любой аналогичной для командной строки.
    Фактически вам нужен ресайз под конкретный размер по вертикали. а затем кроп под конкретную ширину, однако так у вас может отрезаться часть значимого сюжета.
    Можно слишком широкие картинки (типа 16:9) снабдить предварительно сверху и снизу небольшими полями, чтобы по бокам отрезалось меньше.
    Получить рамеры картинки поможет утилита exiftool.
    Ещё цвет полей картинки можно выбрать близким к фону каринки на краях. Для этого можно сильно размыть картинку по гауссу и взять несколько проб цвета из верхней чсти изображения и из нижней. Усреднить и получится цвет полей, которые не будут сильно бросаться в глаза. Ещё можно размыть верх и низ картинки по маске и смешать с фоном.
    Для всего этого лучше, конечно, не на баше скрипт писать, а на питоне с использованием библиотеки PIL (pillow).
    Ответ написан
    Комментировать
  • Какое максимальное напряжение можно измерить с помощью зарядного устройства?

    @nehrung
    Не забывайте кликать кнопку "Отметить решением"!
    в стране война, и какого-то хрена в магазинах пропали все измерительные приборы,
    Извините, не знал про такие подробности, иначе не иронизировал бы.
    Теперь о деле. В принципе замер осуществить несложно, даже таким плохим вольтметром, как в заряднике, хотя точности высокой, конечно, достичь будет трудно. Берёте достаточно мощную автомобильную двухнитевую лампочку накаливания (такую, какие ставили в фары) и подключаете её к вашему преобразователю так, чтобы обе нити были включены последовательно. Т.е. общий вывод не задействуете, а подключаете к выводам от обоих нитей накаливания. Включаете всё это хозяйство, и обе нити начинают тускло светиться. Измеряете напряжение на одной, потом на другой нити накаливания, суммируете, и получаете полное выходное напряжение. Подкручиваете регулятор на преобразователе, каждый раз измеряя сумму на лампочке, и в конце концов добиваетесь нужного напряжения.
    Если непонятно, почему тут требуется именно достаточно мощная лампочка - объясню в комментариях. Если такой лампочки нет, то её можно заменить на пару одинаковых низкоомных мощных резисторов (например, по 10 Ом, 10 ватт). Да и насчёт точности можно не особо стараться, для ноутбука годится отклонение плюс-минус 5%, т.е. от 18 до 20 вольт.
    Ответ написан
    1 комментарий
  • Как оптимизировать алгоритм SlopeOne в python?

    Maksim_64
    @Maksim_64
    Data Analyst
    По скольку нет полного датафрейма я не могу полностью сформировать рабочий ответ. Но основываясь на вашем коде вот какая главная мысль.
    Не каких for в pandas абсолютно любой функционал выполним без циклов. (либо напрямую) любой массив в pandas уже векторизован. либо посредством функций apply или agg (первая поэлементно выполнит вами написанную функцию) , вторая агрегирует, то есть на вход получит массив на выход одно число например (mean, std) и.т.д. Но главный вывод не каких циклов pandas устроен так что ты никогда не используешь циклы для обработки данных. (только для работы с индексами иногда применяют циклы), но никогда с данными. Это очень сильно ускорит код.
    Ответ написан
    Комментировать
  • OpenCV не видит камеру. Что делать?

    AgentSmith
    @AgentSmith
    Это мой правильный ответ на твой вопрос
    cam = cv.VideoCapture(1)

    Потому что ты пытаешься открыть вторую камеру, которой, скорее всего нет и у тебя одна камера, или вообще их нет.

    Вот мы и дожили до времён, когда "программисты" не знают с чего начинается нумерация массивах и коллекциях
    Ответ написан
    1 комментарий
  • OpenCV не видит камеру. Что делать?

    Vindicar
    @Vindicar
    RTFM!
    Сколько камер на том компе, где не работает?
    Потому что параметр VideoCapture() - это, условно, номер камеры в списке камер. Если на компе только одна камера, то номер должен быть 0, если две, то номера будут 0 и 1, и так далее.
    Способа открыть камеру по имени сам opencv не предоставляет, хотя вроде есть сторонние пакеты, которые это исправляют - в плане получения списка камер в том же порядке, в каком их индексы будут использоваться VideoCapture().
    Ответ написан
    1 комментарий