您的位置:

python圆盘指针仪表检测(python 仪表盘)

本文目录一览:

利用图像识别技术实现指针式仪表数据的自动采集

指针仪表识别技术方案

针对采集的仪表图像,一般采用先采用 Gaussian Filtering 进行图形降噪处理,针对预处理的图

像采用 Canny Edge Detection 的方法做边缘检测,通过精确过滤各种非关键目标,找到仪表和

面板的轮廓.通过Hough变换做仪表刻度和仪表指针检测,也可以通过Hough变换做液位的检

测。对图像中需要做 image classfition 的目标,采用深度学习的方法,如数字识别,仪表样式识别

还有自然场景下的文本位置检测等的。模型采用深度学习的中卷积神经网络模型 CNN,根据

图片的特征搭建不同的网络模型. 指针式仪表识别是主要针对指针式仪表,这是一个通过视频图像对工业仪表识别进行自动识别. 识别的流程是:采用一些特殊的方法来完成有效区域筛选以及仪表的指针定位,根据表盘中心到指针回转中心的连线与子表盘 0 刻度线的夹角等特征,计算出子表盘 0 刻度线与指针指向线段的夹角,进一步识别并判读出指针读数。DAQ-IOT君实验结果表明,该定位及识别算法计算简单,具有较高的准确率,克服了表盘随机角度倾斜对读数识别算法的影响。

Python中数据模块化你不容错过的库!

1、Scikit Learn

在沉溺于“深度学习”之前,所有人都应当从使用Scikit Learn来开启自己的机器学习之旅。Scikit Learn有六大主要模块,如下:

· 数据预处理

· 维度缩减

· 数据回归

· 数据分类

· 数据聚类分析

· 模型选择

只要能用好Scikit Learn,就已经算得上是一名优秀的数据科学家了。

2、Tensorflow

Tensorflow是由谷歌推出的开源机器学习库。它最受欢迎的功能便是Tensorboard上的数据流图像。

Tensorboard是一个基于网页自动生成的仪表盘,它将数据学习流和结果进行了可视化处理,这一功能对于排错和展示都十分有用。

3、 PyTorch

PyTorch是由Facebook发布的一个开源库,用作Python的公用机器学习框架。与Tensorflow相比,PyTorch的语句更加适用于Python。正因此,学习使用PyTorch也更加容易。

作为一个专注于深度学习的库,PyTorch还具有非常丰富的应用程序接口函数和内置函数来协助数据科学家更加快捷地训练自己的深度学习模型。

更多Python知识,请关注Python视频教程!

python可视化神器——pyecharts库

无意中从今日头条中看到的一篇文章,可以生成简单的图表。据说一些大数据开发们也是经常用类似的图表库,毕竟有现成的,改造下就行,谁会去自己造轮子呢。

pyecharts是什么?

pyecharts 是一个用于生成 Echarts 图表的类库。Echarts 是百度开源的一个数据可视化 JS 库。用 Echarts 生成的图可视化效果非常棒, pyecharts 是为了与 Python 进行对接,方便在 Python 中直接使用数据生成图 。使用pyecharts可以生成独立的网页,也可以在flask、django中集成使用。

安装很简单:pip install pyecharts

如需使用 Jupyter Notebook 来展示图表,只需要调用自身实例即可,同时兼容 Python2 和 Python3 的 Jupyter Notebook 环境。所有图表均可正常显示,与浏览器一致的交互体验,简直不要太强大。

参考自pyecharts官方文档:

首先开始来绘制你的第一个图表

使用 Jupyter Notebook 来展示图表,只需要调用自身实例即可

add() 主要方法,用于添加图表的数据和设置各种配置项

render() 默认将会在根目录下生成一个 render.html 的文件,文件用浏览器打开。

使用主题

自 0.5.2+ 起,pyecharts 支持更换主体色系

使用 pyecharts-snapshot 插件

如果想直接将图片保存为 png, pdf, gif 格式的文件,可以使用 pyecharts-snapshot。使用该插件请确保你的系统上已经安装了 Nodejs 环境。

安装 phantomjs $ npm install -g phantomjs-prebuilt

安装 pyecharts-snapshot $ pip install pyecharts-snapshot

调用 render 方法 bar.render(path='snapshot.png') 文件结尾可以为 svg/jpeg/png/pdf/gif。请注意,svg 文件需要你在初始化 bar 的时候设置 renderer='svg'。

图形绘制过程

基本上所有的图表类型都是这样绘制的:

chart_name = Type() 初始化具体类型图表。

add() 添加数据及配置项。

render() 生成本地文件(html/svg/jpeg/png/pdf/gif)。

add() 数据一般为两个列表(长度一致)。如果你的数据是字典或者是带元组的字典。可利用 cast() 方法转换。

多次显示图表

从 v0.4.0+ 开始,pyecharts 重构了渲染的内部逻辑,改善效率。推荐使用以下方式显示多个图表。如果使是 Numpy 或者 Pandas,可以参考这个示例

当然你也可以采用更加酷炫的方式,使用 Jupyter Notebook 来展示图表,matplotlib 有的,pyecharts 也会有的

Note: 从 v0.1.9.2 版本开始,废弃 render_notebook() 方法,现已采用更加  pythonic  的做法。直接调用本身实例就可以了。

比如这样

还有这样

如果使用的是自定义类,直接调用自定义类示例即可

图表配置

图形初始化

通用配置项

xyAxis:平面直角坐标系中的 x、y 轴。(Line、Bar、Scatter、EffectScatter、Kline)

dataZoom:dataZoom 组件 用于区域缩放,从而能自由关注细节的数据信息,或者概览数据整体,或者去除离群点的影响。(Line、Bar、Scatter、EffectScatter、Kline、Boxplot)

legend:图例组件。图例组件展现了不同系列的标记(symbol),颜色和名字。可以通过点击图例控制哪些系列不显示。

label:图形上的文本标签,可用于说明图形的一些数据信息,比如值,名称等。

lineStyle:带线图形的线的风格选项(Line、Polar、Radar、Graph、Parallel)

grid3D:3D笛卡尔坐标系组配置项,适用于 3D 图形。(Bar3D, Line3D, Scatter3D)

axis3D:3D 笛卡尔坐标系 X,Y,Z 轴配置项,适用于 3D 图形。(Bar3D, Line3D, Scatter3D)

visualMap:是视觉映射组件,用于进行『视觉编码』,也就是将数据映射到视觉元素(视觉通道)

markLinemarkPoint:图形标记组件,用于标记指定的特殊数据,有标记线和标记点两种。(Bar、Line、Kline)

tooltip:提示框组件,用于移动或点击鼠标时弹出数据内容

toolbox:右侧实用工具箱

图表详细

Bar(柱状图/条形图)

Bar3D(3D 柱状图)

Boxplot(箱形图)

EffectScatter(带有涟漪特效动画的散点图)

Funnel(漏斗图)

Gauge(仪表盘)

Geo(地理坐标系)

GeoLines(地理坐标系线图)

Graph(关系图)

HeatMap(热力图)

Kline/Candlestick(K线图)

Line(折线/面积图)

Line3D(3D 折线图)

Liquid(水球图)

Map(地图)

Parallel(平行坐标系)

Pie(饼图)

Polar(极坐标系)

Radar(雷达图)

Sankey(桑基图)

Scatter(散点图)

Scatter3D(3D 散点图)

ThemeRiver(主题河流图)

TreeMap(矩形树图)

WordCloud(词云图)

用户自定义

Grid 类:并行显示多张图

Overlap 类:结合不同类型图表叠加画在同张图上

Page 类:同一网页按顺序展示多图

Timeline 类:提供时间线轮播多张图

统一风格

注:pyecharts v0.3.2以后,pyecharts 将不再自带地图 js 文件。如用户需要用到地图图表,可自行安装对应的地图文件包。

地图文件被分成了三个 Python 包,分别为:

全球国家地图:

echarts-countries-pypkg

中国省级地图:

echarts-china-provinces-pypkg

中国市级地图:

echarts-china-cities-pypkg

直接使用python的pip安装

但是这里大家一定要注意,安装完地图包以后一定要重启jupyter notebook,不然是无法显示地图的。

显示如下:

总得来说,这是一个非常强大的可视化库,既可以集成在flask、Django开发中,也可以在做数据分析的时候单独使用,实在是居家旅行的必备神器啊

如何正确读取指针式仪表读数及如何正确选择个测量量程

这个简单,一般工厂用电为三百八十伏,打到五百伏上量,它没有五百伏的档,看五十伏的那一行(读数为三十八左右,加个零就可以了,三百八)煤矿企业一般是六百六十伏,打到一千伏的档,看十伏那一行,照明、电子进线等一般为二百二十伏,打到二百五十伏,相应的档位看看相应的表数,如果对一个电压没数,一般都是由大到小打档位,这个书上也有,师傅一讲就明白,很简单

python可以直接控制测试仪表吗

可以,你可以阅读一本书

《真实世界的Python仪器监控:数据采集与控制系统自动化》主要探讨如何运用Python 快速构建自动化仪器控制系统,帮助读者了解如何通过自行开发应用程序来监视或者控制仪器硬件。本书内容涵盖了从接线到建立接口,直到完成可用软件的整个过程。

《真实世界的Python仪器监控:数据采集与控制系统自动化》适合需要进行仪表控制、机器人、数据采集、过程控制等相关工作的读者阅读参考。

LabVIEW仪表盘识别(实战篇—6)

机器视觉系统中常需要从各类仪表的显示屏图像中提取其读数。这些仪表的显示屏可以分为模拟指针显示屏、LCD显示屏和LED显示屏等。

观察模拟仪表可以发现,它们的刻度被标记在一个由初始值和满量程值限定的圆弧范围内,仪表的指针基于圆弧的圆心旋转以指示当前值。由此不难想到先使用两条标记初始值和满量程值的线段,加上一个标记圆心位置的点来校准仪表,然后就可以检测指针的位置,并通过该位置占满量程的比例来确定当前读数。三点法是另一种校准此类仪表的方法。它在仪表初始值、满量程值位置上分别选择一点,再选择指针旋转的圆心,这样圆心点即可与其他两点分别构成线段来实现仪表校准。

指针型显示屏常用于速度表、流量表、电压和电流表等,如下所示:

仪表读取功能还能从具有LCD/LED显示屏的仪表中检测包含单个或多个七段数码管类型数字的区域,并读取包括小数点等分隔符的数值。

LCD/LED显示屏则常采用7段数码管来显示数据,如下所示:

Nl Vision提供了读取上述几种仪表显示的函数,它们对复杂的算法进行了封装,位于LabVIEW的视觉与运动→Machine Vision→Instrument Readers函数选板中,如下图所示:

其中IMAQ Get Meter、IMAQ Get Meter 2和IMAQ ReadMeter用于读取模拟仪表的读数,IMAQ Get LCD ROI、IMAQ Read LCD和IMAQRead Single Digit用于读取使用7段数码管类型的LCD/LED仪表的读数。

函数说明及使用可参见帮助手册:

基于NI Vision的仪表读取函数可快速构建需要读取仪表值的机器视觉系统。通过一个仪表读取函数读取油表显示值的实例,了解模拟仪表识别的应用。

整个过程可分为学习和读数两个阶段。在学习阶段,程序先使用两个IMAQ Convert Line to ROI函数指定了仪表的初始值和满量程值位置。随后IMAQ Group ROI对两个线段ROI进行组合,作为仪表学习函数IMAQ Get Meter的输入。学习过程完成后,会输出仪表指针的旋转中心位置和一个数组。其中数组元素代表仪表初始值和满量程值之间一条沿着刻度的弧线上各点的位置,这些点将用于在读数阶段计算仪表的读数。

读数阶段基于学习阶段的输出来完成,IMAQ Read Meter可以通过检测仪表指针的位置来确定当前读数所在位置占满量程的百分比。而基于该百分比和满量程值,就可以计算仪表的真实读数。

程序设计如下所示:

程序运行结果中,除了显示读数值,还在图像中显示了ROI、学习过程所返回数组中的各点以及指针指向的位置,效果如下所示:

IMAQ Get LCDROI、IMAQ Read LCD可检测包含多个七段数码管类型数字的区域,并读取包括小数点等分隔符在内的数值。IMAQ Read Single Digit则用于读取单个七段数码管类型的数值。与读取模拟仪表数值的过程类似,读取LCD仪表数值的过程也包括学习和读数两个阶段。

学习阶段需要基于所有数字的七段数码管全部打开时的图像(全部为数字8)来定位各个数字所在的矩形范围。读数阶段则通过分析7段数码管数字各段的线灰度分布以确定读数结果。

下图显示了仪表读取函数基于线灰度分布识别LCD/LED数码管显示的原理,其中数字为各段数码管的索引。

上图(a)显示了背景为白色且七段数码管全部打开时的情况,其中数字为各段数码管的索引。假定已在学习阶段从图像中确定了各个数字所在的矩形位置,就可以在水平和竖直方向上设置与各段数码管交叉的线段型ROI,用于后续分析。

由于数码管关闭时,其图像灰度与背景灰度接近,因此线ROI灰度曲线上的像素值分布较为集中。而数码管打开时,因数码段图像灰度与背景反差较大,线ROI灰度曲线上的像素值分布较为分散,如上图(b)所示。

标准差可用来衡量一组数据的分散程度,因此通过计算线ROI上像素灰度的标准差,并为其设置阈值即可判断数码管的开闭。综合考虑7个数码管的各种开闭组合,就能得到其显示的数值。而重复该过程就能读取LCD显示屏中的多个数字。

由于LCD/LED仪表读取函数基于线灰度分布来判断数码管的开闭,因此图像的亮度漂移(Light Drift)、对比度、噪声和分辨率将直接影响其读数的准确性。

通过一个读取LCD仪表显示值的实例,了解LCD/LED显示屏识别的应用方法,程序设计思路如下所示:

程序总体上可分为使用IMAQ Get LCDROI的学习和使用IMAQ Read LCD的读数两大部分。

程序开始先读入仪表所有数字均为8时的图像LCD0.jpg,并调用IMAQ Get LCD ROI,从指定的矩形ROI中搜索各个7段数码管数字所在的矩形位置;

一旦获得各个数字位置所在的范围,程序就读取待测图像LCD1.jpg,调用IMAQ Read LCD分析各个数字所在的范围内7个数码管的显示情况,以判断最终读数;

仪表学习和读取过程均使用线灰度分布的标准差阈值Threshold来判断数码管的开闭,而且IMAQ Read LCD还支持数字的+/-符号和小数点的读取;

IMAQ Read LCD以浮点数、字符串以及元素为图形的数组返回所读取到的值,其中字符串中的每个字符用小数点进行分割。

程序实现如下所示:

程序运行效果如下所示:

仪表和条码读取是机器视觉系统的常用功能。常见的各类仪表可按显示方式分为模拟指针显示屏、LCD显示屏和LED显示屏等几大类。

机器视觉系统可以使用双线法或三点法,对模拟显示屏类型的仪表进行校准和读取。对七段数码管类型显示数字的LCD/LED仪表的读取,可以通过分析数字所在区域的线灰度分布来实现。数码管关闭时,灰度曲线上的像素值分布较为集中,反之则分布较为分散。在读取仪表过程中,应考虑图像的亮度漂移、对比度、噪声和分辨率对读数准确性的影响。