//Технологический блог на русском языке, освещающий технологии NN-VIDEOLAB.net и связанные с ними вопросы.
пятница, 11 августа 2017 г.
Типы лицензий OpenSource
Открытый код означает именно то, что написано, – исходный код таких программ доступен для ознакомления и модификации, а лицензии описывают, что можно делать с этим кодом, а чего делать нельзя. Данные ограничения затрагивают в основном коммерческих разработчиков программных продуктов и электронного оборудования.
GPL
GNU GPL (GNU General Public License) — одна из наиболее распространенных open source-лицензий. Под этой лицензией распространяются ядро Linux, MySQL, Asterisk и многие другие. Большинство CMS систем, таких как MovableType, MODx, WordPress, Joomla, Drupal, osCommerce и множество других выпускаются под GPL. По разным данным, в мире до 70% open source-ПО выпускается под GPL.
Основная цель GPL - защитить открытость свободного ПО. Он призван защитить разработчиков от того, что их наработки будут использованы создателями закрытого ПО в своих продуктах. Основное условие GPL: продукт, использующий код, защищенный этой лицензией, должен распространяться также под GPL и его исходный код должен быть доступен получателю такого продукта, который может делать с этим кодом все что угодно в рамках GPL.
Таким образом, если вы создаете проект на основе кода, защищенного GPL, вы обязаны распространять свой продукт под GPL. Распространение в данном случае не означает только лишь дистрибуцию конечного продукта. Под этот термин подпадает также и передача продукта заказчику исходных кодов ПО. Единственная ситуация, в которой требования GPL не являются обязательными, — отсутствие факта распространения как такового. То есть вы используете модифицированный код исключительно в личных целях или в целях компании, в которой работаете.
LGPL
GNU LGPL (GNU Lesser General Public License) отличается от GPL тем, что позволяет использовать продукты LGPL в проектах, распространяемых под другими лицензиями. То есть условия, сходные с GPL, распространяются только на ту часть производного продукта, которая заимствована из продукта, защищенного LGPL.
Изначально создатели GPL и LGPL – Free Software Foundation – предполагали использование GPL в готовых продуктах, а LGPL — в библиотеках для разработчиков, но на данный момент такое разделение не соответствует действительности. Наиболее известный продукт, выпускаемый под LGPL, – OpenOffice.org.
BSD
BSD (Berkeley Software Distribution) представляет противоположный фланг лицензирования open source-продуктов. Это очень либеральная и очень короткая лицензия. От разработчиков, использующих ПО, распространяемое под лицензией BSD, требуется лишь указывать в документации, что в продукте используются разработки создателей оригинального программного обеспечения и запрещается использовать имена (или названия) создателей этого ПО в рекламных целях без их письменного согласия. Также необходимо включать стандартный текст об ограничении ответственности разработчиков за последствия использования данного ПО.
Таким образом разработки, распространяемые под BSD, можно смело использовать в своих не open source-проектах при соблюдении этих несложных условий. Самой известной компанией, использующей преимущества лицензии BSD является компания Apple.
MIT
MIT (Massachusetts Institute of Technology), является так же «разрешающей» лицензией. То есть ПО, лицензируемое под MIT, можно использовать в закрытых продуктах. Единственным существенным отличием от BSD является отсутствие пункта, запрещающего использовать название продукта и имена создателей в рекламных целях.
X Window System (X11), Ruby on Rails — наиболее известные проекты, распространяемые под MIT.
GNU GPL (GNU General Public License) — одна из наиболее распространенных open source-лицензий. Под этой лицензией распространяются ядро Linux, MySQL, Asterisk и многие другие. Большинство CMS систем, таких как MovableType, MODx, WordPress, Joomla, Drupal, osCommerce и множество других выпускаются под GPL. По разным данным, в мире до 70% open source-ПО выпускается под GPL.Основная цель GPL - защитить открытость свободного ПО. Он призван защитить разработчиков от того, что их наработки будут использованы создателями закрытого ПО в своих продуктах. Основное условие GPL: продукт, использующий код, защищенный этой лицензией, должен распространяться также под GPL и его исходный код должен быть доступен получателю такого продукта, который может делать с этим кодом все что угодно в рамках GPL.
Таким образом, если вы создаете проект на основе кода, защищенного GPL, вы обязаны распространять свой продукт под GPL. Распространение в данном случае не означает только лишь дистрибуцию конечного продукта. Под этот термин подпадает также и передача продукта заказчику исходных кодов ПО. Единственная ситуация, в которой требования GPL не являются обязательными, — отсутствие факта распространения как такового. То есть вы используете модифицированный код исключительно в личных целях или в целях компании, в которой работаете.
LGPL
GNU LGPL (GNU Lesser General Public License) отличается от GPL тем, что позволяет использовать продукты LGPL в проектах, распространяемых под другими лицензиями. То есть условия, сходные с GPL, распространяются только на ту часть производного продукта, которая заимствована из продукта, защищенного LGPL.Изначально создатели GPL и LGPL – Free Software Foundation – предполагали использование GPL в готовых продуктах, а LGPL — в библиотеках для разработчиков, но на данный момент такое разделение не соответствует действительности. Наиболее известный продукт, выпускаемый под LGPL, – OpenOffice.org.
BSD
Таким образом разработки, распространяемые под BSD, можно смело использовать в своих не open source-проектах при соблюдении этих несложных условий. Самой известной компанией, использующей преимущества лицензии BSD является компания Apple.
MIT
MIT (Massachusetts Institute of Technology), является так же «разрешающей» лицензией. То есть ПО, лицензируемое под MIT, можно использовать в закрытых продуктах. Единственным существенным отличием от BSD является отсутствие пункта, запрещающего использовать название продукта и имена создателей в рекламных целях.X Window System (X11), Ruby on Rails — наиболее известные проекты, распространяемые под MIT.
Tokyo
Embracadero RAD Studio 10.2
Борланд наконец-то сделал бесплатную сборку C++ Builder. Правда она имеет существенные ограничения, тем не менее позволяет собирать и распространять компоненты и приложения абсолютно легально.
Борланд наконец-то сделал бесплатную сборку C++ Builder. Правда она имеет существенные ограничения, тем не менее позволяет собирать и распространять компоненты и приложения абсолютно легально.
Семантический анализ изображений.
Семантика — раздел языкознания, изучающий значение единиц языка. В качестве инструмента изучения применяют семантический анализ.
В приложении к изображениям будем считать, что его семантический анализ заключается в обозначении некоторых областей или всего изображения единицами естественного языка. В нашем случае словами существительными и словами прилагательными.
Проблемы семантического анализа.
В приложении к изображениям будем считать, что его семантический анализ заключается в обозначении некоторых областей или всего изображения единицами естественного языка. В нашем случае словами существительными и словами прилагательными.
Проблемы семантического анализа.
- Объект (понятие) состоит из более мелких понятий – структура объекта. Например, структура лица человека состоит из собственно характерного овала, глаз, носа, рта, бровей, возможно ушей. Само лицо является частью головы. Причем нос нельзя свести к атрибутам – нос есть всегда и слово носатый относится к свойствам самого носа! Это означает, необходима концепция полного описания объекта. Наличие минимальной структурной единицы. Локализация понятия на изображении не исчерпывает задачу.
- Кроме того, объект находится в какой то среде. Является ли эта среда с нашей точки зрения объектом? Описание сцены – вот что тоже нужно обсудить. Нужно найти модельную ситуацию, в которой сцена может быть описана с применением наших технологий достаточно хорошо. Описание сцены не сводится просто к описанию объектов. Это уже более широкая задача. Это и связи между объектами, количество однотипных объектов, информация об относительных размерах объектов и т.п. Может быть, выделять планы, имеется в виду передний план, задний план, объекты задающие характерные размеры, например монета, на фотографии с электронными устройствами. Соответственно таблица описания изображений должна учитывать такие характеристики.
- Важно описывать связь между объектами. Пространственная связь (самая простая), определяемая координатами объектов, должна правильно выражаться на естественном языке. Более сложное описание связей это соотношений частей самого объекта - поз объекта. Например, если объект человек, то положение рук, ног, стоит, сидит или лежит. Если лицо, то в фас или профиль (левый или правый), куда или на кого смотрит и т.п.
- Должно отражаться количество однотипных объектов, их взаимное расположение.
- Далее мало внимания уделяется вопросу описания низкоуровневых характеристик изображения - наличие локальных точек, распределение цветов, и т.п. Я бы сказал, что получение низкоуровневых характеристик это необходимый этап предобработки изображения для его дальнейшего анализа. Нужно ли это делать? Поможет ли находить изображения? Насколько важно хорошо делать сегментацию изображения? Поможет ли сегментация в описании сцен, в ускорении поиска объектов.
- Большое количество детекторов приводит к проблеме, связанной со скоростью анализа изображения. Нужны какие-то идеи, алгоритмы по эвристическому, ассоциативному ограничению детекторов при каждом следующем шаге при анализе изображения. То есть нужно понять как ввести систему знаний о мире в программное решение.
Обработка изображений и их анализ.
Обработка изображений:
Основные операции обработки изображения, которые выполняет awpipl2
- Конвертация изображений
- Нормировка изображений
- Фильтрация изображений
- Геометрические преобразования
- Отрисовка геометрических примитивов на изображениях.
Анализ изображений:
Пусть имеется изображение S(x, y) и имеется процесс D[A(x,y)] преобразования этого изображения в другие данные (не изображение), в числа или списки, массивы или структуры данных, которые описывают свойства и характеристики S(x, y), то этот процесс будем называть "процессом анализа изображения".
Основные операции анализа изображений, которые выполняет awpipl2
- Вычисление статистических характеристик изображения S(x,y)
- Нахождение геометрических кластеров на изображении и вычисление их характеристик.
- Нахождение объектов заданного типа на изображении.
- Вычисление признаков изображения.
среда, 17 октября 2012 г.
Как правильно сбросить видео на компьютер с MiniDV камеры.
Если вы имеете камеру пишущую на: карту памяти, жесткий диск, DVD или Blu-Ray диск, то проблем со сбросом видео у вас не возникнет. Но как же качественно сбросить видео если у вас цифровая камера пишущая на MiniDV кассеты? Именно из-за этого вопроса многие отказываются от широких возможностей MiniDV камер. Многие люди этого не знают и это вовсе не стыдно, есть пара моих знакомых, которые, как я уже писал смотрят свое видео только непосредственно с камеры на телевизоре, они просто не знали как его сбросить. Итак, давайте разбираться.
среда, 3 октября 2012 г.
Нормировка изображений в OpenCV и awpipl2
OpenCV
Норма изображения ||Image|| OpenCV вычисляется с использованием функции cvNorm().
Прототип функции:
double cvNorm(const CvArr* arr1, const CvArr* arr2, int normType = CV_L2, const CvArr* mask)
arr1 - первое исходное изображение.
arr2 - второе исходное изображение.
normType - тип вычисляемой нормы.
mask - маска, по которой вычисляется норма изображений.
Если arr2 или arr2 = NULL, то вычисляется абсолютная норма первого или второго и изображения, в противном случае вычисляется абсолютная норма разности изображения, либо относительная норма разности изображений.
Типы вычисляемых норм.
normType может принимать следующие значения:
В случае, если одно из изображений NULL
CV_C normC = ||arr|| = max(|arr(i)|)
CV_L1 normL1 = ||arr|| = Sum(|arr(i)|)
CV_L2 normL2 = ||arr|| = Sqrt(Sum(arr(i)*arr(i)))
В случае, если оба изображения не равны NULL
CV_C normC = ||arr|| = max(|arr1(i)-arr2(i)|)
CV_L1 normL1 = ||arr|| = Sum(|arr1(i)-arr2(i)|)
CV_L2 normL2 = ||arr|| = Sqrt(Sum((arr1(i) - arr2(i))*(arr1(i) - arr2(i))))
В случае, если normType & CV_RELATIVE != 0
CV_C normC = ||arr|| = max(|arr1(i)-arr2(i)|) / max(|arr2(i)|)
CV_L1 normL1 = ||arr|| = Sum(|arr1(i)-arr2(i)|) / Sum(|arr2(i)|)
CV_L2 normL2 = ||arr|| = Sqrt(Sum((arr1(i) - arr2(i))*(arr1(i) - arr2(i)))/ Sqrt(arr2(i)*arr2(i)))
Функция возвращает вычисленную норму. Много-канальное изображение рассматривается как одно-канальное и возвращается норма комбинации каналов.
awpipl2
Нормировка изображений в awpipl2 выполняется с помощью функции awpNormImage. Вычисление нормы изображение выполняется с помощью функции awpGetNorm.
Прототипы функций:
AWPRESULT awpGetNorm(const awpImage* src, const awpImage* mask, awpImage** result, int normType);
Параметры функции:
src - исходное изображение, для которого требуется вычислить норму.
mask - изображение маски, которое может быть использовано для вычисления нормы
result - результирующее изображение, содержащее значения нормы.
normType - типы вычисляемой нормы
Комментарии:
awpGetNorm вычисляет норму изображения src, c учетом маски mask и сохраняет результат в изображение result. Размерности маски mask должны в точности соответствовать размерностям исходного изображения src, число каналов в должно быть равно 1, типа данных должен быть AWP_BYTE. Для вычисления нормы используются только те пиксели маски, значения которых не равны нулю. Если значение переменной mask равно NULL, то вычисляется норма всего изображения src. Формат результирующего изображения result - AWP_DOUBLE, его высота равна 1, ширина соответствует числу каналов изображения src, число каналов равно 1, значения нормы для каждого канала лежат в соответствующих пикселях изображения result. Если изображение result равно NULL, то функция awpGetNorm создает подходящее изображение, в противном случае использует изображение пользователя. Если формат или размерности изображения result, переданные пользователем в функцию awpGetNorm не соответствуют требованиям, описанным выше, то функция возвращает статус AWP_BADARG.
Типы вычисляемой нормы:
Параметр normType может принимать два значения
AWP_NORM_L1, normL1 = ||src|| = Sum(|src(i)|)
AWP_NORM_L2, normL2 = ||src|| = Sqrt(src(i)*src(i))
AWPRESULT awpNormImage(const awpImage* src, awpImage** result, int normType);
Параметры функции:
src - исходное изображение, для которого требуется выполнить нормировку.
result - результирующее нормированное изображение
normType - типы используемой нормировки
Комментарий:
awpNormImage выполняет нормировку normType изображения src и записывает результат в изображение result. Изображение result имеет тип AWP_DOUBLE, его размерности и число каналов соответствуют изображению src. В случае, если изображения result равно NULL, то функция awpNormImage создает подходящее изображение, в противном случае используется изображение пользователя. Если формат или размерности изображения result, переданные пользователем в функцию awpNormImage не соответствуют требованиям, описанным выше, то функция возвращает статус AWP_BADARG.
Типы используемой нормировки:
AWP_NORM_L1, result(i) = src(i) / ||src|| = src(i) / Sum(|src(i)|)
AWP_NORM_L2, result(i) = src(i) / ||src|| = src(i) / Sqrt(Sum(src(i)*src(i)))
В случае, если ||src|| равна 0, то функция awpNormImage возвращает статус AWP_EMPTY_IMAGE
Норма изображения ||Image|| OpenCV вычисляется с использованием функции cvNorm().
Прототип функции:
double cvNorm(const CvArr* arr1, const CvArr* arr2, int normType = CV_L2, const CvArr* mask)
arr1 - первое исходное изображение.
arr2 - второе исходное изображение.
normType - тип вычисляемой нормы.
mask - маска, по которой вычисляется норма изображений.
Если arr2 или arr2 = NULL, то вычисляется абсолютная норма первого или второго и изображения, в противном случае вычисляется абсолютная норма разности изображения, либо относительная норма разности изображений.
Типы вычисляемых норм.
normType может принимать следующие значения:
В случае, если одно из изображений NULL
CV_C normC = ||arr|| = max(|arr(i)|)
CV_L1 normL1 = ||arr|| = Sum(|arr(i)|)
CV_L2 normL2 = ||arr|| = Sqrt(Sum(arr(i)*arr(i)))
В случае, если оба изображения не равны NULL
CV_C normC = ||arr|| = max(|arr1(i)-arr2(i)|)
CV_L1 normL1 = ||arr|| = Sum(|arr1(i)-arr2(i)|)
CV_L2 normL2 = ||arr|| = Sqrt(Sum((arr1(i) - arr2(i))*(arr1(i) - arr2(i))))
В случае, если normType & CV_RELATIVE != 0
CV_C normC = ||arr|| = max(|arr1(i)-arr2(i)|) / max(|arr2(i)|)
CV_L1 normL1 = ||arr|| = Sum(|arr1(i)-arr2(i)|) / Sum(|arr2(i)|)
CV_L2 normL2 = ||arr|| = Sqrt(Sum((arr1(i) - arr2(i))*(arr1(i) - arr2(i)))/ Sqrt(arr2(i)*arr2(i)))
Функция возвращает вычисленную норму. Много-канальное изображение рассматривается как одно-канальное и возвращается норма комбинации каналов.
awpipl2
Нормировка изображений в awpipl2 выполняется с помощью функции awpNormImage. Вычисление нормы изображение выполняется с помощью функции awpGetNorm.
Прототипы функций:
AWPRESULT awpGetNorm(const awpImage* src, const awpImage* mask, awpImage** result, int normType);
Параметры функции:
src - исходное изображение, для которого требуется вычислить норму.
mask - изображение маски, которое может быть использовано для вычисления нормы
result - результирующее изображение, содержащее значения нормы.
normType - типы вычисляемой нормы
Комментарии:
awpGetNorm вычисляет норму изображения src, c учетом маски mask и сохраняет результат в изображение result. Размерности маски mask должны в точности соответствовать размерностям исходного изображения src, число каналов в должно быть равно 1, типа данных должен быть AWP_BYTE. Для вычисления нормы используются только те пиксели маски, значения которых не равны нулю. Если значение переменной mask равно NULL, то вычисляется норма всего изображения src. Формат результирующего изображения result - AWP_DOUBLE, его высота равна 1, ширина соответствует числу каналов изображения src, число каналов равно 1, значения нормы для каждого канала лежат в соответствующих пикселях изображения result. Если изображение result равно NULL, то функция awpGetNorm создает подходящее изображение, в противном случае использует изображение пользователя. Если формат или размерности изображения result, переданные пользователем в функцию awpGetNorm не соответствуют требованиям, описанным выше, то функция возвращает статус AWP_BADARG.
Типы вычисляемой нормы:
Параметр normType может принимать два значения
AWP_NORM_L1, normL1 = ||src|| = Sum(|src(i)|)
AWP_NORM_L2, normL2 = ||src|| = Sqrt(src(i)*src(i))
AWPRESULT awpNormImage(const awpImage* src, awpImage** result, int normType);
Параметры функции:
src - исходное изображение, для которого требуется выполнить нормировку.
result - результирующее нормированное изображение
normType - типы используемой нормировки
Комментарий:
awpNormImage выполняет нормировку normType изображения src и записывает результат в изображение result. Изображение result имеет тип AWP_DOUBLE, его размерности и число каналов соответствуют изображению src. В случае, если изображения result равно NULL, то функция awpNormImage создает подходящее изображение, в противном случае используется изображение пользователя. Если формат или размерности изображения result, переданные пользователем в функцию awpNormImage не соответствуют требованиям, описанным выше, то функция возвращает статус AWP_BADARG.
Типы используемой нормировки:
AWP_NORM_L1, result(i) = src(i) / ||src|| = src(i) / Sum(|src(i)|)
AWP_NORM_L2, result(i) = src(i) / ||src|| = src(i) / Sqrt(Sum(src(i)*src(i)))
В случае, если ||src|| равна 0, то функция awpNormImage возвращает статус AWP_EMPTY_IMAGE
Подписаться на:
Сообщения (Atom)