本文目錄一覽:
- 1、利用圖像識別技術實現指針式儀錶數據的自動採集
- 2、Python中數據模塊化你不容錯過的庫!
- 3、python可視化神器——pyecharts庫
- 4、如何正確讀取指針式儀錶讀數及如何正確選擇個測量量程
- 5、python可以直接控制測試儀錶嗎
- 6、LabVIEW儀錶盤識別(實戰篇—6)
利用圖像識別技術實現指針式儀錶數據的自動採集
指針儀錶識別技術方案
針對採集的儀錶圖像,一般採用先採用 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儀錶的讀取,可以通過分析數字所在區域的線灰度分布來實現。數碼管關閉時,灰度曲線上的像素值分布較為集中,反之則分布較為分散。在讀取儀錶過程中,應考慮圖像的亮度漂移、對比度、噪聲和分辨率對讀數準確性的影響。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/193766.html