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

讲到视觉识别系统,输入端按类型分一般是感光的传感器,还有是摄像头等。感光的传感器有光敏电阻、普通的红外人体感应传感器等这些电子元器件可以将周围环境里的所需的光学信号转换成电信号,可接入树莓派的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或是树莓派的其他玩法,大家可以一起来交流。

树莓派的阿⾥巴巴普惠字体使用方法简介

2021年5 月 14 日,阿里巴巴官方发布,阿里普惠体 2.0 。

阿⾥巴巴普惠体(中⽂字体,指定5款字重),Alibaba Sans(⻄⽂字体,指定11款字 重),以下合称阿⾥巴巴字体,允许任何个⼈和企业免费使⽤,包括商⽤⽤途,但禁⽌⽤于 违法⽤途。

阿⾥巴巴字体文件可以从其官网下载。

下载后打开就可以先给电脑PC安装。

在树莓派里使用阿⾥巴巴字体的方法:

这里树莓派系统用官方带桌面系统:Raspberry Pi OS with desktop

先给树莓派安装中文输入法,安装命令:

sudo apt install fcitx fcitx-googlepinyin fcitx-module-cloudpinyin fcitx-sunpinyin

在工具栏里可看到输入法的设置了。

将阿⾥巴巴字体文件夹和文件放置在树莓派的:/usr/share/fonts

这样阿⾥巴巴字体就安装好了。

打开LibreOffice Writer,就可以看到刚安装的阿⾥巴巴字体,然后输入内容并可以使用了。

有了中文字体,其实也可以解决了树莓派运行python的opencv中cv2.putText() 只能显示英文字符、显示中文乱码的问题。

python案例代码:

# -*- coding: utf-8 -*-
import cv2
import numpy as np
from PIL import Image, ImageDraw, ImageFont

#图像设置
width = 800
height = 600
pixel = np.array([50,0,0],np.uint8)
w = np.array([pixel]*width,np.uint8)
newImg = np.array([w]*height,np.uint8)

# 图像从OpenCV格式转换成PIL格式
img_PIL = Image.fromarray(cv2.cvtColor(newImg, cv2.COLOR_BGR2RGB))
#字体设置
font = ImageFont.truetype(‘Alibaba-PuHuiTi-Regular.ttf’, 40)
# 文字输出位置
position = (100, 100)
# 输出内容
str = ‘在图片上输出中文,阿里巴巴普惠体’
draw = ImageDraw.Draw(img_PIL)
draw.text(position, str, font=font, fill=(0, 255, 0))
# 转换回OpenCV格式
img_OpenCV = cv2.cvtColor(np.asarray(img_PIL), cv2.COLOR_RGB2BGR)
cv2.imshow(“print chinese to image”, img_OpenCV)
cv2.waitKey()

运行后如下图:

成功输出的图像里显示了阿里巴巴字体的中文。

关于阿⾥巴巴字体的用法或是树莓派的其他玩法,大家可以一起来交流。

树莓派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界面,然后设置让树莓派开机自启程序即可。

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

树莓派MQTT的物联网IOT方案案例

在之前的文章里已经简单介绍了MQTT协议,这里结合树莓派+按钮开关(输入)和继电器(输出)制作一个简单的物联网MQTT案例来演示现场端设备与云端服务器的数据信息采集和远程控制功能。

案例流程架构图:


数据采集:
现场端按钮开关的开关状态情况还有树莓派自身的信息,通过树莓派联网发送到云端服务器,人可以用手机或电脑在云端网站页面里看到信息。

远程控制:
人在人可以用手机或电脑在云端网站网站页面里进行点击输入操作,树莓派接收到云服务器发来的远程控制指令,树莓派通过GPIO接口通断信号控制现场继电器的吸合和断开。

准备阶段工作:
现场端工作:
1、准备好树莓派主板通上电,安装好Raspberry Pi OS系统
2、按钮开关和继电器接到树莓派的GPIO模块接口
云端网站工作:
1、准备好云端服务器配置好网络和IP,这里安装好LAMP网站应用环境(Linux+Apache+Mysql+PHP/Python),关键是mysql数据库结构,为之后的python编程和网站编程制作做好数据对接准备
2、安装MQTT服务端,关键是构思好发送和订阅的数据结构,为之后的python编程做发送指令和接受信息的拼接、转变、解析等做准备。

python编程阶段工作:
一、树莓派里运行的python:
1、按钮开关的数据采集:
(1)监控GPIO输入状态
(2)MQTT发布:状态信息
2、控制输出给继电器:
(1)订阅MQTT信息
(2)控制GPIO输出
(3)MQTT发布:回复控制状态
3、树莓派自身信息的心跳数据:
(1)获取树莓派自身数据信息
(2)MQTT发布:树莓派心跳信息
二、服务器里运行的python:
1、数据采集:
订阅MQTT各种数据消息,数据放入mysql
2、远程控制:
(1)收到mysql里控制线圈信息
(2)发布MQTT消息:控制线圈

PHP网站搭建阶段工作:
1、这里做法是用html/CSS/JS制作如上图里的前端人机交互的页面,显示相关数据信息和设置按钮操作。
2、后台里用PHP做html页面与mysql数据库之间的数据对接传输分析转换的接口用来调取。

这里用最简单的开关量设备案例做演示说明,举一反三现场端的其他类型设备,比如Modbus、温度、湿度、串口等,也可通过这样的方式做物联网的数据采集传输分析和远程控制