• Подключить внешний скрипт Python?

    Vindicar
    @Vindicar
    RTFM!
    В js есть такое- загрузить внешний скрипт.
    А в Python-е есть что-то похожее?

    Сравнили попу с пальцем. То, что вы говорите - это разве что в браузерном JS встречается. В том же node.js так не делается, и очень хорошо что так.

    Вам нужно будет дописать к вашему скрипту приблуду, которая будет проверять наличие новой версии на сервере (а на каком? а что делать если он изменился?), скачивать её (а если интернет пропал? нужно продолжить загрузку) и распаковывать вместо старой (как насчёт резервной копии на случай отката обновелния?). А уж потом запускать распакованное (новое или старое).

    Добавьте к этому необходимость в скриптах миграции (а если "скачать и запустить новую версию" мало? может, надо структуру БД разово подкорректировать, или ещё что?), в умении откатить сломавшееся обновление назад (а то подстава получится для клиентов, если что-то пойдёт не так), в умении определить порядок смены версий (может, у нас скрипты обновления не поддерживает прыжок через три версии?)... и поймете, что это огроменная задача, если решать её как следует, а не как получилось.

    Однако есть и решения, которые часть этих задач берут на себя.
    Например, тот же pip умеет качать пакеты с гитхаба, так что клиент может выполнить что-то типа
    pip install --upgrade git+https://github.com/youracc/yourepo.git@branchname

    Но большая часть задач всё равно остаётся.
    Ответ написан
    Комментировать
  • Как получить переменную из процесса threading в запросе flask?

    Vindicar
    @Vindicar
    RTFM!
    Потому что в ходе присваивания в name() ты создаешь локальную переменную a, которая перекрывает глобальную.
    Есть два решения:
    1. Простое: вставить в начало name() строку global a, чтобы работать с глобальной переменной
    2. Правильное: обернуть поток в класс, и работать с его экземплярной переменной вместо глобальной.

    К слову, при запуске потока добавь daemon=True, иначе твой поток не даст завершить работу сервера (он же while True).
    Ответ написан
    Комментировать
  • Как Вырезать светлую область?

    ramzis
    @ramzis
    FullStackOverflow
    Подскажите каким образом можно вырезать светлую прямоугольную область?

    Погуглил и сразу нашел)
    import cv2
    import numpy as np
    
    img = cv2.imread("C:\\Users\\ramas\\Documents\\321.png")
    
    def process(img):
        img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
        _, thresh = cv2.threshold(img_gray, 128, 255, cv2.THRESH_BINARY)
        img_blur = cv2.GaussianBlur(thresh, (5, 5), 2)
        img_canny = cv2.Canny(img_blur, 0, 0)
        return img_canny
    
    def get_contours(img):
        contours, _ = cv2.findContours(process(img), cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
        r1, r2 = sorted(contours, key=cv2.contourArea)[-3:-1]
        x, y, w, h = cv2.boundingRect(np.r_[r1, r2])
        cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 2)
        crop = img[y:y+h, x:x+w]
        cv2.imwrite('result.png', crop)
    
    get_contours(img)
    cv2.imshow("img_processed", img)
    cv2.waitKey(0)

    60c0a9620aae9598186695.png
    60c0a97b66628590471684.png

    есть ли простой способ для дальнейшего распознавания на ней текста?

    Читаем эту простую инструкцию
    import pytesseract
    pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract'
    print(pytesseract.image_to_string('result.png'))

    и радуемся)
    60c0adb9e1be6188985022.png
    Ответ написан
    1 комментарий
  • Хостинг: арендовать или создать на домашнем пк?

    dima9595
    @dima9595
    Junior PHP
    можно, но если только хотите дохрена геморрою, потраченных клеток и херовой безопасности. а, ну да, как же без этого: херовый инет (так как сервер может сжирать бОльшую часть трафика без подобающей настройки), проблемы с провайдером из-за DDOS, проблему с железом (замена, ремонт) ну и конечно же счета за электричество. Да и шум от сервера ни куда не денется. Да и много-много других причин. Так что если вы не готовы поднимать всё оборудование и настраивать "от" и "до", то заплатите каких-то несчастных 100-500 рублей и не будите париться.
    Ответ написан
    Комментировать
  • Хостинг: арендовать или создать на домашнем пк?

    @rPman
    Почему нельзя, можно, и даже нужно, начинать с этого вполне нормально. Позволяет очень сильно сэкономить на вложениях, за счет меньшей надежности.

    Но нужно понимать что хостинг это не только машина, но и стабильное подключение к интернету, а еще гарантии, что сервис будет работать с определенными низкими шансами на остановки (гарантированные SLA, чем значение ближе к 1 тем хостинг круче и дороже), достигается это как командой админов, готовых как чип и дейл решать проблемы 24 часа в сутки, так и выбором серверного железа и резервированием. Ну и опыт и готовые решения с высокой вероятностью лучше у компаний, которые этим занимаются годами/десятилетиями чем домашний колхоз.

    Дома все это сделать будет заметно сложнее и дороже (бессмысленно).

    p.s. что будете делать если ваши недоброжелатели запустят ddos на ваш домашний ip и провайдер его выключит,..

    p.p.s. в россии последние годы провайдеры с подачи текущей власти вытворяют эпическую дичь, ломая интернет и устоявшиеся стандарты.
    Совершенно нормально внезапно обнаружить что входящие https нормально не работают, или скорость режется, или подвисают подключения и т.п. Это так работает самодельный DPI
    Ответ написан
    Комментировать
  • Как сделать счетчик успешных решений (распознавание картинок)?

    SilenceOfWinter
    @SilenceOfWinter Куратор тега PHP
    та еще зажигалка...
    просто снимай деньги за каждое распознование, если алгоритмы говно - то уменьшай стоимость. + сохраняй лог последних 50-100 картинок/значений капч по каждому клиенту для проверки в случае жалоб.
    Ответ написан
    Комментировать
  • Как поменять одним запросом в таблице sql?

    nokimaro
    @nokimaro
    Меня невозможно остановить, если я смогу начать.
    //..
    
    $hash_list = [];
    
    while ($row = mysqli_fetch_array($result)) {
          $response[$count]= json_encode(unserialize($row[0]));
          $count +=1;
    
          //собираем все hash в один список
          $hash_list[] = $row[1]; 
    }
    
    //апдейтим все pictures по списку hash одним запросом
    if(!empty($hash_list)) {
        mysqli_query ($db, "
            UPDATE `pictures` SET `result`='PROCESS' 
            WHERE `hash` IN('".join("','", $hash_list)."') 
        ");
    }
    
    echo json_encode($response);
    Ответ написан
    Комментировать
  • Как отсортировать объект относительно списка?

    @mkone112
    Начинающий питонист.
    Как вариант:
    [*dict(sorted(d.items(), key=lambda x: l.index(x[1])))]  # same keys are lost

    [i[0] for i in sorted(d.items(), key=lambda x: l.index(x[1]))]
    Ответ написан
    Комментировать
  • Как отсортировать объект относительно списка?

    adugin
    @adugin Куратор тега Python
    lst = ["15","17","23","48"]
    dic = {"3263":"48","3878":"17","9512":"15","9673":"23"}
    
    list(map({v:k for k, v in dic.items()}.get, lst))
    Ответ написан
    Комментировать
  • Как правильно нарезать картинку с помощью python?

    adugin
    @adugin Куратор тега Python
    Проще всего использовать masked array:
    import cv2
    import numpy as np
    from PIL import Image
    
    img = cv2.imread('words.png', cv2.IMREAD_GRAYSCALE)
    
    mask = img.min(axis=0) == 255.0
    masked = np.ma.array(img[0, :], mask=mask)
    slices = np.ma.notmasked_contiguous(masked)
    
    pieces = [img[:, s] for s in slices]

    6001bebd10c2c803620833.png
    Чтобы слова не разбивались на части, сильнее заблюрьте изображение перед получением маски.

    P.S. Для масштабирования достаточно передать коэффициенты по осям fx и fy:
    scaled = cv2.resize(img, None, fx=2.5, fy=2.5, interpolation=cv2.INTER_AREA)
    Ответ написан
    2 комментария
  • Как правильно переопределить в Python?

    @Stqs
    senior software developer
    в чем проблема то
    aaa = {}
    aaa['test'] = aaa.get('test') or []
    print(aaa) # {'test': []}
    
    aaa = {'test': [1, 2, 3]}
    aaa['test'] = aaa.get('test') or []
    print(aaa) # {'test': [1, 2, 3]}


    но такой подход я бы не рекомендовал
    Ответ написан
    4 комментария
  • Нужен ли ID в базе mysql?

    AleksandrB
    @AleksandrB
    Совсем недавно вывел "Hello world"
    Не хочешь создавать не создавай. Это не безусловное правило. Если у таблице нет связей, данные и так уникальны, они не нужны.
    Ответ написан
    3 комментария
  • Как получить все перестановки элементов массива?

    @galaxy
    Ответ написан
    Комментировать
  • Как получить все перестановки элементов массива?

    trapwalker
    @trapwalker Куратор тега Python
    Программист, энтузиаст
    import itertools
    
    for variant in itertools.permutations([a, b, c, d]):
        print(variant)
    Ответ написан
    1 комментарий
  • Подменить "visible" на странице, возможно?

    Aetae
    @Aetae
    Тлен
    Какие проблемы?
    Object.defineProperty(document, 'visibilityState', {
      value: 'visible'
    })
    Что-то конечно может сломаться на странице, но вас же это не волнует?)
    Ответ написан
    1 комментарий
  • Как получить новые письма с более чем 100 ящиков Gmail?

    Jump
    @Jump
    Системный администратор со стажем.
    На всех ящиках сделайте правило пересылки почты на другой адрес.
    Так же можно использовать почтовый клиент вроде The BAT - подключаете все адреса и собираете в одном месте, чтобы не палить малину, можете написать скрипт, который будет менять прокси при сборе почты.
    Ответ написан
    Комментировать