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

讲到视觉识别系统,输入端按类型分一般是感光的传感器,还有是摄像头等。感光的传感器有光敏电阻、普通的红外人体感应传感器等这些电子元器件可以将周围环境里的所需的光学信号转换成电信号,可接入树莓派的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编码。
然后,平台返回,图片里识别出的物体名称、置信度、位置大小。

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