辰匠科技:树莓派视觉图像识别信息物联网方案简介

讲到视觉识别系统,输入端按类型分一般是感光的传感器,还有是摄像头等。感光的传感器有光敏电阻、普通的红外人体感应传感器等这些电子元器件可以将周围环境里的所需的光学信号转换成电信号,可接入树莓派的GPIO接口再编程处理,这种案例以前已介绍过了。这里将稍详细讲解下的是摄像头,树莓派一般可用的摄像头一般按接口分类有二种:一种是USB摄像头、一种是树莓派自身的CAMERA排线接口摄像头。摄像头按识别的对象种类分有可见光的普通摄像头还有红外摄像头。

使用树莓派+摄像头的硬件组合结合python代码编程来实现获取现场事务的图像信息做识别分析后可用来联网处理。

这里的视觉图像识别信息方案,按信息类型分2类:
1、识别图像本身参数数据;
2、将图像内物体或图案识别成文本信息。

讲到视觉图像识别这里不得不提OpenCV,OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉和机器学习软件库,可以运行在Linux、Windows、Android和Mac OS操作系统上。它轻量级而且高效由一系列 C 函数和少量 C++ 类构成,同时提供了Python、Ruby、MATLAB等语言的接口,实现了图像处理和计算机视觉方面的很多通用算法。

之前相关文章介绍过利用树莓派python的openCV结合RTMP和tkinter界面来做视频流监控。

这里用树莓派Raspberry Pi OS的linux系统和Python编程语言。

树莓派安装python3的openCV指令:
sudo apt-get install python3-opencv

 

一、图像本身参数数据的分析和处理

首先得了解下图像在计算机中存储形式:
对于只有黑白颜色的灰度图,为单通道,一个像素块对应矩阵中一个数字,数值为0到255, 其中0表示最暗(黑色) ,255表示最亮(白色)。对于采用RGB模式的彩色图片,为三通道图,Red、Green、Blue三原色,按不同比例相加,一个像素块对应矩阵中的一个向量, 如[24,180, 50],分别表示三种颜色的比列, 即对应深度上的数字,如下图所示:

需要注意的是,由于历史遗留问题,openCV采用BGR模式,而不是RGB,编程时按所需利用代码转换即可。

这里结合NumPy(Numerical Python 是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,此外也针对数组运算提供大量的数学函数库。)对图像的数组做分析处理,比如提取像素颜色数据、计算统计颜色数值等。结合openCV内部的函数算法,还可将图像转灰度后提取图像里的轮廓等信息,如下图。

二、将图像内物体或图案识别成文本信息然后分析和处理

1、二维码识别案例
二维码又称二维条码,常见的二维码为QR Code,QR全称Quick Response,是一个近几年来移动设备上超流行的一种编码方式,它比传统的Bar Code条形码能存更多的信息,也能表示更多的数据类型。

这里用python的pyzbar来识别图像的二维码,反馈图像二维码里的信息和二维码在图像里的位置。

2、文字识别OCR案例
OCR (Optical Character Recognition,光学字符识别)
这里用python3的pytesseract,安装指令:
sudo apt install tesseract-ocr
sudo apt install libtesseract-dev
sudo pip3 install pytesseract

从官网下载中文语言包文件:chi_sim.traineddata,
文件放置位置:
/usr/share/tesseract-ocr/4.00/tessdata

运行python程序,识别图像里的文字。

3、机器学习-人脸识别案例
用openCV的CascadeClassifier(级联分类器)
使用现成的人脸特征机器学习的训练数据:haarcascade_frontalface_alt.xml

除了人脸识别,openCV官网里还有其他的多种识别分类器。

4、利用云平台的图像识别
这里以百度AI开放平台为例:

编程往其产品端口发送图像的base64编码。
然后,平台返回,图片里识别出的物体名称、置信度、位置大小。

最后,这些识别出的信息数据可以做分析、保存、或联网传输处理。
还有其他很多树莓派图像识别的方案案例,欢迎大家一同探讨。

 

 

 

 

树莓派识别ID\IC卡的RFID联网案例简介

射频识别(RFID)是 Radio Frequency Identification 的缩写。其原理为阅读器与标签之间进行非接触式的数据通信,达到识别目标的目的。RFID 的应用非常广泛,典型应用有动物晶片、汽车晶片防盗器、门禁管制、停车场管制、生产线自动化、物料管理。日常生活工作中,常见的RFID标签就有:ID、IC感应卡或钥匙圈

ID 卡全称身份识别卡(Identification Card),是一种不可写入的感应卡,含固定的编号,一般会标注在卡片上。ID 卡属于低频卡,工作频率一般是 125KHz-1000Khz。

IC 卡全称集成电路卡(Integrated Circuit Card),又称智能卡(Smart Card),可读写,容量大,有加密功能,数据记录方便。IC 卡一般是 13.56MHz 的高频卡,跟手机 NFC 工作频率一样。所以手机 NFC 可以模拟未加密的 IC 卡,不能模拟 ID 卡。

这里树莓派识别ID\IC卡利用RFID射频感应模块:
ID卡识别利用STC15模块;IC卡识别利用的是PN532模块

RFID射频感应模块与树莓派通信采用TTL串口,TX与RX交错相接即可。

然后对树莓派运行的python编程,原理是往串口发送读卡指令,接收感应模块从串口发来的消息,并对消息进行分析得到ID\IC卡号。

如果获取到卡号信息后,之后可以做数据传输操作比如MQTT发布消息或写入MYSQL数据库等。

最后可以按项目情况做成各种应用,比如:在手机里查看刷卡记录。

关于RFID或是树莓派的其他玩法,大家可以一起来交流。

树莓派4B简介及一个玩法介绍

树莓派(Raspberry Pi)基金会,2019年6月24日正式发布了Raspberry Pi 4 Model B。树莓派4代基于 BCM2711 构建,完全重新实现了 28nm 的 BCM283X。使用更强大的 Cortex-A72 内核取代 Cortex-A53,从而使性能较树莓派3B+提高了2到4倍(具体取决于测试基准)。

以下是 Raspberry Pi 4 Model B 的亮点:

  • 1.5GHz 4核心64位 ARM Cortex-A72 CPU (~3×倍性能)
  • 1GB/2GB/4GB LPDDR4 SDRAM 内存
  • 全吞吐量千兆以太网
  • 双频 802.11ac 无线网络
  • 蓝牙 5.0
  • 两个 USB 3.0 和两个 USB 2.0 接口
  • 双显示器支持,分辨率高达 4K
  • VideoCore VI 显卡,支持 OpenGL ES 3.x
  • HEVC 视频 4Kp60 硬解码
  • 完全兼容早期的树莓派产品

电源

新版本已经用 USB-C 接口替换了之前的 USB micro-B 电源接口,这将支持更大的功率。而且新增了 USB OTG Boot 功能。

视频

为了在现有的电路板尺寸小支持双显示器输出,新版本使用了两个 HDMI D 型接口(micro DHMI)取代之前的 HDMI A 型接口。

这次玩法说明:

在树莓派4上安装一个3.5inch RPi LCD触摸屏,系统就用最新的官方桌面系统:Raspberry Pi OS。

这个玩法解决问题:当树莓派所处在的网络环境变化时如需远程联接时需要寻找树莓派的IP地址。

以前的处理办法是一般是用PC连接入网络后用ip扫描软件工具或查看路由器记录找树莓派的IP或者使用树莓派的HDMI接显示屏直接看树莓派的IP,因此还有有些不方便。

这个玩法的做法是在这个3.5寸屏上开机后如果树莓派是联网状态就显示出树莓派的IP地址。这样还可以在界面里方便地重启和安全关闭树莓派。

点击界面里的“网络 IFconfig”按钮还可以查看到系统命令:ifconfig显示树莓派网络设备详细信息。

在首页界面里点击“IP 二维码”,会显示带有树莓派IP信息的二维码。这样可以方便地用手机里的微信或浏览器等就可以扫码进入到树莓派WEB应用服务。

这个玩法编程实现主要是利用python的flask微型的WEB框架,还有制作各个html界面,然后设置让树莓派开机自启程序即可。

大家也来可以多多交流树莓派各种玩法,或是提供建议意见。

辰匠IOT物联网案例:利用加速度传感器采集物体运动状态信息

说起物体运动状态,不得不提到的物理量:速度、加速度、运动距离等。

这里用大家基本都拥有的智能手机内部的加速度传感器来做为案例说明。

手机加速度传感器的数据都是描述沿着手机设备三个方向轴上的位置,X方向从手机设备的左边(负)到右边(正),Y方向则是由手机设备的底部(-)到顶部(+),而Z方向为垂直于屏幕由设备的背面(-)到正面(+)。

这次这里采用HTML5里的devicemotion事件编写js代码,不选用带有重力G加速度数据参数的accelerationIncludingGravity,选用加速度数据参数的acceleration,制作手机网页来采集加速度传感器的数据并用百度的echart来简单显示数据趋势图表。

用手机浏览器或微信打开制作的网页后,按X、Y、Z各轴方向晃动手机就会看到各轴加速度数据和运动曲线。

利用X、Y、Z各轴加速数据,结合间隔时间,可推算出各轴的速度、合计速度、还有移动距离等其他运动参数,虽然受制于手机内的加速度传感器的数据精度或采集频率还有算法原因推算出的数据不一定精确,但通过这个案例,也可了解到利用手机摇一摇、运动计步的基本原理。

在其他应用场景,可以使用更好的加速度传感器来采集运动数据,结合数据联网技术编写代码程序将数据信息传输和分析。

 

 

 

 

 

树莓派物联网工具软件Node-RED简介

之前介绍过很多基于树莓派与python的物联网技术方案和案例。这次给大家介绍个可方便实现物联网的软件工具:Node-RED。

Node-RED 是构建物联网(IOT, Internet of Things)应用程序的一个强大工具,其重点是简化代码块的“连接”以执行任务。它使用可视化编程方法,允许开发人员将预定义的代码块(称为“节点”,Node)连接起来执行任务。连接的节点,通常是输入节点、处理节点和输出节点的组合,当它们连接在一起时,构成一“流”(Flows)。

Node-RED最初是IBM在2013年末开发的一个开源项目,以满足他们快速连接硬件和设备到Web服务和其他软件的需求——作为物联网的一种粘合剂,它很快发展成为一种通用的物联网编程工具。重要的是,Node-RED已经迅速形成一个重要的、不断增长的用户基础和一个活跃的开发人员社区,他们正在开发新的节点,同时允许程序员复用Node-RED代码来完成各种各样的任务。

如果安装树莓派的系统是带有推荐软件的(Raspberry Pi OS with desktop and recommended software),一般会已经带有这个Node-RED,在编程的菜单里。

打开后会自动启动一个终端命令框。

这里会告诉你,用树莓派或联网的电脑浏览器打开:树莓派IP:1880(端口),还有些命令可开启或停止Node-Red、输出日志、开机自启或不自启。
打开后Node-Red的界面:

如果树莓派的系统没有带推荐软件Node-RED,就需要手动安装从node.js、npm开始。
打开终端安装指令:
apt install nodejs
apt install npm
npm install -g –unsafe-perm node-red
启动指令:
node-red   #(默认端口:1880)
node-red -p 8080    #(自定义端口号:8080或其他)
安装后打开方式一样,在浏览器内打开:树莓派IP:(端口号)。
安装好的Node-RED会带些通用的节点,但还需按各种项目情况要求安装各种节点组件,比如树莓派的GPIO、串口协议、modbus协议、mysql数据库、OPC UA/DA等,可在右上角的设置选择安装。
这里介绍些简单的节点工作案例:
硬件上,拿个开关按钮和一个二极管指示灯接在树莓派的GPIO。
在Node-RED里放上树莓派节点:rpi-gpio-in和rpi-gpio-out,和一个debug调试信息输出的节点,配置完成连上线后点击界面右上角的“部署”按钮。
当按下或松开按钮,指示灯会对应亮灭,界面里调试窗口里会显示对应的信息。


我们也可以在其中插入个函数function节点,写入代码做简单的处理。比如这里的开关状态的置反处理。


我们也可以用MQTT协议做为信息输入,这里用上次的树莓派自身心跳MQTT案例

然后里用函数function节点做信息解析,提取树莓派CPU温度信息。

这里先用这2个案例,简单介绍下Node-Red的工作运行方式和联网通信的方式。
节点完成后,可导出json文件做保存备份。

当遇到物联网项目不是很复杂的情况下,基本是可以利用这个Node-Red放入节点部署运行即可。
如果项目比较复杂了,也可利用Node-Red做为一个工作环节可与云端或自身的做mqtt或http做通信、或是数据库连接、也或是与工业协议modbus、OPC等联接等,然后可在云端或树莓派自身里再用python编程做复杂处理。为解决项目问题、满足项目要求提供了解决办法和多些玩法。