{"id":20114599,"url":"https://github.com/trivendev/coloredliquidwatchdog","last_synced_at":"2026-05-12T06:38:14.697Z","repository":{"id":257523226,"uuid":"654519319","full_name":"TrivenDev/ColoredLiquidWatchDog","owner":"TrivenDev","description":"This is a colored waste liquid inspection mechanical dog system developed based on PIPPY","archived":false,"fork":false,"pushed_at":"2023-06-25T08:37:42.000Z","size":51174,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-01-13T06:10:31.278Z","etag":null,"topics":["html-css-javascript","opencv","python3","robotdog","yolov5"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TrivenDev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-06-16T09:58:31.000Z","updated_at":"2024-09-09T13:46:17.000Z","dependencies_parsed_at":"2024-09-17T07:40:09.498Z","dependency_job_id":null,"html_url":"https://github.com/TrivenDev/ColoredLiquidWatchDog","commit_stats":null,"previous_names":["trivendev/coloredliquidwatchdog"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TrivenDev%2FColoredLiquidWatchDog","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TrivenDev%2FColoredLiquidWatchDog/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TrivenDev%2FColoredLiquidWatchDog/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TrivenDev%2FColoredLiquidWatchDog/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TrivenDev","download_url":"https://codeload.github.com/TrivenDev/ColoredLiquidWatchDog/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241557194,"owners_count":19981881,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["html-css-javascript","opencv","python3","robotdog","yolov5"],"created_at":"2024-11-13T18:30:43.256Z","updated_at":"2026-05-12T06:38:09.679Z","avatar_url":"https://github.com/TrivenDev.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# WatchDog机器狗主程序\n\n[![standard-readme compliant](https://img.shields.io/badge/readme%20style-standard-brightgreen.svg?style=flat-square)](https://github.com/RichardLitt/standard-readme)\n\n## 简介\n\n本项目是毕业设计《针对有色废液检测的巡检机器狗设计》的源代码，项目基于Waveshare的开源树莓派机器狗**PIPPY**开发而成。Waveshare的PIPPY项目已经实现了机器狗的硬件设计、外壳材料制作以及机器狗运动控制算法、电池电压采集、超声波测距等功能。\n\n机器狗的主程序使用 Python 3.7编写，它主要包括如下模块：\n\n### 1）感知控制模块  \n\n控制机械狗的运动、采集实时画面、使用超声波测距、循迹等。\n\n### 2）Flask后端模块 \n\n 能启动一个基于Flask后端框架开发的Web应用程序，实现远程手动控制、工作模式切换、实时画面上传、数据库管理等功能。用户可通过机器狗的IP地址或申请第三方内网穿透平台提供的端口映射访问到到机器狗的Web页面，实现远程控制和历史记录查看。\n\n### 3）MQTT上传模块   \n\n本项目使用MQTT协议将异常记录写成JSON格式的数据包上传到阿里云物联网平台，使用的账户ID是作者本人的。在下载使用时，可以注释掉与 mqttTolols.py 相关的代码，或将有关的参数修改为自己的账号ID。\n\n\n\n## 新增功能\n\n本项目在PIPPY的基础上增加的功能有：\n\n### 1）自动循迹避障功能  \n\n在  http://192.168.43.164:5000/wspanel  页面访问控制台页面，点击 【 Track Line 】 按钮，可以开启或关闭自动循迹功能。自动循迹功能是一个综合性较强的功能，它使用摄像头画面二值化分析，实现了循黑线或循白线。通过调用超声波模块，每隔1秒获取前方物体距离，遇到距离15cm的障碍物时会停止前进，障碍物距离低于10cm时，机器狗会自动后退远离。自动循迹开启时，也打开了目标检测功能，识别到的目标会在实时画面中框选出来，同时会在数据库中写入记录，保存截图等。\n\n### 2）YOLOv5有色液体检测功能   \n\n在  http://192.168.43.164:5000/wspanel  页面访问控制台页面，点击 【 YOLO Switch 】按钮，可以开启或关闭目标检测功能。该功能所需要的检测模型是基于YOLOv5目标检测模型框架训练而成的，数据集有一部分从网上搜索获取，也有和一部分是自己制作的有色液体照片。\n\n要得到想要的目标检测模型，可在YOLOv5训练框架中加载数据集，实施自动训练，得到best.pt模型文件后，转换成.onnx模型文件移植到树莓派上，再使用OpenCV的DNN函数加载这个模型文件,实现目标检测。具体实现可参考【camera_opencv.py】的m_detection等函数。\n\n### 3）历史记录Web页面  \n\n在  http://192.168.43.164:5000/home  访问异常记录页面，可以查看到异常记录列表，每个列表项包括异常类别、液体颜色、日期、时间、截图。在导航栏的**Login**页面登录后，可以实现编辑、增加、删除等功能。\n\n### 4）控制台Web页面  \n\n在  http://192.168.43.164:5000/wspanel  页面访问控制台页面。控制台页面使用HTML、JavaScript和CSS等编写，页面主要由标题栏、实时图像区、硬件负载区、动作控制区、巡线设置区和工作模式选择区组成，点击相应按钮，前端会通过WebSocket给后端发送相应的数据，实现工作模式切换。\n\n（注：192.168.43.164是机器狗连接热点时获取的局域网IP地址，端口5000是Flask后端服务使用的端口）\n\n## 更新记录\n\n### 2023-06-24\n\n更新README文档，更新可能要用到的资料链接。\n\n### 2023-06-16  Version 1.0\n\n上传机器狗主程序代码，基本完成README文档的编写，尚未上传训练数据集和YOLO训练程序代码。\n\n\n\n## 研究意义\n\n随着工业发展，废液处理工作量扩大，产生废液巡检需求。人工巡检费时费力，容易产生惰性。\n\n使用机器代替人工有以下好处：\n\n1）代替重复性工作，减轻劳动强度；\n\n2）深入管线密集区，保障人员安全；\n\n3）搭载多种传感器，数据采集效率高；\n\n4）实时上传记录到后台，可实现远程监控。\n\n本设计针对废液泄漏场景，设计了一种用于有色废液检测的智能巡检机器狗。所谓智能巡检机器狗，就是一种运用图像识别、远程操控等技术，实现自动巡逻或手动遥控的机器狗。它在通过各种传感器收集附近的数据后，将数据上报给后台服务器，并在客户端直观显示。它拥有四肢，较为发达的四肢可攀爬一定坡度的台阶。它代替巡检人员从事一些重复性工作，或进入不安全的区域查看现场情况，有助于减少人力成本，并降低工作风险。\n\n\n\n## 安装和配置\n\n系统环境：刷入【2021-10-18-raspbian-buster-full.7z】系统包的树莓派4B。\n\nWiFi网络：要连接到自己的热点，首先需要拧开后背上的四颗螺丝，将SD卡取出，用读卡器插到电脑上。接着在wpa_supplicant.conf文件（见网盘附件）中写入自己的手机热点的名字和密码。然后复制ssh文件和wpa_supplicant.conf文件（见网盘附件）到SD卡上，将SD卡插入到树莓派上。最后打开自己的手机热点并启动树莓派，看到树莓派连接到热点上即为成功。\n\nPython依赖库：可直接执行【setup.py】安装依赖包，之后再升级OpenCV到4.5.5。\n\n**注：如果想用GPU进行推理，不要用.whl文件安装OpenCV，因为.whl是编译好的包，基本上可以确定是用CPU推理的。GPU推理版要手动设定安装参数进行安装，具体方法请自行百度。**\n\n可能需要的依赖包：\n\n```sh\nsudo apt update\nsudo apt -y dist-upgrade\nsudo apt clean\nsudo pip3 install -U pip\n\nsudo apt-get install -y python-dev python3-pip libfreetype6-dev libjpeg-dev build-essential\nsudo -H pip3 install --upgrade luma.oled\nsudo apt-get install -y i2c-tools\nsudo apt-get install -y python3-smbus\nsudo pip3 install icm20948\nsudo pip3 install flask\nsudo pip3 install flask_cors\nsudo pip3 install websockets\n\nsudo pip3 install opencv-contrib-python==3.4.11.45\nsudo pip3 uninstall -y numpy\nsudo pip3 install numpy==1.21\n\nsudo apt-get -y install libhdf5-dev libhdf5-serial-dev libatlas-base-dev libjasper-dev\nsudo pip3 install imutils zmq pybase64 psutil\nsudo apt-get install -y util-linux procps hostapd iproute2 iw haveged dnsmasq\n\nsudo pip3 install pi-ina219\n```\n\n\n\n## 使用方法\n\n### 1）启动工作程序\n\n前提：树莓派开机以后，命令行所在目录为  /home/pi  ，而且WatchDog工作程序的文件夹在这个目录下。\n\n在命令行执行以下命令即可启动工作程序。\n\n```sh\ncd WatchDog\npython3 webServer.py\n```\n\n### 2）关闭工作程序\n\n之前启动工作程序所在的命令行**无法通过Ctrl+C或Ctrl+D关掉程序**，应使用如下方法关闭：\n\n(1）再打开一个命令行；\n\n(2）直接输入`sudo killall python3`，然后回车。\n\n\n\n### 3）添加或修改Web页面的用户名和密码\n\n参考来源：[第 8 章：用户认证 - Flask 入门教程 (helloflask.com)](https://tutorial.helloflask.com/login/) 【生成管理员用户】\n\n```\n(env) $ flask admin\nUsername: McEwan\nPassword: 1233211234567  # hide_input=True 会让密码输入隐藏\nRepeat for confirmation: 1233211234567  # confirmation_prompt=True 会要求二次确认输入\nUpdating user...\nDone.\n```\n\n\n\n### 4）在电脑上的PyCharm远程编辑代码\n\n1）在PyCharm设置的【项目：PIPPY】的【Python解释器】为`Remote Python 3.7.3 (sftp://pi@192.168.43.164:22/usr/bin/python3.7)`，然后点右边的...设置，选择SSH，然后选择树莓派的Python解释器的位置，默认是 `usr/bin/python3.7` ；\n\n2）远程保存地址`/home/pi/WatchDog`，填写完成后，点击完成，就会建立自动同步；\n\n3）编辑代码后，点击PyCharm上方的工具——部署——上传到...，即可将该文件上传到树莓派的对应位置。工作目录中的其他文件或文件夹同样可以在PyCharm左侧选中它们，然后右键——部署——上传。\n\n\n\n## 项目结构\n\n注：可查看README源代码看到正常渲染的目录结构。\n\n.  \t\t\t\t根目录\n│  app.py  \t\t\tFlask视图函数所在位置\n│  base_camera.py \t摄像头基本使用函数\n│  camera_opencv.py  \tOpenCV图像处理有关函数\n│  data.db\t\t\tSQLite数据库\n│  ICM20948.py\t\t姿态传感器\n│  info.py\t\t\t获取CPU温度等信息\n│  initServo.py\t\t组装舵机时用于初始化舵机角度\n│  Kalman_filter.py\t卡尔曼滤波\n│  linkageREVERSE.py\t连杆逆解（没有用到）\n│  list.txt\t\t\t文件夹树形目录\n│  myTest.py\t\t简单的测试功能（没有用到）\n│  nohup.out\t\t--\n│  OLED.py\t\t\tOLED小屏幕有关函数\n│  PCA9685.py\t\t舵机控制模块有关函数\n│  PIPPY.py\t\t\t机器狗运动的偏底层函数\n│  README.md\t\t--\n│  robot.py\t\t\t机器狗运动的封装函数\n│  setup.py\t\t\t安装相关依赖\n│  simpleTest.py\t\t简单的测试功能（没有用到）\n│  ultra.py\t\t\t超声波测距相关函数\n│  Voltage.py\t\t获取电池电压\n│  webServer.py\t\t主程序入口\n│  \n├─dist\t\t\t控制台Web页面资源\n│  │  123.txt\n│  │  favicon.ico\n│  │  index.html\n│  │  logo.png\n│  │  manifest.json\n│  │  precache-manifest.02b800736c2da055bda815acfa037b17.js\n│  │  robots.txt\n│  │  service-worker.js\n│  │  \n│  ├─css\n│  │      app.8a756fac.css\n│  │      chunk-vendors.a639f090.css\n│  │      css.txt\n│  │      \n│  ├─fonts\n│  │      fonts.txt\n│  │      materialdesignicons-webfont.2d0a0d8f.eot\n│  │      materialdesignicons-webfont.b4917be2.woff\n│  │      materialdesignicons-webfont.d0066537.woff2\n│  │      materialdesignicons-webfont.f5111234.ttf\n│  │      roboto-latin-100.5cb7edfc.woff\n│  │      roboto-latin-100.7370c367.woff2\n│  │      roboto-latin-100italic.f8b1df51.woff2\n│  │      roboto-latin-100italic.f9e8e590.woff\n│  │      roboto-latin-300.b00849e0.woff\n│  │      roboto-latin-300.ef7c6637.woff2\n│  │      roboto-latin-300italic.14286f3b.woff2\n│  │      roboto-latin-300italic.4df32891.woff\n│  │      roboto-latin-400.479970ff.woff2\n│  │      roboto-latin-400.60fa3c06.woff\n│  │      roboto-latin-400italic.51521a2a.woff2\n│  │      roboto-latin-400italic.fe65b833.woff\n│  │      roboto-latin-500.020c97dc.woff2\n│  │      roboto-latin-500.87284894.woff\n│  │      roboto-latin-500italic.288ad9c6.woff\n│  │      roboto-latin-500italic.db4a2a23.woff2\n│  │      roboto-latin-700.2735a3a6.woff2\n│  │      roboto-latin-700.adcde98f.woff\n│  │      roboto-latin-700italic.81f57861.woff\n│  │      roboto-latin-700italic.da0e7178.woff2\n│  │      roboto-latin-900.9b3766ef.woff2\n│  │      roboto-latin-900.bb1e4dc6.woff\n│  │      roboto-latin-900italic.28f91510.woff\n│  │      roboto-latin-900italic.ebf6d164.woff2\n│  │      \n│  ├─img\n│  │  │  bg.jpg\n│  │  │  bg2.jpg\n│  │  │  img.txt\n│  │  │  \n│  │  └─icons\n│  │          favicon-32x32 .png\n│  │          favicon.ico\n│  │          icons.txt\n│  │          logo.png\n│  │          safari-pinned-tab.svg\n│  │          wavelogo.png\n│  │          \n│  └─js\n│          app.38235a8c.js\n│          app.38235a8c.js.map\n│          chunk-vendors.3007e197.js\n│          chunk-vendors.3007e197.js.map\n│          js.txt\n│          \n├─models\t\t\tMQTT相关函数、目标检测模型文件\n│  │  best13c-320.onnx\n│  │  best14c320.onnx\n│  │  colorList.py\n│  │  compareArray.py\n│  │  mqttTools.py\n│  │  \n│  ├─ali-example-code\n│  │  │  aliLink.py\n│  │  │  mqttd.py\n│  │  │  readme.md\n│  │  │  rpi.py\n│  │  │  run.py\n│  │  │  \n│  │  └─__pycache__\n│  │          aliLink.cpython-37.pyc\n│  │          mqttd.cpython-37.pyc\n│  │          rpi.cpython-37.pyc\n│  │          \n│  ├─python-linkkit-examples\n│  │      data_transfer.js\n│  │      dynamic_register.py\n│  │      dynamic_register_deprecated.py\n│  │      dynamic_register_nwl.py\n│  │      gateway_demo.py\n│  │      model_raw.json\n│  │      mqtt_connect_TCP.py\n│  │      mqtt_connect_TLS.py\n│  │      mqtt_sub_pub_on.py\n│  │      ota_demo.py\n│  │      Readme.txt\n│  │      thing_alink.py\n│  │      thing_custom.py\n│  │      tsl.json\n│  │      \n│  └─__pycache__\n│          colorList.cpython-37.pyc\n│          compareArray.cpython-37.pyc\n│          mqttTools.cpython-37.pyc\n│          \n├─static\t\t\t异常记录Web页面资源\n│  ├─css\n│  │      style.css\n│  │      \n│  ├─images\n│  │      avatar.png\n│  │      bg.jpg\n│  │      bg2.jpg\n│  │      logo.png\n│  │      totoro.gif\n│  │      yanni.png\n│  │      \n│  └─runs\n│      └─imagesave\n├─templates\t\t\t异常记录Web页面资源\n│      base.html\n│      edit.html\n│      imageshow.html\n│      login.html\n│      record.html\n│      settings.html\n│      \n├─waveshare_OLED\t\tOLED有关函数库\n│  │  config.py\n│  │  OLED_0in91.py\n│  │  __init__.py\n│  │  \n│  └─__pycache__\n│          config.cpython-37.pyc\n│          config.cpython-39.pyc\n│          OLED_0in91.cpython-37.pyc\n│          OLED_0in91.cpython-39.pyc\n│          __init__.cpython-37.pyc\n│          __init__.cpython-39.pyc\n│          \n└─__pycache__\n        app.cpython-37.pyc\n        base_camera.cpython-37.pyc\n        camera_opencv.cpython-37.pyc\n        ICM20948.cpython-37.pyc\n        info.cpython-37.pyc\n        info.cpython-39.pyc\n        Kalman_filter.cpython-37.pyc\n        OLED.cpython-37.pyc\n        OLED.cpython-39.pyc\n        PCA9685.cpython-37.pyc\n        PIPPY.cpython-37.pyc\n        robot.cpython-37.pyc\n        ultra.cpython-37.pyc\n        Voltage.cpython-37.pyc\n\n\n\n## 相关资源和教程\n\n- [waveshare/PIPPY: PIPPY, An Open Source Bionic Dog-Like Robot Powered By Raspberry Pi (github.com)](https://github.com/waveshare/PIPPY)— PIPPY项目主页\n- [ultralytics/yolov5 at v6.1 (github.com)](https://github.com/ultralytics/yolov5/tree/v6.1)— YOLOv5项目主页（v6.1）\n- [Flask 入门教程 (helloflask.com)](https://tutorial.helloflask.com/)——Flask入门教程\n- [NATTUNNEL 内网穿透 – 量子互联 (uulap.com)](https://www.uulap.com/nattunnel)——量子互联内网穿透\n- [MobaXterm Xserver with SSH, telnet, RDP, VNC and X11 - Download (mobatek.net)](https://mobaxterm.mobatek.net/download.html) ——MobaXterm\n- 百度网盘：https://pan.baidu.com/s/1-BUoXd8oCyYGEy-90Em37Q?pwd=3oqn ——可能用到的资料包，提取码：3oqn \n\t\n\n## 联系作者\n\n欢迎将本项目的功能继续完善，使其成为更强大的机(Wan)器(Ju)狗系统。\n\n[提一个 Issue](https://github.com/cqwsadev/ColoredLiquidWatchDog/issues) 或者提交一个 Pull Request，也可通过chinas0310@gmail.com邮件联系。\n\n\n\n## 致谢\n\n感谢以下开源项目对本项目的帮助：\n\n- Raspberry Pi\n- PIPPY\n- Python\n- Flask\n- OpenCV\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrivendev%2Fcoloredliquidwatchdog","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftrivendev%2Fcoloredliquidwatchdog","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrivendev%2Fcoloredliquidwatchdog/lists"}