You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

96 lines
3.3 KiB

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading;
namespace Intel.RealSense
{
class Program
{
static void Main(string[] args)
{
using (var ctx = new Context())
{
var devices = ctx.QueryDevices();
Console.WriteLine("There are {0} connected RealSense devices.", devices.Count);
if (devices.Count == 0) return;
var dev = devices[0];
Console.WriteLine("\nUsing device 0, an {0}", dev.Info[CameraInfo.Name]);
Console.WriteLine(" Serial number: {0}", dev.Info[CameraInfo.SerialNumber]);
Console.WriteLine(" Firmware version: {0}", dev.Info[CameraInfo.FirmwareVersion]);
var depthSensor = dev.QuerySensors()[0];
var sp = depthSensor.StreamProfiles
.Where(p => p.Stream == Stream.Depth)
.OrderBy(p => p.Framerate)
.Select(p => p.As<VideoStreamProfile>())
.FirstOrDefault();
if (sp ==null)
{
Console.WriteLine("No default profile found for sensor");
return;
}
depthSensor.Open(sp);
int one_meter = (int)(1f / depthSensor.DepthScale);
ushort[] depth = new ushort[sp.Width * sp.Height];
char[] buffer = new char[(sp.Width/ 10 + 1) * (sp.Height/ 20)];
int[] coverage = new int[sp.Width / 10];
depthSensor.Start(f =>
{
using (var vf = f.As<VideoFrame>())
vf.CopyTo(depth);
int b = 0;
for (int y = 0; y < sp.Height; ++y)
{
for (int x = 0; x < sp.Width; ++x)
{
ushort d = depth[x + y * sp.Width];
if (d > 0 && d < one_meter)
{
var ind = x / 10;
++coverage[ind >= coverage.Length ? coverage.Length-1 : ind];
}
}
if (y % 20 == 19)
{
for (int i = 0; i < coverage.Length ; i++)
{
int c = coverage[i];
var depthChars = " .:nhBXWW";
buffer[b++] = depthChars[c/25 >= depthChars.Length ? depthChars.Length-1: c/25];
coverage[i] = 0;
}
buffer[b++] = '\n';
}
}
Console.SetCursorPosition(0, 0);
Console.WriteLine();
Console.Write(buffer);
});
AutoResetEvent stop = new AutoResetEvent(false);
Console.CancelKeyPress += (s, e) =>
{
e.Cancel = true;
stop.Set();
};
stop.WaitOne();
depthSensor.Stop();
depthSensor.Close();
}
}
}
}