作者:Jose Garcia
翻译:吴振东
校对:张一豪
本文约4000字,建议阅读14分钟。
本文将利用OpenCV,Python和Ubidots来编写一个行人计数器程序,并对代码进行了较为详细的讲解。
数字图像处理(DIP)技术目前发展非常迅速,这在很大程度上要归功于开发人员可以访问云来运用机器学习技术。通过云处理数字图像可以绕过任何专用硬件的要求,这使得使用DIP成为了大家的首选。作为处理图像最经济和最通用的方法,DIP已经被广泛应用。这种其中最常见的当属行人检测和计数 - 这对于机场、火车站、零售店体育馆、公共活动和博物馆来说都是一项非常有用的指标。
现有的传统行人计数技术不仅价格昂贵,而且它们所生成的数据通常与专有系统相关联,这些系统限制了数据提取和KPI的优化选择。相反,使用你的个人相机和SBC的嵌入式DIP不仅可以节省时间和金钱,还可以根据你所关注的KPI来自由定制应用程序,并从云中获取独特的领悟。
使用云来启用DIP IoT(物联网)应用程序可以增强整体的功能性。随着可视化、报告、警报和交叉引用外部数据源(如天气、实时供应商定价或业务管理系统)等功能的增强,DIP为开发人员提供了他们所需的自由空间。
想象一下一家摆着冰淇淋冰柜的杂货店:他们想要追踪统计经过店门口的人数,顾客所选择的产品,以及门被打开的次数和冰柜的内部温度。 从这几个数据点中,零售商可以运行相关性分析,以更好地了解和优化他们的产品定价和冰箱的整体能耗。
为了开启你的数字图像处理应用程序开发工作,Ubidots运用OpenCV和Python来创建了一套人员计数系统教程,用于分析统计给定区域中的人数。其实不仅是统计人数这样简单,添加Ubidots IoT开发平台的资源还可以扩展你的应用程序。在这里,你可以看到如何实现利用Ubidots来构建的实时人数统计仪表板。
在本文中,我们将介绍如何使用OpenCV和Ubidots来实现简单的DIP叠加并创建行人计数器。此示例最适用于任何基于Linux的发行版系统,也适用于Raspberry Pi,Orange Pi或类似的嵌入式系统。
有关其他集成的查询,请与Ubidots支持中心取得联系,以便来了解你的企业如何使用这项增值技术。
目录:
应用需求
编码 – 8个小节
测试
创造你自己的仪表板
结果展示
1、应用需求
任何带有Ubuntu衍生版本的嵌入式Linux
操作系统中安装了Python 3或更高版本
OS中安装了OpenCV 3.0或更高版本。如果使用Ubuntu或其衍生产品,请按照官方安装教程或运行以下命令:
pip install opencv-contrib-python
当你成功安装Python 3和OpenCV时,你可以通过这段简单的代码来进行检验(首先在你的terminal里输入‘python’)
import cv2 cv2.__version__
你应该在屏幕上看到你所安装的OpenCV版本:
按照官方操作指南来安装Numpy,或者运行下面的命令
pip install numpy
安装imutils
pip install imutils
安装requests
pip install requests
2、编码
可以在这一章节找到检测和发送数据的整个例程。为了更好地解释这段代码,我们将其分为八个部分,以便更好地解释代码的各个方面,让你更容易理解。
第1节:
from imutils.object_detection
import non_max_suppression
import numpy as np
import imutils
import cv2
import requests
import time
import argparse
URL_EDUCATIONAL = "http://things.ubidots.com"
URL_INDUSTRIAL = "http://industrial.api.ubidots.com"
INDUSTRIAL_USER = True # Set this to False if you are an educational user
TOKEN = "...." # Put here your Ubidots TOKEN
DEVICE = "detector" # Device where will be stored the result
VARIABLE = "people" # Variable where will be stored the result
# Opencv pre-trained SVM with HOG people features
HOGCV = cv2.HOGDescriptor()
HOGCV.setSVMDetector(cv2.HOGDescriptor_getDefaultPeopleDetector())
在第1节中,我们导入必要的库来实现我们的探测器,imutils是一个有用的DIP库工具,让我们从结果中执行不同的转换,cv2是我们的OpenCV Python包装器,requests 可以通过HTTP发送数据/结果到Ubidots,argparse让我们从脚本中的命令终端来读取命令。
重要提示:不要忘记使用您的Ubidots帐户