public int DetectCameras() { spinnaker.UpdateCameras(); cameras = spinnaker.GetCameras(); if (cameras == null) { cameras = new List <IManagedCamera>(); } Console.WriteLine("{0} Flir camera{1} detected.", cameras.Count, (cameras.Count > 1) ? "s were" : " was"); return(cameras.Count); }
public override bool Connect() { bool result = false; try { system = new ManagedSystem(); IList <IManagedCamera> camList = system.GetCameras(); if (camList.Count != 1) { int count = camList.Count; foreach (IManagedCamera mc in camList) { mc.Dispose(); } // Clear camera list before releasing system camList.Clear(); // Release system system.Dispose(); throw new Exception("Only one camera should be connected, but found " + count); } camera = camList[0]; // Initialize camera camera.Init(); SerialNumber = Convert.ToUInt32(camera.DeviceSerialNumber); FirmwareVersion = camera.DeviceFirmwareVersion; // Retrieve GenICam nodemap nodeMap = camera.GetNodeMap(); //initialise settings DefaultSettings(); ImageWidth = camera.Width; ImageHeight = camera.Height; result = true; } catch (Exception /*ex*/) { //App.LogEntry.AddEntry("Failed to Connect to Point Grey Camera : " + ex.Message); result = false; } return(result); }
public override bool Init(int index = 0) { bool ret = false; try { // Retrieve singleton reference to system object ManagedSystem system = new ManagedSystem(); // Retrieve list of cameras from the system IList <IManagedCamera> camList = system.GetCameras(); LogHelper.AppLoger.DebugFormat("Number of cameras detected: {0}", camList.Count); if (camList.Count == 0) { LogHelper.AppLoger.Error("没有发现相机!"); return(ret); } m_Camera = camList[index]; // Retrieve TL device nodemap and print device information INodeMap nodeMapTLDevice = m_Camera.GetTLDeviceNodeMap(); // Initialize camera m_Camera.Init(); // Retrieve GenICam nodemap m_NodeMap = m_Camera.GetNodeMap(); //if (!m_camera.DeviceConnectionStatus.IsRegister) //{ // Dialogs.Show("连接相机失败!"); // return ret; //} //CameraInfo camInfo = m_camera.GetCameraInfo(); IString iDeviceSerialNumber = nodeMapTLDevice.GetNode <IString>("DeviceSerialNumber"); LogHelper.AppLoger.DebugFormat("camera serial number:{0}", iDeviceSerialNumber); //Set embedded timestamp to on //EmbeddedImageInfo embeddedInfo = m_camera.GetEmbeddedImageInfo(); //embeddedInfo.timestamp.onOff = true; //m_camera.SetEmbeddedImageInfo(embeddedInfo); SetAcquisitionMode("Continuous"); ret = true; } catch (Exception ex) { LogHelper.AppLoger.Error(ex); } return(ret); }
public static ulong GetCameraSerialNumber() { using (var system = new ManagedSystem()) { var cameraList = system.GetCameras(); if (cameraList.Count != 1) { throw new InvalidOperationException($"Please disconnect all other imaging devices from the computer before configuring the {nameof(FP3002)}."); } var camera = cameraList.GetByIndex(0); var nodeMap = camera.GetTLDeviceNodeMap(); var serialNumber = nodeMap.GetNode <SpinnakerNET.GenApi.IString>(nameof(camera.DeviceSerialNumber)); return(ulong.Parse(serialNumber.Value)); } }
public override StandardValuesCollection GetStandardValues(ITypeDescriptorContext context) { var values = new List <string>(); using (var system = new ManagedSystem()) { var cameraList = system.GetCameras(); for (int i = 0; i < cameraList.Count; i++) { var camera = cameraList[i]; var nodeMap = camera.GetTLDeviceNodeMap(); var serialNumberNode = nodeMap.GetNode <StringReg>("Std::DeviceSerialNumber"); if (serialNumberNode != null) { values.Add(serialNumberNode.Value); } } } return(new StandardValuesCollection(values)); }
public MainWindow() { InitializeComponent(); ManagedSystem ms = new ManagedSystem(); IList <IManagedCamera> camList = ms.GetCameras(); IManagedCamera cam = camList[0]; GUIFactory AcquisitionGUI = new GUIFactory(); cam.Init(); //AcquisitionGUI.ConnectGUILibrary(cam); ImageDrawingWindow AcquisitionDrawing = AcquisitionGUI.GetImageDrawingWindow(); //AcquisitionDrawing.Connect(cam); //AcquisitionDrawing.Start(); //AcquisitionDrawing.Stop(); AcquisitionDrawing.ShowModal(); }
public override bool Connect() { bool result = false; //try //{ // CameraSelectionDialog m_selDlg = new CameraSelectionDialog(); // if (m_selDlg.ShowModal()) // { // ManagedPGRGuid[] guids = m_selDlg.GetSelectedCameraGuids(); // if (guids.Length == 0) // { // //MessageBox.Show("Please select a camera", "No camera selected"); // return false; // } // camera = new ManagedCamera(); // m_ctldlg = new CameraControlDialog(); // camera.Connect(guids[0]); // //initialise settings // InitializeSettings(); // InitializeSettingsWB(); // CameraInfo ci = camera.GetCameraInfo(); // SerialNumber = ci.serialNumber; // result = true; // } //} //catch (Exception /*ex*/) //{ // //App.LogEntry.AddEntry("Failed to Connect to Point Grey Camera : " + ex.Message); // result = false; //} system = new ManagedSystem(); IList <IManagedCamera> camList = system.GetCameras(); if (camList.Count != 1) { int count = camList.Count; foreach (IManagedCamera mc in camList) { mc.Dispose(); } // Clear camera list before releasing system camList.Clear(); // Release system system.Dispose(); throw new Exception("Only one camera should be connected, but found " + count); } camera = camList[0]; // Initialize camera camera.Init(); // Retrieve GenICam nodemap nodeMap = camera.GetNodeMap(); SerialNumber = Convert.ToUInt32(camera.DeviceSerialNumber); //initialise settings try { InitializeSettings(); InitializeSettingsWB(); result = true; } catch (SpinnakerException ex) { result = false; Debug.WriteLine("PtGrey connect failed: " + ex.Message); } return(result); }
public bool Connect() { bool result = false; try { system = new ManagedSystem(); IList <IManagedCamera> camList = system.GetCameras(); if (camList.Count != 2) { int count = camList.Count; foreach (IManagedCamera mc in camList) { mc.Dispose(); } // Clear camera list before releasing system camList.Clear(); // Release system system.Dispose(); throw new Exception("2 cameras needed but found " + camList.Count); } for (int i = 0; i < camList.Count; i++) { var cam = camList[i]; // Initialize camera cam.Init(); // Retrieve GenICam nodemap var nodemap = cam.GetNodeMap(); uint SerialNumber = Convert.ToUInt32(cam.DeviceSerialNumber); if (SerialNumber == App.Settings.SideCameraSerialNum) { cameraSide = new PtGreyCamera(cam, CameraType.Side); } else { cameraTop = new PtGreyCamera(cam, CameraType.Top); } } if (cameraSide != null && cameraTop != null) { cameras.Add(cameraTop); cameras.Add(cameraSide); result = true; } else { result = false; } } catch (Exception ex) { result = false; if (cameraTop != null) { cameraTop.Disconnect(); } if (cameraSide != null) { cameraSide.Disconnect(); } } return(result); }
// Example entry points; this function sets up the system and retrieves // interfaces to retrieves interfaces for the example. public static int Start() { int result = 0; Program program = new Program(); // // Retrieve singleton reference to system object // // *** NOTES *** // Everything originates with the system object. It is important to // notice that it has a singleton implementation, so it is impossible // to have multiple system objects at the same time. // // *** LATER *** // The system object should be cleared prior to program completion. // If not released explicitly, it will be released automatically // when all system objects go out of scope. // ManagedSystem system = new ManagedSystem(); // Print out current library version LibraryVersion spinVersion = system.GetLibraryVersion(); Console.WriteLine("Spinnaker library version: {0}.{1}.{2}.{3}\n\n", spinVersion.major, spinVersion.minor, spinVersion.type, spinVersion.build); // // Retrieve list of interfaces from the system // // *** NOTES *** // Interface lists are retrieved from the system object. // // *** LATER *** // Interface lists are constructed using list objects of // IManagedInterface objects. Lists are native to C# and must be // cleared after use. // List <IManagedInterface> interfaceList = system.GetInterfaces(); Console.WriteLine("Number of interfaces detected: {0}\n", interfaceList.Count); // // Retrieve list of cameras from the system // // *** NOTES *** // Camera lists are retrieved from the system object. // // *** LATER *** // Camera lists are constructed using list objects of IManagedCamera // objects. Lists are native to C# and must be cleared after use. // List <IManagedCamera> camList = system.GetCameras(); Console.WriteLine("Number of cameras detected: {0}\n", camList.Count); // Finish if there are no cameras if (camList.Count == 0 || interfaceList.Count == 0) { // Clear camera list before releasing system camList.Clear(); // Clear interface list before releasing system interfaceList.Clear(); // Release system system.Dispose(); Console.WriteLine("Not enough cameras!"); Console.WriteLine("Done! Press Enter to exit..."); Console.ReadLine(); return(-1); } Console.WriteLine("\n*** QUERYING INTERFACES ***\n"); // // Run example on each interface // // *** NOTES *** // Managed interfaces will need to be disposed of after use in order // to fully clean up. Using-statements help ensure that this is taken // care of; otherwise, interfaces can be disposed of manually by calling // Dispose(). // foreach (IManagedInterface managedInterface in interfaceList) { using (managedInterface) { try { // Run example result = result | program.QueryInterface(managedInterface); } catch (SpinnakerException ex) { Console.WriteLine("Error: {0}", ex.Message); result = -1; } } } // // Clear camera list before releasing system // // *** NOTES *** // If a camera list is not cleaned up // manually, the system will do so when System.Dispose() is // called. // camList.Clear(); // // Clear interface list before releasing system // // *** NOTES *** // If an interface list is not cleaned up // manually, the system will do so when System.Dispose() is // called. // interfaceList.Clear(); // // Release system // // *** NOTES *** // The system should be released, but if it is not, it will do so // itself. It is often at the release of the system (whether manual // or automatic) that unbroken references and still registered // events will throw an exception. // system.Dispose(); Console.WriteLine("\nDone!"); //Console.ReadLine(); return(result); }
public bool Open(ConcurrentQueue <PtGreyCameraImage> imageQ, out string message) { bool result = false; message = ""; system = new ManagedSystem(); // Retrieve list of cameras from the system camList = system.GetCameras(); // Finish if there are no cameras if (camList.Count != 1) { foreach (IManagedCamera mc in camList) { mc.Dispose(); } // Clear camera list before releasing system camList.Clear(); // Release system system.Dispose(); message = "Camera count is " + camList.Count; } else { try { managedCamera = camList[0]; if (managedCamera.TLDevice.DeviceDisplayName != null && managedCamera.TLDevice.DeviceDisplayName.IsReadable) { message = managedCamera.TLDevice.DeviceDisplayName.ToString(); } // Initialize camera managedCamera.Init(); // Retrieve GenICam nodemap nodeMap = managedCamera.GetNodeMap(); imageQueue = imageQ; result = true; } catch (SpinnakerException ex) { Debug.WriteLine("Error: {0}", ex.Message); message = ex.Message; result = false;; } catch (Exception ex) { message = ex.Message; result = false; } } return(result); }
// Entry point of the Acquisition Example public void AcquisitionExample() { int result = 0; // Since this application saves images in the current folder // we must ensure that we have permission to write to this folder. // If we do not have permission, fail right away. FileStream fileStream; try { fileStream = new FileStream(@"test.txt", FileMode.Create); fileStream.Close(); File.Delete("test.txt"); } catch { writeLog(String.Format( "Failed to create file in current folder. Please check permissions.")); } // Retrieve singleton reference to system object ManagedSystem system = new ManagedSystem(); // Retrieve list of cameras from the system IList <IManagedCamera> camList = system.GetCameras(); writeLog(String.Format("Number of cameras detected: {0}\n\n", camList.Count)); // Finish if there are no cameras if (camList.Count == 0) { // Clear camera list before releasing system camList.Clear(); // Release system system.Dispose(); writeLog(String.Format("Not enough cameras!")); writeLog(String.Format("Done!")); } // // Run example on each camera // // *** NOTES *** // Cameras can either be retrieved as their own IManagedCamera // objects or from camera lists using the [] operator and an index. // // Using-statements help ensure that cameras are disposed of when // they are no longer needed; otherwise, cameras can be disposed of // manually by calling Dispose(). In C#, if cameras are not disposed // of before the system is released, the system will do so // automatically. // int index = 0; foreach (IManagedCamera managedCamera in camList) { using (managedCamera) { writeLog(String.Format("Running example for camera {0}...\n", index)); try { // Run example result = result | RunSingleCamera(managedCamera); } catch (SpinnakerException ex) { writeLog(String.Format("Error: {0}\n", ex.Message)); result = -1; } writeLog(String.Format("Camera {0} example complete...\n", index++)); } } // Clear camera list before releasing system camList.Clear(); // Release system system.Dispose(); writeLog(String.Format("Done!\n")); }
// Example entry point; please see Enumeration_CSharp example for more // in-depth comments on preparing and cleaning up the system. public static int Start() { int result = 0; Program program = new Program(); // Ensure write permissions to current folder try { FileStream fileStream = new FileStream(@"test.txt", FileMode.Create); fileStream.Close(); File.Delete("test.txt"); } catch { Console.WriteLine("Failed to create file in current folder. Please check permissions.\n"); Console.WriteLine("\nDone! Press enter to exit..."); Console.ReadLine(); return(-1); } // Retrieve singleton reference to system object ManagedSystem system = new ManagedSystem(); // Print out current library version LibraryVersion spinVersion = system.GetLibraryVersion(); Console.WriteLine("Spinnaker library version: {0}.{1}.{2}.{3}\n\n", spinVersion.major, spinVersion.minor, spinVersion.type, spinVersion.build); // Retrieve list of cameras from the system List <IManagedCamera> camList = system.GetCameras(); Console.WriteLine("Number of cameras detected: {0}\n", camList.Count); // Finish if there are no cameras if (camList.Count == 0) { // Clear camera list before releasing system camList.Clear(); // Release system system.Dispose(); Console.WriteLine("Not enough cameras!"); Console.WriteLine("Done! Press Enter to exit..."); Console.ReadLine(); return(-1); } // Run example on each camera int index = 0; foreach (IManagedCamera managedCamera in camList) { using (managedCamera) { Console.WriteLine("Running example for camera {0}...", index); try { // Run example result = result | program.RunSingleCamera(managedCamera); } catch (SpinnakerException ex) { Console.WriteLine("Error: {0}", ex.Message); result = -1; } Console.WriteLine("Camera {0} example complete...\n", index++); } } // Clear camera list before releasing system camList.Clear(); // Release system system.Dispose(); Console.WriteLine("\nDone! Press Enter to exit..."); Console.ReadLine(); return(result); }
public bool Open(ConcurrentQueue <PtGreyCameraImage> imageQ, out string message, out long width, out long height) { bool result = false; message = ""; width = height = 0; system = new ManagedSystem(); // Retrieve list of cameras from the system camList = system.GetCameras(); // Finish if there are no cameras if (camList.Count != 1) { foreach (IManagedCamera mc in camList) { mc.Dispose(); } // Clear camera list before releasing system camList.Clear(); // Release system system.Dispose(); message = "Camera count is " + camList.Count; } else { try { #region FlyCaptureAPI FlyCapture2Managed.ManagedBusManager busMgr = new FlyCapture2Managed.ManagedBusManager(); var guid = busMgr.GetCameraFromIndex(0); flycapManagedCamera = new FlyCapture2Managed.ManagedCamera(); flycapManagedCamera.Connect(guid); #endregion managedCamera = camList[0]; if (managedCamera.TLDevice.DeviceDisplayName != null && managedCamera.TLDevice.DeviceDisplayName.IsReadable) { message = managedCamera.TLDevice.DeviceDisplayName.ToString(); } // Initialize camera managedCamera.Init(); width = managedCamera.Width.Value; height = managedCamera.Height.Value; // Retrieve GenICam nodemap nodeMap = managedCamera.GetNodeMap(); imageQueue = imageQ; result = true; } catch (SpinnakerException ex) { Debug.WriteLine("Error: {0}", ex.Message); message = ex.Message; result = false;; } catch (Exception ex) { message = ex.Message; result = false; } } return(result); }
public Form1() { InitializeComponent(); // initialize multi-camera system: system = new ManagedSystem(); // Print current Spinnaker library version info: LibraryVersion spinVersion = system.GetLibraryVersion(); Console.WriteLine( "Spinnaker library version: {0}.{1}.{2}.{3}\n\n", spinVersion.major, spinVersion.minor, spinVersion.type, spinVersion.build); // Find all Flir cameras on the system: managedCameras = system.GetCameras(); nCameras = managedCameras.Count; // Finish and dispose system if no cameres are detected: if (nCameras != 2) { managedCameras.Clear(); system.Dispose(); Console.WriteLine("{0} cameras detected. This application supports exactly 2 cameras. System disposed", nCameras.ToString()); } // Create or select folder to write video data: sessionPaths = Util.SetDataWritePaths(animalName: Util.AnimalName.Charlie, nCameras: 2); // Initialize OryxSetupInfo Object to pass to camera constructors upon initialization: oryxSetupInfos = new Util.OryxSetupInfo[nCameras]; for (int i = 0; i < nCameras; i++) { oryxSetupInfos[i] = new Util.OryxSetupInfo(); } bool areCamerasSharingSettings = true; if (areCamerasSharingSettings) { Console.WriteLine("These settings will be loaded on both cameras:"); oryxSetupInfos[0].PrintSettingsToLoad(); Console.WriteLine("\n\n"); } // Initialize camera control message queues to control cameras from XBox controller: camControlMessageQueues = new ConcurrentQueue <ButtonCommands> [nCameras]; for (int i = 0; i < nCameras; i++) { camControlMessageQueues[i] = new ConcurrentQueue <ButtonCommands>(); } // Initialize XBox Controller xBoxController = new XBoxController(mainForm: this, camControlMessageQueues: camControlMessageQueues); // Initialize queue to connect output from each camera to a thread to merge camera streams: streamQueue0 = new ConcurrentQueue <RawMat> [nCameras]; for (int i = 0; i < nCameras; i++) { streamQueue0[i] = new ConcurrentQueue <RawMat>(); } // Open each camera on its own thread. oryxCameraThreads = new Thread[nCameras]; for (int i = 0; i < nCameras; i++) { int _i = i; string _sessionPath = string.Copy(sessionPaths[i]); oryxCameraThreads[i] = new Thread(() => new OryxCamera(camNumber: _i, managedCamera: managedCameras[_i], camControlMessageQueue: camControlMessageQueues[_i], streamOutputQueue: streamQueue0[_i], setupInfo: oryxSetupInfos[_i], sessionPath: _sessionPath)); oryxCameraThreads[i].IsBackground = false; oryxCameraThreads[i].Priority = ThreadPriority.Highest; oryxCameraThreads[i].Start(); } // Initialize queue to send combined images to display form: displayQueue = new ConcurrentQueue <Tuple <byte[], Mat> >(); // Initialize Size of camera stream output image and merged image for display: streamFramesize = new Size(width: oryxSetupInfos[0].streamFramesize.Width, height: oryxSetupInfos[0].streamFramesize.Height); displayFramesize = new Size(width: streamFramesize.Width, height: streamFramesize.Height * 2); // Initialize thread to merge camera stream data into a single byte array: Size _inputImageSize = new Size(width: streamFramesize.Width, height: streamFramesize.Height); processingThreadMessageQueue = new ConcurrentQueue <ButtonCommands>(); mergeStreamsThread = new Thread(() => MergeStreamsThreadInit(inputQueues: streamQueue0, outputQueue: displayQueue, messageQueue: processingThreadMessageQueue, inputImgSize: _inputImageSize)); mergeStreamsThread.IsBackground = true; mergeStreamsThread.Priority = ThreadPriority.Highest; mergeStreamsThread.Start(); // Initialize streaming state isStreaming = false; // Initialize Timer: displayTimer = new System.Windows.Forms.Timer(); displayTimer.Interval = 5; displayTimer.Tick += DisplayTimerEventProcessor; displayTimer.Enabled = true; }
public IObservable <SpinnakerDataFrame> Generate <TSource>(IObservable <TSource> start) { return(Observable.Create <SpinnakerDataFrame>((observer, cancellationToken) => { return Task.Factory.StartNew(async() => { IManagedCamera camera; lock (systemLock) { using (var system = new ManagedSystem()) { var index = Index; var cameraList = system.GetCameras(); if (index < 0 || index >= cameraList.Count) { throw new InvalidOperationException("No Spinnaker camera with the specified index was found."); } camera = cameraList[index]; cameraList.Clear(); } } try { camera.Init(); Configure(camera); camera.BeginAcquisition(); await start; var imageFormat = default(PixelFormatEnums); var converter = default(Func <IManagedImage, IplImage>); using (var cancellation = cancellationToken.Register(camera.EndAcquisition)) { while (!cancellationToken.IsCancellationRequested) { using (var image = camera.GetNextImage()) { if (image.IsIncomplete) { // drop incomplete frames continue; } if (converter == null || image.PixelFormat != imageFormat) { converter = GetConverter(image.PixelFormat, ColorProcessing); imageFormat = image.PixelFormat; } var output = converter(image); observer.OnNext(new SpinnakerDataFrame(output, image.ChunkData)); } } } } catch (SEHException ex) { observer.OnError(ex); throw; } catch (InvalidOperationException ex) { observer.OnError(ex); throw; } catch (SpinnakerException ex) { observer.OnError(ex); throw; } finally { camera.DeInit(); camera.Dispose(); } }, cancellationToken, TaskCreationOptions.LongRunning, TaskScheduler.Default); })); }
public Form1() { InitializeComponent(); system = new ManagedSystem(); // Print current Spinnaker library version info: LibraryVersion spinVersion = system.GetLibraryVersion(); Console.WriteLine( "Spinnaker library version: {0}.{1}.{2}.{3}\n\n", spinVersion.major, spinVersion.minor, spinVersion.type, spinVersion.build); // Find all Flir cameras on the system: managedCameras = system.GetCameras(); // Assert that exactly two cameras are found: int nCamsFound = managedCameras.Count; if (nCamsFound != nCameras) { Console.WriteLine("Need exactly two cameras, but {0} cameras were found. Disposing system.", nCamsFound.ToString()); managedCameras.Clear(); system.Dispose(); } // Create or select folder to write video data: sessionPaths = Util.SetDataWritePaths(animalName: Util.AnimalName.Charlie); // Initialize OryxSetupInfo Object to pass to camera constructors upon initialization: oryxSetupInfos = new Util.OryxSetupInfo[nCameras]; for (int i = 0; i < nCameras; i++) { oryxSetupInfos[i] = new Util.OryxSetupInfo(); } bool areAllCamSettingsIdentical = true; if (areAllCamSettingsIdentical) { Console.WriteLine("\n\n"); Console.WriteLine("Cameras have identical settings, shown here:"); oryxSetupInfos[0].PrintSettingsToLoad(); Console.WriteLine("\n\n"); } StreamArchitecture architecture = StreamArchitecture.ThreeLevelBasic; threadManager = new ThreadManager(architecture: architecture, sessionPaths: sessionPaths, managedCameras: managedCameras, oryxSetups: oryxSetupInfos); xBoxController = new XBoxController(mainForm: this, messageQueues: threadManager.managerBundle.messageQueues, streamGraph: threadManager.streamGraph); displayTimer = new System.Windows.Forms.Timer(); displayTimer.Interval = 2; displayTimer.Tick += DisplayTimerEventProcessor; displayTimer.Enabled = true; displayQueue = threadManager.managerBundle.mergeStreamsManager.output.displayQueue; threadManager.StartThreads(); }
// Example entry point; please see Enumeration_CSharp example for more // in-depth comments on preparing and cleaning up the system. public static int Start() { int result = 0; Program program = new Program(); // Since this application saves images in the current folder // we must ensure that we have permission to write to this folder. // If we do not have permission, fail right away. FileStream fileStream; try { fileStream = new FileStream(@"test.txt", FileMode.Create); fileStream.Close(); File.Delete("test.txt"); } catch { Console.WriteLine("Failed to create file in current folder. Please check permissions."); Console.WriteLine("Press enter to exit..."); Console.ReadLine(); return(-1); } // Retrieve singleton reference to system object ManagedSystem system = new ManagedSystem(); // Print out current library version LibraryVersion spinVersion = system.GetLibraryVersion(); Console.WriteLine("Spinnaker library version: {0}.{1}.{2}.{3}\n\n", spinVersion.major, spinVersion.minor, spinVersion.type, spinVersion.build); // Retrieve list of cameras from the system IList <IManagedCamera> camList = system.GetCameras(); Console.WriteLine("Number of cameras detected: {0}\n\n", camList.Count); // Finish if there are no cameras if (camList.Count == 0) { // Clear camera list before releasing system camList.Clear(); // Release system system.Dispose(); Console.WriteLine("Not enough cameras!"); Console.WriteLine("Done! Press Enter to exit..."); Console.ReadLine(); return(-1); } // // Run example on each camera // // *** NOTES *** // Cameras can either be retrieved as their own IManagedCamera // objects or from camera lists using the [] operator and an index. // // Using-statements help ensure that cameras are disposed of when // they are no longer needed; otherwise, cameras can be disposed of // manually by calling Dispose(). In C#, if cameras are not disposed // of before the system is released, the system will do so // automatically. // int index = 0; foreach (IManagedCamera managedCamera in camList) { using (managedCamera) { Console.WriteLine("Running example for camera {0}...", index); try { // Run example result = result | program.RunSingleCamera(managedCamera); } catch (SpinnakerException ex) { Console.WriteLine("Error: {0}", ex.Message); result = -1; } Console.WriteLine("Camera {0} example complete...\n", index++); } } // Clear camera list before releasing system camList.Clear(); // Release system system.Dispose(); Console.WriteLine("\nDone! Press Enter to exit..."); Console.ReadLine(); return(result); }
public IManagedImage RetrieveMonoImage() { IManagedImage imgResult = null; // Retrieve singleton reference to system object ManagedSystem system = new ManagedSystem(); // Retrieve list of cameras from the system IList <IManagedCamera> camList = system.GetCameras(); if (camList.Count < 1) { writeLog(String.Format("No camera detected. Aborted.\n\n")); return(null); } else { writeLog(String.Format("Number of cameras detected: {0}\n\n", camList.Count)); } // Use the first camera using (camList[0]) { writeLog(String.Format("Running example for the 1st camera...\n")); IManagedCamera cam = camList[0]; try { // Run for a camera // Retrieve TL device nodemap and print device information INodeMap nodeMapTLDevice = cam.GetTLDeviceNodeMap(); PrintDeviceInfo(nodeMapTLDevice); // Initialize camera cam.Init(); // Retrieve GenICam nodemap INodeMap nodeMap = cam.GetNodeMap(); /***** Acquire single BW image from the camera *****/ writeLog(String.Format("\n*** BW IMAGE ACQUISITION ***\n\n")); SetNodeMapItem(nodeMap, "AcquisitionMode", "Continuous"); cam.BeginAcquisition(); using (IManagedImage rawImage = cam.GetNextImage()) { if (rawImage.IsIncomplete) { writeLog(String.Format( "Image incomplete with image status {0}...\n", rawImage.ImageStatus)); imgResult = null; } else { // TODO: Need to return the acquired rawImage here. //IManagedImage monoImage = rawImage.Convert( // PixelFormatEnums.Mono16, ColorProcessingAlgorithm.EDGE_SENSING); IManagedImage monoImage = rawImage.Convert(PixelFormatEnums.Mono8); imgResult = monoImage; } } cam.EndAcquisition(); /***** Acquiring Complete *****/ // Deinitialize camera cam.DeInit(); } catch (SpinnakerException ex) { writeLog(String.Format("Error: {0}\n", ex.Message)); imgResult = null; } writeLog(String.Format("Camera example complete...\n")); } // Clear camera list before releasing system camList.Clear(); // Release system system.Dispose(); writeLog(String.Format("Done!\n")); return(imgResult); }
public MainWindow() { InitializeComponent(); time.Tick += new EventHandler(Time_Tick); time.Interval = 10; exposureControl.sliderName.Content = "曝光时间"; exposureControl.sliderCheck.Content = "手动曝光"; frameRateControl.sliderName.Content = "帧率"; frameRateControl.sliderCheck.Content = "手动帧率"; blackLevelControl.sliderName.Content = "灰度偏移"; blackLevelControl.sliderCheck.Content = "手动偏移"; GainControl.sliderName.Content = "增益"; GainControl.sliderCheck.Content = "手动增益"; acceptPointValue.sliderName.Content = "接受阈值"; acceptPointValue.sliderCheck.Content = "手动"; if (SavePath == null) { SavePath = "./"; } FileStream fileStream; try { fileStream = new FileStream(SavePath + "test.txt", FileMode.Create); fileStream.Close(); File.Delete("test.txt"); } catch { Console.WriteLine("权限不足"); return; } // 单例 system = new ManagedSystem(); // 输出当前库版本 LibraryVersion spinVersion = system.GetLibraryVersion(); Console.WriteLine("Spinnaker library version: {0}.{1}.{2}.{3}\n\n", spinVersion.major, spinVersion.minor, spinVersion.type, spinVersion.build); //输出相机参数-0 camList = system.GetCameras(); if (camList.Count == 0) { camList.Clear(); system.Dispose(); Console.WriteLine("无相机!"); return; } cam = camList[0]; INodeMap nodeMapTLDevice = cam.GetTLDeviceNodeMap(); PrintDeviceInfo(nodeMapTLDevice); // 为文件名检索设备序列号 // *** NOTES *** // 设备序列号可以放置其他设备覆盖本设备图像 // 图像ID和帧ID // deviceSerialNumber = ""; while (true) { try { cam.Init(); break; } catch (SpinnakerException e) { Console.WriteLine("init error"); Thread.Sleep(1000); } } while (cam.DeviceIndicatorMode.Value != DeviceIndicatorModeEnums.Active.ToString()) { Thread.Sleep(1000); } //相机参数初始化 cam.ExposureAuto.Value = ExposureAutoEnums.Continuous.ToString(); cam.AcquisitionFrameRateEnable.Value = true; frameRateManualDisable(); //cam.BlackLevelAuto.Value = BlackLevelAutoEnums.Continuous.ToString(); cam.GainAuto.Value = GainAutoEnums.Continuous.ToString(); Console.WriteLine("设备序列号为: {0}", cam.DeviceSerialNumber.Value); Console.WriteLine("曝光时间设置为 {0} us", cam.ExposureTime.Value); cam.DeviceLinkThroughputLimit.Value = cam.DeviceLinkThroughputLimit.Max; Console.WriteLine("当前带宽:{0}", cam.DeviceLinkThroughputLimit.Value); Console.WriteLine("当前帧率:{0} Hz", cam.AcquisitionFrameRate.Value); #if DEBUG // 判断是否禁用了心跳检测 if (DisableHeartbeat() != 0) { Console.WriteLine("心跳检测未禁用"); System.Windows.Application.Current.Shutdown(); } #endif //调用刷新控件 flushControl(); //接受点阈值 acceptPointValue.slider.Maximum = 255; acceptPointValue.slider.Minimum = 0; acceptPointValue.slider.Value = 60; //控件委托 #region exposureControl.setSliderEvent += () => { cam.ExposureTime.Value = exposureControl.slider.Value; }; exposureControl.setCheckedEvent += () => { cam.ExposureAuto.Value = ExposureAutoEnums.Off.ToString(); }; exposureControl.setUnCheckEvent += () => { cam.ExposureAuto.Value = ExposureAutoEnums.Continuous.ToString(); }; frameRateControl.setSliderEvent += () => { cam.AcquisitionFrameRate.Value = frameRateControl.slider.Value; }; frameRateControl.setCheckedEvent += frameRateManualEnable; frameRateControl.setUnCheckEvent += frameRateManualDisable; //blackLevelControl.setSliderEvent += () => { cam.BlackLevelAuto.Value = BlackLevelAutoEnums.Off.ToString(); }; blackLevelControl.slider.IsEnabled = false; GainControl.setSliderEvent += () => { cam.Gain.Value = GainControl.slider.Value; }; GainControl.setCheckedEvent += () => { cam.GainAuto.Value = GainAutoEnums.Off.ToString(); }; GainControl.setUnCheckEvent += () => { cam.GainAuto.Value = GainAutoEnums.Continuous.ToString(); }; #endregion acceptPointValue.sliderCheck.IsChecked = true; }