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

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

低功耗能力

TinySewer 使用 Arduino Portenta H7 作為其主要計算單元。Arduino Portenta H7 采用雙核低功耗 Cortex M7 處理器,有助于降低功耗。
此外,TinySewer 允許其操作員在檢查待機或完成時關閉攝像頭。這將總共節省大約 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 使用深度學習神經網絡架構來分類和識別各種下水道故障類型。目前,TinySewer 可以以至少 85% 的置信度檢測四種最常見的下水道故障類型(裂縫、根部侵入、阻塞、位移)

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

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

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

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

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

固件
固件是使用 MicroPython 制作的,它只是 python3 的一個實現,帶有一個標準 Python 庫的子集,經過優化可以在微控制器上運行。
首先是設置wifi,這可以通過使用WLAN方法簡單地完成。然后創建一個套接字端口,以便客戶端可以與同一網絡上的 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()
接下來我們定義流式傳輸函數,該流式傳輸函數使用 MJPEG 協議將來自 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 發送到客戶端應用程序
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 之間的整數,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循環,稱為視頻流函數。
while (True):
try:
lightControl(50)
start_streaming(s)
print("main call")
except OSError as e:
print("socket error: ", e)
#sys.print_exception(e)
完整的實現在 Github 上名為 sewer.py 的文件中
軟件
該軟件是使用名為 Electron 的框架制作的。Electron 允許使用Node.js等 Web 技術開發桌面 GUI 應用程序。TinySewer 客戶端分為兩個選項卡。第一個選項卡包含來自 TinySewer 的視頻流、用于錄制視頻的按鈕、用于燈光控制的按鈕以及當前下水道故障及其置信度的顯示框。

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

小下水道在行動
?
- 滿足大功率系統不斷增長的故障檢測需求
- 流量計-飛貓系列3
- 直流接地故障檢測原理分析及接地故障種類 查找方法
- 基于CPCI總線的航天器通信信號設備故障檢測 12次下載
- 模塊化多電平儲能系統開路故障診斷方法 4次下載
- 氣體傳感器檢測設備的應用 9次下載
- 克服基于驅動的故障功率檢測方法的技術挑戰 7次下載
- 功放的故障檢測與維修技巧 37次下載
- 基于ZigBee網絡的下水道安全監測系統 2次下載
- 基于模糊理論的地下水質量診斷專家系統研究 37次下載
- 導航系統故障檢測與診斷技術綜述 45次下載
- 火炮故障檢測系統設計及精度問題研究 22次下載
- 檢測太陽能發電系統接地故障的裝置和方法
- 基于GSM短消息的地下水水位自動測報系統
- 雷達故障自動檢測系統
- 高頻功率放大器故障排除技巧 181次閱讀
- 電動機故障檢測方法有哪些 2683次閱讀
- 功率分析儀的常見故障和原因分析 1414次閱讀
- CAN收發器故障檢測電路及算法 2374次閱讀
- 空調技術:使用“故障自檢”功能檢測故障 1782次閱讀
- 基于分流器的故障檢測方法 1840次閱讀
- 基于物聯網與無線網絡技術實現地下水監測系統的設計 1970次閱讀
- 盲孔、通孔和埋孔的區別 5.2w次閱讀
- 電路故障檢測的8種判斷方法 6.6w次閱讀
- 投入式液位計故障判斷_投入式液位計故障檢測方法 4128次閱讀
- 便攜式智能電表充值故障檢測系統的原理及設計 1088次閱讀
- 監控系統故障檢測及處理 6808次閱讀
- 基于物聯網技術的下水道溢流監測系統解決下水道溢流 6969次閱讀
- CDMA 系統的閉環功率控制方法以及高精度RF功率檢測器的應用實現介紹 1299次閱讀
- 基于AD7705的在線激光功率檢測系統設計 3576次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數據手冊
- 1.06 MB | 532次下載 | 免費
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費
- 3TC358743XBG評估板參考手冊
- 1.36 MB | 330次下載 | 免費
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費
- 5元宇宙深度解析—未來的未來-風口還是泡沫
- 6.40 MB | 227次下載 | 免費
- 6迪文DGUS開發指南
- 31.67 MB | 194次下載 | 免費
- 7元宇宙底層硬件系列報告
- 13.42 MB | 182次下載 | 免費
- 8FP5207XR-G1中文應用手冊
- 1.09 MB | 178次下載 | 免費
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 2555集成電路應用800例(新編版)
- 0.00 MB | 33566次下載 | 免費
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費
- 4開關電源設計實例指南
- 未知 | 21549次下載 | 免費
- 5電氣工程師手冊免費下載(新編第二版pdf電子書)
- 0.00 MB | 15349次下載 | 免費
- 6數字電路基礎pdf(下載)
- 未知 | 13750次下載 | 免費
- 7電子制作實例集錦 下載
- 未知 | 8113次下載 | 免費
- 8《LED驅動電路設計》 溫德爾著
- 0.00 MB | 6656次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費
- 2protel99se軟件下載(可英文版轉中文版)
- 78.1 MB | 537798次下載 | 免費
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費
- 6電路仿真軟件multisim 10.0免費下載
- 340992 | 191187次下載 | 免費
- 7十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183279次下載 | 免費
- 8proe5.0野火版下載(中文版免費下載)
- 未知 | 138040次下載 | 免費
評論