Обновить
0

Пользователь

Отправить сообщение

«Сладкое» программирование, или Как выделить этикетку с банки варенья в Mathematica?

Время на прочтение5 мин
Охват и читатели11K

Перевод дискуссии "How to peel the labels from marmalade jars using Mathematica?" с сайта Mathematica at StackExchange.
Код, приведенный в статье, можно скачать здесь (~31 МБ).
Выражаю огромную благодарность Кириллу Гузенко KirillGuzenko за помощь в переводе и подготовке публикации

Как можно выделить содержимое этикетки с указанной ниже банки (точка съёмки кадра, геометрия банки, её содержимое — всё это нам неизвестно),



чтобы получить нечто подобное — ту же самую этикетку в том виде, в каком она была до того, как оказалась на банке?



Основная идея заключается в следующем:

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

Предлагаемый нами алгоритм работает только для изображений, в которых:

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

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

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

Обзор алгоритмов сегментации

Время на прочтение8 мин
Охват и читатели102K

Этим летом мне посчастливилось попасть на летнюю стажировку в компанию Itseez. Мне было предложено исследовать современные методы, которые позволили бы выделить местоположения объектов на изображении. В основном такие методы опираются на сегментацию, поэтому я начала свою работу со знакомства с этой областью компьютерного зрения.
Сегментация изображения — это разбиение изображения на множество покрывающих его областей. Сегментация применяется во многих областях, например, в производстве для индикации дефектов при сборке деталей, в медицине для первичной обработки снимков, также для составления карт местности по снимкам со спутников. Для тех, кому интересно разобраться, как работают такие алгоритмы, добро пожаловать под кат. Мы рассмотрим несколько методов из библиотеки компьютерного зрения OpenCV.
Читать дальше →

Linux и бесплатные облачные хранилища

Время на прочтение8 мин
Охват и читатели97K
В попытках подмонтировать MS Onedrive в линуксе возникла мысль — а какие вообще бывают облака, которые нормально монтируются в папку и при этом предлагают максимальный объем? Ниже — небольшой список сервисов и впечатления от попыток примонтировать их.
Сразу скажу — это все делалось только для удовлетворения любопытства, а не для последующего использования — потому не могу сказать, как себя поведут предложенные решения в долговременном плане. Но, возможно, кому-то будет полезно.
Облака выбирались по двум параметрам — максимальный бесплатный объем (желательно получаемый без нескольких десятков регистраций по вашей реферральной ссылке) и возможность монтирования в папку под линуксом.

Процесс тестирования состоял из
1) Регистрация или вспоминание пароля (если я уже был зарегистрирован на этом сервисе)
2) Попытка добавить свободное место по реферральной ссылке — чтобы проверить, как выглядит процесс и насколько просто самостоятельно «накрутить» себе место.
3) Попытка подключить облако в папку под линуксом (там, где работает WebDAV — использовал davfs2, где не работает — другие доступные варианты).
4) Если попытка удачная, то несколько попыток загрузить разные файлы — какая-нибудь мелочь в пределах мегабайта, 50-70 мегабайт и 1,6 гигабайта.
Эксперименты производились на hetzner'овском VPS с одним ядром и гигабайтом оперативки (debian stable).

Я не смотрел на: цены, удобство клиентов, возможности коллективной работы, встроенные редакторы и т.п. Это всё для полноценного сравнения сервисов, которым я заниматься не хочу. Кому лень читать буквы, в конце табличка.
Читать дальше →

Как научиться делать игры: полезные ресурсы

Время на прочтение9 мин
Охват и читатели111K
Когда я начинал строить свою карьеру в игровой индустрии шесть лет назад, то часто задавался вопросами по геймдеву. Начиная от поиска общего понимания того, как разрабатываются и оперируются онлайн-игры, до частных вопросов типа того, как лучше рекламировать конкретную игру. Тогда было мало структурированной информации по созданию и продвижению игр, новичку разобраться и найти ответы было исключительно сложно. Практически единственным источником информации был собственный опыт и консультации более опытных коллег. Сейчас ситуация кардинально изменилась. Информации по игровой индустрии настолько много, что рискуешь в ней просто утонуть. Для того, чтобы упростить процесс получения нужных мне знаний, я структурировал и делал себе пометки по всем источникам информации о геймдеве. Далее в статье предлагаю всю эту информацию в удобной форме для общего пользования.

image
Читать дальше →

Почти забавные космические происшествия

Время на прочтение9 мин
Охват и читатели34K

За десятилетия освоения космоса накопилось много происшествий, которые выглядят почти забавными. Да, произошла авария, программа полета частично или полностью сорвана, но, за отсутствием погибших, пострадавших, и серьезных, дорогих потерь, история становится почти смешной. Иногда получается даже, что авария дает новые знания, или ее устранение выводит, казалось бы, потерянную миссию на новые высоты.
Читать дальше →

Спросите Итана №27: Выживут ли Земля и Луна?

Время на прочтение3 мин
Охват и читатели14K
И они не увидят, что скрывает мгла, если Солнце потускнело, а Луна умерла.
— Дж.Р.Р.Толкин

Читатель спрашивает:
В далёком будущем нашей Солнечной системы, по твоим словам, когда Солнце начнёт расширяться, «система Земля/Луна будет вытолкнута наружу, и избежит участи наших соседей с внутренних орбит». Не мог бы ты объяснить, почему?

Начнём с сегодняшнего дня и поговорим о том, что нас ждёт в будущем.

image

Это наше Солнышко. Огромный плазменный шар 1,4 млн. км. в диаметре. На таком диаметре вы могли бы разместить вплотную друг к дружке 109 планет Земля. С каждой секундой в Солнце 4 × 10^38 протонов превращаются в гелий, то есть более 4 млн. тонн массы превращается в энергию (E = mc^2).

И хотя оно такое большое и горячее в области ядра, у него достаточно топлива для поддержания горения в течение 10-12 млрд. лет. К текущему моменту прошло уже 4,5 млрд. лет. Но даже и за это время с Солнцем будут происходить небольшие изменения.
Читать дальше →

Байки выездных инженеров – монтаж и сервис ВКС/КЦ

Время на прочтение6 мин
Охват и читатели66K


Привет! А я продолжаю травить байки нашей команды выездных инженеров. Часть произошла со мной, частью поделились коллеги — лично присутствовал не везде, поэтому именно «байки». Плюс, конечно, детали немного изменены, чтобы никого не обидеть. Если вы вдруг узнаёте себя — помните, что в это же время ещё десять разных человек думают о своей компании.

Начнём. В большой компании мы делали видеонаблюдение на одном из объектов. Там две службы безопасности — ИТ и «физики». Первые «кладут кабель», вторые «ложат мордой в пол». Так вот, по настоянию ИТ-безопасников мы делали вообще отдельную сеть на коаксиале, чтобы нельзя было открутить камеру, воткнуться на её место и сбрутить роутер. Промучились изрядно. В конце монтажа мы обратили внимание на ряд датчиков «физиков», стоящих прямо рядом с камерами. На витой паре. Скрутили один, воткнулись с ноутбуком, там веб-интерфейс роутера… и да, пароль 12345678!

Однажды мы поднимали колл-центр для той части банка, которая, как оказалось, занимается сбором долгов. Впечатления инженера с приёмки совершенно потрясающие:
— Ты знаешь, стайка такая милых девушек до смены. Ласковые, флиртуют, глазки строят. А потом садятся на АРМ и начинают так брутально с клиентами разговаривать, что просто страшно становится. Я там чуть по стене не съехал первый раз.
Пробыв на тестовой эксплуатации 3 дня, инженер принял волевое решение и закрыл все свои кредитные карты.
Читать дальше →

Анализ защиты Sony PlayStation 4

Время на прочтение25 мин
Охват и читатели106K
image

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

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

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

Загрузить всё необходимое для собственных экспериментов можно здесь, на данный момент поддерживается исключительно прошивка 1.76.
Читать дальше →

Django своими руками часть 1: Собираем шаблоны для jinja2

Время на прочтение3 мин
Охват и читатели16K

Введение


В этом посте хотелось бы описать создание небольшого фреймворка с системой плагинов как django. Только с использованием внешних компонентов. Jinja2 для шаблонов, bottle для получения переменых среды, вместо ORM будет использоваться pymongo, а сессиями будет заниматься beaker.
В первой части хочу рассказать как удобно подсоединить Jinja2 чтоб шаблоны можно было собирать из разных папок (читай плагинов) и кешировать их.
Также в следующей части хотелось бы рассказать как подключить к шаблонам gettext и автоматизировать их перевод.

Читать дальше →

Экстремальное программирование, знакомство с Behavior Driven Development и RSpec

Время на прочтение4 мин
Охват и читатели41K

Теория


Для начала, давайте разберемся, что же такое Behavior Driven Development(в дальнейшем BDD) и чем данная техника отличается от Test-Driven Development(в дальнейшем TDD)

Разрабо́тка че́рез тести́рование (англ. test-driven development) — техника программирования, при которой модульные тесты для программы или её фрагмента пишутся до самой программы (англ. test-first development) и, по существу, управляют её разработкой. Является одной из основных практик экстремального программирования.
Читать дальше →

Flask-Admin

Время на прочтение4 мин
Охват и читатели67K
Доброе время суток.

Хочу представить проект, над которым работал в последнее время: Flask-Admin. Если в двух словах, это расширение для фреймворка Flask, которое позволяет быстро создавать административный интерфейс в стиле Django.
Читать дальше →

Опыт работы с американскими платежными системами

Время на прочтение5 мин
Охват и читатели39K
Всем привет! Я работаю над e-commerce стартапом в штатах и за последнее время удалось поработать с рядом сервисов электронных платежей, а именно Stripe, Braintree и Paypal. Сегодня хочу немного рассказать о том, какие особенности электронных платежей есть в Штатах, о практическом опыте использования вышеназванных сервисов и так же ряд общих мыслей на эту тему.
Читать дальше →

Все данные на одном экране: Опыт интеграции мессенджера Kato с IFTTT, Hubot и Stripe

Время на прочтение5 мин
Охват и читатели9K
Каждая компания постоянно сталкивается с огромным количеством входящей информации, на которую необходимо реагировать: твиты пользователей, новые правила в индустрии, почтовые сообщения в техподдержку, автоматические оповещения от серверов, данные о проблемах в работе от подрядчиков, уведомления от платежных сервисов, и так далее.

image

Всю эту информацию желательно объединять в одной точке, и эта роль традиционно отводилась электронной почте, которая не всегда является наилучшим решением.
Читать дальше →

Что такого особенного в Nim?

Время на прочтение7 мин
Охват и читатели85K


Язык программирования Nim (ранее именовался Nimrod) — захватывающий! В то время как официальная документация с примерами плавно знакомит с языком, я хочу быстро показать вам что можно сделать с Nim, что было бы труднее или невозможно сделать на других языках.

Я открыл для себя Nim, когда искал правильный инструмент для написания игры, HoorRace, преемник моей текущей DDNet игры/мода Teeworlds.

(прим. пер. На синтаксис Nim имели влияние Modula 3, Delphi, Ada, C++, Python, Lisp, Oberon.)

Запускаем!


Да, эта часть всё ещё не захватывает, но просто следите за продолжением поста:

for i in 0..10:
  echo "Hello World"[0..i]

Читать дальше →

Новый PyCharm 4.5 собрал вместе все инструменты для работы с Python

Время на прочтение2 мин
Охват и читатели43K
Всем привет! Мы выпустили новый PyCharm 4.5, который уже доступен для скачивания.



С момента предыдущего релиза PyCharm 4.0 прошло ровно полгода. За это время PyCharm получил ряд новых полезных инструментов для Python, Django и веб-разработки, которые, как всегда, тесно интегрированы и эффективно работают друг с другом. Сегодня мы рады рассказать, что же интересного и важного появилось в новой версии PyCharm.
Читать дальше →

Оптическая компенсация

Время на прочтение3 мин
Охват и читатели80K


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

Такой подход казался мне логичным, но он оказался неверным.

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

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

Давайте взглянем на небольшое количество показательных примеров.
Читать дальше →

50+ лучших дополнений к Bootstrap

Время на прочтение5 мин
Охват и читатели203K


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

Для статьи я подобрал наиболее полезные дополнения «на все случаи жизни».
Читать дальше →

Введение в функциональное программирование на Python

Время на прочтение10 мин
Охват и читатели156K
Рассуждая о функциональном программировании, люди часто начинают выдавать кучу «функциональных» характеристик. Неизменяемые данные, функции первого класса и оптимизация хвостовой рекурсии. Это свойства языка, помогающие писать функциональные программы. Они упоминают мапирование, каррирование и использование функций высшего порядка. Это приёмы программирования, использующиеся для написания функционального кода. Они упоминают распараллеливание, ленивые вычисления и детерменизм. Это преимущества функциональных программ.

Забейте. Функциональный код отличается одним свойством: отсутствием побочных эффектов. Он не полагается на данные вне текущей функции, и не меняет данные, находящиеся вне функции. Все остальные «свойства» можно вывести из этого.

Нефункциональная функция:

a = 0
def increment1():
    global a
    a += 1


Функциональная функция:

def increment2(a):
    return a + 1


Вместо проходов по списку используйте map и reduce
Читать дальше →

Искусственный интеллект в Wolfram Language: проект по идентификации изображений

Время на прочтение13 мин
Охват и читатели26K
Перевод поста Стивена Вольфрама (Stephen Wolfram) "Wolfram Language Artificial Intelligence: The Image Identification Project".
Выражаю огромную благодарность Кириллу Гузенко за помощь в переводе.


«Что изображено на этой картинке?» Люди практически сразу могут ответить на этот вопрос, и раньше казалось, что это непосильная задача для компьютеров. Последние 40 лет я знал, что компьютеры научатся решать подобные задачи, но не знал, когда это произойдёт.

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

И сейчас я весьма рад сообщить о том, что мы перешли новый рубеж: вышла новая функция Wolfram Language — ImageIdentify, которую можно спросить — «что изображено на картинке?» и получить ответ.

Сегодня мы запускаем Wolfram Language Image Identification Project — проект по идентификации изображений, который работает через интернет. Можно отправить туда изображение с камеры телефона, с браузера, или перетащить его посредством drag&drop в соответствующую форму, или просто загрузить файл. После этого ImageIdentify выдаст свой результат:

Give the Wolfram Language Image Identify Project a picture, and it uses the language's ImageIdentify function to identify it

Содержание


Теперь в Wolfram Language
Личная предыстория
Машинное обучение
Все это связано с аттракторами
Автоматически созданные программы
Почему сейчас?
Вижу только шляпу
Мы потеряли муравьедов!
Назад к природе
Читать дальше →

Ночные кошмары Питона: неявный `this`

Время на прочтение3 мин
Охват и читатели28K
Обсуждение статьи "Не совсем крутой Ruby" зашло достаточно далеко: недостатки и достоинства Ruby между делом перетекали в обсуждение недостатков и достоинств Python. Не сильно удивило то, что передача self в качестве первого аргумента метода класса, некоторым хабравчанам кажется лишней. Ну что ж, не хотите явного self, будет вам неявный this! Под катом, немного магии на чистом Python.
Читать дальше →

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность