आउटलेट लेमूर ने वास्तविक दुनिया परिदृश्यों में आपको जिन मुद्दों का सामना करना पड़ सकता है, उनमें विस्तार से विस्तार किया है।
विंडोज संस्करण 2 के लिए किनेक्ट का उपयोग करके, आपको मोटर को समायोजित करने की आवश्यकता नहीं है, क्योंकि कोई मोटर नहीं है और सेंसर का दृश्य बड़ा क्षेत्र है। यह आपके जीवन को अधिक आसान बना देगा।
मैं निम्नलिखित सुझाव और सलाह जोड़ना चाहते हैं:
1) प्रत्यक्ष प्रकाश (शारीरिक या आंतरिक प्रकाश)
Kinect एक अवरक्त संवेदक कि भ्रमित हो सकता है से बचें। इस सेंसर को किसी भी प्रकाश स्रोत के साथ सीधा संपर्क नहीं होना चाहिए। आप साधारण लेजर पॉइंटर और मशाल के साथ खेलकर अपने घर/कार्यालय में ऐसे माहौल का अनुकरण कर सकते हैं।
2) आप केवल एक ही व्यक्ति पर नज़र रखने रहे हैं, तो सबसे करीब ट्रैक किए गए उपयोगकर्ता
चयन आपका ऐप्लिकेशन केवल एक खिलाड़ी की जरूरत है, यह है कि खिलाड़ी एक) पूरी तरह से नज़र रखी होने की जरूरत है और ख) की तुलना में सेंसर के करीब दूसरे। प्रतिभागियों को यह समझने का एक आसान तरीका है कि आपके यूआई को और अधिक जटिल बनाये बिना ट्रैक किया गया है।
public static Body Default(this IEnumerable<Body> bodies)
{
Body result = null;
double closestBodyDistance = double.MaxValue;
foreach (var body in bodies)
{
if (body.IsTracked)
{
var position = body.Joints[JointType.SpineBase].Position;
var distance = position.Length();
if (result == null || distance < closestBodyDistance)
{
result = body;
closestBodyDistance = distance;
}
}
}
return result;
}
3) विभिन्न खिलाड़ियों
प्रत्येक खिलाड़ी को एक TrackingID संपत्ति है भेद करने के लिए ट्रैकिंग आईडी का प्रयोग करें। उस संपत्ति का उपयोग करें जब खिलाड़ी यादृच्छिक स्थितियों में हस्तक्षेप या स्थानांतरित होते हैं। यद्यपि चेहरे की पहचान के विकल्प के रूप में उस संपत्ति का उपयोग न करें।
ulong _trackinfID1 = 0;
ulong _trackingID2 = 0;
void BodyReader_FrameArrived(object sender, BodyFrameArrivedEventArgs e)
{
using (var frame = e.FrameReference.AcquireFrame())
{
if (frame != null)
{
frame.GetAndRefreshBodyData(_bodies);
var bodies = _bodies.Where(b => b.IsTracked).ToList();
if (bodies != null && bodies.Count >= 2 && _trackinfID1 == 0 && _trackingID2 == 0)
{
_trackinfID1 = bodies[0].TrackingId;
_trackingID2 = bodies[1].TrackingId;
// Alternatively, specidy body1 and body2 according to their distance from the sensor.
}
Body first = bodies.Where(b => b.TrackingId == _trackinfID1).FirstOrDefault();
Body second = bodies.Where(b => b.TrackingId == _trackingID2).FirstOrDefault();
if (first != null)
{
// Do something...
}
if (second != null)
{
// Do something...
}
}
}
}
4) प्रदर्शन चेतावनी एक खिलाड़ी बहुत दूर या बहुत सेंसर के करीब है जब।
उच्च सटीकता प्राप्त करने के लिए, खिलाड़ियों को एक विशिष्ट दूरी पर खड़े होने की आवश्यकता है: सेंसर के बहुत दूर या बहुत करीब नहीं। यह इस तरह लगाया जाए:
const double MIN_DISTANCE = 1.0; // in meters
const double MAX_DISTANCE = 4.0; // in meters
double distance = body.Joints[JointType.SpineBase].Position.Z; // in meters, too
if (distance > MAX_DISTANCE)
{
// Prompt the player to move closer.
}
else if (distance < MIN_DISTANCE)
{
// Prompt the player to move farther.
}
else
{
// Player is in the right distance.
}
5) हमेशा यह जानें कि जब एक खिलाड़ी डाल देते हैं या दृश्य छोड़ दिया है।
विटरुवियस समझने का एक आसान तरीका प्रदान करता है जब किसी ने दृश्य में प्रवेश किया या छोड़ा। अगर कोई खिलाड़ी आसपास के बहुत से लोगों को कर रहे हैं
UsersController userReporter = new UsersController();
userReporter.BodyEntered += UserReporter_BodyEntered;
userReporter.BodyLeft += UserReporter_BodyLeft;
userReporter.Start();
void UserReporter_BodyEntered(object sender, UsersControllerEventArgs e)
{
// A new user has entered the scene. Get the ID from e param.
}
void UserReporter_BodyLeft(object sender, UsersControllerEventArgs e)
{
// A user has left the scene. Get the ID from e param.
}
6) एक दृश्य सुराग जिनमें से खिलाड़ी को ट्रैक करता है
है:
Here is the source code और यहाँ आपके ऐप्लिकेशन में इसका इस्तेमाल करने के लिए है , आपको ट्रैक किए जाने वाले ऑन-स्क्रीन को दिखाने की आवश्यकता हो सकती है। आप गहराई फ्रेम बिटमैप को हाइलाइट कर सकते हैं या माइक्रोसॉफ्ट के किनेक्ट इंटरैक्शन का उपयोग कर सकते हैं।
This is an example of removing the background and keeping the player pixels only।
7) से बचें चमकदार फर्श
कुछ फर्श (उज्ज्वल, चमकदार) लोगों को प्रतिबिंबित कर सकते हैं और Kinect उनके जोड़ों (उदाहरण के लिए, Kinect परिलक्षित शरीर के लिए अपने पैरों का विस्तार कर सकते हैं) के कुछ भ्रमित हो सकते हैं। यदि आप चमकदार फर्श से बच नहीं सकते हैं, तो अपने बॉडीफ्रेम की FloorClipPlane संपत्ति का उपयोग करें। हालांकि, सबसे अच्छा समाधान एक सरल कालीन होना होगा जहां आप लोगों को खड़े होने की उम्मीद करते हैं। एक कालीन भी उचित दूरी के संकेत के रूप में कार्य करेगा, इसलिए आप एक बेहतर उपयोगकर्ता अनुभव प्रदान करेंगे।
मुझे दूसरा प्रश्न नहीं मिला। – GLHF
@howaboutNO पृष्ठभूमि शोर पूरी तरह से एक हार्डवेयर मुद्दा है? या कोड कोड पर कुछ ऐसा किया जा सकता है? क्या एसडीके बेहतर ट्रैकिंग के लिए अनुमति नहीं देता है? –