3 Star 2 Fork 0

BelievingHeart / RemoteVisionConsole

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README

这是什么?

一个视觉处理的容器应用. 一个页面对应一个视觉处理单元.

  • 一个视觉处理单元包含:
    1. 视觉的图像处理方法的实现(继承IVisionProcessor<T>的Processor类)
    2. 适配层面的配置参数配置(继承IVisionAdapter<T>的Adapter类)

能做什么?

  1. 离线运行图像文件,显示图像, 输出数据到sqlite数据库
  2. 接受来自上位机软件的byte[], 除实现离线运行的功能外, 可以反馈数据和结果到上位机软件
  3. 设置数据的上下限, 根据上下限信息判断测试项的结果. 通过IVisionCliet.GetBoundaryItems, 上位机程序可以获取上下限. 也可以通过IVsionClient.BoundaryItemsChanged事件来获取上下限数据的更新(目前仅在InProcessVisionClient实现)

特点?

  1. 预置图像显示, 图像保存, 运行异常处理, 穴位(Cavity)补偿运算逻辑,上下限设置以及测试项上下限判定,省去上位机开发者重复进行以上工作
  2. 分离上位机和图像处理程序, 避免图像处理代码中的内存问题导致上位机软件崩溃
  3. 可作为Prism模块嵌入上位机程序
  4. 作为独立应用时,通讯是基于ZeroMQ的, 因此上位机应用可以由任何有ZeroMQ库的语言来实现

短板和补救方法?

  1. 作为独立应用(使用DistributedVisionClientDistributedVisionRunner.App通信)时, 受ZeroMQ的Request-respond模式限制, 不能平行运算多个处理请求。如果实际上多次发送请求, 将这些请求排队处理。注: 作为Prism模块运行时(使用InProcessVisionClient和嵌入上位机的页面通信)支持多个处理请求同时进行。
  2. 独立使用时,通讯时间在图像数据较大时消耗较大。实测在i7-8565U, 1.8GHZ,4核心,内存2400MHZ 8GX2,的机器, 传送一组25,000,000 byte的数据平均耗时75ms. 建议的使用模式是, 项目前期阶段独立使用, 可以减少代码量,项目稳定后用Prism模块嵌入的方式使用, 节省CT.
  3. 受应用的设计限制,每一次只处理一个穴(Cavity)的数据,只支持以下的数据模式:
    • 一个byte[]等于一张图像
    • 一个byte[]等于多张图像, 图像传入后可以由自定义的方法切分, 即这些图像尺寸可以不一致。 这些图像共同来描述一个穴(Cavtiy), 例如三维重构, 厚度测量等
  4. 一张图像包含多个穴(Cavity)时, 可以在上位机端先切分图像, 然后分段请求处理
  5. 目前支持的数据类型有byte, byte(RGB), float, ushort, short, 其他数据类型的支持会在日后有需求时加入

使用(独立运行时)

视觉工程师

  1. 引用Nuget包DistributedVisionRunner.Interface, 继承IVisionProcessor<TData>

上位机工程师

  1. 引用Nuget包DistributedVisionRunner.Interface, 继承IVisionAdapter<TData>
  2. 引用DistributedVisionRunner.Client, 实例化DistributedVisionClient(独立应用时)或者InProcessVisionClient(使用Prism模块嵌入时), 实现同DistributedVisionRunner图像处理系统的数据交互
  3. DistributedVisionRunner.App新增页面, 加载视觉工程师定义的Processor类和上位机工程师的Adapter类即可

界面介绍

  1. 配置页面, 一个页面对应一个图像处理单元 Initialize
  2. 配置好的页面
    Initialize
  3. 详细设置, 包括保存数据图片设置, 补偿设置和上下限设置 Initialize Initialize Initialize

使用(作为ALC的Prism模块时), 同独立运行的使用方法

  1. 添加Nuget包DistributedVisionRunner.Module
  2. App.xaml.cs加入以下代码
protected override void ConfigureModuleCatalog(IModuleCatalog moduleCatalog)
{
   // Define method for logging messages from DistributedVisionRunnerModule
   var ea = Container.Resolve<IEventAggregator>();
   Action<LogItem> logMethod =
         logItem =>
         ea.GetEvent<LogEvent>().Publish(("General", logItem));

   // Configure module before adding to module
   DistributedVisionRunnerModule.ConfigureModule(logMethod, "VisionRegion", true);
   DistributedVisionRunnerModule.SetDefaultImageBackground(Theme.PrimaryColor.R, Theme.PrimaryColor.G, Theme.PrimaryColor.B);

   // Add module
   moduleCatalog.AddModule<DistributedVisionRunnerModule>();
}

Processor类和Adapter类的设计思想及任务划分

  1. Processor类是具体图像算法实现的单元, 在此单元内, 开发者(视觉工程师)只关心图像处理及其产生的原始数据以及需要显示的图像的输出和
  2. Adapter类(由上位机工程师实现)负责给出图像显示相关的参数, 定义图像文件转换成数据的方法以及定义byte数组转换成目标类型数组的方法.

数据的流动

Initialize 原始数据由Processor类产生, 全部都是浮点数, 数据的名称由Processor.RawOutputNames指定, 最终存放在DistributedVisionRunnerResultPack.RawResults中. 假若Processor.EnableWeighting=true, 则原始数据会根据视觉工程师给出的公式经过补偿服务后, 存放在DistributedVisionRunnerResultPack.WeightedResults中. 上位机工程师还可以在Adapter类中指定预留的输出项Adapter.ReservedOutputNames, 这个输出是通过由上位机工程师实现的方法(Adapter.GetResultTypeAndReservedOutputs)结合前两个结果(DistributedVisionRunnerResultPack.RawResultsDistributedVisionRunnerResultPack.WeightedResults)得出的.

图片的保存逻辑

  1. 假如在视觉工程师负责的APIIVisionProcess.Process(byte[] data, string productType, int cavity)有未处理的异常抛出, 在在线运行的情况下, 首先ResultType.ERROR会发送给上位机, 然后图像和错误信息(包括stack trace, 类型, 信息)会保存到图像文件夹下的Error文件夹
  2. 假如视觉工程师已经在IVisionProcess.Process(byte[] data, string productType, int cavity)内部完成try和catch, 但是上位机工程师认为还需要根据视觉工程师的处理结果再得出错误信息并个性化保存. 那么上位机工程师可以在(ResultType resultType, Statistics reservedResults, string errType, string errMessage) IVisionAdapter.GetResultTypeAndReservedOutputs(Statistics rawStatistics, Dictionary<string, double> weightedDoubleData)返回ResultType.ERROR和特定的errTypeerrMessage, 图片就会保存在图像文件夹下的CustomError的文件夹下

依赖项

  1. 用户管理服务: 在Release中的CygiaServices安装包
  2. Sqlite管理服务: 在Release中的CygiaServices安装包
  3. 捞Sqlite数据的应用: 到此处下载Release并安装

空文件

简介

取消

发行版 (9)

全部

贡献者

全部

近期动态

加载更多
不能加载更多了
1
https://gitee.com/believingheart/remote-vision-console.git
git@gitee.com:believingheart/remote-vision-console.git
believingheart
remote-vision-console
RemoteVisionConsole
master

搜索帮助

14c37bed 8189591 565d56ea 8189591