SDev.Pro - разработка на заказ

http://sdev.pro - это:

1) Разработка программного обеспечения

Мы используем платформы ASP.NET MVC, LAMP, Atmel, Android, iOS, DirectShow и базы данных MS SQL, Oracle, PostgreSQL, а также облака на MS Azure и Amazon AWS для реализации любых Ваших идей.

2)Внедрение программного обеспечения

Мы предлагаем настройку и доработку решений на базе систем электронного документооборота MS SharePoint Server, геоинформационных систем на GeoServer, систем отчетности на MS SQL Reporting Services, а также облачных решений на MS Office 365.

http://sdev.pro

Sep 9, 2009

OpenCV: IP-камера AXIS

Для того, чтобы использовать OpenCV под .NET, подключаю обертку EMGU CV. Эта обертка пока лучшая из тех, что я встречал, но не без глюков.

Контекст IP-камеры создается следующим образом. Создается потомок Capture:

private class IpCapture: Capture
{
[DllImport("opencv_ffmpeg111.dll", CharSet = CharSet.Ansi)]
private static extern IntPtr cvCreateFileCapture_FFMPEG([MarshalAs(UnmanagedType.LPStr)] string filename);

[DllImport("opencv_ffmpeg111.dll", CharSet = CharSet.Ansi)]
private static extern void cvReleaseCapture_FFMPEG(IntPtr capture);

public IpCapture(string fileName)
{
_ptr = cvCreateFileCapture_FFMPEG(fileName);
if (_ptr == IntPtr.Zero)
{
throw new NullReferenceException("Error: Unable to create capture from camera");
}
}

protected override void DisposeObject()
{
base.DisposeObject();
cvReleaseCapture_FFMPEG(_ptr);
}
}




Затем создается объект, используя url-камеры:




private static Capture _cameraCapture;
...
_cameraCapture = new IpCapture("http://webcam.oii.ox.ac.uk/mjpg/video.mjpg");


Ну а дальше работаем как с обычной USB-камерой или видеофайлом.

OpenCV: Введение

Презентация о возможностях OpenCV

Sep 3, 2009

Наука: интерполяция сплайнами

Выкладываю пример (Delphi) интерполяции сплайнами. Основан на примерах из книги Мудров А.Е. “Численные методы для ПЭВМ на языках Бейсик, Фортран и Паскаль (Томск, 1991)”

// Пример интерполяции сплайнами
// Игорь Подсекин (wonderu@gmail.com)
// Лицензия LGPL
//
// http://dotnet.wonderu.com
// http://directshow.wonderu.com

program spline;

{$APPTYPE CONSOLE}

type
vec = array[0..100] of Real;

var
i, k, n: Integer;
x1, x0, x9, h, p, p1,p2:Real;
x, f, c: vec;

//Формирование таблицы
procedure Tab(n: Integer; var x, f:vec);
var
i: Integer;
begin
for i := 0 to n do
begin
Write('X', i:2, ',F',i:2,'?');
Readln(x[i], f[i]);
end;
end;

//Расчет коэффициентов сплайна
procedure CalcCoeff(n: Integer; x, f: vec; var c:vec);
var
i, j, m: Integer; a, b, r: Real; k: vec;
begin
k[1] := 0.0; c[1] := 0.0;
for i := 2 to n do
begin
j := i - 1; m := j - 1;
a := x[i] - x[j]; b := x[j] - x[m];
r := 2 * (a + b) - b * c[j];
c[i] := a / r;
k[i] := (3.0 * ((f[i] - f[j]) / a -
(f[j] - f[m]) / b) - b * k[j]) / r;
end;
c[n] := k[n];
for i := n - 1 downto 2 do
c[i] := k[i] - c[i] * c[i + 1];
end;

//Вычисление значения и производной
procedure CalcSpline(n: Integer; x, f, c:vec;
var p, p1, p2: Real; x1: Real);
var
i, j: Integer; a, b, d, q, r: Real;
begin
i := 1;
while (x1 > x[i]) and (i <> n) do
begin
i := i + 1; j := i - 1;
a := f[j]; b := x[j];
q := x[i] - b; r := x1 - b;
p := c[i]; d := c[i + 1];
b := (f[i] - a) / q - (d + 2 * p) * q / 3.0;
d := (d - p) / q * r;
p1 := b + r * (2 * p + d);
p2 := 2 * (p + d);
p := a + r * (b + r * (p + d / 3.0));
end;
end;

begin
Write('n, x0, x9, h?');
Readln(n, x0, x9, h);
Tab(n, x, f);
CalcCoeff(n, x, f, c);
k := Round((x9 - x0) / h + 1.0);
x1 := x0;
for i := 0 to k do
begin
CalcSpline(n, x, f, c, p, p1, p2, x1);
Writeln(x1:5:5, ' ', p:5:5, ' ', p1:5:5, ' ', p2:5:5);
x1 := x1 + h;
end;
readln;
end.



Expression Encoder 3.0 SDK: Вещание в сеть

В продолжение темы: http://dotnet.wonderu.com/2009/07/expression-encoder-30-sdk.html

Пример вещания в сеть видео-аудио потока, используя Microsoft Expression Encoder 3.0 SDK.

#region Copyright
//
// Пример вещания видео-аудио потока, используя Microsoft Expression Encoder 3.0
// Игорь Подсекин (wonderu@gmail.com)
// Лицензия LGPL
// http://dotnet.wonderu.com
// http://directshow.wonderu.com
//
#endregion

using System;
using Microsoft.Expression.Encoder.Live;

namespace Com.Wonderu.Samples.Expression.Encoder
{
/// <summary>
/// Класс вещателя
/// </summary>
public class Broadcaster: IDisposable
{
private LiveJob _job;

/// <summary>
/// Конструктор
/// </summary>
public Broadcaster()
{
_job = new LiveJob();
}

/// <summary>
/// Освобождение.
/// </summary>
public void Dispose()
{
if (_job != null)
_job.Dispose();
}

/// <summary>
/// Старт
/// </summary>
public void Start()
{
if (_job == null)
throw new NullReferenceException("Live Job не существует");

//Выбор устройств
LiveDevice videoDevice = _job.VideoDevices.Count > 0 ? _job.VideoDevices[0] : null ;
LiveDevice audioDevice = _job.AudioDevices.Count > 0 ? _job.AudioDevices[0] : null;

LiveDeviceSource liveSource = _job.AddDeviceSource(videoDevice, audioDevice);

// Активация
_job.ActivateSource(liveSource);

// Создание формата вещания
WindowsMediaBroadcastOutputFormat outputFormat =
new WindowsMediaBroadcastOutputFormat
{
//Порт
BroadcastPort = 8080,

//Максимальное число подключений
MaximumNumberOfConnections = 10
};

// Установка выходного формата
_job.OutputFormat = outputFormat;

// Начало вещания
_job.StartEncoding();
}

/// <summary>
/// Стоп
/// </summary>
public void Stop()
{
if (_job == null)
throw new NullReferenceException("Live Job не существует");

_job.StopEncoding();
}
}
}



}




Ссылка на видео-аудио поток будет следующего вида mms://<server name>:8080.

PKI: Курс "Инфраструктуры открытых ключей"

Нашел бесплатный учебный курс "Инфраструктуры открытых ключей" на сайте INTUIT.RU. Просмотрел по диагонали, ляпов не заметил, поэтому советую.