Archive
HowTo: Get and combine executable path with subfolder and filename
Based on others answers at
here’s an example that shows how to remove the executable name from the path and combine the result with some subfolder and filename:
At my updated version of Hotspotizer (http://github.com/birbilis/Hotspotizer), I’ve just added support for loading a Gesture Collection file at startup, if found at Library\Default.hsjson, by using the following code:
const string GESTURE_COLLECTION_LIBRARY_PATH = "Library"
const string DEFAULT_GESTURE_COLLECTION = "Default.hsjson"
//...
LoadGestureCollection(
Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),
GESTURE_COLLECTION_LIBRARY_PATH,
DEFAULT_GESTURE_COLLECTION));
HowTo: Upgrade Kinect Audio Positioning code from older Beta SDK
Exploring the Kinect SDK v1.8 Developer Toolkit Browser application, I noticed some audio positioning visualizations at various samples (specifically at Audio Basics, Audio Explorer and Kinect Explorer samples), but I kept on looking for some simpler/cleaner sample code to return audio positioning info that would be easier to reuse.
So I can across http://kinectaudioposition.codeplex.com that looked like a good candidate, since it was defining a reusable KinectMicArray class to return the BeamAngle and SoundSourceAngle’s of a KinectAudioSource. There was also some sample code on how to use that KinectMicArray class at http://channel9.msdn.com/coding4fun/kinect/Kinect-Audio-Positioning
However, after downloading it, I realized it was written (hadn’t seen the notice it had on its page) for an older Kinect Beta SDK version. So I decided to port that code to Kinect SDK v1.8 (which is the latest Kinect SDK version to support Kinect for Windows v1.0 and Kinect for Xbox 360 sensors, since the newer Kinect SDK supports KfW v2.0 and Kinect for Xbox One – in fact KfW v2.0 is now “merged” with the Kinect for Xbox One product via the use of an external adapter with the later to connect to a PC).
During that code porting to Kinect SDK v1.8 I noticed the following issues that had to be addressed. At the older Kinect Beta SDK:
- one could instantiate a KinectAudioSource class directly instead of having to get it from a started KinectSensor, plus the object was disposable so one could place it in "using" clause
- one could do audioSource.SystemMode = SystemMode.OptibeamArrayOnly (that property doesn’t seem to be available anymore to set)
- audioSource.BeamAngleChanged was called BeamChanged
- audioSource.SoundSourceAngleChanged probably didn’t exist (have seen older code use a BackgroundWorker and do polling)
- audioSource.SoundSourceAngleConfidence was called SoundSourcePositionConfidence
- audioSource.SoundSourceAngle was called SoundSourcePosition
- audioSource.BeamAngle and audioSource.SoundSourceAngle (then called SoundSourcePosition) were returning radians instead of degrees (so one usually had to convert to degrees using 180.0 * rad / Math.PI)
I took the chance to cleanup and refactor the original code and XAML and since the original codeplex site just had a single download and not any source code in the repository to fork, I uploaded the whole thing ZIPed under their source code / patches area.
Class diagrams for Hotspotizer Kinect-based application source code
Following are class diagrams for Hotspotizer’s C# code, as is currently at 4 Aug 2015 at its refactored version I maintain in my fork at GitHub (http://github.com/birbilis/hotspotizer). The respective diagram (.cd) files for Visual Studio are available in the code repository at the various subfolders:
Hotspotizer (εφαρμογή για Kinect, μετάφραση άρθρου στα ελληνικά)
Το παρακάτω κείμενο είναι μετάφραση στα ελληνικά της σελίδας:
http://designlab.ku.edu.tr/hotspotizer
Σχετική διπλωματική εργασία (του Mehmet Aydın Baytaş):
https://github.com/mbaytas/thesis/releases
Ο πηγαίος κώδικας της εφαρμογής Hotspotizer είναι διαθέσιμος στο:
https://github.com/mbaytas/Hotspotizer
Μια βελτιωμένη έκδοση του πηγαίου κώδικα της εφαρμογής Hotspotizer είναι διαθέσιμη στο:
http://github.com/birbilis/Hotspotizer
Επιβλέποντες: Prof Oğuzhan Özcan, Dr Yücel Yemez
Ανάπτυξη ιδέας: Mehmet Aydın Baytaş, Dr Ayça Ünlüer
Ανάπτυξη λογισμικού: Mehmet Aydın Baytaş
Σχετικό έργο: Προδιαγραφές πάνω σε Εκπαίδευση Σχεδίασης για Διάδραση μέσω Νευμάτων
Οι συσκευές ανέπαφης ανίχνευσης νευμάτων πλήρους σώματος όπως το Microsoft Kinect έχουν εισάγει έναν κόσμο από δυνατότητες στη διάδραση με υπολογιστές. Παρά ταύτα, η τεχνική κατανόηση και οι προγραμματιστικές δεξιότητες που απαιτούνται για να γίνει χρήση αυτών των συσκευών τις έχουν αφήσει αρκετά εκτός πρόσβασης από σχεδιαστές, χομπίστες, παίκτες και επαγγελματίες εκτός του χώρου των υπολογιστών. Για να μειώσουμε το κατώφλι των τεχνικών δεξιοτήτων που απαιτούνται για τη χρήση της σχετικής τεχνολογίας σε προσαρμοσμένες εφαρμογές και για να ενεργοποιήσουμε την ταχεία πρωτοτυποποίηση διαδράσεων βασισμένων σε νεύματα, έχουμε αναπτύξει το Hotspotizer.
Το Hotspotizer επιτρέπει σε χρήστες χωρίς δεξιότητες προγραμματισμού υπολογιστών να σχεδιάσουν, οπτικοποιήσουν, αποθηκεύσουν και ανακαλέσουν σύνολα από προσαρμοσμένα νεύματα πλήρους σώματος. Αυτά τα νεύματα αντιστοιχούνται με εντολές πληκτρολογίου σε όλο το λειτουργικό σύστημα που μπορούν να χρησιμοποιηθούν για τον έλεγχο οποιασδήποτε εφαρμογής που εκτελείται στις τρέχουσες εκδόσεις της πλατφόρμας των Microsoft Windows.
Το Hotspotizer επικεντρώνεται γύρω από ένα καινοτόμο, εύκολο στη χρήση γραφικό περιβάλλον διεπαφής, βασισμένο στη διακριτοποίηση του χώρου, για τον προσδιορισμό ελεύθερης μορφής, πλήρους σώματος νευμάτων (δηλ. τη “διδαχή” νευμάτων στον υπολογιστή) για χρήση με τον αισθητήρα Microsoft Kinect.
Το Hotspotizer έχει σχεδιαστεί κυρίως για τους παρακάτω σκοπούς:
- Ψηφιακές τέχνες και εκπαίδευση σχεδίασης
- Ταχεία πρωτοτυποποίηση διαδραστικών εφαρμογών με νεύματα πλήρους σώματος
- Παιχνίδια
- Προσαρμογή οποιουδήποτε λογισμικού χειριζόμενου μέσω πληκτρολογίου για χειρισμό με νεύματα
Στιγμιότυπα οθόνης
Προαπαιτούμενα
- Συνιστάται Windows 8 ή Windows 8.1 (ή νεότερο), λειτουργεί επίσης στα Windows
- Αισθητήρας Kinect for Windows ή Kinect for XBox 360 (η τρέχουσα έκδοση δεν υποστηρίζει Kinect for Windows v2 ή Kinect for Xbox One)
- Microsoft .NET Framework 4.5*
- Microsoft Kinect for Windows Runtime v1.8**
- Microsoft Kinect for Windows SDK v1.8** (Απαιτείται για αισθητήρες Kinect for XBox 360 μόνο. Δεν απαιτείται αν έχετε την έκδοση Kinect for Windows του αισθητήρα).
*: Το Hotspotizer θα ελέγξει και υποβοηθήσει για την εγκατάσταση αυτών των πακέτων λογισμικού κατά την εγκατάσταση του.
**: Το Hotspotizer θα ελέγξει και υποβοηθήσει για την εγκατάσταση αυτών των πακέτων λογισμικού κατά την εκκίνηση του.
Άδεια χρήσης (διαθέσιμο για κάθε χρήση, με υποχρεωτική παράθεση της άδειας)
The MIT License (MIT)
Copyright (c) 2014 Mehmet Aydın Baytaş
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Εγκατάσταση
Λήψη: Hotspotizer_1.zip (4 MB)
Αποσυμπιέστε το συμπιεσμένο αρχείο και τρέξτε το setup.exe για εγκατάσταση.
Εναλλακτικά (αν τα προαπαιτούμενα είναι εγκατεστημένα), μπορείτε απευθείας να τρέξετε το Hotspotizer.exe από τον υποφάκελο Application Files/Hotspotizer_X_X_X_X/.
Πρώτα βήματα
Το Hotspotizer αποτελείται από τρεις ενότητες:
- Η ενότητα Διαχειριστή είναι για τη διαχείριση συνόλων νευμάτων: Αποθήκευση και φόρτωμα συνόλων νευμάτων, αφαίρεση νευμάτων από ένα σύνολο, εκκίνηση του Επεξεργαστή για την τροποποίηση ενός νεύματος ή για την προσθήκη ενός νέου νεύματος στο σύνολο, και εκκίνηση του Οπτικοποιητή για την έναρξη εξομοίωσης πληκτρολογίου.
- Η ενότητα Επεξεργαστή είναι για τη δημιουργία νέων νευμάτων ή για αλλαγές σε ένα υπάρχον νεύμα.
- Η ενότητα Οπτικοποιητή επιτελεί την εξομοίωση πληκτρολογίου και επιτρέπει στο χρήστη να δεί αν εκτελεί τα νεύματα του σωστά.
Εκκινήστε το Hotspotizer για την έναρξη μιας οθόνης Διαχειριστή με ένα άδειο σύνολο νευμάτων:
Αν το Hotspotizer δεν μπορεί να συνδεθεί επιτυχώς στον αισθητήρα Kinect σας, μια προειδοποίηση θα εμφανιστεί στη αριστερή πλευρά και οι λειτουργίες που σχετίζονται με το Kinect θα απενεργοποιηθούν.
Πατήστε το κουμπί “Προσθήκη νέου νεύματος” (Add New Gesture) για την έναρξη του Επεξεργαστή.
Θα υλοποιήσουμε ένα απλό νεύμα "αρπαγής" με το δεξί χέρι, από αριστερά προς τα δεξιά. Θα αντιστοιχίσουμε αυτό το νεύμα με το πλήκτρο "κενό" (space).
Αφού ονομάσετε το νεύμα, πατήστε το κουμπί "Εντολή πληκτρολογίου (Keyboard Command) για να ορίσετε την αντιστοίχιση πληκτρολογίου. Πατήστε το πλήκτρο "κενό" και κάντε κλικ στο σύμβολο "επιλογής" (check) για αποδοχή.
Το κουμπί δυο θέσεων "Πάτημα/Κράτημα" δίπλα στο κουμπί "Εντολή πληκτρολογίου" (Keyboard Command) ορίζει αν η εκτέλεση του νεύματος θα πρέπει να στείλει ένα μόνο πάτημα πλήκτρου ή να κρατήσει πατημένο το κουμπί πληκτρολογίου όσο το παρακολουθούμενο άκρο παραμένει στα ενεργά σημεία του τελευταίου βήματος του νεύματος.
Μπορείτε να αντιστοιχίσετε τα νεύματα σας σε οποιοδήποτε συνδιασμό πλήκτρων, όχι μονάχα ένα κουμπί.
Επιλέξτε το άκρο που θα χρησιμοποιηθεί για να εκτελεστεί το νεύμα – στην περίπτωση αυτή, το δεξί χέρι.
Θα υλοποιήσουμε ένα νεύμα “αρπαγής” που συμπεριλαμβάνει 3 βήματα: Το δεξί χέρι θα περάσει μέσα από “ενεργά σημεία” (hotspots) στα αριστερά, στο μέσο, και στα δεξιά αντίστοιχα.
Σημειώστε τα ενεργά σημεία για το πρώτο βήμα στο πλέγμα εμπρόσθιας όψης πρώτα. Στο πλέγμα πλευρικής όψης, που αρχικά είναι πλήρως απενεργοποιημένο, αυτό θα ενεργοποιήσει τις γραμμές που αντιστοιχούν σε αυτά τα ενεργά σημεία. Έπειτα σημειώστε τα ενεργά σημεία στο πλέγμα πλευρικής όψης. Θα δείτε τα ενεργά σημεία να οπτικοποιούνται στην τρισδιάστατη όψη (3D viewport).
Ένα “ενεργό σημείο” ορίζει ένα κυβικό κελί 15 εκ x 15 εκ x 15 εκ. Το πλέγμα εμπρόσθιας όψη σηματοδοτεί που βρίσκονται αυτά τα κελιά οριζόντια και κατακόρυφα. Το πλέγμα πλευρικής όψης σηματοδοτεί που βρίσκονται κατακόρυφα και εις βάθος. Το Hotspotizer ακολουθεί τα επιλεγμένα άκρα για κάθε νεύμα και καταχωρεί πότε περνούν από τα σημειωμένα ενεργά σημεία.
Μπορείτε να περιστρέψετε την 3D όψη στον Επεξεργαστή και τον Οπτικοποιητή κάνοντας δεξί κλικ και κρατώντας το δεξί πλήκτρο του ποντικιού πατημένο καθώς κινείτε το ποντίκι τριγύρω. Μπορείτε να μεγεθύνετε και σμικρύνετε χρησιμοποιώντας τη ρόδα κύλισης του ποντικιού ή το δεξί πλήκτρο του ποντικιού μαζί με το κουμπί Ctrl του πληκτρολογίου.
Μπείτε μπροστά από το Kinect για να δοκιμάσετε τα δοκιμάσετε. Δείτε αν τα ενεργά σημεία που σημειώστε αντιστοιχούν πραγματικά στο σημείο που θέλετε το δεξί σας χέρι να είναι όταν αρχίζετε το νεύμα.
Προσθέστε το δεύτερο (μεσαίο) βήμα χρησιμοποιώντας το κουμπί “Προσθήκη νέου βήματος” (Add New Frame) και σημειώστε ενεργά σημεία σε αυτό. Έπειτα προσθέστε το τρίτο βήμα.
Μπορείτε να επιστρέψετε και επεξεργαστείτε κάποιο βήμα κάνοντας κλικ πάνω τους στη χρονογραμμή στο κάτω μέρος. Μπορείτε επίσης να αναδιατάξετε και διαγράψετε βήματα χρησιμοποιώντας τα κουμπιά κάτω από τα μικρά πλαίσια των βημάτων εκεί.
Καθώς προσθέτετε βήματα, τα ενεργά σημεία των προηγούμενων βημάτων θα συνεχίζουν να εμφανίζονται στην 3D όψη, αλλά θα γίνουν πιο διαφανή. Αν υπάρχουν άλλα νεύματα στο σύνολο νευμάτων στο οποίο δουλεύετε, αυτά θα εμφανίζονται επίσης εκεί, και θα είναι πολύ διαφανή (δείτε στιγμιότυπα οθόνης παραπάνω). Αυτό γίνεται για την υποβοήθηση του χρήστη στο να παρακολουθεί που είναι τα τρέχοντα ενεργά σημεία σε σχέση με τα άλλα νεύματα στο σύνολο.
Αποθηκεύστε το νεύμα. Το νεύμα είναι τώρα μέρος της συλλογής νευμάτων που είναι φορτωμένη στο Διαχειριστή και μπορείτε να δείτε τη συμπεριφορά του ως προς το πάτημα ή κράτημα, την αντιστοίχιση πλήκτρου και το όνομα να αναφέρονται εκεί, μαζί με πλήκτα για την έναρξη του Επεξεργαστή για την πραγματοποίηση αλλαγών στο νεύμα και για τη διαγραφή του νεύματος εντελώς από τη συλλογή νευμάτων.
Πατήστε το κουμπί “Έναρξη εξομοίωσης” (Begin Emulation) (ή “Παίξιμο” [Play]) για να εκκινήσετε τον Οπτικοποιητή. Ο Οπτικοποιητής θα εμφανίσει:
- Μια χρωματικά κωδικοποιημένη λίστα των νευμάτων στην τρέχουσα συλλογή νευμάτων μαζί με τη συμπεριφορά τους ως προς το πάτημα ή κράτημα, την αντιστοίχιση πλήκτρου και το όνομα τους.
- Σε μια μεγεθυνόμενη και περιστρεφόμενη 3D όψη και μη μετακινήσιμων εμπρόσθιων και πλάγιων όψεων, τα ενεργά σημεία, χρωματικά κωδικοποιημένα, όλων των νευμάτων στη συλλογή νευμάτων. Η διαφάνεια των ενεργών σημείων αντιστοιχεί στο βήμα που ανήκουν σε ένα νεύμα. Τα διαφανή ενεργά σημεία είναι που πρέπει να αγγίζονται πριν από τα περισσότερο αδιαφανή.
Τα ενεργά σημεία και τα αντικείμενα της λίστας θα φωτιστούν καθώς πραγματοποιείτε το νεύμα. Μπείτε μπροστά από το Kinect και δοκιμάστε το!
Όταν ένα παρακολουθούμενο άκρο περνά από τα ενεργά σημεία που ανήκουν σε ένα νεύμα, η εντολή πληκτρολογίου αυτού του νεύματος εκτελείται. Αυτό επίσης λειτουργεί όταν το Hotspotizer είναι κρυμμένο ή όταν μια άλλη εφαρμογή είναι σε χρήση (στο προσκήνιο).
Το νεύμα “αρπαγής”, για παράδειγμα, μπορεί να χρησιμοποιηθεί για να προχωρήσουν οι διαφάνειες μιας παρουσίασης.
Στο Διαχειριστή, μπορείτε να προσθέσετε νέα νεύματα στη συλλογή νευμάτων σας (για παράδειγμα, ένα νεύμα “ανάστροφης αρπαγής” αντιστοιχισμένο στο πλήκτρο “backspace” [σβησίματος προηγούμενου χαρακτήρα] για την εμφάνιση της προηγούμενης διαφάνειας κατά τη διάρκεια μιας παρουσίασης), ή να αποθηκεύσετε τη συλλογή νευμάτων για μελλοντική χρήση.
Οι συλλογές νευμάτων αποθηκεύονται ως δεδομένα “JSON”, με την επέκταση αρχείου “.hsjson”. Περίεργοι και τεχνικά επιδέξιοι χρήστες μπορούν να επεξεργαστούν αυτά τα αρχεία για να διερευνήσουν δυνατότητες χρήσης.
Σημειώσεις έκδοσης
- 1.0.0 εισάγει ενημερώσεις στη γραφική διεπαφή (GUI), μαζί με βελτιώσεις στις επιδόσεις και τη σταθερότητα.
- 0.9.7 εισάγει μια διόρθωση που δεν επιτρέπει σε ένα νεύμα να μην περιέχει βήματα.
- 0.9.6 εισάγει αλλαγές στη γραφική διεπαφή και διορθώνει ένα σφάλμα στην εξομοίωση πληκτρολογίου που επηρέαζε τα νεύματα που ήταν αντιστοιχισμένα σε συνδυασμούς πλήκτρων.
- 0.9.5 διορθώνει ένα πρόβλημα με την ανάγνωση πλήκτρων του πληκτρολογίου που δεν επέτρεπε συνδυασμούς πλήκτρων που περιελάμβαναν το πλήκτρο “alt”, και εισάγει μικρές βελτιώσεις γραφικής διεπαφής στον Οπτικοποιητή.
- 0.9.4 εισάγει βελτιώσεις στη γραφική διεπαφή για τη βελτίωση της αναγνώρισης των ενεργών σημείων στον Επεξεργαστή.
- 0.9.3 διορθώνει ένα πρόβλημα με τον αναγνωριστή νεύματος που έκανε τα νεύματα μονού βήματος που ήταν ρυθμισμένα να στέλνουν πατήματα πλήκτρων, να τα κρατούν πατημένα.
- 0.9.2 διορθώνει το πρόβλημα με τη μη σωστή εμφάνιση των εικονιδίων στα Windows 7.
- 0.9.1 διορθώνει μικρά προβλήματα στον αναγνωριστή νεύματος.
- 0.9.0 αρχική δημόσια έκδοση.
Γνωστά θέματα στην τρέχουσα έκδοση
- Η εφαρμογή μπορεί να εμφανίσει σφάλμα στην εκκίνηση της, αφού εμφανίσει μήνυμα προειδοποίησης, αν το Kinect Runtime δεν είναι εγκατεστημένο.
Kinect for Xbox 360 and Kinect for Windows (KfW) v1 specs
1) 3D Depth sensor (IR Emitter + IR Camera / Depth Sensor)
2) RGB camera (Color Sensor)
3) Microphone array
4) Tilt motor (for detecting floor and players in the playspace)
Kinect | Specifications |
Viewing angle | Field of View (FoV): 43° vertical x 57° horizontal |
Vertical tilt range | ±27° |
Frame rate (depth and color stream) | 30 frames per second (FPS) |
Audio format | 16-kHz, 24-bit mono pulse code modulation (PCM) |
Audio input characteristics | 4-microphone array 24-bit analog-to-digital converter (ADC) onboard signal processing (including acoustic echo cancellation & noise suppression) |
Accelerometer characteristics | 2G/4G/8G accelerometer configured for 2G range 1° accuracy detail limit (can help detect when the sensor is in an unusual orientation) |
Sources:
https://en.wikipedia.org/wiki/Kinect
https://support.xbox.com/en-US/xbox-360/kinect/kinect-sensor-components