Задать вопрос
  • Параметры видеокамеры, чтобы распознать текст на видео

    @rPman
    Простой случай, если рассматривать скриншот (фото):

    Высота символов 12-го размера — 4.2мм, чтобы хотя бы вручную можно было распознать символы, на каждый необходимо (по высоте) отвести по 5-8 пикселов (смело умножайте на 2 — шумы, искажения), т.е. 0.42мм на пиксел

    Дальше, либо необходимо выбирать камеру с необходимым фокусным расстоянием (чтобы при расстоянии в 3 метра весь объект попал в кадр — что почти наверняка для вас нереально, хотя это всего лишь вопрос оптики), либо посчитать, какой размер символа будет для каждой камеры (обычно они не сильно отличаются), первую попавшуюся HD камеру в гугле на запрос 'углы обзора видеокамеры HD' — получил Microsoft LifeCam HD-5000 — угол обзора 66° (для простоты не пишут угл обзора по высоте, так как стандарт HD определяет его как ширина/1.33)

    Значит на 3-х метрах кадр будет вмещать объект шириной 4.4м, по высоте — 3.3м, итак нам надо чтобы пиксел вмещал не больше 3.3*1000/0.42 = 7857 пикселов по вертикали и соответственно (если использовать аналогию со стандартами HD *1.77777..) — 13967 пикселов по горизонтали
    Если создадите гениальный алгоритм, определяющий символ по матрице точек высотой в 3-4 пиксела (теоретически возможно, используя информацию еще и о яркости), то требования уменьшаются в 2-3 раза, т.е. 4655x2619 — все равно это не обычная камера

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


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

    Можно при обработке использовать несколько соседних кадров, определив смещения (объект можно сделать движущимся либо камеру принудительно двигать — например раскачивать её или зеркало/призму на маятнике) любым алгоритмом, используемым при компенсации тряски в соответствующих обработчиках видео или продвинутых видеокамерах (они не такие уж и сложные, на хабре кажется были обзоры).

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

    p.s. никак руки не дойдут заняться этой задачей, так как готовых примеров реализации не могу найти.
    Ответ написан
    Комментировать
  • TCP-прокси, устойчивый к разрывам связи (с автоматическими реконнектами)

    @rPman
    Просьба не предлагать всякие TCP keep-alive, тайм-ауты на уровне TCP и прочую дребедень — решение тут явно должно быть на уровне более высокого уровня, чем TCP (т.к. заставить TCP-соединение не разрываться в случае, например, физической замены роутера или переезда к другому интернет-оператору невозможно). Также нет возможности делать доработки в клиенте и сервере.
    Как раз тут может помочь поднятый vpn сервер на server и клиент на client (или наоборот, не принципиально), соединение устанавливать соответственно уже в этой локальной сети. По крайней мере кратковременные разрывы связи (на сервере менял таблицу маршрутизации, openvpn переподключился, соединения не разорвались), но вот в долгосрочной перспективе я просто хз, какие еще факторы могут помешать.
    Ответ написан
    1 комментарий
  • [.Net] Скорость создания записи в MySQL по сравнению с MS SQL (результаты теста + вопрос)

    @rPman
    Это какой то тихий ужас… когда то писал на .net базы, с mysql работа на запись была на уровне 200 запросов в секунду, и не просто табличку а с индексами и т.п. при этом комп древний и слабый был.

    Уверены что не нужно ничего дополнительно тюнить при использовании ключевого слова base(...)?
    Ответ написан
  • Linux корневой раздел в RAM

    @rPman
    Когда то давно считал, что будет быстрее, грузиться нормально или скопровать образ системы в память и грузиться уже с нее, разница была незначительная и в смысле — грузить образ в память оказывалось дольше (больше данных считывалось), а если и будет экономия (если систему хорошо почистить от лишних данных), то только за счет уменьшения seek-to-seek запросов.

    Если памяти много, то все необходимое легко кешируется (например простейшим tar --one-file-system -c / > /dev/null или еще лучше собрать самостоятельно список необходимых файлов)

    p.s. еще у меня были эксперименты по ускорению кеширования записи (игнорирование принудительного отключения отложенной записи) с помощью lvm + снапшоты в ram:
    1. создаем в памяти блочное устройство (самое простое настраивается опциями ядра)
    2. добавляем созданный образ в группу lvm
    3. создаем снапшот, указав место хранения изменений — этот раздел ram
    Теперь любая запись будет произведена в оперативную память, используя ее максимально эффективно! (только изменения, повторная перезапись сектора не увеличивает требования к памяти)
    4. при необходимости сохранить изменения — удаляем снапшот, это перенесет все изменения на первоначальный раздел, кстати так же максимально эффективно
    Цикл создания-удаления снапшота можно повторять периодически на автомате.

    Примеры команд в гугле, первыйже результат запроса linuxsoftware.co.nz/blog/2008/03/lvm-snapshot-with-no-free-diskspace
    Очень большой недостаток — при некорректном завершении системы нужно будет чинить группу (я не сильно копался, возникали ошибки со структурой), плюс конечно же изменения, записываемые на диск с момента создания последнего снапшота будут потеряны, что логично.
    Ответ написан
    Комментировать
  • Спутниковый интернет. Организация канала передачи данных в месте где "все плохо" с интернетом

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

    p.s. пинги в любом случае должны быть в районе 400ms и выше, так как используются спутники на геостационарной орбите, а это 36т.км (скорость света 299т.км/с) т.е. даже в идеальном случае только на передачу затраты в одну сторону 120мс, плюс низкая частота — 1Мгц, плюс общий канал, плюс погода, плюс наглость…
    Ответ написан
    4 комментария
  • Безопасно ли запускать виртуальную машину с реальной партиции?

    @rPman
    Если не будет одновременного доступа к разделу (в управлении дисков снимаем назначение буквы, если это FAT/NTFS разделы), то никаких проблем не будет, неоднократно пользовался этим, и не только с VirtualBox, но еще и с QEMU.
    Ответ написан
    Комментировать
  • Нужен юзерскрипт для чтения постов на всю ширину экрана?

    @rPman
    userstyles.org/stylish плагин, есть для firefox и chrome
    @-moz-document domain("habrahabr.ru")
    {
    div#viva-la-w3c {width:50% !important}
    div#sidebar {display:none}
    div#main-content {width:100% !important}
    div .yandex-direct {display:none}
    div#special_nokia {display:none}
    div .ufo-was-here {display:none}
    ul.panel-nav-top img {display:none}

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

    @rPman
    специально зашел с браузера, где не установлен stylish… о каких изменениях идет речь?

    p.s. так как 'чукча — читатель', у меня скрыто все, не относящееся к основному контенту, т.е. вижу только список топиков, сами топики и комменты.
    Ответ написан
  • Закрытые базы в memcached, как?

    @rPman
    По уму недавно к memcached прикрутили простую аутентификацию, но не нашел с ходу ничего про это, может быть подойдет?
    code.google.com/p/memcached/wiki/ReleaseNotes144
    Ответ написан
  • Распознавание осмысленного текста?

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

    Выявление просто предложений на человеческом языке можно сделать статистическим анализом, но это на порядок сложнее и так же ничего не решает, так как осмысленный текст таким образом не выделишь…

    Монстры вида Abbyy берут миллиардные гранты на разработку таких алгоритмов, боюсь у вас не на много больше шансов разработать успешные алгоритмы.

    p.s. попробуйте понять, осмысленный ли это текст, это просто класика (взято тут, еще тут):
    Родился на улице Герцена. В гастрономе № 22. Известный экономист. По призванию своему библиотекарь. В народе — колхозник. В магазине — продавец. В экономике, так сказать, необходим. Это, так сказать, система… эээ… в составе 120 единиц. Фотографируйте Мурманский полуостров — и получаете te-le-fun-ken. И бухгалтер работает по другой линии. По линии «Библиотека». Потому что не воздух будет, а академик будет! Ну вот можно сфотографировать Мурманский полуостров. Можно стать воздушным асом. Можно стать воздушной планетой. И будешь уверен, что эту планету примут по учебнику. Значит, на пользу физики пойдет одна планета. Величина — оторванная в область дипломатии — дает свои колебания на всю дипломатию. А Илья Муромец дает колебания только на семью на свою. Спичка в библиотеке работает. В кинохронику ходит и зажигает в кинохронике большой лист. В библиотеке маленький лист разжигает. Огонь будет… эээ… вырабатываться гораздо легче, чем учебник крепкий. А крепкий учебник будет весомей, чем гастроном на улице Герцена. А на улице Герцена будет расщепленный учебник. Тогда учебник будет проходить через улицу Герцена, через гастроном № 22, и замещаться там по формуле экономического единства. Вот в магазине 22 она может расщепиться, экономика! На экономистов, на диспетчеров, на продавцов, на культуру торговли… Так что, в эту сторону двигается вся экономика. Библиотека двинется в сторону 120 единиц, которые будут… эээ… предмет укладывать на предмет. 120 единиц — предмет физика. Электрическая лампочка горит от 120 кирпичей, потому что структура у нее, так сказать, похожа у нее на кирпич. Илья Муромец работает на стадионе «Динамо». Илья Муромец работает у себя дома. Вот конкретная дипломатия! «Открытая дипломатия» — то же самое. Ну, берем телевизор, вставляем в Мурманский полуостров, накручиваем, там… эээ… все время черный хлеб… Дак что же, будет Муромец, что ли, вырастать? Илья Муромец, что ли, будет вырастать из этого?

    А ведь черные СЕОшники генерируют гораздо более интересные тексты.
    Ответ написан
  • Высоконагруженный сокет-сервер?

    @rPman
    Я не специалист, но фраза 'какой из механизмов IPC выдержит' немного странная, какая разница, если в ОС штатно только один — message queue, shared memory и semaphore, что бы вы не выбрали, будет использовать их (особо кривые что то одно).

    Не совсем веб-проект, но для распараллеливания задачи пришлось использовать и очереди и семафоры (очень активное использование), рекомендую не передавать данные в очереди, она быстро кончается… максимум идентификаторы и подробности через shared memory или другие механизмы.
    Возможно, не стоит создавать один семафор на все, лучше под напрячься и по семафору на объект или хотя бы группу (чтобы блокировать только на доступ к группе а не всех ко всему) — этот подход может дать наверное максимально возможный прирост, когда упретесь в потолок (особенно грустно когда процессоры еще не нагружен и демоны чего то ждут), это в смысле организации многопроцессорного демона (или демон на ядро, так удобнее).
    Ответ написан
    2 комментария
  • С++ какой вид памяти использовать лучше и главное почему?

    @rPman
    самое важное отличие — когда вы пользуетесь malloc, то приходится делать приведение типа, в этот момент всю ответственность за корректность приведения берет программист, а значит потенциальное место для ошибок (причем си именно за это и ругают, так как ошибки получаются самые страшные), а если совсем избавиться от указателей (можно оставить ссылочные типы MyClass& a) то тогда за целостностью системы будет следить компилятор и писать 'не туда' вы не сможете.
    Ответ написан
    1 комментарий
  • Что вы используете для cоздания журналирования системы?

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

    Проблема потом интерпретировать эти данные… но, возможности, которые обеспечивает такой подход, очень велики.
    Ответ написан
  • Электронный архив?

    @rPman
    из самого простого, особенно если с правами мало заморочек, любой вики-проект и общие договоренности о стилях наполнения

    первые же результаты из гугла: Викизнание: Каталог wiki-движков и Вики-движок
    Ответ написан
    3 комментария
  • Нужен простенький framework для разработки двухстраничного сайта для android и iphone

    @rPman
    это феерично! что именно вы хотите в таком случае от фреймворка?
    * первая страничка — зависит от выбора серверной части, но в конечном счете без фреймворков это 5-6 строчек кода!
    * вторая страничка — картинка меняющая прозрачность? это в css делается, какие фреймворки? доступ к железу изменяющему яркость света? опять таки от него зависит, но по любому еще 5 строчек кода.
    Ответ написан
    1 комментарий
  • Законность декомпиляции и использования кода библиотеки

    @rPman
    * 'посмотреть как оно работает и написать свое' — да, можно, так поступают разработчики ReactOS, причем даже круче, одна команда изучает библиотеки windows, описывает это письменно/устно второй команде, которая пишет код
    * 'декомпилировать и скопировать получившийся код, с модификациями' — нельзя ни при каких условиях, а коммерческое назначение использование только усугубляет вину, но отсутствие этой цели — ее не уберет.

    p.s. но, в лицензии к программе может стоять запрет на декомпиляцию, тогда у вас останется только один легальный способ изучения кода — на основе поведения, но нужно будет обвиняющим доказать, что вы так делали, а 'не пойман — не вор'.
    Ответ написан
    3 комментария
  • Запуск С++ Linux библиотеки c OpenCV на другом компьютере

    @rPman
    это что за windows way?
    'положить необходимые библиотеки' это и есть 'установка', какие проблемы? на удаленном компьютере в репозитарии нет необходимой версии? найдите или соберите свою сборку под версию ту OS и передайте вместе со своей программой, если с той стороны боятся что ваша сборка что то порушит — пусть устанавливают библиотеки и программу в chroot копию самих же себя, скрипты этого дела из пары команд можете сами написать (sudo cp -rx / /chroot;sudo chroot /chroot;… хотя не, создание копии системы еще тот вопрос, лучше вместо cp -xr прописать список каталогов, гарантированно принадлежащих системе), но то, мне кажется, извращение

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

    p.p.s. спросите их про тип видеокарты на той стороне и подготовьте свой демонстрационный дистрибутив в виде iso файлика (благо с поддержкой opencl это либо ati, либо nvidia, либо изредка intel), а уж прожечь компакт диск и запустить его сможет практически любой пользователь.
    Ответ написан
    Комментировать
  • Как лучше хранить адрес файлов/картинок в базе данных

    @rPman
    Хранить в базе смещение (можно поделить на размер сектора или больше 4096...) и размер файла, при должном красноглазии можно завернуть оба числа в 64bit long и пользоваться им как идентификатор файла, сами файлы хранить в одном большом контейнере (можно не сильно заморачиваться с файловыми системами и складывать прямо в /dev/sda), как результат — максимально быстрый доступ к файлам (быстрее — только при самостоятельной организации кеширования под задачу) и максимально неудобное обслуживание при частых удалениях/изменениях файлов (запись только в конец контейнера, по окончании места — полная реорганизация хранилища, с выдачей новых id… но это может оказаться приемлемой платой и в некоторых задачах ее даже не придется платить).

    p.s. посчитали это шуткой? просто все зависит от задачи и особенностей использования данных.
    Вышеописанный способ использовался достаточно давно для не web-проекта, обеспечивал 'максимальную из возможных' производительность при резервном копировании, чтении и добавлении новых файлов, позволял организовать версионность 'из каропки',…
    Ответ написан
    2 комментария
  • Реально ли вообще хоть что то гарантировать в GAE datastore (Java, JDO)?

    @rPman Автор вопроса
    Залил приложение на appspot.com (настройки базы High Replication), Test.amount увеличивается успешно, но проскакивает такое:
    # curl blablabla.appspot.com/test
    Test length:1
    Test[1]: 9
    Test repeat read: 10, queryed:9

    # curl blablabla.appspot.com/test
    Test length:1
    Test[1]: 10
    Test repeat read: 11, queryed:10

    # curl blablabla.appspot.com/test
    Test length:1
    Test[1]: 11
    Test repeat read: 12, queryed:12

    # curl blablabla.appspot.com/test
    Test length:1
    Test[1]: 12
    Test repeat read: 13, queryed:12

    # curl blablabla.appspot.com/test
    Test length:1
    Test[1]: 13
    Test repeat read: 14, queryed:13

    Т.е. нет никакой гарантии что Query вернет верные данные, но каким то образом данные все равно корректно изменяются.

    p.s. уже размышляю по исключению из проекта любых Query и работа с данными исключительно по id (а особые списки реализовывать самостоятельно) все еще надеюсь что я где то ошибся, ибо это нереально глупое поведение БД
    Ответ написан
  • Реально ли вообще хоть что то гарантировать в GAE datastore (Java, JDO)?

    @rPman Автор вопроса
    Стало еще страшнее!!! я ошибся выше в коментарии, не перепроверил, если запросить после изменений данных данные объекта через Query execute() и .get(0) то данные ВООБЩЕ никогда не записываются!
    Добавив код после обновления данных:
    q=pm.newQuery(Test.class);
    qdr=(List)q.execute();
    q.closeAll();
    resp.getWriter().println(«Test repeat read: „+d.getAmount()+“, queryed:»+qdr.get(0).getAmount());

    т.е. вывод всегда такой:
    # curl 127.0.0.1:8888/test
    Test length:1
    Test[1]: 44
    Test repeat read: 45, queryed:44

    # curl 127.0.0.1:8888/test
    Test length:1
    Test[1]: 44
    Test repeat read: 45, queryed:44

    # curl 127.0.0.1:8888/test
    Test length:1
    Test[1]: 44
    Test repeat read: 45, queryed:44
    Ответ написан