本帖最后由 木子呢 于 2021-12-14 18:48 编辑
Python编程进阶系列课程—10游园小助手
课程目录:
一、实践情境
在游园时,各种奇花异草常常令我们着迷,然而,由于缺少具体信息展示,我们只能饱一饱眼福而无法得知其名称及更多属性特征。
为此,我们将设计一个园林植物小助手,帮助我们更好得认识眼前的植物。
二、实践目标
本实践项目运用micro:bit作为智能终端,来设计一个园林植物小助手。通过调用电脑摄像头及百度AI图像识别工具来识别各种不同的植物,并显示其信息。
三、知识目标
1、了解图像识别的一般过程
2、掌握运用micro:bit作为智能终端,通过Python编程识别照片上的植物的方式
3、掌握运用micro:bit作为智能终端,通过Python编程调用电脑摄像头识别植物的方式
四、实践准备
硬件清单:
软件使用: Mind+编程软件
五、实践过程
在本项目中,我们将分三步,设计一个园林植物小助手,实现植物的识别及信息显示。
1、导入植物图片进行识别
2、调用电脑摄像头进行识别
3、反馈详细信息
任务1:图片识别
1. 分析设计
在这个任务中,我们将对导入的植物图片进行识别并显示结果。
这里,我们可先向计算机中导入植物图片,再借助百度AI开放平台的图像识别技术,将图像中的特征进行提取,再根据提取到的特征与模型中的数据进行匹配,最终将匹配结果显示在软件终端。
由于我们使用的是百度AI平台的图像识别技术,因此,我们直接利用上节课创建好的百度AI账户即可,无需再次创建。
对于植物图片识别的效果实现,我们分五步进行,具体流程如下,
2.软件编写
在编写代码之前,我们需要先对软件进行一些设置
软件设置:
STEP1:创建与保存项目文件
启动Mind+软件,选择“Python模式”,另存项目并命名为“m游园小助手”。
STEP2:创建与保存Python文件
创建一个Python程序文件“任务一.py”,双击打开。
STEP3:导入图片
在项目文件夹中导入需要的植物图片。(图片与程序文件同在项目文件夹中)。
Tips:提供的植物图片“玉兰.jpg”见附录1。
程序编写、运行及回顾:
STEP1:编写Python程序
- import time #导入时间库
-
- from aip import AipImageClassify #导入百度图像识别库
-
- APP_ID = ''#和我们百度云中创建的应用的三个参数一致,按照自己所创建的应用参数对应进行替换
-
- API_KEY = ''#引号内输入自己的API_KEY
-
- SECRET_KEY = ''#引号内输入自己的SECRET_KEY
-
- client = AipImageClassify(APP_ID, API_KEY, SECRET_KEY) #连接百度AI图像识别平台
-
- #""" 读取图片 """
-
- with open('玉兰.jpg', 'rb') as fp: #打开需要识别的图片文件
-
- file_context = fp.read() #读取文件并将内容存储为file_context
-
- result = client.plantDetect(file_context)#识别侦测植物并将结果存入result变量
-
- print(result) #打印结果
-
- print("---------------------")
复制代码
STEP2:运行程序并观察效果
点击运行,在软件终端可以看到该植物的识别结果为:
STEP3:回顾程序
3.调试修改
导入一张动物的图片,观察效果,看是否能识别出来。
Tips:提供的动物图片见附录1
任务2:摄像头识别
1.分析设计
在上个任务中,我们已经成功对导入的玉兰花的图片进行识别并得到结果。接下来,我们将尝试通过调用电脑摄像头来对植物进行识别,并将结果显示在软件终端界面。这里,我们可将micro:bit与计算机相连,通过micro:bit上的按键开关来控制植物的拍照识别。
2.硬件搭建
通过USB连接线将micro:bit接到计算机。
3.软件编写
在编写代码之前,我们首先需要先对软件进行一些设置,之后安装所需要的库,而由于目前没有现成的调用摄像头拍照的功能库,因此接下来我们还需手动编写它以便后续调用,最后便是项目任务二主程序的编写。
Tips:调用摄像头拍照的功能程序已提供,附录2可见。
软件设置:
STEP1:创建与保存Python文件
新建一个Python程序文件“任务二.py”,双击打开。
安装库:
STEP1:安装opencv库
在“库管理”的“推荐库”下进行安装。
编写调用摄像头拍照程序:
(1)在“任务一.py”的同级目录下,新建一个“photograph.py”程序文件,将附录2 中的调用摄像头拍照程序代码写入并保存。
程序编写、运行及回顾:
STEP1:编写Python程序
- from aip import AipImageClassify #导入百度图像识别库
-
- import time #导入时间库
-
- import photograph #导入调用摄像头拍照程序文件
-
- from pinpong.board import Board #导入pinpong.board包中的Board模块
-
- from pinpong.extension.microbit import * #导入pinpong.extension.microbit中所有模块
-
- Board("microbit").begin() #初始化,选择板型和端口号,不输入端口号则进行自动识别
-
- APP_ID = ''#和我们百度云中创建的应用的三个参数一致,按照自己所创建的应用参数对应进行替换
-
- API_KEY = ''#引号内输入自己的API_KEY
-
- SECRET_KEY = ''#引号内输入自己的SECRET_KEY
-
- client = AipImageClassify(APP_ID, API_KEY, SECRET_KEY) #连接百度AI图像识别平台
-
- while True: #循环执行
-
- if button_a.is_pressed() == 1: #按下板载按钮A
-
- photograph.get_photo() #调用摄像头拍照
-
- with open('image.jpg', 'rb') as fp: #打开需要识别的图片文件
-
- file_context = fp.read() #读取文件并将内容存储为file_context
-
- result = client.plantDetect(file_context); #识别侦测植物并将结果存入result变量
-
- print(result) #打印结果
-
- print("---------------------")
复制代码
STEP2:运行程序并观察效果
(1)运行程序,观察软件终端
点击运行,等待程序的上传
(2)按下micro:bit按键开关
按下A按键,等待数秒后调出摄像头
Tips:若摄像头弹窗无法自动跳出至最外层界面,可手动在任务栏中点击使其弹出。
(3)通过摄像头拍取植物图片
将植物(或打印下来的植物图片)置入摄像头的窗口中,按下S键保存图片。
Tips:可在项目文件夹中找到“image.jpg”图片,查看拍下来的植物图像。按键时可通过“shift”键跳出输入法。
(4)观察软件终端
观察终端,可以看到识别到的结果显示在软件终端
STEP3:回顾程序
任务3:详细信息展示
1.分析设计
在上个任务中,我们实现了通过调用摄像头的方式来对植物进行识别,并将结果显示在软件终端界面。然而,即使识别到了植物类型,得到的始终只是一个简单的结果,而没有更多的信息展示。
因此,接下来,我们可将在此基础上进一步完善程序,借助百科,将更多与识别到的植物相关的信息显示出来。
2.硬件搭建
通过USB连接线将micro:bit接到计算机。
3.软件编写
软件设置:
STEP1:创建与保存Python文件
新建一个Python程序文件“任务三.py”,双击打开。
程序编写、运行及回顾:
STEP1:编写Python程序
- from aip import AipImageClassify #导入百度图像识别库
-
- import time #导入时间库
-
- import photograph #导入调用摄像头拍照程序文件
-
- from pinpong.board import Board #导入pinpong.board包中的Board模块
-
- from pinpong.extension.microbit import * #导入pinpong.extension.microbit中所有模块
-
- Board("microbit").begin() #初始化,选择板型和端口号,不输入端口号则进行自动识别
-
- APP_ID = ''#和我们百度云中创建的应用的三个参数一致,按照自己所创建的应用参数对应进行替换
-
- API_KEY = ''#引号内输入自己的API_KEY
-
- SECRET_KEY = ''#引号内输入自己的SECRET_KEY
-
- client = AipImageClassify(APP_ID, API_KEY, SECRET_KEY) #连接百度AI图像识别平台
-
- while True: #循环执行
-
- if button_a.is_pressed() == 1: #按下板载按钮A
-
- #""" 读取图片 """
-
- photograph.get_photo() #调用摄像头拍照
-
- with open('image.jpg', 'rb') as fp: #打开需要识别的图片文件
-
- file_context = fp.read() #读取文件并将内容存储为file_context
-
- result = client.plantDetect(file_context); #识别侦测植物并将结果存入result变量
-
- print(result) #打印结果
-
- print("---------------------")
-
- if button_b.is_pressed() == 1: #按下板载按钮B
-
- #""" 读取图片 """
-
- photograph.get_photo() #调用摄像头拍照
-
- with open('image.jpg', 'rb') as fp: #打开需要识别的图片文件
-
- file_context = fp.read() #读取文件并将内容存储为file_context
-
- options = {}
-
- options["baike_num"] = 1 #返回1份百科信息的结果
-
- result1 = client.plantDetect(file_context, options) #识别侦测详细信息
-
- print(result1) #打印结果
复制代码
STEP2:运行程序并观察效果
(1)运行程序,观察软件终端
点击运行,等待程序的上传
(2)按下micro:bit按键开关
按下B按键,等待数秒后调出摄像头
(3)通过摄像头拍取植物图片
将植物(或打印下来的植物图片)置入摄像头的窗口中,按下S键保存图片。
(4)观察软件终端
观察终端,可以看到识别到的月季花的详细信息显示在软件终端
STEP3:回顾程序
六、巩固提高
1.项目小结
本节课我们以micro:bit为智能终端设计了一个游园小助手。首先对导入计算机中的植物图片借助百度AI开放平台的图像识别技术 进行识别,并将识别到的结果显示在终端,之后换成以摄像头拍摄的方式来识别植物,最后,借助百科将识别到的植物的详细信息展示出来。
2. 项目拓展
(1)尝试结合语音合成技术,将显示的植物信息以语音形式播报出来。
(2)于百度AI图像识别技术而言,识别植物只是其强大功能中的其中之一,通过它,还可以对菜品、车辆、动物、地标、花卉、食材、红酒、货币等进行识别。
让我们自主学习练习一下吧!
https://ai.baidu.com/ai-doc/IMAGERECOGNITION/4k3bcxj1m#植物识别
附录
附录1动植物图片
链接:https://pan.baidu.com/s/1T-R8AWx6L8_5IxvYKcf6vQ
提取码:3ozx
附录2
- import cv2 #导入cv库
-
- import time #导入时间库
-
- def get_photo():
-
- #调用笔记本内置摄像头,所以参数为0,如果有其他的摄像头可以调整参数为1,2
-
- cap=cv2.VideoCapture(0) # 创建一个 VideoCapture 对象
-
- time.sleep(0.1)
-
- while (cap.isOpened()): # 循环读取每一帧
-
- ret, frame=cap.read()#从摄像头读取图片 , ret存储布尔值,frame存储图像
-
- frame = cv2.flip(frame,1,dst=None) #镜像
-
- cv2.imshow("Capture_Test", frame) #窗口显示,显示名为 Capture_Test
-
- #保持画面的持续。
-
- k=cv2.waitKey(1) #每帧数据延时1ms,延时不能为 0,否则读取的结果会是静态帧
-
- if k == 27: #通过esc键退出摄像
-
- cv2.destroyAllWindows() #删除建立的全部窗口
-
- break
-
- elif k==ord("s"): #通过s键保存图片,并退出。
-
- cv2.imwrite("image.jpg",frame) #保存图片
-
- cv2.destroyAllWindows() #删除建立的全部窗口
-
- break
-
- time.sleep(0.1)
-
- cap.release()#关闭摄像头
复制代码
|