APP下载

树莓派机器学习初探

2021-01-06牟晓东

电脑报 2021年49期
关键词:树莓类别摄像头

牟晓东

众所周知,机器学习是人工智能的核心,主要目的是让机器从使用者和输入数据中获得信息,从而自动判断和输出对应结果。“图片分类”指的是识别一张图片(包括使用摄像头实时拍摄的图片)是否为某类物体(或状态与场景),即识别出图片中的主体或是状态较为单一的某场景。在树莓派中,我们可以通过采集较为少量的样本图片进行训练和标注,最终获取到一个较高精度的图像分类模型,然后分别使用“积木”图形化和Python代码编程,开发制作一个能够智能识别树莓派、掌控板和Arduino的“开发板分类器”。

实验器材包括树莓派3B+一块,USB接口的摄像头一个,音箱一个;作为“道具”的树莓派、掌控板和Arduino开发板各一块,A4白纸若干张。首先将摄像头插入树莓派的USB接口,在平整的桌面上铺好白纸,调整好拍摄角度;然后,将音箱数据线插入树莓派的音频输出孔,最后给树莓派通电,启动操作系统。

首先,访问古德微机器人网站(http://www.gdwrobot.cn),登录进入自己的账号后点击“设备控制”进入“积木”界面;接着,点击“更多功能”按钮,再点击左下角的“机器学习”项,页面显示有“图片分类”和“物体检测”两类功能应用,点击“图片分类”中的“远程使用树莓派摄像头进行图片分类”按钮(如图1)。

此时,会弹出并进入“机器学习——图片分类(远程采集树莓派图片)”页面,在左侧系统默认的“类别1”、“类别2”等项目中即可进行数据的采集。

首先,将“类别1”重命名为“树莓派”,再将树莓派主板放置于摄像头下,不断变换多个位置与角度,分别点击“拍照”按钮进行树莓派图片样例的添加;接着,按照同样的方式再将“类别2”重命名为“掌控板”,点击“添加类别”按钮增加“Arduino”和“背景”两项,分别在摄像头下放置掌控板和Arduino进行多个位置与角度变换的拍照(“背景”信息的采集直接拍摄白纸即可),每项均拍照采集9张图片样例;然后,点击右上方的“开始训练”按钮进行图片分类学习的训练,结束后即可在摄像头下放置任意一种开发板(比如树莓派)进行验证预览,下方显示对应的项目与置信度百分比:“树莓派:80%、掌控板:2%、Arduino:17%、背景:1%”(四个置信度百分比之和为100%),其中的树莓派置信度最高,即判定该物体为树莓派(如图2)。

拍照采集与训练验证均完成之后,点击右下角的“下载树莓派可用模型到树莓派上”按钮,很快就会有“模型转换下载完成”的提示,相关的文件已被下载到树莓派的/home/pi/model/image_classifica

tion目录下,模型文件为model.tflite,对应标签文件为labels.txt。通过Windows的远程桌面连接进入树莓派进行查看,labels.txt的文件内容包含四行内容,依次对应训练模型的名称:“树莓派、掌控板、Arduino、背景”(如图3)。

点击“积木”切换至图形化编程界面,首先,建立一个名为“分类识别模型对象”的变量,为其赋值为“人工智能”-“机器学习”下的“加载图片分类模型”模块语句,保持其中默认的模型文件和标签文件不变(即之前下载保存至树莓派的model.tflite和labels.txt两个文件);接着,建立一个重复执行10次的循环结构,建立变量“照片路径”,赋值为“用USB摄像头拍一张照片”;再建立变量“识别结果”,赋值为“用图片分类模型‘分类识别模型对象’对图片‘照片路径’进行分类”,并进行结果输出;再建立变量“最高概率类别”和“最高概率”,分别赋值为“从图片分类识别结果”中提取置信度最高的“类别名称”和“置信度”,同样也在LOG调试信息区显示输出;最后,构造一个“播放语音”模块语句,通过音箱输出字符串信息:“这个物体百分之‘最高概率’是‘最高概率类别’”,并加上“等待5秒”,作用是等待播放语音结束。

将程序保存为“开发板分类器”后点击“运行”按钮,此时,尝试将一块掌控板放置于摄像头下,很快在LOG调试信息区有了结果,前四行是以Python语言的字典形式进行信息输出——

[{"name":"掌控板","score":87.5},

{"name":"Arduino","score":10.2},

{"name":"树莓派","score":2.3},

{"name":"背景","score":0}]

表示识别的四种分类结果,即每个项目的名称与所对应的置信度百分比;接着输出的“掌控板”和“87.5”分别是变量“最高概率类别”和“最高概率”的值,表示识别出本次的目标物体有87.5%的概率是掌控板(如图4)。同时,音箱中进行语音播报:“这个物体百分之八十七点五是掌控板”。接下来,测试Arduino和树莓派,或者什么都不放(只有白纸的背景),程序都非常准确地识别出了每一种物体并进行语音播报。

Python代码可直接到Github查找和下載(https://github.com/tensorflow/examples/tree/

master/lite/examples/image_classification/raspberry_pi),不过这个classify_picamera.py文件中调用的摄像头不是USB接口,而是连接至树莓派的“CAMERA”CSI卡槽接口的P5V04A SUNNY定焦摄像头——导入库:“import picamera”。

古德微机器人平台已经将该文件进行了改写(image_classify_with_usbcamera.py),一是将其中调用标配摄像头的代码改为USB摄像头,另一个是将模型文件和标签文件直接定位至之前下载保存至树莓派的/home/pi/model/image_classification/目录的model.tflite和labels.txt文件,分别通过为model_path和labels_path两个变量赋值来实现。程序先是通过import调用time、numpy、cv2和PIL等相关库模块;接着,自定义了load_labels()和cv2ImgAddText ()两个函数,分别实现标签文件加载和在USB摄像头拍摄的画面上添加识别文字信息的功能;最后,进行模型文件的加载和输出细节的设置(包括宽度和高度等)、读取摄像头拍摄的画面以及画面颜色转换与尺寸重设置等操作。

通过Windows远程桌面连接进入树莓派后,打开并运行image_classify_with_usbcamera.py程序;同时,在摄像头下分别放置掌控板、Arduino和树莓派开发板,程序会弹出一个名为“frame”的摄像头实时捕捉画面,显示有拍摄到的开发板并标出识别的信息,如“掌控板 accuracy:0.85”、 “树莓派 accuracy:0.93”等,其中的“accuracy”意思是“准确度”(对应图形化编程中的“置信度”),后面的数据即代表识别并确定的百分比(如图5)。

猜你喜欢

树莓类别摄像头
一起去图书馆吧
简析基于概率预测的网络数学模型建构
黄金水果红树莓
树莓红了 游人醉了
一种电脑专用摄像头
e络盟率先推出第三代树莓派
年度睡姿大盘点(下)
选相纸 打照片
无法开启摄像头的解决方案
购买摄像头的经验