漏油检测项目

使用stm32f103搭载ov2640通过gprs实时传输图像,上位机使用python进行图片处理,最后以短信的方式反馈给手机

一、整体概况

1、项目需求

需要利用摄像头实时监测仓库油桶是否漏油,如果发送漏油,则需要通过短信通知负责人进行及时处理。

2、思路走向

首先,如果是为了监测是否漏油,那么直接到油桶下边装一个传感器实时读取数据就行,但是那边老师要求的就是用摄像头,这样一来简单的问题反而复杂化了,并且成本也高。摄像头传输图片到服务器这个过程用单片机实现比传感器传输数据要难得多,但是在某宝上搜到了集成好的设备,因此只需要修改代码对图片进行处理就行。
开始想的是直接在单片机里面对图片进行处理,如果发现异常则把异常信息发送到短信中去,结果集成设备附带的代码嵌入了uClinux,由于之前没接触过这个操作系统,导致修改起来很困难,后面改了很长一段时间都是徒劳。最后决定修改方案,从上位机入手,把jpeg格式的图片传输到上位机后在对它进行处理,这样一来就不需要过多修改单片机中的源码了。
决定好方案后开始处理,用python写了一个.exe文件,能够初略判断图片信息中像素点的变化。设定了一个像素变化阈值,如果超过则通过榛子云提供的一个短信API,给固定号码发送短信。

二、实现过程

1、选择工具

图像处理这一块目前只有两个主流的工具,一个是matlab,一个是python。相对而言,matlab更加偏向与学术层面,而python则更侧重于快速开发的层面。matlab做图像处理相比于python,虽然能够十分直观的显示数据,并且附带各种工具箱给予调试,但是显得过于臃肿,因此我选择了轻量级的python。

2、Python的使用

之前大二上学期的时候使用python做过爬虫,但是后面方向没有往那边走,因此练习的很少,python的基本语法差不多都快忘光了。这次是因为一室友做DIP作业的时候用到了python,然后我突然就想起来了这个工具。后面用起来就像发现了新大陆一样,python真的是太强大了!

1)opencv库的安装

使用图像处理功能、短信功能需要安装opencv库和短信网站提供的python库,这两个库都不是python自带的,在cmd中输入pip install opencv是不可行的,需要自己下载安装包本地安装。非官网第三方库下载地址如下:https://www.lfd.uci.edu/~gohlke/pythonlibs/
然后选择对应的版本下载(比如你的电脑是64位,python安装版本是3.7,那么下载opencv_python‑4.1.2+contrib‑cp37‑cp37m‑win_amd64.whl)。

1

接着把文件copy到python安装目录下的lib目录中,然后在cmd中安装(先进入lib目录中再安装下载的那个文件):
pip install opencv_python‑4.1.2+contrib‑cp37‑cp37m‑win_amd64.whl
安装完成后即可使用该库。

2)短信服务库的安装

对于不同的短信接口网站,他们提供的接口文件也是不同的,因此需要到官方下载,这里我用榛子云做例子。
在注册之后选择SDK开发文档,下载对应的文件,然后把下载好的zhenzismsclient.py文件copy到python安装目录下的lib目录,接着就能在shell中直接用import导入该库了。

3

3)程序流程

整体流程如下图:

4

4、代码部分

添加了GUI,最后把它打包成了可执行文件,全部代码已上传到github