Installation Visual Studio IDE

 

 

Als IDE wird die gratis Express Edition verwendet.

Download:http://www.microsoft.com/germany/express/

Auswahl der Express Version: C# 2010

Abb. Auswahl der Editionen

Der "Webinstaller" wird lokal gespeichert und gestartet. Die benötigten Dateien werden aus dem Netz nachgeladen.

 

Starten der Installation als Administrator.

 

Die Installation läuft wie gewohnt ab: "Weiter, Weiter, Weiter..."

 

 

Als optionale Produkte werden MS Silverlight und der SQL Server in der Express Edition zusätzlich gewählt:

 

 

 

Der Standard-Installationsordner in Windows 7/64 ist:



Die einzelnen Komponenten werden installiert, dies kann einige Zeit in Anspruch nehmen.

 

 

Die fertige Installation: Es empfiehlt sich nach Updates zu suchen, um etwaige "Bugs" der IDE zu beheben, sonst fällt eine Fehlersuche im Quellcode eventuell unnötig schwer:
 
 
 

Die Applikation wird über "Microsoft Visual C# 2010 Express" gestartet:

 

 

Übersicht der "Fenster". Diese können durch Strg+W und betätigen des jeweils angegebenen Folgebuchstabens schnell gewechselt werden. Dh die Shortcuts besteht hier nicht wie in vielen anderen Programmen aus dem gedrückt halten einer Sondertaste und der Betätigung des Shortcut-Buchstabens – es muss hier nach Eingabe des Shortcuts (Strg-W) ein weiterer Buchstabe auf der Tastatur eingegeben werden (zB X für "Explore" oder P für "Properties", E für "Errors" etc).

 

 

NB. Der Projektmappen-Explorer ist essenziell. Er behält die Übersicht aller verwendeten Ressourcen (wie Bibliotheken,..) und natürlich den Source-Code (.CS, .XAML) und etwaige Klassendefinitionen selbst.

 

Zum Test der Visual Studio Installation wird ein kleines Consolen-Projekt angelegt, um daraus ein "Kompilat" zu erstellen und dieses am Rechner zu auszuführen:

 

Das Grundgerüst für die Applikation wird automatisch erzeugt (static void Main...). Hier wird nun die bereits vordefinierte "Klasse" Console eingesetzt, um eine Ausgabe in einer "Dos Box" ("CLI" - command line interface) zu erzeugen (Write, WriteLine, Beep Funktionalitäten der Klasse Console).

 

"DOS-BOX"

 

Als Test wird folgende österreichisch, schweizerisch "beepende" Anwendung konstruiert:

Hier wird auch die farbliche Hervorhebung des Codes sofort ersichtlich.

 

using System;

namespace ConsoleApplication1

{

class Program

{

static void Main(string[] args)

{     Console.Write("International BEEPs");

Console.Beep(440, 1000); // 440 Hz, Dos-Box Music "Kammerton"

Console.Beep(442, 1000); // 442 Hz, Dos-Box Music "Kammerton" Schweiz

Console.Beep(443, 1000); // 443 Hz, Dos-Box Music "Kammerton" Österreich

Console.Beep(880, 500);

Console.Beep(220, 500);

Console.Beep(880, 300);

Console.Beep(880, 200);

Console.Beep(220, 500);

 

}

                    }

}

(Der Code kann per Copy&Paste übernommen werden.)

Die Applikation wird per shortcut: Strg-F5 gestartet.


Anmerkung: Piepst der PC beim System-Start (Beep after POST), sind die Chancen gut, dass Sie die Kammertöne, die das Programm auch  ausgibt zu hören. Ansonsten sollten sie zumindest die Zeile "International BEEPs" im "schwarzen Fenster" sehen.

Auch Notepad++ besitzt für viele Programmiersprachen eine solche farbliche Syntax-Hervorhebung, ist jedochnatürlich ein Editor mit viel Funktionalität, aber keine Entwicklungsumgebung (IDE).

 

 

 

 

 

 

 

 

MS Kinect (NUI - natural user interface)

 

3 Augen, 4 Ohren und leuchtet auch noch "unsichtbar"  - nein keine neue Zyklop-Erfindung von Uranos, sondern ein "NUI" (natural user interface - Tiefeninformation, Farbkamera, 4 Mikrophone) von Microsoft in einer erschwinglichen Preisklasse.

 

MS Kinect Hardware


Tilt-Motor: Dieser sollte nach der Aufstellung möglichst wenig eingesetzt werden, da er nicht für einen Dauerbetrieb ausgelegt ist. Ein Ventilator kühlt die Kinect und schalten bei zu hohen Temperaturen automatisch ab. Das Interface wird in Windows als "multicomponent USB device" erkannt.

Die "Skelett"-Erkennung sollte bei folgenden Abständen: 0.8/1.2 min – 3.5/4 max. zu guten Erkennungsraten führen (Optimal-Abständ). Der Sensor sollte nicht in direktem Sonnenlicht plaziert werden. Der Temperaturbereich ist (5°C-35°C) und der Kamera-Blickwinkel 43° vertikal, 57° horizontal (FoV). Tilt: -/-27 Grad. 30 Frames per Second (fps; kein Videostrom sondern "Einzelbilder" werden gesendet)

depth stream – 320 × 240 px
color stream – 640 x 480px

Audio: 16-kHz, 16-bit mono pulse code modulation (PCM) - per 4-microphone array, automatic echo cancellation (AEC).

 

 

Nach der Installation (Gerätemanager; device manager)

 

 

 

"Voraussetzung"/Installation

Windows 7 (x86 and x64)

Am besten sollten folgende Komponenten/SDKs installiert werden:

 

- MS Kinect SDK installieren

 

http://research.microsoft.com/en-us/um/redmond/projects/kinectsdk/download.aspx

 

 und


- DirectX SDK (bei einigen Programmbeispielen erforderlich)

- .NET Framework 4 -

Download http://www.microsoft.com/download/en/details.aspx?id=17718

 

 

Nach der Installation wird die Kamera angeschlossen:

 

 

 

Test "Skeletal Viewer"-Beispielanwendung (Tiefenbild, Skelett (hier "clipped above | beyond"))

 

 

 

 

Weitere Installationen (derzeit: in der 32 Bit Version installieren):

Microsoft Speech Platform Runtime, version 10.2 (x86 edition)

Microsoft Speech Platform - Software Development Kit, version 10.2 (x86 edition)

Kinect for Windows Runtime Language Pack, version 0.9


Download und Installation Coding4Fun Kinect Toolkit (wird später in Visual C eingebunden)

Download: http://c4fkinect.codeplex.com/

 

 

 

 

 

MS Kinect Demoanwendung (Skelett)

 

 

MSRKINECTSDK muss gesetzt sein (environment varaibles):



Anmerkung: Das SDK muss derzeit auf jedem Rechenr installiert werden, auf dem die fertige Software letztendlich benutzt werden soll.

 

Ein neues Projekt "WPF-Application" wird angelegt.

 

 

 

und eine Referenz hinzugefügt:

 

Referenzen: http://msdn.microsoft.com/en-us/library/7314433t%28v=VS.90%29.aspx

 

(Solution Explorer > References)

 

 

 

Im Quellcode ist somit einzufügen:

using Microsoft.Research.Kinect.Nui;
using Microsoft.Research.Kinect.Audio;

 

 

 

Coding4Fun Kinect Toolkit

Zur einfacheren Verwendung des MS Kinect SDKs:

 

 

 

Auch im Quellcode wird die Ressource angegeben:

using Microsoft.Research.Kinect.Audio;

using Microsoft.Research.Kinect.Nui;

using Coding4Fun.Kinect.Wpf;


 

Ein Testprogramm, das die Kamera nur initialisiert, kann wie folgt aussehen:

 

namespace Kinect_O1

{

public partial class MainWindow : Window

{

public MainWindow()

{

InitializeComponent();

}


Runtime nui = new Runtime();

private void Window_Loaded(object sender, RoutedEventArgs e)

{

nui.Initialize(RuntimeOptions.UseColor | RuntimeOptions.UseDepth);

}


private void Window_Closed(object sender, RoutedEventArgs e)

{

nui.Uninitialize();

}

}

}

 

 

 

"Skeletal Tracking"

Jeder Punkt (Kopf, linke Hand, rechte Hand etc.) wird über die Koordinaten X,Y,Z bestimmt:

X...horizontale Position [-1;1]
Y... vertikale Position [-1;1]
Z... Distanzinformation in Metern

Diese werden im Folgenden für die Kopfposition ausgewertet:

 

Im XAML Code des Projekt wird ein Bild eingebunden:

 

<Image 

Source="C:\PFAD\Kuhkopf_Berg.jpg"

Name="mykuhkopf" Height="241" Width="318" HorizontalAlignment="Left" Margin="0,0,0,0" Stretch="Fill" VerticalAlignment="Top"

/>

 

und mit Hilfe der gesendeten Kinect-Daten positioniert:


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Windows;

using System.Windows.Controls;

using System.Windows.Data;

using System.Windows.Documents;

using System.Windows.Input;

using System.Windows.Media;

using System.Windows.Media.Imaging;

using System.Windows.Navigation;

using System.Windows.Shapes;

using Microsoft.Research.Kinect.Nui;

using Microsoft.Research.Kinect.Audio;

using Coding4Fun.Kinect.Wpf;


namespace Demo

{

public partial class MainWindow : Window

{

public MainWindow()

{

InitializeComponent();

}

Runtime nui = new Runtime();


private void Window_Loaded(object sender, RoutedEventArgs e)

{

nui.SkeletonFrameReady += new EventHandler<SkeletonFrameReadyEventArgs>(nui_SkeletonFrameReady);

nui.Initialize(RuntimeOptions.UseSkeletalTracking);

}


void nui_SkeletonFrameReady(object sender, SkeletonFrameReadyEventArgs e)

{ // sobald ein "Skelett" im Status "tracked" ist, also über die Kamera als
// solches erkannt wurde, wird die

// Funktion SkeletonFrameRady aufgerufen

SkeletonFrame allSkeletons = e.SkeletonFrame;

// Abruf der Daten

SkeletonData skeleton = (from s in allSkeletons.Skeletons

where s.TrackingState == SkeletonTrackingState.Tracked

select s).FirstOrDefault();


// HEAD

 

Winkel = Math.Atan2((skeleton.Joints[JointID.ShoulderCenter].Position.X - skeleton.Joints[JointID.Head].Position.X),

(skeleton.Joints[JointID.ShoulderCenter].Position.Y - skeleton.Joints[JointID.Head].Position.Y));

Winkel = -(Winkel * 180 / Math.PI);

mykuhkopf.RenderTransform = new RotateTransform(Winkel+180, 0, 0);


// Ausgabe/Positionierung

 

SetImagePosition(mykuhkopf, skeleton.Joints[JointID.Head]);

 

}


private void SetImagePosition(FrameworkElement myimage, Joint joint)

{

var scaledJoint = joint.ScaleTo(800, 600, .5f, .5f);


Canvas.SetLeft(myimage, scaledJoint.Position.X);

Canvas.SetTop(myimage, scaledJoint.Position.Y);

}


private void Window_Closed(object sender, EventArgs e)

{

nui.Uninitialize();

}

}

}


 


 

 

 

 

 

 

 

 

Demo (mit Solanum mammosum AKA Apple of Sodom )

 

Hier wird zusätzlich ein zweites Bild in Hüftnähe gesetzt.

 ('Der Trick mit dem Hüftknick', Joesi Prokopetz)

 

SetImagePosition(HuefteMitte, skeleton.Joints[JointID.HipCenter]);

 

 

Flash Demo:

www.dma.ufg.ac.at/assets/24114/head_tracking_by_S.swf