赞
踩
软硬件集成开发是目前普遍的应用为物联网(Internet of Things, IoT),物联网一词是指互联设备的集合网络,以及促进设备与云之间以及设备自身之间通信的技术,而物联网的架构由底层至上层依序为感知层、网络层、应用层。感知层位于物联网三层结构中的最底层,其功能为“感知”,感知层包括二维码标签和识读器、RFID标签和读写器、摄像头、GPS、传感器、M2M终端、传感器网关等设备,主要功能是识别物体、采集信息。
网络层其功能为“传输”,有多种联网技术可供选择,依照有效传输距离可区分为短距离无线、中距离无线、长距离无线,以及有线技术:
应用层其功能为“处理与呈现”,可以对感知层采集数据进行计算、处理和知识挖掘,从而实现对物理世界的实时控制、精确管理和科学决策。在应用层中,通常使用多种编程语言撰写应用程序,常见的是使用网页的技术,如 HTTP、Web API 与 JSON 。
在本书介绍智能软硬件项目与一般的 IoT 系统相同,可以通过实时收集和交换数据来运作。智能软硬件项目系统有三个组件:
下图为本书的软硬件集成开发架构,智能装备选择的是 ESP32-CAM ,以计算石头数量作为智能应用程序,使用 HTML/JS/CSS 来进行图形用户介面开发。整个项目将以 Python 为主要开发语言,以求项目集成的无缝衔接。
图 1. 软硬件集成开发架构
ESP32 是一系列低成本,低功耗的单晶片微控制器,集成了 Wi-Fi 和双模蓝牙。 ESP32 系列采用 Tensilica Xtensa LX 6微处理器,包括双核心和单核变体,内建天线开关,RF变换器,功率放大器,低杂讯接收放大器,滤波器和电源管理模组。
ESP32 由总部位于上海的中国公司乐鑫信息科技创建和开发,由台积电采用40奈米技术制造。它是 ESP8266 微控制器的后继产品。而以 ESP32 芯片有制作出多个系列的模块,分别是 ESP32-S 系列、ESP32-C 系列与ESP32 系列,以下以 ESP32 系列为主。
ESP32的基础功能包括以下内容:
而 ESP32 模组还可以细分成以下几个子系列:
图 2. ESP32 模组
上面所提到的 ESP32-D0WD 芯片的描述是:
代号 | 意义 | 说明 |
---|---|---|
D | 内核 | D=双核、S=单核 |
0 | 嵌入式 Flash | 0=无、2=16Mbit |
WD | 通信模式 | WD=Wifi b/g/n + BT/BLE 双频 AD=Wifi a/b/g/n + BT/BLE 双频 CD=Wifi ac/c/b/g/n + BT/BLE 双频 |
本书使用的是 ESP32-CAM 设备,它是安信可科技发布小尺寸的摄像头模组。该模块可以作为最小系统独立工作,尺寸仅为 27x40.5x4.5 mm,可广泛应用于各种物联网场合,适用于家庭智能设备、工业无线控制、无线监控、QR无线识别,无线定位系统信号以及其它物联网应用,是物联网应用的理想解决方案。
特性
图 3. ESP32-CAM 管脚定义
智能应用程序将处理智能装置所传送过来的信息,可以使用电脑视觉或是深度学习的算法进行分析、处理。
什么是计算机视觉?
计算机视觉是一门研究如何使机器“看”的科学,更进一步的说,就是是指用摄影机和电脑代替人眼对目标进行识别、跟踪和测量等机器视觉,并进一步做图形处理,使电脑处理成为更适合人眼观察或传送给仪器检测的图像。作为一个科学学科,计算机视觉研究相关的理论和技术,试图建立能够从图像或者多维数据中获取“信息”的人工智能系统。因为感知可以看作是从感官信号中提取信息,所以计算机视觉也可以看作是研究如何使人工系统从图像或多维数据中“感知”的科学。
人类眼中的世界
因为我们是被赋予了视觉的生物,所以很容易误认为“计算机视觉也是一种很简单的任务”。计算机视觉究竟有多困难呢?以下图中的车为例,人类的大脑将视觉信号划分为许多通道,好让不同的信息流输入大脑。大脑已经被证明有一套注意力系统,在基于任务的方式上,通过图像的重要部分检验其他区域的估计。
在视觉信息流中存在巨量的信息反馈,并且到现在我们对此过程也知之甚少。肌肉控制的感知器和其他所有感官都存在着广泛的相互联系,这让大脑能够利用人在世界上多年生活经验所产生的交叉联想,大脑中的反馈循环将反馈传递到每一个处理过程,包括人体的感知器官(眼睛),通过虹膜从物理上控制光线的量来调节视网膜对物体表面的感知。
计算机的世界
然而在机器视觉系统中,计算机会从相机或者硬盘接收栅格状排列的数字,也就是说,最关键的是,机器视觉系统不存在一个预先建立的模式识别机制。没有自动控制焦距和光圈,也不能将多年的经验联系在一起。大部分的视觉系统都还处于一个非常朴素原始的阶段。
下图展示了一辆汽车。在这张图片中,我们看到后视镜位于驾驶室旁边。但是对于计算机而言,看到的只是按照栅格状排列的数字。所有在栅格中给出的数字还有大量的噪声,所以每个数字只能给我们提供少量的信息,但是这个数字栅格就是计算机所能够“看见”的全部了。我们的任务变成将这个带有噪声的数字栅格转换为感知结果“后视镜”。
图 4. 人类与计算机所理解的图型
下图给出了为什么计算机视觉如此困难的另一些解释。给定一个对于 3D 世界的二维(2D)观测,就不存在一个唯一的方式来重建三维信号。即使数据是完美的,相同的二维图像也可能表示一个无限的 3D 场景组合中的任一种情况。而且,前面也提到过,数据会被噪声和畸变所污染。这样的污染源于现实生活中的很多方面(天气、光线、折射率和运动),还有传感器中的电路噪声以及其他的一些电路系统影响,还有在采集之后对于图像压缩产生的影响。
图 5. 物体的二维表示会随著观点不同而完全改变
深度学习
深度学习是机器学习研究中的一个新的领域,其动机在于建立、模拟人脑进行分析学习的神经网络,它模仿人脑的机制来解释数据,例如图像,声音和文本。深度学习的成功,主要得益于数据积累和计算能力的提高。深度网络的概念上世纪80年代就已提出来了,只是因为当时发现“深度网络”性能还不如“浅层网络”,所以没有得到大的发展。目前似乎有点计算机视觉就是深度学习的应用之势,这可以从计算机视觉的三大国际会议:国际计算机视觉会议(ICCV),欧洲计算机视觉会议(ECCV)和计算机视觉和模式识别会议(CVPR),上近年来发表的论文可见一般。目前的基本状况是,人们都在利用深度学习来“取代”计算机视觉中的传统方法。
计算机视觉发展趋势
图形用户界面主要以网页技术为主,而网页技术分为前端与后端,前端主要的应用技术为 HTML/CSS/JavaScript,后端则为网站服务器,本书将以 Flask 框架来实作。
前端网页
HTML(HyperText Markup Language)是一门语言,所有的网页都是用 HTML 编写出来的,可以描述文字信息、图片、音频、视频等内容。以下为一段简单的 HTML,说明标前、原始码,最后显示结果画面。
标签说明:
- <!DOCTYPE html>:标识html5标签
- 基本框架
<html></html>:根标签
<head></head>:头标签
<body></body>:网页体(显示在网页上)
- <meta>:编码方式标签,使用什么编码方式打开此文件
源代码
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>It is a sample</title>
</head>
<body>
Hello HTML
</body>
</html>
图 6. 一个简单的HTML范例
CSS(Cascading Style Sheets)是一种样式表语言,用于指定网页不同部分对用户的显示方式,针对已经使用 HTML 构建的内容添加一些样式和附加格式的方法。CSS可以使用下列三种方式嵌入HTML:
以下范例以定义内部样式块对象为例,将样式块写在 style 标签中,样式名为 font-size 用来指定字体大小,样式值为 30px,可以在结果画面中看到两段文字的差异。
源代码
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>It is a sample</title> <style> div{ font-size:30px } </style> </head> <body> Hello HTML <div>Hello HTML</div> </body> </html>
图 7. 一个包含 CSS 的 HTML 范例
HTML 为网站创建了基本结构,但 CSS 为该结构添加了样式,而 JavaScript 承担了所有这些工作,并使其具有交互性且功能更复杂。JavaScript是一种脚本语言,运行在浏览器上,以普通文本形式保存,有变量,控制语句等,主要用于操作 HTML 与 CSS ,产生动态效果。
将 JavaScript 脚本嵌入到 HTML 文档中有 4 种标准方法:
以下范例使用通过 HTML 文档事件处理程序引入,事件为 onMouseOver 当鼠标移到上方时触发,会跳出弹窗显示 Hello JS,代码与结果画面如下。
源代码
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>It is a sample</title> <style> div{ font-size:30px } </style> </head> <body> Hello HTML <div onMouseOver='alert("Hello JS")'>Hello HTML</div> </body> </html>
图 8. 一个包含 CSS 与 JavaScript 的 HTML 范例
后端网站服务器
Flask 是一个使用 Python 编写的轻量级网站应用框架,使用 BSD 授权,较其他同类型框架更为灵活、轻便、安全且容易上手。它可以很好地结合 MVC 模式进行开发,开发人员分工合作,小型团队在短时间内就可以完成功能丰富的中小型网站或 Web 服务的实现。
以下为一个简单的代码范例,可以用来与前端进行交互,源代码如下,结果画面如下所示,左手边是利用 python 解释器执行 Flask 代码的画面,右手边则是透过 Chrome 浏览器观看的结果。
源代码
# 导入Flask类库
from flask import Flask
# 创建应用实例
app = Flask(__name__)
# 视图函数(路由)
@app.route("/")
def hello_world():
return "Hello, World!"
# 启动服务
if __name__ == '__main__':
app.run(debug = True)
图 9. Flask 范例
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。