Задать вопрос
  • Какой OCR можно использовать для обучения распознавания картинок в зависимости от узора(не текста)?

    @rPman
    opencv там очень много всего.

    Если велосипед сделать, то: если нет проблем с эффективностью алгоритма, у вас все просто - найти все белые области (пороговое значение, строим монохромное, ставя цвет там где на изображении белый), вычисляем их размер, и начинаем поворачивать с шагом 1-3 градуса, после каждого поворота масштабируем до размера, в котором у вас хранятся шаблоны (лучше сделать поменьше размеры для ускорения, само собой у шаблонов логичнее выровнять размеры по одной стороне) и считаем количество совпадений (плюс к оценке) и несвопадений (минус к оценке), например делая xor (шаблоны и сравнение делать в монохромных версиях) и минимизируя количество (площадь) темных областей.

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

    Это не очень эффективный алгоритм но зато очень простой.
    Ответ написан
    2 комментария
  • Как сделать так чтобы программа взаимодействовала с поисковиком?

    @rPman
    Запустить браузер на c# дело 3 кликов мышки (контрол WebBrowser), чуть сложнее будет симулировать ввод запроса, точнее найти в какие input необходимо вставить текст и какую нажать.

    Все действия лучше симулировать на javascript внутри этого браузера (хотя есть возможность работать с DOM прямо из c#, на чтение это оправдано но на изменения могут возникать не очивидные глюки в общем случае), запуская через onTimeout с нулевой задержкой.

    будьте готовы что на странице может появиться капча, поисковики не любят халявных автоматизаций в обход их платных API

    p.s. Когда то давно делал приложение, которое делало десятки запросов в минуту, использовались сразу несколько ip адресов гугла по очереди чтобы избежать бана за частоту запросов, симуляция была на основе curl, тот еще квест, а главное поддерживать это было нудно, поисковики меняются постоянно, лучше уж как я выше написал.
    Ответ написан
    Комментировать
  • Wordpress компрессия изображений, можно ли без плагина?

    @rPman
    Возможно не в ту степь, но мое предложение - задумайтесь об обработке изображений на стороне клиента, на javascript, вот тут красиво расписали простой код.

    Просто это логично, зачем нагружать сервер тем что можно оставить на стороне клиента?
    Ответ написан
    Комментировать
  • Как заниматься разработкой на удалённом сервере на DigitalOcean?

    @rPman
    Под php можно разрабатывать и под windows, я долгое время вообще сидел исключительно в far manager без отладчика и т.п. Плюс есть куча IDE которые так же пойдут под windows.

    Вы всегда можете подключиться к удаленной машине терминалом, в т.ч. графическим, и работать как на своей, если скорость и латенси интернета позволит (для консольного вам хватит ssh, тот же putty, для gui - установите на сервере freenx, лучший по требованиям к сетевому трафику, если вам игры не надо запускать само собой)

    Если вас зачем то интересует linux окружение для работы с машины на windows то начните сygwin.org удобный пакетный менеджер, практически все утилиты из мира linux портированы под windows, режим portable т.е. не требует администраторских прав и т.п.

    Чуть менее качественно linux окружение портировано в mingw (msys), в основном там это сделано для возможности сборки приложений из исходников, заточенных под linux на windows. Но не думаю что вам это актуально при использовании php.

    Если вам все еще будет этого недостаточно, в win10 недавно встроили linux подсистему, что то типа wine наоборот, где бинарники, собранные под linux той же архитектуры что у вас windows, обычным способом запускаются под windows. GUI нет, возможно придется искать и главное настраивать xserver самому.

    Если и этого не хватает, а virtualbox тормозит (например очень старая машина без поддержки аппаратной виртуализации), и если у вас x86 версия windows (к сожалению x86_64 не поддерживается и не будет, проект считай загнулся, зато работает даже на winxp) то вы можете попробовать colinux.org это считай openvz/lxc/user mode linux из мира linux только под windows но для запуска именно linux. Скорость работы этой виртуалки практически совпадает с нативным запуском приложений (виртуализации не происходит, только подмена вызовов), особенно это заметно там где много вычислений а не системных вызовов. К сожалению там будут работать только старые версии linux, но попытка не пытка.
    Ответ написан
    Комментировать
  • Как ограничить трафик с мобильного интернета в ubuntu?

    @rPman
    Если мобильный интернет у вас на телефоне, который подключен к ноутбуку, то вместо настройки ethernet over usb (или как оно там называется), установите на смартфоне любой socks server (гугл выдает какой то socks server ultimate, попробуйте, либо установите на телефоне ssh server и подключайтесь через перенаправления adb с ключом -D1080) и с помощью adb настройте перенаправление tcp портов.

    Затем полученный порт пропишите в firefox и получите работающий интернет только в нем.

    p.s. точно знаю, некоторые особо умные приложения, когда то давно это делал skype пока его не уничтожила microsoft, так же это умеет делать teamviewer,.. изучают настройки в профилях браузеров в поиске настроек прокси
    Ответ написан
    Комментировать
  • Добавление контакта в телефон из email сообщения?

    @rPman
    попробуйте сформируйте файл vCard с расширением .vcf и передайте его вложением в письме
    https://ru.wikipedia.org/wiki/VCard
    Mime type:
    text/x-vcard , application/vcard (Macintosh only) , text/anytext , text/directory , application/x-versit (Eudora Plug-in) , text/x-versit (Eudora Plug-in) , text/x-vcalendar
    Ответ написан
    Комментировать
  • Как лучше реализовать аутентификацию в микросервисной архитектуре?

    @rPman
    Зачем на каждый запрос спрашивать валидность токена у самого главного?

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

    Аналогично происходит принудительный отзыв токена (разлогиниться).

    Токен - абстрактно это уникальный код плюс параметры авторизации - время действия и права доступа
    Ответ написан
  • Windows 7 x32 после обновления запускается только в безопасном режиме, что делать?

    @rPman
    Если запускаетесь в safe mode уже хорошо, идите в панель управления - программы и компоненты - просмотр установленных обновлений
    и удаляете все, по дате, после которых появились проблемы

    в win10 даже есть для этого специальный мастер, позволяющий отменить обновление, даже если это смена ревизии.

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

    p.s. а журнал что говорит?
    Ответ написан
    3 комментария
  • Как сделать авторизацию без использования сервера?

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

    т.е. формально тут нет авторизации, как процесс, но на клиентской стороне возможно приложение будет как то блокировать доступ к приватному ключу, дополнительно его шифруя паролем (для хранения на диске) и запрашивая его у пользователя.

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

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

    p.p.s. не майтесь дурью, сделайте все правильно на сервере.
    Ответ написан
    Комментировать
  • Где почитать статьи про безопасную работу/передачу/обмен информацией в интернете?

    @rPman
    Первое и самое главное - для начала определите для себя что такое 'безопасность'! Это комплексное понятие включает в себя не только сетевые протоколы и интерфейс пользователя но и набор правил, которым должны следовать пользователи (та же присловутая бумажка с паролем на мониторе).

    Чтобы передать сообщение от одного пользователя другому, необходимо:
    * первоначальная аутентификация
    Вам нужно как то буковки на экране ассоциировать с конкретным человеком, и это мега проблема, потому как универсального решения не существует, точнее существует - это телефонный номер, именно поэтому современные менеджеры привязывают аккаунт пользователя к номеру телефона. Их нельзя генерировать бесконечно для спама (это стоит какие то деньги для пользователя) и при этом он уже есть почти у каждого человека на планете (кроме совсем уж бедные страны но даже там инфраструктура хоть какая то да есть)

    Соответственно вам нужна инфраструктура (договоры с провайдером, софт и физические сервера либо оплаченные облачные услуги) которая будет обеспечивать аутентификацию по тому же sms. При наличии приложения для телефона некоторые этапы можно пустить но это ненадежно, ибо приложение взламывается. Первоначальную sms выслать придется так или иначе.

    Альтернатива - необходимо чтобы был какой то центр регистрации аккаунтов (если у вас организация - это самый логичный вариант) где кто то самый главный сможет сказать - 'вот этот человек и есть вот эти буковки на экране, я гарантирую'.

    Существует gpg стандарт когда пользователи могут обмениваясь gpg ключами (при личной встрече например, через qr-код) подтверждаю что этот пользователе является тем о чем заявляет. Но как вы понимаете личная встреча все равно нужна. Я не видел ни одного менеджера, где бы этот процесс был как то социализирован, грубо гворя вы бы видели все подтверждения от других пользователей (в виде дерева доверия и подтверждения). Но догадываюсь это было бы слишком сложно для классического пользователя, хотя наиболее верно для децентрализованного месседженера.

    Существуют плагины для различных jabber и почтовых клиентов. Вроде бы был плагин для браузера, который не только управлял этими подписями но и позволял налету расшифровывать сообщения на странице.

    * авторизация
    Это проблема напрямую вытекает из способа первоначальной аутентификации и хранения ее результатов
    Самое простое - парольная, сервер хранит все необходимое для работы, по вводу пароля выдается временный токен приложению и все довольны, приложение по какому то условию удаляет токен и требует повторного ввода пароля. Если вы ратуете за безопасность, вы не должны пользоваться какими то третьими лицами в качестве посредника авторизации (googl/facebook/вася пупкин) это должен быть ваш сервис.
    Если вы храните все необходимые данные (ключи gpg например) локально, вы должны всеравно как то защитить и от доступа третьим лицам, пароль, биометрическая аутентификация (отпечатки пальцев) и т.п. но ц каждого решения есть свой уровень защищенности (стоимость взлома)...

    * Коммуникация и хранение данных
    Все сообщения должны быть как то доставлены. Они должны где то храниться, пока участники не онлайн.
    Если правильно - все должно быть организовано по той же схеме gpg, у пользователей хранятся ключи, а сервер тупо труба для данных и хранит все зашифрованным.

    НО клиенты не хотят заморачиваться с хранениме ключей, они хотят кнопочку нажать и чтобы было хорошо, а значит сервер занимается хранением этих ключей и все шифрование становится абсолютно бессмысленным (кроме собственно низкого уровня, но там ключи шифрования можно выдавать временно как это происходит с https и совсем незаметно для пользователя)

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

    @rPman
    Кажется htop не умеет группировать процессы, попробуйте atop
    В консольном интерфейсе нажмите последовательно m а затем p (до или после нажмите a чтобы вкл/выкл отображение всех процессов а не только значимых по потреблению ресурсов)
    Это включит режим сортировки по потреблению памяти а затем сгруппирует записи по одинаковому процессу (слева будет колонка с количеством) так вы найдете процесс, который запущен в нескольких копиях и по одной потребляет мало но суммарно много.

    Что показывает free -g или free -m (g - гигабайты, m - мегабайты)? возможно у вас половина памяти отведена под кеш и буфера операционной системы, это нормально, она будет освобождена автоматически.
    Ответ написан
  • Что нужно для записи с камер на удаленный компьютер?

    @rPman
    Если вы купите ip камеры с поддержкой одновременного подключения то вам повезло (такие точно есть, у них по две ссылки для rtsp, у дешевых тоже может быть но в документации про это будет ни слова, в общем берете камеру из прайса, гуглите rtsp изучаете отзывы и т.п. в некоторых случаях это даже зовут хаком, осторожно, большинство ip камер отдают rtsp без авторизации либо авторизация сложно автоматизируется, без шифрования потока и т.п. в общем очень странно сеть камер делать открытой для мира).

    Берете openrtsp настраиваете его на запись (например по файлам по несколько минут), но будьте осторожны, с десятка камер трафик такой что ваш домашний интернет может не справиться, да и у предприятия сеть может оказаться слабенькой. Лучше разместить сервер хранения в самой организации. Просмотр сохраненных файлов делайте уже обычным способом - файловый сервер, синхронизация или на ваш выбор. Раздельные куски видео можно соединять в плейлист, все плееры это показывают без проблем.

    Для просмотра видео просто подключаетесь с помощью любого плеера (тот же vlc или mplayer или ffplay) по rtsp по второму линку к камере. Настройте себе прямо в проводнике линки либо простейшую html страничку (гуглите проигрывание rtsp в браузере, почти наверняка это будет flash плеер но с управлением по javascript), где ссылка - это будет картинка с тех же камер, обычно камеры отдают текущую картинку в виде jpeg по спец ссылке. В простом виде задача не выглядит сложной (если только смотреть), но если вам нужно еще и управление (повортные камеры, вкл/выкл led освещение, ночное видение, зум и т.п.) то тогда придется заморочиться и изучать api этих камер (отреверсить их html страничку, скорее всего там простые post запросы). Я бы рекомендовал на своей управляющей страничке сделать ссылки на админку каждой камеры, т.е. ничего програмировать не придется, тупо указать список ссылок на html страничке и все.

    Если камера не умеет второй поток, в теории можно собрать из ffmpeg прослойку (на сервере где храните видео), но везде где я видел примеры либо неочевидные глюки либо очень большая задержка (в десяток секунд) трансляции.

    p.s. у дешевых камер (<=$15) с которыми я игрался дома обычно проблемы с отдачей кодированного потока mpeg, например подвисания камеры. С mjpeg проблем не было но от них идет очень тяжелый по трафику поток (десяток мегабит если HD) и ни один сетевой канал наружу десяток таких камер не протолкнет, поэтому почти наверняка у вас останется только вариант перекодирование видео на вашем сервере. Какое подобрать железо для того чтобы перекодировать поток с десятка камер, отдельный разговор, если найдете свободный софт, способный это делать используя GPU, все вам скажут спасибо.

    В общем не экономьте на камере и не гонитесь за wifi в них, смысла в этом никакого, так как электричество все равно нужно подводить, лучше следите чтобы была возможность питания по POE, т.е. 1 провод на сеть и питание (следите за совпадение стандартов на свитче и камере, бывают у них стоят свои нестандартные сплиттеры).
    Ответ написан
    1 комментарий
  • Как создать программу для захвата видео с экрана?

    @rPman
    GpGpu для программиста на текущий момент выглядит так - на неком языке (все поддерживают opencl, а nvidia в частности свою cuda, но онро идеологически похоже), очень похожем на c++, пишется код, с одним callback методом, который будет вызываться последовательно и параллельно (это решит драйвер видеокарты, вы этим не почти управляете) для элементов вашего массива, который по факту - текстура в памяти (на низком уровне вы тут не заморачиваетесь) и сохраняет результат в другой.

    Передача данных между обычным обычной оперативной памятью и видеокартой, объективно самая дорогая операция, и обычно стараются свести такие копирования к минимуму (т.е. на старте и под конец, для получения результата). Причем на столько, что к примеру получение содержимого экрана в оперативную память и копирование ее обратно в формате, понятному вашему cuda приложению будет занимать 99% времени если не 1099% (вы же хотите fullhd/4k 60 fps? а скорости может тупо не хватить), не говоря уже о самом преобразовании форматов.

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

    Если у вас получится, вам придется разработать (или найти готовый) эффективный алгоритм, кодирующий видео с использованием многоядерного процессора видеокарты (тысячи не очень шустрых процессоров), а это значит очень глубоко погрузиться в кодирование видео, на столько что вопросы в той формулировке что вы задали не появятся, ибо другой уровень знаний (повыше) для этого требуется.

    p.s. nvidia уже вроде несколько лет назад пиарилась на том что разработала такие алгоритмы для эффективного стриминга экрана приложений и игр по сети с минимальной задержкой, в т.ч. в железе.
    https://developer.nvidia.com/nvidia-video-codec-sdk
    Ответ написан
    Комментировать
  • Генерация аудио файла с помощью сообщений?

    @rPman
    Из бесплатных (и наверное полулегальных) можно воспользоваться обычным android + google apps, там возможна установка гугловского синтезатора речи, для кучи языков, и по каждому можно подгрузить языковые данные для работы offline. Попробуйте все это в эмуляторе.

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

    @rPman
    С каждым годом все больше сервисов используют шифрование трафика по умолчанию, следующие версии http и подавно не имеют варианта без шифрования, плюс повальное использование CDN, анти-ddos сервисов и прочего, превращают трафик от веб/приложений в кашу из шифрованных потоков к разным сервисам.

    Так что общий ответ - никак не получится универсального решения. Но в частных случаях (выбранные сервисы и приложения), может повести, например можно совершить атаку MITM (если клиент не проверяет валидность сертификатов или позволяет установить ваш сертификат) и расшифровывать трафик... для каждого приложения свои заморочки.

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

    Мало того, получив расшифрованный трафик - это пол дела, его нужно еще логически разобрать, вы же хотите понимать что именно делает приложение. Эта задача по затратам ресурсов и подавно высокая, особенно если приложение closed source.

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

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

    У разработчиков приложений и зачастую у пользователей, способов защититься от подобной деятельности гораздо больше чем у провайдера, и они дешевле.
    Ответ написан
    Комментировать
  • Что делать, если поставил не те драйвера на видеокарту(OpenSuse Leap 15)?

    @rPman
    отключите запуск X
    https://askubuntu.com/questions/16371/how-do-i-dis...
    для запуска однократно в текстомов режиме нужно нажать в grub загрузчике e и отредактировать строку запуска linux (по ссылке есть скрин) добавив туда text в опции
    Ответ написан
    Комментировать
  • В чем может быть проблема невозможности установки или обновления приложений через Google Маркет?

    @rPman
    Возможно ваш провайдер устроил mitm атаку на гугловскую инфраструктуру лично для вас? в РФ это теперь норма.

    Что происходит, если попытаться зайти с телефона на https://play.google.com
    Ответ написан
  • Хочу попробовать асинхронность PHP 7 с помощью REACTPHP, нужен совет?

    @rPman
    Асинхронность может помочь, если вы внутри foreach делаете запрос куда-то наружу и ждете... ускорение в данном случае получите только за счет того что для следующего запроса ждать результат предыдущего не будете, т.е. у вас в цикле должно будет запуститься асинхронные запуски для каждого элемента, а после списка (скорее всего по завершению работы), начнут вызываться коллбеки (т.е. соответствующие методы промис) с полученными результатами.
    Ответ написан