資料介紹
描述
介紹
在美國(guó),全國(guó)約有 200 萬(wàn)公里的污水管道,為 2.4 億美國(guó)公民提供服務(wù)。據(jù)報(bào)道,美國(guó)每年至少有 23,000–75,000 起下水道管道故障,這會(huì)向環(huán)境排放多達(dá) 3–100 億加侖的未經(jīng)處理的污水。這會(huì)導(dǎo)致巨大的經(jīng)濟(jì)損失、水污染,并威脅到公共健康。
這些下水道管道需要每年維護(hù),以保持正常運(yùn)行并避免下水道溢出。在大多數(shù)情況下,下水道檢查由專家檢查員在現(xiàn)場(chǎng)進(jìn)行,他們通常使用帶有攝像頭的遙控機(jī)器人手動(dòng)檢查下水道的內(nèi)部結(jié)構(gòu)。這個(gè)過(guò)程非常耗時(shí),而且由于工作的困難和令人厭煩的性質(zhì),時(shí)間常常會(huì)導(dǎo)致對(duì)下水道管道的檢查有缺陷。
小下水道
TinySewer 是一個(gè)獨(dú)立的攝像頭模塊,可使用 tinyML 識(shí)別下水道缺陷。該模塊旨在安裝在現(xiàn)有的機(jī)器人下水道檢查平臺(tái)上,為平臺(tái)提供機(jī)器視覺(jué)功能,以在檢查過(guò)程中識(shí)別下水道故障。
該模塊允許自主下水道檢查并減少檢查員的工作量。檢查員可以簡(jiǎn)單地緩慢駕駛汽車并觀察屏幕上的 TinySewer 應(yīng)用程序是否有任何檢測(cè),或者他們可以停下來(lái)手動(dòng)檢查。此外,TinySewer 將準(zhǔn)確判斷存在哪種類型的故障,因此無(wú)需專業(yè)的下水道檢查員、普通檢查員甚至入門(mén)級(jí)檢查員就足夠了。
為了進(jìn)一步支持自主檢測(cè),TinySewer 客戶端應(yīng)用程序在視頻時(shí)間線上記錄所有帶有檢測(cè)標(biāo)簽的鏡頭,以便檢查員查看鏡頭并輕松選擇故障發(fā)生的時(shí)間點(diǎn)。這允許檢查員在進(jìn)行下水道檢查的同時(shí)處理其他任務(wù)。
可擴(kuò)展性
在可擴(kuò)展性方面,TinySewer 非常便宜,因?yàn)樗颗_(tái)僅需 150 美元左右,并且可以輕松集成到現(xiàn)有的機(jī)器人系統(tǒng)或下水道檢查工具中。此外,TinySewer 強(qiáng)大的故障檢測(cè)系統(tǒng)允許創(chuàng)建一個(gè)更大的系統(tǒng),其中自主下水道檢查機(jī)器人定期進(jìn)行下水道檢查并將帶有缺陷報(bào)告的鏡頭發(fā)送到單個(gè)主機(jī)計(jì)算機(jī)可以對(duì)各種下水道故障報(bào)告進(jìn)行分類并指定人員修復(fù)有缺陷的下水道.
低功耗能力
TinySewer 使用 Arduino Portenta H7 作為其主要計(jì)算單元。Arduino Portenta H7 采用雙核低功耗 Cortex M7 處理器,有助于降低功耗。
此外,TinySewer 允許其操作員在檢查待機(jī)或完成時(shí)關(guān)閉攝像頭。這將總共節(jié)省大約 40mA。最后,操作員可以選擇關(guān)閉 Tiny Sewer,這將使設(shè)備進(jìn)入深度睡眠模式,直到有外部中斷將其喚醒。
原理圖
TinySewer 模塊包含一個(gè)帶有外圍設(shè)備的 Arduino Portenta 微控制器,包括一個(gè)通過(guò)高密度連接器連接的 Vision Shied,用于相機(jī)饋送。還有兩個(gè)直接連接到 Arduino Portenta PH15 引腳并由 PWM 控制的白色 LED。一切都由 5V、2.4 安培便攜式電池供電。
套管
TinySewer外殼使用 PLA 燈絲制成,可以使用本文提供的文件從 3D 打印機(jī)輕松打印。外殼包括頂部、底部和蓋子。
該裝置如下組裝,Arduino Portenta H7 先進(jìn)入,然后將兩個(gè) LED 放在頂部 2 個(gè)中間孔上,并將它們連接到 Arduino Portenta H7 的電線上。然后將頂部放在底部,然后在 4 個(gè)角上放 4 個(gè) m3 螺釘。最后,將蓋子蓋在裸露的插銷部分上,以防止水和灰塵進(jìn)入設(shè)備內(nèi)部。
該模型
TinySewer 使用深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)架構(gòu)來(lái)分類和識(shí)別各種下水道故障類型。目前,TinySewer 可以以至少 85% 的置信度檢測(cè)四種最常見(jiàn)的下水道故障類型(裂縫、根部侵入、阻塞、位移)
該模型是使用Edge Impulse機(jī)器學(xué)習(xí)平臺(tái)創(chuàng)建的。首先,我從ScienceData獲取圖像。數(shù)據(jù)集附帶一個(gè) CSV,其中包含圖像名稱及其故障類型。我只是創(chuàng)建了一個(gè)簡(jiǎn)單的 python 腳本來(lái)讀取這個(gè) CSV 并將圖像分類到其各自的故障文件夾中。然后將這些圖像上傳到 Edge Impluse 進(jìn)行訓(xùn)練。總的來(lái)說(shuō),我們的模型有 5 個(gè)不同的類別:正常、裂縫-斷裂-塌陷、障礙物、根部和位移。
接下來(lái),我將創(chuàng)建一個(gè)沖動(dòng)頁(yè)面來(lái)設(shè)置工作流程。選擇 96x96 作為圖像寬 x 高,處理塊作為圖像,遷移學(xué)習(xí)圖像,然后單擊“生成參數(shù)”。
接下來(lái),轉(zhuǎn)到圖像選項(xiàng)卡以生成特征參數(shù)。請(qǐng)記住為顏色深度選擇灰度,因?yàn)?Arduino Portenta Vision Shield 是單色相機(jī)。
最后,選擇遷移學(xué)習(xí)選項(xiàng)卡來(lái)訓(xùn)練您的模型。對(duì)于 TinySewer,我使用 MobileNetV2,學(xué)習(xí)率為 0.35,最后一層有 40 個(gè)神經(jīng)元。
該模型使用 50 個(gè) epoch 進(jìn)行訓(xùn)練,數(shù)據(jù)增強(qiáng)開(kāi)啟。該模型整體準(zhǔn)確率在94%左右。
最后,為 Arduino Portenta 生成模型文件和標(biāo)簽文件。我轉(zhuǎn)到部署選項(xiàng)卡并選擇 OpenMV 并單擊構(gòu)建。這將生成一個(gè) zip 文件,其中包括label.txt (標(biāo)簽文件)、train.tflite (模型文件)和 ei_image_classification.py(python 分類腳本)。將label.txt和train.tflite復(fù)制并粘貼到 Arduino Portenta 內(nèi)部存儲(chǔ)中。該腳本需要修改以提供 WLAN、視頻和數(shù)據(jù)傳輸功能。這些修改將在固件部分討論
固件
固件是使用 MicroPython 制作的,它只是 python3 的一個(gè)實(shí)現(xiàn),帶有一個(gè)標(biāo)準(zhǔn) Python 庫(kù)的子集,經(jīng)過(guò)優(yōu)化可以在微控制器上運(yùn)行。
首先是設(shè)置wifi,這可以通過(guò)使用WLAN方法簡(jiǎn)單地完成。然后創(chuàng)建一個(gè)套接字端口,以便客戶端可以與同一網(wǎng)絡(luò)上的 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)
接下來(lái),程序初始化camera對(duì)象、MQTT對(duì)象,并設(shè)置變量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()
接下來(lái)我們定義流式傳輸函數(shù),該流式傳輸函數(shù)使用 MJPEG 協(xié)議將來(lái)自 TinySewer 攝像頭的視頻流傳輸回客戶端應(yīng)用程序,
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())
接下來(lái),我定義了一種預(yù)測(cè)方法,它只查看當(dāng)前幀并使用 tinyML 模型計(jì)算每個(gè)標(biāo)簽的置信度。標(biāo)簽和各自的置信度被連接成一個(gè)字符串,然后通過(guò) MQTT 發(fā)送到客戶端應(yīng)用程序
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
然后我有一個(gè) lightcontrol() 方法來(lái)控制兩個(gè) LED 的亮度。該方法采用 0 到 100 之間的整數(shù),0 表示最亮,100 表示沒(méi)有光
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)
最后,還有一個(gè)設(shè)置初始光照值的主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)
完整的實(shí)現(xiàn)在 Github 上名為 sewer.py 的文件中
軟件
該軟件是使用名為 Electron 的框架制作的。Electron 允許使用Node.js等 Web 技術(shù)開(kāi)發(fā)桌面 GUI 應(yīng)用程序。TinySewer 客戶端分為兩個(gè)選項(xiàng)卡。第一個(gè)選項(xiàng)卡包含來(lái)自 TinySewer 的視頻流、用于錄制視頻的按鈕、用于燈光控制的按鈕以及當(dāng)前下水道故障及其置信度的顯示框。
第二個(gè)選項(xiàng)卡用于視頻分析。Stream 會(huì)自動(dòng)保存為 .mp4 視頻文件,可以回放以供進(jìn)一步分析。此外,還有一個(gè)視頻時(shí)間線,其中包含檢測(cè)到下水道故障時(shí)的持續(xù)時(shí)間亮點(diǎn)
小下水道在行動(dòng)
?
- 滿足大功率系統(tǒng)不斷增長(zhǎng)的故障檢測(cè)需求
- 流量計(jì)-飛貓系列3
- 直流接地故障檢測(cè)原理分析及接地故障種類 查找方法
- 機(jī)器學(xué)習(xí)在故障檢測(cè)與診斷領(lǐng)域中的應(yīng)用綜述 57次下載
- 基于CPCI總線的航天器通信信號(hào)設(shè)備故障檢測(cè) 12次下載
- 模塊化多電平儲(chǔ)能系統(tǒng)開(kāi)路故障診斷方法 4次下載
- 氣體傳感器檢測(cè)設(shè)備的應(yīng)用 9次下載
- 克服基于驅(qū)動(dòng)的故障功率檢測(cè)方法的技術(shù)挑戰(zhàn) 7次下載
- 功放的故障檢測(cè)與維修技巧 37次下載
- 基于ZigBee網(wǎng)絡(luò)的下水道安全監(jiān)測(cè)系統(tǒng) 2次下載
- 導(dǎo)航系統(tǒng)故障檢測(cè)與診斷技術(shù)綜述 45次下載
- 火炮故障檢測(cè)系統(tǒng)設(shè)計(jì)及精度問(wèn)題研究 22次下載
- 檢測(cè)太陽(yáng)能發(fā)電系統(tǒng)接地故障的裝置和方法
- 基于GSM短消息的地下水水位自動(dòng)測(cè)報(bào)系統(tǒng)
- 雷達(dá)故障自動(dòng)檢測(cè)系統(tǒng)
- 電動(dòng)機(jī)故障檢測(cè)方法有哪些 1852次閱讀
- 功率分析儀的常見(jiàn)故障和原因分析 730次閱讀
- CAN收發(fā)器故障檢測(cè)電路及算法 2021次閱讀
- 空調(diào)技術(shù):使用“故障自檢”功能檢測(cè)故障 1535次閱讀
- 基于分流器的故障檢測(cè)方法 1637次閱讀
- 基于物聯(lián)網(wǎng)與無(wú)線網(wǎng)絡(luò)技術(shù)實(shí)現(xiàn)地下水監(jiān)測(cè)系統(tǒng)的設(shè)計(jì) 1735次閱讀
- 盲孔、通孔和埋孔的區(qū)別 5.1w次閱讀
- 電路故障檢測(cè)的8種判斷方法 6.5w次閱讀
- 投入式液位計(jì)故障判斷_投入式液位計(jì)故障檢測(cè)方法 3855次閱讀
- 電磁離合器的檢測(cè)及常見(jiàn)故障解決 8552次閱讀
- 便攜式智能電表充值故障檢測(cè)系統(tǒng)的原理及設(shè)計(jì) 1006次閱讀
- 監(jiān)控系統(tǒng)故障檢測(cè)及處理 6656次閱讀
- 基于物聯(lián)網(wǎng)技術(shù)的下水道溢流監(jiān)測(cè)系統(tǒng)解決下水道溢流 6813次閱讀
- CDMA 系統(tǒng)的閉環(huán)功率控制方法以及高精度RF功率檢測(cè)器的應(yīng)用實(shí)現(xiàn)介紹 1127次閱讀
- 基于AD7705的在線激光功率檢測(cè)系統(tǒng)設(shè)計(jì) 3485次閱讀
下載排行
本周
- 1山景DSP芯片AP8248A2數(shù)據(jù)手冊(cè)
- 1.06 MB | 532次下載 | 免費(fèi)
- 2RK3399完整板原理圖(支持平板,盒子VR)
- 3.28 MB | 339次下載 | 免費(fèi)
- 3TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 4DFM軟件使用教程
- 0.84 MB | 295次下載 | 免費(fèi)
- 5元宇宙深度解析—未來(lái)的未來(lái)-風(fēng)口還是泡沫
- 6.40 MB | 227次下載 | 免費(fèi)
- 6迪文DGUS開(kāi)發(fā)指南
- 31.67 MB | 194次下載 | 免費(fèi)
- 7元宇宙底層硬件系列報(bào)告
- 13.42 MB | 182次下載 | 免費(fèi)
- 8FP5207XR-G1中文應(yīng)用手冊(cè)
- 1.09 MB | 178次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33566次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21549次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書(shū))
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德?tīng)栔?/a>
- 0.00 MB | 6656次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537798次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420027次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191187次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183279次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論
查看更多