/// <summary> /// 更新集合 /// </summary> public static void UpdateAssembly() { VisionFrameAssemblys.Clear(); //遍历目录 if (Directory.Exists(VisionFrameDllRootPath)) { var directoryInfo = new DirectoryInfo(VisionFrameDllRootPath); foreach (var item in directoryInfo.GetDirectories()) { //获取集合 var dllPath = $"{VisionFrameDllRootPath}/{item.Name}/{item.Name}.dll"; if (File.Exists(dllPath)) { var assembly = Assembly.LoadFrom(dllPath); EVisionFrameType visionFrameType = ConvertToEVisionFrameType(item.Name); if (visionFrameType == EVisionFrameType.Unknown) { continue; } //将dll添加到集合字典中 VisionFrameAssemblys.Add(visionFrameType, assembly); } } } }
/// <summary> /// 创建视觉框架实例 /// </summary> /// <param name="visionFrameType">视觉框架类型</param> /// <returns>视觉框架实例</returns> public static IVisionFrame CreateInstance(EVisionFrameType visionFrameType) { try { if (VisionFrameAssemblys.ContainsKey(visionFrameType)) { //创建视觉框架实例 foreach (var item in VisionFrameAssemblys[visionFrameType].ExportedTypes) { if (item.Name == "VisionFrame") { object obj = VisionFrameAssemblys[visionFrameType].CreateInstance(item.FullName); if (obj is IVisionFrame) { return(obj as IVisionFrame); } } } } throw new FileNotFoundException($"{nameof(visionFrameType)} is not found"); } catch (Exception) { throw; } }
/// <summary> /// 创建Scene新实例 /// </summary> /// <param name="sceneName">场景名</param> /// <param name="eVisionFrame">视觉框架枚举</param> /// <param name="visionOperaFile">算子文件路径</param> public Scene(string sceneName, EVisionFrameType eVisionFrame, string visionOperaFile) : this(sceneName, eVisionFrame) { if (VisionFrame == null) { throw new ArgumentException("VisionFrame cannot be null"); } if (string.IsNullOrEmpty(visionOperaFile) || !File.Exists(visionOperaFile)) { throw new FileNotFoundException("visionOperaFile invalid"); } //还原视觉算子 SetVisionOperaFile(visionOperaFile); }
/// <summary> /// 创建Scene新实例 /// </summary> /// <param name="sceneName">场景名</param> /// <param name="eVisionFrame">视觉框架枚举</param> /// <param name="visionOperaFile">算子文件路径</param> /// <param name="cameraSerial">相机序列号</param> public Scene(string sceneName, EVisionFrameType eVisionFrame, string visionOperaFile, string cameraSerial) : this(sceneName, eVisionFrame, visionOperaFile) { if (VisionFrame.IsEnableCamera) { CameraSerial = cameraSerial; //若相机无效,则不报异常 try { SetCamera(cameraSerial); } catch (InvalidOperationException) { //若打开相机失败,不抛异常 } } }
/// <summary> /// 创建Scene新实例 /// </summary> /// <param name="sceneName">场景名</param> /// <param name="eVisionFrame">视觉框架枚举</param> public Scene(string sceneName, EVisionFrameType eVisionFrame) : this(sceneName) { EVisionFrameType = eVisionFrame; VisionFrame = VisionFrameFactory.CreateInstance(eVisionFrame); }