Pull to refresh
18
0
Send message

Восстановление расфокусированных и смазанных изображений. Повышаем качество

Reading time5 min
Views211K
Представляю вашему вниманию заключительную статью из трилогии «Восстановление расфокусированных и смазанных изображений». Первые две вызвали заметный интерес — область, действительно, интересная. В этой части я рассмотрю семейство методов, которые дают лучшее качество, по сравнении со стандартным Винеровским фильтром — это методы, основанные на Total Variaton prior.
Также по традиции я выложил новую версию SmartDeblur (вместе с исходниками в open-source) в которой реализовал этот метод. Итоговое качество получилось на уровне коммерческих аналогов типа Topaz InFocus. Вот пример обработки реального изображения с очень большим размытием:


Читать дальше →
Total votes 355: ↑352 and ↓3+349
Comments86

Луна и msp430

Reading time2 min
Views63K
Доброго времени суток! Сразу хочу сказать, что не агитирую за msp430, но раз уж купил — должен, как говорится, применить. Опять же сообщество жаловалось на отсутствие конкретики в постах про эту платформу. История, значит, следующая. Была поставлена задача приобрести ночник в спальню. Сказано, что надо ехать в IKEA, там есть. Но легкие пути не для нас. Светильник подбирался с учётом последующей возможной модернизацией.
Итак, тушка:

Читать дальше →
Total votes 62: ↑59 and ↓3+56
Comments68

Образование — это выбор

Reading time5 min
Views12K

Вступление


Статья «Стандартное образование — это обман!» вызвала бурные дискуссии: о необходимости образования в целом, о мнении автора статьи, о наличии достаточного опыта автора. Прочитав статью и комментарии к ней, я понял, что имею достаточно структурированное и доказательное мнение о проблеме, которым хочу поделиться.

Моя статья будет более общей, чем просто порицание или вознесение системы образования, я затрону вопросы необходимости образования вообще, выбора каждым жизненного пути.
Читать дальше →
Total votes 62: ↑40 and ↓22+18
Comments73

Декодирование капчи на Python

Reading time12 min
Views81K
Это перевод и форма повествования от первого лица сохранена. Автор — Бен Бойтер, бакалавр информационных технологий в Университете Чарльза Стерта (CSU).


Большинство людей не в курсе, но моей диссертацией была программа для чтения текста с изображения. Я думал, что, если смогу получить высокий уровень распознавания, то это можно будет использовать для улучшения результатов поиска. Мой отличный советник доктор Гао Джунбин предложил мне написать диссертацию на эту тему. Наконец-то я нашел время написать эту статью и здесь я постараюсь рассказать о всем том, что узнал. Если бы только было что-то подобное, когда я только начинал…

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

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

У меня неплохо получалось — более 60% изображений было успешно разгадано из моей небольшой коллекции. Довольно неплохо, учитывая количество разнообразных изображений в интернете.

Читать дальше →
Total votes 72: ↑63 and ↓9+54
Comments65

Система распределения заказов среди исполнителей методом ангелов

Reading time8 min
Views24K
Представим, что в компании есть отлаженный процесс регулярного поступления заказов (звонков, заявок). И есть несколько возможных исполнителей, которые могут выполнить эту работу.
Задача усложняется, если исполнитель выполняет работу на территории заказчика. А услуга, которую он оказывает — вполне может быть выполнена без поддержки компании работодателя. Скажем, договорившись за полцены от официальной цены. Знакомо? Сантехники, репетиторы или даже девушки по вызову – все эти бизнесы остаются халтурами низкого уровня, во многом из-за сложности контроля со стороны работодателя. А диспетчеру, выполняющему эту работу, придется стать ангелом, чтобы распределить все заказы и никого не обидеть.

Наша задача — выбрать оптимального исполнителя, среди нескольких возможных.
Читать дальше →
Total votes 52: ↑48 and ↓4+44
Comments31

Парсим русский язык

Reading time8 min
Views70K

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

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

"Мама мыла раму":

(предложение
    (именная гр. (сущ мама))
    (глаг. гр. (глаг мыла)
        (именная гр. (сущ раму)))
    (. .)))


Это называется синтаксическим деревом предложения. В графическом виде его можно представить следующим образом (в упрощенном виде):

Читать дальше →
Total votes 128: ↑124 and ↓4+120
Comments97

Кормление и уход за разработчиками (или почему мы такие ворчуны)

Reading time22 min
Views28K
Прим. переводчика — В оригинале использовался всем знакомый термин «software engineer». Так как русский его аналог «инженер-программист» используется в повседневной речи редко, пришлось использовать слово «разработчик» как наиболее близкое. Также профессия «short-order cook», с которой автор сравнивает положение многих разработчиков в индустрии, была переведена как «мальчик на побегушках» — мне кажется, что она отлично отражает суть проблемы отношения к разработчикам. Наконец, я старался везде вместо слов «to code» и «programming» использовать «разрабатывать» и «разработка» из-за сложившемся в русском языке негативном смысле слов «кодировать» и «программирование» как примитивных процессов перевода требований в машинные инструкции низкого или высокого уровня.

Автор оригинальной статьи — Nickolas C. Zakas, известный фронтенд разработчик и JavaScript-евангелист в свое время проработавший более пяти лет в Yahoo. Это запись из его блога, в которой он говорит о том, почему с разработчиками так сложно договориться и что с этим делать.


Не так давно Дженна Байлотта написала замечательную статью «Как дизайнерам ужиться с разработчиками», в которой она описывает методы работы в команде, позволяющие дизайнерам и разработчикам добиться лучшей производительности. Я в свое время работал с дизайнерами (а, работая в UI, и с разработчиками) и столкнулся с похожими проблемами, так что мне понятен ее практичный подход. Во время командной работы никогда не помешает уважать труд своих коллег и понимать их способ мышления.

Одна из главных мыслей той статьи заключалась в том, что разработчики говорят «нет» слишком быстро. Эта мысль тут же въелась мне в мозг и долго отказывалась вылезать оттуда. Мне хотелось воскликнуть: «Но подожди, ты же не понимаешь, почему мы говорим „нет“!». Тут же появился миллион других защитных аргументов. На самом деле она, конечно, права — мы правда слишком быстро говорим «нет», причем не только дизайнерам, а вообще всем. Это побудило меня поразмыслить над психологией разработчиков и тем, что составляет нашу истинную суть.
Читать дальше →
Total votes 242: ↑228 and ↓14+214
Comments76

Распознавание пульса человека на видео

Reading time1 min
Views18K
В MIT CSAIL и Quanta Research Cambridge разработали видеофильтр, который усиливает незначительные различия между кадрами. Например, видеокамера регистрирует незаметное для глаза изменение цвета кожи из-за притока/оттока крови — пропустив видео через фильтр, мы получаем чёткую визуализацию пульса.



Технология может найти широкое применение в системах видеонаблюдения, системах компьютерного зрения, компьютерных интерфейсах и т.д.
Читать дальше →
Total votes 61: ↑60 and ↓1+59
Comments32

Получение версии конфигурации 1с напрямую из SQL

Reading time10 min
Views15K
По долгу службы наша контора обслуживает несколько организаций, которые для управленческого и бухгалтерского учета используют 1с.
1с, как известно, постоянно выпускает обновления для своих конфигураций.
Соответственно на обновление хотя бы 5 баз уходит приличное количество времени.
Рассказ о том, как добиться полной (кроме скачивания обновлений) автоматизации процесса средствами MSSQL далее.
Читать дальше →
Total votes 11: ↑8 and ↓3+5
Comments0

Эффект Glow гауссовым размытием на Android

Reading time16 min
Views17K

Введение


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

Во-первых, в эмуляторе Android появилась поддержка аппаратного видеоускорения, что позволяет с полной скоростью работать не только интерфейсу, но и тестировать программы, использующие OpenGL ES 2.0.

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

Сказано — сделано: создаём канву проекта по андроидному Tutorial'у, достаём с полки старые Direct3D-проекты с использованием загрузки файлов .3ds, рендера-в-текстуру и пачки шейдеров, переписываем на Java и OpenGL ES 2.0, получаем то, что на картинке. Текст поздравления и тому подобное добавим потом.

Вся информация по использованию OpenGL ES 2.0 на Android оказалась сильно разрозненной, знания собирались по крупицам… Надеюсь, этот пост поможет тем, кто в будущем столкнётся с теми же трудностями, что и я.

А теперь подробнее.
Читать дальше →
Total votes 54: ↑51 and ↓3+48
Comments16

Организация архитектуры взаимодействия Activity и Service

Reading time7 min
Views34K
Приветствую!

Сегодня я решил поведать Вам мой способ организации activity-service interaction в Android приложениях. Мотивирован топик тем, что достаточно часто можно встретить приложения, в которых, скажем, поход на сервер организовывается внутри активити в AsyncTask. При этом часто встречается верная мысль, что это надо делать в сервисах, но нигде в оф. документации нет ни слова об организации правильной архитектуры двустороннего взаимодействия между ними.

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

Об этом методе я буду рассказывать далее.
Читать дальше →
Total votes 31: ↑29 and ↓2+27
Comments37

SkypeKit вылечен от жадности

Reading time6 min
Views18K
image

Вниманием!
Не пользуйтесь этим скайпкитом!
После этой истории
habrahabr.ru/post/142805 скайп начал банить ВСЕ аккаунты запущенные на одном айпи вместе с этим скайпкитом.



Есть такая замечательная штука как Skypekit. В двух словах это полноценный Skype без GUI, обёртку для которого предполагается написать самому.

Теоретически на основе Skypekit можно было бы:
  • Создавать полноценные Skype-клиенты под все платформы
  • Добавить поддержку Skype в мультипротокольные клиенты
  • Запускать Skype на сервере для интеграции с SIP/Flash

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

Но благодаря целебному воздействию реверс-инжиниринга этот недуг удалось вылечить.

Читать дальше →
Total votes 281: ↑258 and ↓23+235
Comments127

SkypeKit в качестве XMPP gateway

Reading time1 min
Views7.6K
Странно, что после появления такого изобретения, как SkypeKit, этого еще никто не сделал.

Собственно такой шлюз позволяет обмениваться сообщениями с пользователями Skype, используя уже имеющуюся кучу клиентов с поддержкой Jabber.
Читать дальше →
Total votes 40: ↑37 and ↓3+34
Comments11

Android SDK: боремся с ограничением размера памяти для картинок

Reading time5 min
Views16K
В графическом приложении для рисования используется SurfaceView и пара Bitmap размером с экран (например, я хочу изобразить плавное листание страниц книги).

На многих устройствах с большим разрешением экрана приложение падает c ошибкой
AndroidRuntime: java.lang.OutOfMemoryError: bitmap size exceeds VM budget

Проблема в том, что память для Bitmap, а также для SurfaceView резервируется из общей кучи процесса. Лимит размера кучи — невелик, как правило немногим больше 10Мб. И задается этот лимит при сборке системы.

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

Ограничение размера графических буферов программы в 3-4 экрана — это до обидного мало! Попробуем исправить такую несправедливость.
Читать дальше →
Total votes 33: ↑30 and ↓3+27
Comments26

Усилитель для наушников, чуть сложнее

Reading time5 min
Views203K
Проапгрейдил недавно компьютер на LGA2011, на коробке от относительно недешевой платы красовалась надпись «супер пупер звук, 110Дб вся фигня». Отлично подумал я, хороший звук никогда не помешает. Следующие 2 дня я неистово гнал железо, и все было хорошо. А потом вернулся к обычной работе, и естественно, к рабочей музыке. Тихо. Нет. ТИХО! 100% громкости едва хватало для комфортной громкости с моими обычными 32-х омными наушниками (Sennheiser HD 448, отличающихся не самой высокой чувствительностью), а если запись была сделана с низким уровнем сигнала — то хоть волосы вырывай.

От безысходности начал было даже слушать через bluetooth A2DP адаптор, но само собой и качество и аккумуляторы (~6 часов) вгоняли в печаль…

Стало ясно что жить так больше нельзя…
Читать дальше →
Total votes 169: ↑159 and ↓10+149
Comments115

Универсальный ImageLoader для Android

Reading time4 min
Views31K
В этой статье Я расскажу о разработанном мной (и не только) инструменте для асинхронной подгрузки изображений, их кэширования и отображения. На данном этапе развития его можно использовать повсеместно, где надо загрузить картинку в ImageView из интернета или из файловой системы. Все, что нужно, это URL картинки (для файловой системы он будет начинаться на «file://») и собственно ImageView, в который загруженную картинку надо будет положить. Более подробно о возможностях универсального разработанного ImageLoader'а читайте ниже.
Читать дальше →
Total votes 31: ↑30 and ↓1+29
Comments28

Бесплатный комплект значков «Aroma»: 150 обычных пиктограмм и чуть больше сотни изображений клавиш клавиатуры

Reading time1 min
Views2.6K
Вчера (17 ноября 2011 г.) в «Smashing Magazine» был опубликован комплект бесплатных значков «Aroma», созданный Оливером Твардовским.

Бóльшая часть его — полторы сотни пиктограмм и идеограмм 24×24 пиксела:

[предпросмотр]

Остальные значки (я насчитал их 103) изображают клавиши клавиатуры.

Скачать их можно в ZIP-архиве (≈полтора мегабайта), прямую ссылку на который есть просьба не приводить за пределами «Smashing Magazine» (так сказано в readme.txt ко значкам). Мне кажется, эта просьба автора разумна, так как позволяет ему в случае чего оперативно переменить предлагаемую закачку и пресечь дальнейшее распространение прежних версий архива из разошедшихся по Сети копий и переводов блогозаписи.
Total votes 108: ↑86 and ↓22+64
Comments32

Личные сообщения в MODx Revolution

Reading time6 min
Views14K
Задумали мы с другом один сервис, решили реализовать на MODx Revolution. Причины такого решения, равно как и сам проект лежат далеко за рамками этой статьи, возможно (читай обязательно) я напишу об этом позже. Сегодня я хочу поведать, как решалась конкретная задача.

Итак, необходимо реализовать “социальный” элемент в виде личных сообщений юзеров. Поиски готовых дополнений для MODx ничего толкового не дали, как и гугление на эту тему. Правда, некие проблески все-таки были, но явно не в том направлении. Ну совсем не хотелось использовать ресурсы (которые документы) не по назначению. И тут я обратил внимание на то, что в самом MODx, что называется “из коробки”, уже реализована система сообщений, с одним маленьким “но”: пользоваться ими можно только в админке, куда пускать юзеров вообще не предполагается. Даже никаких намеков на сниппеты для использования во фронтэнде. Тут-то я и решил копнуть глубже.
Читать дальше →
Total votes 17: ↑16 and ↓1+15
Comments12

Шаблоны проектирования при разработке под Android. Часть 4 — Сохранение данных. Domain Model, Repository, Singleton и BDD

Reading time10 min
Views15K
Сразу хочу сказать, что в статье я не буду описывать как надо работать с Data Provider-ом. Это можно найти и в документации и в многочисленных статьях в интернете.
Здесь я расскажу про шаблоны проектирования Domain Model, Singleton, Repository, про подход Behavior Driven Development (BDD) и как я их использовал в своей программе.

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

Например, в моей программе предметная область состоит из данных расписания, заданного в виде нескольких будильников, для будильника можно задать дни недели и время, а также признак «будильник включен». Так же есть несколько алгоритмов, например получить будильник, который сработает следующим и дату и время его срабатывания. Поскольку будильник может дремать, получается что у одного будильника есть несколько срабатываний с разными действиями: первое срабатывание, дремание, и последнее дремание, когда кнопка дремать уже не доступна. Поэтому есть еще алгоритм поучения ближайшего абсолютного времени и действия.
Так же есть алгоритмы для создания нового будильника и редактирования/удаления существующих.

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

Почему я вообще решил использовать этот шаблон проектирования. В альтернативу я бы мог сделать отдельный класс, который создает/редактирует будильники и сохраняет их в БД, а алгоритмы вычисления ближайшего будильника можно было сделать в другом классе.

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

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

Такой подход называется Behavior Driven Development. Его достоинство в том, что я могу тестировать модель в терминах предметной области, то есть в модульных тестах я имитирую обычное поведение пользователя. Благодаря тому, что это реализовано через механизм модульных тестов, я перед каждым релизом могу эти тесты прогнать и быть уверенным, что моя программа программа нормально отрабатывает основные действия пользователя.

Если бы я использовал отдельный класс для редактирования/сохранения будильников и отдельный класс для вычисления ближайшего будильника, то я конечно бы протестировал их по отдельности, но не смог бы проверить их вместе и не смог бы проверить основные действия пользователя.
Читать дальше →
Total votes 25: ↑22 and ↓3+19
Comments2

Алгоритмы LZW, LZ77 и LZ78

Reading time8 min
Views155K

Хочется продолжить свою предыдущую тему об алгоритмах сжатия. В этот раз я расскажу об алгоритме LZW и немного об его родственниках алгоритмах LZ77 и LZ78.

Алгоритм LZW


Алгоритм Лемпеля — Зива — Велча (Lempel-Ziv-Welch, LZW) — это универсальный алгоритм сжатия данных без потерь.
Читать дальше →
Total votes 72: ↑65 and ↓7+58
Comments15

Information

Rating
Does not participate
Location
Украина
Registered
Activity