Задать вопрос
  • Поиск по образцу. Как сделать быстрый поиск вхождения картинок-символов на большом чертеже?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    import cv2
    import numpy as np
    
    # Загрузка изображений:
    dr_image = cv2.imread('original.png')
    
    # Преобразуем в серое:
    gray = cv2.cvtColor(dr_image, cv2.COLOR_BGR2GRAY)
    
    # Бинаризация: черные линии → белые (на чёрном фоне).
    _, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV)
    
    # Шаблоны:
    template1 = cv2.imread('temp2.png', cv2.IMREAD_GRAYSCALE)  # ёлочка
    template2 = cv2.imread('temp1.png', cv2.IMREAD_GRAYSCALE)  # круг
    
    _, template1 = cv2.threshold(template1, 127, 255, cv2.THRESH_BINARY_INV)
    _, template2 = cv2.threshold(template2, 127, 255, cv2.THRESH_BINARY_INV)
    
    # Параметры:
    threshold1 = 0.7  # для ёлочки
    threshold2 = 0.5  # для круга
    
    # Поиск "ёлочки":
    result1 = cv2.matchTemplate(binary, template1, cv2.TM_CCOEFF_NORMED)
    loc1 = np.where(result1 >= threshold1)
    
    # Поиск "круга":
    result2 = cv2.matchTemplate(binary, template2, cv2.TM_CCOEFF_NORMED)
    loc2 = np.where(result2 >= threshold2)
    
    # Результат:
    result = dr_image.copy()
    detected_boxes = []
    
    # Обработка "ёлочки":
    for pt in zip(*loc1[::-1]):
        x, y = pt
        w, h = template1.shape[1], template1.shape[0]
        box = (x, y, x + w, y + h)
    
        if not any(np.allclose(box, b, atol=10) for b in detected_boxes):
            detected_boxes.append(box)
            cv2.rectangle(result, pt, (pt[0] + w, pt[1] + h), (0, 0, 255), 2)
            cv2.putText(result, "Tree", (pt[0], pt[1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 1)
    
    # Обработка "круга":
    for pt in zip(*loc2[::-1]):
        x, y = pt
        w, h = template2.shape[1], template2.shape[0]
        box = (x, y, x + w, y + h)
    
        if not any(np.allclose(box, b, atol=10) for b in detected_boxes):
            detected_boxes.append(box)
            cv2.rectangle(result, pt, (pt[0] + w, pt[1] + h), (0, 255, 0), 2)
            cv2.putText(result, "Circle", (pt[0], pt[1] - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 1)
    
    # Сохраняем результат:
    cv2.imwrite('result_with_labels.png', result)
    print(f"Найдено объектов: {len(detected_boxes)}")
    
    # Показываем:
    cv2.imshow('Detected', result)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

    >>> Найдено объектов: 12

    68cd5e8cccadf938039122.png
    Ответ написан
    3 комментария
  • Где найти воздушный ресивер?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Смотрите просто баллоны для сжатого воздуха. Например, 3-150У - 3 литра, 150 атм, 46х11х11 см.
    Ответ написан
    1 комментарий
  • Какая зарядка подойдет к ноутбуку?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Напряжение - такое же, как у старой зарядки, 12V.
    Ток - не менее, чем у старой зарядки, ≥ 3000 mA или ≥ 3 А.
    Размер штекера и его полюсовка такие же, как у старой зарядки.
    Ответ написан
    Комментировать
  • Имеет ли жизнеспособность идея нового игрового движка на Python?

    GavriKos
    @GavriKos Куратор тега Разработка игр
    Микропетпроджект - домашнее облако homeCloud
    Может ли такой игровой движок иметь место быть и иметь популярность у инди разработчиков?

    На первый вопрос - имеет ли место быть. Ну в целом почему нет. Правда "только для 2д" - вот это сразу плохо, но в целом - почему нет. Работать это будет

    А теперь отвечая на второй вопрос. Нет, не будет. Вы в одну каску не сможете его адаптировать постоянно и быстро под современные реалии, которые меняются. Вот и все.

    Приведу очень простой пример. Вы слышали про движок flame? Много на нем игр видели? А там как бы поддержка неслабая.
    А Cocos Creator? И как, насколько он популярен? А там армада китайцев за ним.

    Поэтому нет, самопальные движки никогда не будут популярны. Поэтому и смысла пилить прям универсальность - нет.
    Ответ написан
    3 комментария
  • Как правильно заниматься перебором: a³ + b³ + c³ = d³?

    wataru
    @wataru Куратор тега Математика
    Разработчик на С++, экс-олимпиадник.
    Циклы в питоне - это ужасно медленно, да. Не лучший язык для написания числодробилки.

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

    У вас самый наивный перебор в лоб, его можно ускорить. Сначала сгенерируйте все кубы и схраните их в массив. Их будет примерно кубический корень из |MAX_VAL-MIN_VAL| - это достаточно маленькая величина.

    Теперь задача: найти 3 числа в массиве, дающих в сумме число из массива. Это все еще O(n^3), если исползовать 4 индекса. Но можно ускорить решение методом "встреча по середине".
    Вместо A+B+C=D из массива будем искать A+B=C-D. Для этого переберем все пары чисел, подсчитаем их сумму и сохраним в dict() вместе со списком индексами этих чисел (список всех пар, дающих эту сумму). Потом опять переберем все пары, подсчитаем их разность и посмотрим в словаре, а была ли пара с такой же суммой. Если была - вот мы нашли 4 числа, таких что A+B=C-D. извлекаем корни и выдаем это в ответ.
    Это будет уже O(n^2) - заметно быстрее.
    Ответ написан
    8 комментариев
  • Какие нейронки или программы смогут восстанови эл. схему по фото платы?

    xkostuax
    @xkostuax
    Вечный студент
    Что-то мне подсказывает, что схем на такие платы в интернете должно быть навалом. Если даже не на эту именно, то на другие аналоги 100%. Как минимум отрисовать свою в Spring Layout не сложно за пол часа, там то как раз можно и под размеры компонентов сверстать. Ну и последнее - это любой графический редактор, например в Corel Draw отрисовка займет 10 минут от силы. С учётом минимальных знаний и желания сделать самому.
    Ответ написан
    3 комментария
  • Какое ПО может посчитать количество страниц PDF документов в папке?

    Adamos
    @Adamos
    Количество страниц в PDF:
    pdfinfo "file.pdf" | grep Pages | awk '{print $2}'
    Обвязка с find и вывод в csv - элементарно.
    Ни один питон не пострадает.
    Ответ написан
    2 комментария
  • Как можно реализовать фиксирование заброшенной шайбы в ворота?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    1. Геркон - это единицы сантиметров и невысокая скорость срабатывания. Отпадает.
    2. ИК-барьер реагирует на всё, ему что шайба, что клюшка, что нога вратаря, всё едино. Отпадает.
    Ответ написан
    5 комментариев
  • Как исправить ошибку?

    @Everything_is_bad
    Я очень зеленый в программировании, не знаю какой час сижу и разбираю одну ошибку.
    ну почему ты даже доки не пытаетесь для начала почитать? https://docs.python.org/3/library/sqlite3.html#sql...
    Ответ написан
    3 комментария
  • Как исправить ошибку?

    Vindicar
    @Vindicar
    RTFM!
    Объясняю на пальцах:
    UPDATE trial SET trialactive = 0 WHERE trialkey = 'vless:-test'
    - обновить запись, где столбец trialkey равен строке "vless:-test"
    UPDATE trial SET trialactive = 0 WHERE trialkey = vless:-test
    - обновить запись, где столбец trialkey равен столбцу vless:-test, а такого столбца у тебя нет.

    А причина - потому что ты не озаботился как следует посмотреть примеры работы с БД в питоне, и сразу побежал херачить текст запроса с помощью f-строк, хотя каждый первый туториал предупреждает что так делать нельзя, а нужно использовать placeholder'ы.

    Ссылку на https://docs.python.org/3/library/sqlite3.html#sql... тебе выше дали, разобрать её несложно.
    Первый пример кода (который помечен # Never do this -- insecure!) допускает ту же самую ошибку, что и твоё
    cursor.execute(f'UPDATE trial SET trialactive = 0 WHERE trialkey = {results}')
    и другие запросы.
    А второй пример кода показывает, как правильно.
    # This is the qmark style used in a SELECT query:
    params = (1972,)
    cur.execute("SELECT * FROM lang WHERE first_appeared = ?", params)

    Т.е. ставишь знак вопроса там, где нужно вставить значение, а потом вторым параметром передаёшь кортеж вставляемых значений - столько, сколько у тебя знаков вопроса в запросе.
    Ответ написан
    Комментировать
  • Как эту задачу решить по другому?

    @dim5x
    ЗИ, ИБ. Помогли? Поблагодарите. Отметьте ответом.
    Очевидно не перебирать все варианты, а решить систему уравнений:
    import numpy as np
    
    A = np.array([[5, 3], [3, 3]])
    B = np.array([46.2, 31.5])
    
    # Решаем систему уравнений
    x, y = np.linalg.solve(A, B)
    print(round(x, 2), round(y, 2))
    Ответ написан
    Комментировать
  • Как цикл for влияет на формирования списка?

    sergey-gornostaev
    @sergey-gornostaev Куратор тега Python
    Седой и строгий
    Дело не в цикле for. Функция pair возвращает генератор, а генератор можно обойти только один раз.
    Ответ написан
    Комментировать
  • Почему у кабеля все фазы?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Стандартная трёхфазная система электропитания 380 (400) вольт.
    Между фазами 380 (400) В, между нулём и любой из фаз 220 (230) В.
    Ответ написан
    1 комментарий
  • Как правильно написать код на Python для шифра "Цезарь"?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Заведите строку со алфавитом, по которому идёт шифрование, и тогда вам будет без разницы, какие символы и сколько использовать. Если символа нет в алфавите, то оставляете его как есть. Если символ есть в алфавите, то нахо́дите его позицию, добавляете смещение по модулю длины алфавита, находите новый символ в вычисленной позиции.
    Ответ написан
    Комментировать
  • Почему при проверке Decimal на принадлежность возвращается false?

    @Everything_is_bad
    заново читаем учебник или доки
    1. выясняем что именно делает is
    2. делаем правильно isinstance(a, Decimal)
    Ответ написан
    Комментировать
  • Видит ли опсос уровень сигнала на моём аппарате?

    pindschik
    @pindschik
    ФЫВА ОЛДЖ
    Видит. Телефон сообщает. И сам оператор слушает, есть ведь еще и обратный сигнал. Регулирует мощность передатчиков, исходя из общей картины. Приказывает абонентским устройствам сменить частоту или базовую станцию (если абонент видит несколько) исходя из собственных соображений и чувства оптимальности. Приказывает абонентскому устройству поднять или снизить мощность передатчика.

    Примерно так: у БС есть 25 клиентов, из них 10 рядом, 10 далеко, а 5 ближе у другой БС, которая не перегружена.
    Тогда логика будет такой:
    - 10 ближайшим приказать перейти на одну (или несколько) общих частот. Снизить на этих частотах выходную мощность. Приказать абонентам понизить мощность своих передатчиков.
    - 10 дальним - приказать перейти на другую (или несколько) частоты, и поднять на них свою мощность. А клиентам так же подрегулировать мощность их передетчиков вверх - до достижения уверенной слышимости на БС.
    - 5 которые у другой БС - велеть переключится на другую БС и одну из ее частот.
    Ответ написан
    10 комментариев
  • Какой алгоритм можно применить при проверки числа на простое ли оно?

    @Mercury13
    Программист на «си с крестами» и не только
    Если нужно проверить а) точно, и б) одно; в) не очень большое число (миллион тоже небольшое) — ничего нет лучше, чем проверка нечётных чисел до корня из n. То есть до 1000.

    Если точно, много и небольшие — то придётся держать список простых чисел, пополняя его, когда попадётся слишком большое число. Список тоже до корня из n. Допустим, если предел — int4 (≈4 млрд), то нужно держать только список до 65535, это пара тысяч чисел.

    Если число совсем небольшое и может быть где-то в списке — ищем его хитрой разновидностью поиска: проверяем 1-е число, 2-е, 4-е и т.д., пока не определим диапазон, где может быть число. И в этом диапазоне ищем двоичным поиском.

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

    PERFECT number — это СОВЕРШЕННОЕ число. Это не то (сумма всех делителей равняется самому числу), и для теста на совершенное число тоже надо проверять до корня из n — если a делится на b, то добавляем и b, и a/b (кроме случаев, когда b=1 и b²=a, разумеется). Если есть простые числа до корня из n — тоже можно разбить на простые множители (один из множителей может быть больше корня из n!) и подключить комбинаторику, чтобы заполучить остальные.
    Ответ написан
    2 комментария
  • Может ли выключатель не полностью проводить электрический ток?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Плохой контакт:
    • Между контактами самого выключателя
    • В колодках, куда подключены провода в выключателе

    В первом варианте - следует заменить выключатель на новый. Во втором - почистить контакты и затянуть. Но лучше заменить полностью. И третий, менее вероятный, но вполне возможный случай: проблемы в самой линии - в этом случае вызывайте электриков из коммунальной службы.
    Ответ написан
    Комментировать
  • Как сделать поиск объектов на скриншоте из игры?

    Vindicar
    @Vindicar
    RTFM!
    Т.е. размер искомого объекта известен заранее, поворотов и прочих искажений нет? Положение отпечатков на скриншоте всегда одинаковое? Вытаскиваешь их со скрина срезами (slice), тривиальная задача в opencv.
    А дальше Template matching в помощь, его тут должно хватить. Template matching составляет для изображения карту похожести. Чем больше значение в карте, тем больше окрестность этого пикселя похожа на заданный образец.
    Так что берешь каждый кусок отпечатка, делаешь template matching с самим собой (чтобы понять, какое значение похожести считать идеальным), потом делаешь template matching с отпечатком. Ищешь в карте похожести максимум. Если этот максимум сравним с идеальным (разница в пределах N%, придётся подбирать), значит, такой кусок на отпечатке есть. Если этот максимум значительно меньше, значит, такого куска на отпечатке нет.
    Скриншоты и мышетыканье в окно - это отдельные модули, за ними в гугл. Хотя поначалу можно просто выводить в консоль номера кусков отпечатка, которые нашлись.

    P.S.: код не проси. Приходи со своим (а не чатгптшным!), тогда будет что обсуждать.
    Ответ написан
    1 комментарий