电子发烧友App

硬声App

0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示
电子发烧友网>电子资料下载>电子资料>TinySewer低功率下水道故障检测系统

TinySewer低功率下水道故障检测系统

2022-11-07 | zip | 0.02 MB | 次下载 | 免费

资料介绍

描述

介绍

在美国,全国约有 200 万公里的污水管道,为 2.4 亿美国公民提供服务。据报道,美国每年至少有 23,000–75,000 起下水道管道故障,这会向环境排放多达 3–100 亿加仑的未经处理的污水。这会导致巨大的经济损失、水污染,并威胁到公共健康。

这些下水道管道需要每年维护,以保持正常运行并避免下水道溢出。在大多数情况下,下水道检查由专家检查员在现场进行,他们通常使用带有摄像头的遥控机器人手动检查下水道的内部结构。这个过程非常耗时,而且由于工作的困难和令人厌烦的性质,时间常常会导致对下水道管道的检查有缺陷。

小下水道

TinySewer 是一个独立的摄像头模块,可使用 tinyML 识别下水道缺陷。该模块旨在安装在现有的机器人下水道检查平台上,为平台提供机器视觉功能,以在检查过程中识别下水道故障。

pYYBAGNkrSWAKMGAAAASg31lpMk339.png
安装在机器人汽车上的 TinySewer
 

该模块允许自主下水道检查并减少检查员的工作量。检查员可以简单地缓慢驾驶汽车并观察屏幕上的 TinySewer 应用程序是否有任何检测,或者他们可以停下来手动检查。此外,TinySewer 将准确判断存在哪种类型的故障,因此无需专业的下水道检查员、普通检查员甚至入门级检查员就足够了。

检测特征
 

为了进一步支持自主检测,TinySewer 客户端应用程序在视频时间线上记录所有带有检测标签的镜头,以便检查员查看镜头并轻松选择故障发生的时间点。这允许检查员在进行下水道检查的同时处理其他任务。

重播功能
 

可扩展性

在可扩展性方面,TinySewer 非常便宜,因为它每台仅需 150 美元左右,并且可以轻松集成到现有的机器人系统或下水道检查工具中。此外,TinySewer 强大的故障检测系统允许创建一个更大的系统,其中自主下水道检查机器人定期进行下水道检查并将带有缺陷报告的镜头发送到单个主机计算机可以对各种下水道故障报告进行分类并指定人员修复有缺陷的下水道.

pYYBAGNkrSeAGauwAABbu3Z4q0k200.png
以 TinySewer 作为机器视觉系统的自主下水道检测系统
 

低功耗能力

pYYBAGNkrSqAItfOAAFDasI6WfU183.jpg
Arduino Portenta
 

TinySewer 使用 Arduino Portenta H7 作为其主要计算单元。Arduino Portenta H7 采用双核低功耗 Cortex M7 处理器,有助于降低功耗。

低功耗功能演示
 

此外,TinySewer 允许其操作员在检查待机或完成时关闭摄像头。这将总共节省大约 40mA。最后,操作员可以选择关闭 Tiny Sewer,这将使设备进入深度睡眠模式,直到有外部中断将其唤醒。

原理图

poYBAGNkrS2AGmteAAA6Cl-fkT4732.png
小下水道示意图
 

TinySewer 模块包含一个带有外围设备的 Arduino Portenta 微控制器,包括一个通过高密度连接器连接的 Vision Shied,用于相机馈送。还有两个直接连接到 Arduino Portenta PH15 引脚并由 PWM 控制的白色 LED一切都由 5V、2.4 安培便携式电池供电

套管

TinySewer外壳使用 PLA 灯丝制成,可以使用本文提供的文件从 3D 打印机轻松打印。外壳包括顶部、底部和盖子。

poYBAGNkrTGAXCC9AACg2ZIf0AM840.jpg
 

该装置如下组装,Arduino Portenta H7 先进入,然后将两个 LED 放在顶部 2 个中间孔上,并将它们连接到 Arduino Portenta H7 的电线上。然后将顶部放在底部,然后在 4 个角上放 4 个 m3 螺钉。最后,将盖子盖在裸露的插销部分上,以防止水和灰尘进入设备内部。

 
 
 
poYBAGNkrYeAIIjBAA68oqgQBBk510.jpg
 
1 / 3
 
pYYBAGNkrYuAPMdpAABtwm5APJw342.png
集会
 

该模型

TinySewer 使用深度学习神经网络架构来分类和识别各种下水道故障类型。目前,TinySewer 可以以至少 85% 的置信度检测四种最常见的下水道故障类型(裂缝、根部侵入、阻塞、位移)

poYBAGNkrY2AQJ_kAAA38We-0oQ597.png
TinySewer 可以检测到的下水道故障类型。(a) 阻塞,(b) 根部侵入,(c) 位移,(d) 裂缝
 

该模型是使用Edge Impulse机器学习平台创建的。首先,我从ScienceData获取图像数据集附带一个 CSV,其中包含图像名称及其故障类型。我只是创建了一个简单的 python 脚本来读取这个 CSV 并将图像分类到其各自的故障文件夹中。然后将这些图像上传到 Edge Impluse 进行训练。总的来说,我们的模型有 5 个不同的类别:正常、裂缝-断裂-塌陷、障碍物、根部和位移。

接下来,我将创建一个冲动页面来设置工作流程。选择 96x96 作为图像宽 x 高,处理块作为图像,迁移学习图像,然后单击“生成参数”。

pYYBAGNkrZCASKZYAADiQy-_trQ739.png
创造冲动
 

接下来,转到图像选项卡以生成特征参数。请记住为颜色深度选择灰度,因为 Arduino Portenta Vision Shield 是单色相机。

pYYBAGNkrZKAUOxhAAC0R8mabLk124.png
生成特征
 

最后,选择迁移学习选项卡来训练您的模型。对于 TinySewer,我使用 MobileNetV2,学习率为 0.35,最后一层有 40 个神经元。

poYBAGNkrZaASKqWAAFU79CK6kA623.png
迁移学习
 

该模型使用 50 个 epoch 进行训练,数据增强开启。该模型整体准确率在94%左右。

pYYBAGNkrZqAcn4yAADN-X1qozo935.png
准确性
 

最后,为 Arduino Portenta 生成模型文件和标签文件。我转到部署选项卡并选择 OpenMV 并单击构建。这将生成一个 zip 文件,其中包括label.txt (标签文件)、train.tflite (模型文件)和 ei_image_classification.py(python 分类脚本)。将label.txttrain.tflite复制并粘贴到 Arduino Portenta 内部存储中。该脚本需要修改以提供 WLAN、视频和数据传输功能。这些修改将在固件部分讨论

poYBAGNkrZyANBvSAABtZvvrpcw013.png
部署
 

固件

固件是使用 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 的视频流、用于录制视频的按钮、用于灯光控制的按钮以及当前下水道故障及其置信度的显示框。

pYYBAGNkraCAMSBCAAFIqv-2Slc710.png
视频流页面
 

第二个选项卡用于视频分析。Stream 会自动保存为 .mp4 视频文件,可以回放以供进一步分析。此外,还有一个视频时间线,其中包含检测到下水道故障时的持续时间亮点

pYYBAGNkraOAWDH9AAG_qNrp5VM152.png
分析页面
 

小下水道在行动

 

 


下载该资料的人也在下载 下载该资料的人还在阅读
更多 >

评论

查看更多

下载排行

本周

  1. 1山景DSP芯片AP8248A2数据手册
  2. 1.06 MB  |  532次下载  |  免费
  3. 2RK3399完整板原理图(支持平板,盒子VR)
  4. 3.28 MB  |  339次下载  |  免费
  5. 3TC358743XBG评估板参考手册
  6. 1.36 MB  |  330次下载  |  免费
  7. 4DFM软件使用教程
  8. 0.84 MB  |  295次下载  |  免费
  9. 5元宇宙深度解析—未来的未来-风口还是泡沫
  10. 6.40 MB  |  227次下载  |  免费
  11. 6迪文DGUS开发指南
  12. 31.67 MB  |  194次下载  |  免费
  13. 7元宇宙底层硬件系列报告
  14. 13.42 MB  |  182次下载  |  免费
  15. 8FP5207XR-G1中文应用手册
  16. 1.09 MB  |  178次下载  |  免费

本月

  1. 1OrCAD10.5下载OrCAD10.5中文版软件
  2. 0.00 MB  |  234315次下载  |  免费
  3. 2555集成电路应用800例(新编版)
  4. 0.00 MB  |  33566次下载  |  免费
  5. 3接口电路图大全
  6. 未知  |  30323次下载  |  免费
  7. 4开关电源设计实例指南
  8. 未知  |  21549次下载  |  免费
  9. 5电气工程师手册免费下载(新编第二版pdf电子书)
  10. 0.00 MB  |  15349次下载  |  免费
  11. 6数字电路基础pdf(下载)
  12. 未知  |  13750次下载  |  免费
  13. 7电子制作实例集锦 下载
  14. 未知  |  8113次下载  |  免费
  15. 8《LED驱动电路设计》 温德尔著
  16. 0.00 MB  |  6656次下载  |  免费

总榜

  1. 1matlab软件下载入口
  2. 未知  |  935054次下载  |  免费
  3. 2protel99se软件下载(可英文版转中文版)
  4. 78.1 MB  |  537798次下载  |  免费
  5. 3MATLAB 7.1 下载 (含软件介绍)
  6. 未知  |  420027次下载  |  免费
  7. 4OrCAD10.5下载OrCAD10.5中文版软件
  8. 0.00 MB  |  234315次下载  |  免费
  9. 5Altium DXP2002下载入口
  10. 未知  |  233046次下载  |  免费
  11. 6电路仿真软件multisim 10.0免费下载
  12. 340992  |  191187次下载  |  免费
  13. 7十天学会AVR单片机与C语言视频教程 下载
  14. 158M  |  183279次下载  |  免费
  15. 8proe5.0野火版下载(中文版免费下载)
  16. 未知  |  138040次下载  |  免费