資料介紹
描述
介紹
在美國,全國約有 200 萬公里的污水管道,為 2.4 億美國公民提供服務。據(jù)報道,美國每年至少有 23,000–75,000 起下水道管道故障,這會向環(huán)境排放多達 3–100 億加侖的未經處理的污水。這會導致巨大的經濟損失、水污染,并威脅到公共健康。
這些下水道管道需要每年維護,以保持正常運行并避免下水道溢出。在大多數(shù)情況下,下水道檢查由專家檢查員在現(xiàn)場進行,他們通常使用帶有攝像頭的遙控機器人手動檢查下水道的內部結構。這個過程非常耗時,而且由于工作的困難和令人厭煩的性質,時間常常會導致對下水道管道的檢查有缺陷。
小下水道
TinySewer 是一個獨立的攝像頭模塊,可使用 tinyML 識別下水道缺陷。該模塊旨在安裝在現(xiàn)有的機器人下水道檢查平臺上,為平臺提供機器視覺功能,以在檢查過程中識別下水道故障。

該模塊允許自主下水道檢查并減少檢查員的工作量。檢查員可以簡單地緩慢駕駛汽車并觀察屏幕上的 TinySewer 應用程序是否有任何檢測,或者他們可以停下來手動檢查。此外,TinySewer 將準確判斷存在哪種類型的故障,因此無需專業(yè)的下水道檢查員、普通檢查員甚至入門級檢查員就足夠了。
為了進一步支持自主檢測,TinySewer 客戶端應用程序在視頻時間線上記錄所有帶有檢測標簽的鏡頭,以便檢查員查看鏡頭并輕松選擇故障發(fā)生的時間點。這允許檢查員在進行下水道檢查的同時處理其他任務。
可擴展性
在可擴展性方面,TinySewer 非常便宜,因為它每臺僅需 150 美元左右,并且可以輕松集成到現(xiàn)有的機器人系統(tǒng)或下水道檢查工具中。此外,TinySewer 強大的故障檢測系統(tǒng)允許創(chuàng)建一個更大的系統(tǒng),其中自主下水道檢查機器人定期進行下水道檢查并將帶有缺陷報告的鏡頭發(fā)送到單個主機計算機可以對各種下水道故障報告進行分類并指定人員修復有缺陷的下水道.

低功耗能力

TinySewer 使用 Arduino Portenta H7 作為其主要計算單元。Arduino Portenta H7 采用雙核低功耗 Cortex M7 處理器,有助于降低功耗。
此外,TinySewer 允許其操作員在檢查待機或完成時關閉攝像頭。這將總共節(jié)省大約 40mA。最后,操作員可以選擇關閉 Tiny Sewer,這將使設備進入深度睡眠模式,直到有外部中斷將其喚醒。
原理圖

TinySewer 模塊包含一個帶有外圍設備的 Arduino Portenta 微控制器,包括一個通過高密度連接器連接的 Vision Shied,用于相機饋送。還有兩個直接連接到 Arduino Portenta PH15 引腳并由 PWM 控制的白色 LED。一切都由 5V、2.4 安培便攜式電池供電。
套管
TinySewer外殼使用 PLA 燈絲制成,可以使用本文提供的文件從 3D 打印機輕松打印。外殼包括頂部、底部和蓋子。

該裝置如下組裝,Arduino Portenta H7 先進入,然后將兩個 LED 放在頂部 2 個中間孔上,并將它們連接到 Arduino Portenta H7 的電線上。然后將頂部放在底部,然后在 4 個角上放 4 個 m3 螺釘。最后,將蓋子蓋在裸露的插銷部分上,以防止水和灰塵進入設備內部。


該模型
TinySewer 使用深度學習神經網(wǎng)絡架構來分類和識別各種下水道故障類型。目前,TinySewer 可以以至少 85% 的置信度檢測四種最常見的下水道故障類型(裂縫、根部侵入、阻塞、位移)

該模型是使用Edge Impulse機器學習平臺創(chuàng)建的。首先,我從ScienceData獲取圖像。數(shù)據(jù)集附帶一個 CSV,其中包含圖像名稱及其故障類型。我只是創(chuàng)建了一個簡單的 python 腳本來讀取這個 CSV 并將圖像分類到其各自的故障文件夾中。然后將這些圖像上傳到 Edge Impluse 進行訓練。總的來說,我們的模型有 5 個不同的類別:正常、裂縫-斷裂-塌陷、障礙物、根部和位移。
接下來,我將創(chuàng)建一個沖動頁面來設置工作流程。選擇 96x96 作為圖像寬 x 高,處理塊作為圖像,遷移學習圖像,然后單擊“生成參數(shù)”。

接下來,轉到圖像選項卡以生成特征參數(shù)。請記住為顏色深度選擇灰度,因為 Arduino Portenta Vision Shield 是單色相機。

最后,選擇遷移學習選項卡來訓練您的模型。對于 TinySewer,我使用 MobileNetV2,學習率為 0.35,最后一層有 40 個神經元。

該模型使用 50 個 epoch 進行訓練,數(shù)據(jù)增強開啟。該模型整體準確率在94%左右。

最后,為 Arduino Portenta 生成模型文件和標簽文件。我轉到部署選項卡并選擇 OpenMV 并單擊構建。這將生成一個 zip 文件,其中包括label.txt (標簽文件)、train.tflite (模型文件)和 ei_image_classification.py(python 分類腳本)。將label.txt和train.tflite復制并粘貼到 Arduino Portenta 內部存儲中。該腳本需要修改以提供 WLAN、視頻和數(shù)據(jù)傳輸功能。這些修改將在固件部分討論

固件
固件是使用 MicroPython 制作的,它只是 python3 的一個實現(xiàn),帶有一個標準 Python 庫的子集,經過優(yōu)化可以在微控制器上運行。
首先是設置wifi,這可以通過使用WLAN方法簡單地完成。然后創(chuàng)建一個套接字端口,以便客戶端可以與同一網(wǎng)絡上的 TinySewer 通信。
# Create server socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
# Bind and listen
print(PORT)
s.bind([HOST, PORT])
s.listen(5)
# Set server socket to blocking
s.setblocking(True)
# Create server socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, True)
# Bind and listen
print(PORT)
s.bind([HOST, PORT])
s.listen(5)
接下來,程序初始化camera對象、MQTT對象,并設置變量load為model和label
# Init Camera
sensor.reset()
sensor.set_framesize(sensor.QVGA)
sensor.set_pixformat(sensor.GRAYSCALE)
# Load in Model and labels
net = "trained.tflite"
labels = [line.rstrip('\n') for line in open("labels.txt")]
#Setup MQTT
payload = MQTTClient("openmv", "test.mosquitto.org", port=1883)
payload.connect()
接下來我們定義流式傳輸函數(shù),該流式傳輸函數(shù)使用 MJPEG 協(xié)議將來自 TinySewer 攝像頭的視頻流傳輸回客戶端應用程序,
def start_streaming(s):
print ('Waiting for connections..')
client, addr = s.accept()
# set client socket timeout to 5s
client.settimeout(5.0)
print ('Connected to ' + addr[0] + ':' + str(addr[1]))
# Read request from client
data = client.recv(1024)
# Should parse client request here
# Send multipart header
client.sendall("HTTP/1.1 200 OK\r\n" \
"Server: OpenMV\r\n" \
"Content-Type: multipart/x-mixed-replace;boundary=openmv\r\n" \
"Cache-Control: no-cache\r\n" \
"Pragma: no-cache\r\n\r\n")
# FPS clock
clock = time.clock()
# Start streaming images
while (True):
clock.tick() # Track elapsed milliseconds between snapshots().
frame = sensor.snapshot()
cframe = frame.compressed(quality=35)
predict = prediction(frame)
#print(predict)
header = "\r\n--openmv\r\n" \
"Content-Type: image/jpeg\r\n"\
"Content-Length:"+str(cframe.size())+"\r\n\r\n"
client.sendall(header)
client.sendall(cframe)
#client.sendall(bytes('POST /%s HTTP/1.0\r\nHost: 127.0.0.1:9990\r\n\r\n' % (predict), 'utf8'))
payload.publish("openmv/test", str(predict))
payload.check_msg() # poll for messages.
print(clock.fps())
接下來,我定義了一種預測方法,它只查看當前幀并使用 tinyML 模型計算每個標簽的置信度。標簽和各自的置信度被連接成一個字符串,然后通過 MQTT 發(fā)送到客戶端應用程序
def prediction(img):
prediction = ""
#print("predict call")
for obj in tf.classify(net, img, min_scale=1.0, scale_mul=0.8, x_overlap=0.5, y_overlap=0.5):
#print("**********\nPredictions at [x=%d,y=%d,w=%d,h=%d]" % obj.rect())
#frame.draw_rectangle(obj.rect())
# This combines the labels and confidence values into a list of tuples
predictions_list = list(zip(labels, obj.output()))
#prediction = predictions_list[0][1] #defect confidence
for i in range(len(predictions_list)):
#print("%s = %f" % (predictions_list[i][0], predictions_list[i][1]))
label = str(predictions_list[i][0])
confident = str(predictions_list[i][1])
prediction += label + ":" + confident + ","
#name = (predictions_list[i][0])
#if label != "normal" :
#prediction = predictions_list[i][1]
return prediction
然后我有一個 lightcontrol() 方法來控制兩個 LED 的亮度。該方法采用 0 到 100 之間的整數(shù),0 表示最亮,100 表示沒有光
def lightControl(percent):
for k, pwm in pwms.items():
tim = Timer(pwm.tim, freq=1000) # Frequency in Hz
ch = tim.channel(pwm.ch, Timer.PWM, pin=Pin(pwm.pin), pulse_width_percent=percent)
最后,還有一個設置初始光照值的主while循環(huán),稱為視頻流函數(shù)。
while (True):
try:
lightControl(50)
start_streaming(s)
print("main call")
except OSError as e:
print("socket error: ", e)
#sys.print_exception(e)
完整的實現(xiàn)在 Github 上名為 sewer.py 的文件中
軟件
該軟件是使用名為 Electron 的框架制作的。Electron 允許使用Node.js等 Web 技術開發(fā)桌面 GUI 應用程序。TinySewer 客戶端分為兩個選項卡。第一個選項卡包含來自 TinySewer 的視頻流、用于錄制視頻的按鈕、用于燈光控制的按鈕以及當前下水道故障及其置信度的顯示框。

第二個選項卡用于視頻分析。Stream 會自動保存為 .mp4 視頻文件,可以回放以供進一步分析。此外,還有一個視頻時間線,其中包含檢測到下水道故障時的持續(xù)時間亮點

小下水道在行動
?
- 滿足大功率系統(tǒng)不斷增長的故障檢測需求
- 流量計-飛貓系列3
- 直流接地故障檢測原理分析及接地故障種類 查找方法
- 機器學習在故障檢測與診斷領域中的應用綜述 57次下載
- 基于CPCI總線的航天器通信信號設備故障檢測 12次下載
- 模塊化多電平儲能系統(tǒng)開路故障診斷方法 4次下載
- 氣體傳感器檢測設備的應用 9次下載
- 克服基于驅動的故障功率檢測方法的技術挑戰(zhàn) 7次下載
- 功放的故障檢測與維修技巧 37次下載
- 基于ZigBee網(wǎng)絡的下水道安全監(jiān)測系統(tǒng) 2次下載
- 導航系統(tǒng)故障檢測與診斷技術綜述 45次下載
- 火炮故障檢測系統(tǒng)設計及精度問題研究 22次下載
- 檢測太陽能發(fā)電系統(tǒng)接地故障的裝置和方法
- 基于GSM短消息的地下水水位自動測報系統(tǒng)
- 雷達故障自動檢測系統(tǒng)
- 電動機故障檢測方法有哪些 1852次閱讀
- 功率分析儀的常見故障和原因分析 730次閱讀
- CAN收發(fā)器故障檢測電路及算法 2021次閱讀
- 空調技術:使用“故障自檢”功能檢測故障 1535次閱讀
- 基于分流器的故障檢測方法 1637次閱讀
- 基于物聯(lián)網(wǎng)與無線網(wǎng)絡技術實現(xiàn)地下水監(jiān)測系統(tǒng)的設計 1735次閱讀
- 盲孔、通孔和埋孔的區(qū)別 5.1w次閱讀
- 電路故障檢測的8種判斷方法 6.5w次閱讀
- 投入式液位計故障判斷_投入式液位計故障檢測方法 3855次閱讀
- 電磁離合器的檢測及常見故障解決 8552次閱讀
- 便攜式智能電表充值故障檢測系統(tǒng)的原理及設計 1006次閱讀
- 監(jiān)控系統(tǒng)故障檢測及處理 6656次閱讀
- 基于物聯(lián)網(wǎng)技術的下水道溢流監(jiān)測系統(tǒng)解決下水道溢流 6813次閱讀
- CDMA 系統(tǒng)的閉環(huán)功率控制方法以及高精度RF功率檢測器的應用實現(xiàn)介紹 1127次閱讀
- 基于AD7705的在線激光功率檢測系統(tǒng)設計 3485次閱讀
下載排行
本周
- 1DC電源插座圖紙
- 0.67 MB | 1次下載 | 免費
- 2AN84-線性技術雜志電路集,第一卷第四集
- 2.28MB | 次下載 | 免費
- 3AN43-橋式電路
- 3.64MB | 次下載 | 免費
- 4AN69-LT1575超快線性控制器提供快速瞬態(tài)響應電源
- 218.44KB | 次下載 | 免費
- 5AN98-2004年秋季的信號源、調理器和電源電路
- 864.98KB | 次下載 | 免費
- 6高頻7代電源說明書
- 1.04 MB | 次下載 | 免費
- 7AN-616:AD9430評估板對XTAL振蕩器時鐘的修改
- 162.24KB | 次下載 | 免費
- 8AN-237: 放大器直接數(shù)字頻率合成的DAC選型器應用漫談
- 461.58KB | 次下載 | 免費
本月
- 1ADI高性能電源管理解決方案
- 2.43 MB | 450次下載 | 免費
- 2免費開源CC3D飛控資料(電路圖&PCB源文件、BOM、
- 5.67 MB | 137次下載 | 1 積分
- 3基于STM32單片機智能手環(huán)心率計步器體溫顯示設計
- 0.10 MB | 128次下載 | 免費
- 4使用單片機實現(xiàn)七人表決器的程序和仿真資料免費下載
- 2.96 MB | 44次下載 | 免費
- 53314A函數(shù)發(fā)生器維修手冊
- 16.30 MB | 31次下載 | 免費
- 6美的電磁爐維修手冊大全
- 1.56 MB | 22次下載 | 5 積分
- 7如何正確測試電源的紋波
- 0.36 MB | 15次下載 | 免費
- 8感應筆電路圖
- 0.06 MB | 10次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935121次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
- 1.48MB | 420062次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233088次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191367次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183335次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81581次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73810次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65988次下載 | 10 積分
評論