123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212 |
- using Iisu;
- using System;
- using Emgu.CV;
- using Emgu.CV.Structure;
- namespace BBIWARG.Input.InputProviding
- {
-
-
-
- public class InputProviderIisu : IInputProvider
- {
-
-
-
- protected IDataHandle<Iisu.Data.IImageData> confidenceImage;
-
-
-
- protected IDataHandle<Iisu.Data.IImageData> depthImage;
-
-
-
- protected IDevice device;
-
-
-
- protected IParameterHandle<float> fieldOfViewHorizontal;
-
-
-
- protected IParameterHandle<float> fieldOfViewVertical;
-
-
-
- protected IParameterHandle<float> frameRate;
-
-
-
- protected IHandle handle;
-
-
-
- protected IParameterHandle<int> height;
-
-
-
- protected IParameterHandle<int> width;
-
-
-
- public virtual int CurrentFrameID { get { return device.FrameId; } }
-
-
-
- public float FieldOfViewHorizontal { get { return fieldOfViewHorizontal.Value; } }
-
-
-
- public float FieldOfViewVertical { get { return fieldOfViewVertical.Value; } }
-
-
-
- public int ImageHeight { get { return height.Value; } }
-
-
-
- public int ImageWidth { get { return width.Value; } }
-
-
-
- public bool IsActive { get; private set; }
-
-
-
- public event DeviceStartedEventHandler DeviceStartedEvent;
-
-
-
- public event NewFrameEventHandler NewFrameEvent;
-
-
-
- public InputProviderIisu()
- {
- IsActive = false;
- }
-
-
-
- public void initialize()
- {
- createDevice();
- registerHandles();
- }
-
-
-
- public void start()
- {
- device.Start();
- IsActive = true;
- if (DeviceStartedEvent != null)
- DeviceStartedEvent(this, new EventArgs());
- run();
- }
-
-
-
- public void stop()
- {
- IsActive = false;
- device.Stop(true);
- }
-
-
-
- protected void createDevice()
- {
- handle = Iisu.Iisu.Context.CreateHandle();
- IDeviceConfiguration conf = createDeviceConfiguration();
- device = handle.InitializeDevice(conf);
- }
-
-
-
-
- protected virtual IDeviceConfiguration createDeviceConfiguration()
- {
- IDeviceConfiguration conf = handle.CreateDeviceConfiguration();
- conf.IsAsynchronous = false;
- return conf;
- }
-
-
-
- protected virtual void nextFrame()
- {
- device.UpdateFrame(true);
- provideNewFrame();
- device.ReleaseFrame();
- }
-
-
-
- protected void provideNewFrame()
- {
- if (NewFrameEvent != null)
- {
- Image<Gray, UInt16> rawDepthImage = new Image<Gray, UInt16>(ImageWidth, ImageHeight, ImageWidth * 2, depthImage.Value.Raw);
- Image<Gray, UInt16> confidenceImage2 = new Image<Gray, UInt16>(ImageWidth, ImageHeight, ImageWidth * 2, confidenceImage.Value.Raw);
- Image<Gray, byte> confidenceMask = confidenceImage2.ThresholdBinary(new Gray(Parameters.ConfidenceImageMinThreshold), new Gray(1)).Convert<Gray, byte>();
- rawDepthImage = rawDepthImage.Or((1 - confidenceMask).Convert<Gray, UInt16>().Mul(UInt16.MaxValue));
- NewFrameEvent(this, new NewFrameEventArgs(CurrentFrameID, rawDepthImage));
- }
- }
-
-
-
- protected virtual void registerHandles()
- {
- width = device.RegisterParameterHandle<int>("SOURCE.CAMERA.DEPTH.Width");
- height = device.RegisterParameterHandle<int>("SOURCE.CAMERA.DEPTH.Height");
- fieldOfViewHorizontal = device.RegisterParameterHandle<float>("SOURCE.CAMERA.DEPTH.HFOV");
- fieldOfViewVertical = device.RegisterParameterHandle<float>("SOURCE.CAMERA.DEPTH.VFOV");
- frameRate = device.RegisterParameterHandle<float>("SOURCE.FrameRate");
- depthImage = device.RegisterDataHandle<Iisu.Data.IImageData>("SOURCE.CAMERA.DEPTH.Image");
- confidenceImage = device.RegisterDataHandle<Iisu.Data.IImageData>("SOURCE.CAMERA.CONFIDENCE.Image");
- }
-
-
-
- protected virtual void run()
- {
- while (IsActive)
- nextFrame();
- }
- }
- }
|