2021-12-14 18:43:24 [显示全部楼层]
500浏览
查看: 500|回复: 0

Mind+Python编程进阶系列课程—10游园小助手

[复制链接]
本帖最后由 木子呢 于 2021-12-14 18:48 编辑

Python编程进阶系列课程—10游园小助手


课程目录:

一、实践情境


在游园时,各种奇花异草常常令我们着迷,然而,由于缺少具体信息展示,我们只能饱一饱眼福而无法得知其名称及更多属性特征。

为此,我们将设计一个园林植物小助手,帮助我们更好得认识眼前的植物。

qw1.jpg

二、实践目标

本实践项目运用micro:bit作为智能终端,来设计一个园林植物小助手。通过调用电脑摄像头及百度AI图像识别工具来识别各种不同的植物,并显示其信息。

三、知识目标

1、了解图像识别的一般过程

2、掌握运用micro:bit作为智能终端,通过Python编程识别照片上的植物的方式

3、掌握运用micro:bit作为智能终端,通过Python编程调用电脑摄像头识别植物的方式

四、实践准备

硬件清单:

qw2.jpg

软件使用: Mind+编程软件

qw3.jpg

五、实践过程

在本项目中,我们将分三步,设计一个园林植物小助手,实现植物的识别及信息显示。

1、导入植物图片进行识别

2、调用电脑摄像头进行识别

3、反馈详细信息

任务1:图片识别

1. 分析设计


在这个任务中,我们将对导入的植物图片进行识别并显示结果。

这里,我们可先向计算机中导入植物图片,再借助百度AI开放平台的图像识别技术,将图像中的特征进行提取,再根据提取到的特征与模型中的数据进行匹配,最终将匹配结果显示在软件终端。

qw4.jpg

由于我们使用的是百度AI平台的图像识别技术,因此,我们直接利用上节课创建好的百度AI账户即可,无需再次创建。

对于植物图片识别的效果实现,我们分五步进行,具体流程如下,

qw5.jpg

2.软件编写

在编写代码之前,我们需要先对软件进行一些设置

软件设置:

STEP1:
创建与保存项目文件

启动Mind+软件,选择“Python模式”,另存项目并命名为“m游园小助手”。

STEP2:创建与保存Python文件

创建一个Python程序文件“任务一.py”,双击打开。

STEP3:导入图片

在项目文件夹中导入需要的植物图片。(图片与程序文件同在项目文件夹中)。

Tips:提供的植物图片“玉兰.jpg”见附录1。

程序编写、运行及回顾:

STEP1:
编写Python程序

  1. import time #导入时间库
  2. from aip import AipImageClassify #导入百度图像识别库
  3. APP_ID = ''#和我们百度云中创建的应用的三个参数一致,按照自己所创建的应用参数对应进行替换
  4. API_KEY = ''#引号内输入自己的API_KEY
  5. SECRET_KEY = ''#引号内输入自己的SECRET_KEY
  6. client = AipImageClassify(APP_ID, API_KEY, SECRET_KEY) #连接百度AI图像识别平台
  7. #""" 读取图片 """
  8. with open('玉兰.jpg', 'rb') as fp: #打开需要识别的图片文件
  9.     file_context = fp.read() #读取文件并将内容存储为file_context
  10. result = client.plantDetect(file_context)#识别侦测植物并将结果存入result变量
  11. print(result) #打印结果
  12. print("---------------------")
复制代码

STEP2:运行程序并观察效果

点击运行,在软件终端可以看到该植物的识别结果为:

qw6.jpg

STEP3:回顾程序

qw7.jpg

3.调试修改

导入一张动物的图片,观察效果,看是否能识别出来。

Tips:提供的动物图片见附录1

任务2:摄像头识别

1.分析设计


在上个任务中,我们已经成功对导入的玉兰花的图片进行识别并得到结果。接下来,我们将尝试通过调用电脑摄像头来对植物进行识别,并将结果显示在软件终端界面。这里,我们可将micro:bit与计算机相连,通过micro:bit上的按键开关来控制植物的拍照识别。

qw8.jpg

2.硬件搭建

通过USB连接线将micro:bit接到计算机。

qw9.jpg

3.软件编写

在编写代码之前,我们首先需要先对软件进行一些设置,之后安装所需要的库,而由于目前没有现成的调用摄像头拍照的功能库,因此接下来我们还需手动编写它以便后续调用,最后便是项目任务二主程序的编写。

Tips:调用摄像头拍照的功能程序已提供,附录2可见。

软件设置:

STEP1:
创建与保存Python文件

新建一个Python程序文件“任务二.py”,双击打开。

安装库:

STEP1:
安装opencv库

在“库管理”的“推荐库”下进行安装。

qw10.jpg

编写调用摄像头拍照程序:

(1)在“任务一.py”的同级目录下,新建一个“photograph.py”程序文件,将附录2 中的调用摄像头拍照程序代码写入并保存。

qw11.jpg

程序编写、运行及回顾:

STEP1:
编写Python程序

  1. from aip import AipImageClassify #导入百度图像识别库
  2. import time #导入时间库
  3. import photograph #导入调用摄像头拍照程序文件
  4. from pinpong.board import Board #导入pinpong.board包中的Board模块
  5. from pinpong.extension.microbit import * #导入pinpong.extension.microbit中所有模块
  6. Board("microbit").begin() #初始化,选择板型和端口号,不输入端口号则进行自动识别
  7. APP_ID = ''#和我们百度云中创建的应用的三个参数一致,按照自己所创建的应用参数对应进行替换
  8. API_KEY = ''#引号内输入自己的API_KEY
  9. SECRET_KEY = ''#引号内输入自己的SECRET_KEY
  10. client = AipImageClassify(APP_ID, API_KEY, SECRET_KEY) #连接百度AI图像识别平台
  11. while True: #循环执行
  12.     if button_a.is_pressed() == 1: #按下板载按钮A
  13.         photograph.get_photo() #调用摄像头拍照
  14.         with open('image.jpg', 'rb') as fp: #打开需要识别的图片文件
  15.             file_context = fp.read() #读取文件并将内容存储为file_context
  16.         result = client.plantDetect(file_context);  #识别侦测植物并将结果存入result变量
  17.         print(result) #打印结果
  18.         print("---------------------")
复制代码

STEP2:运行程序并观察效果

(1)运行程序,观察软件终端

点击运行,等待程序的上传

(2)按下micro:bit按键开关

按下A按键,等待数秒后调出摄像头

Tips:若摄像头弹窗无法自动跳出至最外层界面,可手动在任务栏中点击使其弹出。

(3)通过摄像头拍取植物图片

将植物(或打印下来的植物图片)置入摄像头的窗口中,按下S键保存图片。

Tips:可在项目文件夹中找到“image.jpg”图片,查看拍下来的植物图像。按键时可通过“shift”键跳出输入法。

qw12.jpg

(4)观察软件终端

观察终端,可以看到识别到的结果显示在软件终端

qw13.jpg

STEP3:回顾程序

qw14.jpg

任务3:详细信息展示

1.分析设计


在上个任务中,我们实现了通过调用摄像头的方式来对植物进行识别,并将结果显示在软件终端界面。然而,即使识别到了植物类型,得到的始终只是一个简单的结果,而没有更多的信息展示。

因此,接下来,我们可将在此基础上进一步完善程序,借助百科,将更多与识别到的植物相关的信息显示出来。

2.硬件搭建

通过USB连接线将micro:bit接到计算机。

3.软件编写

软件设置:

STEP1:
创建与保存Python文件

新建一个Python程序文件“任务三.py”,双击打开。

程序编写、运行及回顾:

STEP1:
编写Python程序

  1. from aip import AipImageClassify #导入百度图像识别库
  2. import time #导入时间库
  3. import photograph #导入调用摄像头拍照程序文件
  4. from pinpong.board import Board #导入pinpong.board包中的Board模块
  5. from pinpong.extension.microbit import * #导入pinpong.extension.microbit中所有模块
  6. Board("microbit").begin() #初始化,选择板型和端口号,不输入端口号则进行自动识别
  7. APP_ID = ''#和我们百度云中创建的应用的三个参数一致,按照自己所创建的应用参数对应进行替换
  8. API_KEY = ''#引号内输入自己的API_KEY
  9. SECRET_KEY = ''#引号内输入自己的SECRET_KEY
  10. client = AipImageClassify(APP_ID, API_KEY, SECRET_KEY) #连接百度AI图像识别平台
  11. while True: #循环执行
  12.     if button_a.is_pressed() == 1: #按下板载按钮A
  13.         #""" 读取图片 """
  14.         photograph.get_photo() #调用摄像头拍照
  15.         with open('image.jpg', 'rb') as fp: #打开需要识别的图片文件
  16.             file_context = fp.read() #读取文件并将内容存储为file_context
  17.         result = client.plantDetect(file_context);  #识别侦测植物并将结果存入result变量
  18.         print(result) #打印结果
  19.         print("---------------------")
  20.     if button_b.is_pressed() == 1: #按下板载按钮B
  21.         #""" 读取图片 """
  22.         photograph.get_photo() #调用摄像头拍照
  23.         with open('image.jpg', 'rb') as fp: #打开需要识别的图片文件
  24.             file_context = fp.read() #读取文件并将内容存储为file_context
  25.         options = {}
  26.         options["baike_num"] = 1 #返回1份百科信息的结果
  27.         result1 = client.plantDetect(file_context, options) #识别侦测详细信息
  28.         print(result1) #打印结果
复制代码

STEP2:运行程序并观察效果

(1)运行程序,观察软件终端

点击运行,等待程序的上传

(2)按下micro:bit按键开关

按下B按键,等待数秒后调出摄像头

(3)通过摄像头拍取植物图片

将植物(或打印下来的植物图片)置入摄像头的窗口中,按下S键保存图片。

qw15.jpg

(4)观察软件终端

观察终端,可以看到识别到的月季花的详细信息显示在软件终端

qw16.jpg

STEP3:回顾程序

qw17.jpg

六、巩固提高

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

  1. import cv2 #导入cv库
  2. import time #导入时间库
  3. def get_photo():
  4.     #调用笔记本内置摄像头,所以参数为0,如果有其他的摄像头可以调整参数为1,2
  5.     cap=cv2.VideoCapture(0) # 创建一个 VideoCapture 对象
  6.     time.sleep(0.1)
  7.     while (cap.isOpened()): # 循环读取每一帧
  8.         ret, frame=cap.read()#从摄像头读取图片 , ret存储布尔值,frame存储图像
  9.         frame = cv2.flip(frame,1,dst=None) #镜像
  10.         cv2.imshow("Capture_Test", frame)  #窗口显示,显示名为 Capture_Test
  11.         #保持画面的持续。
  12.         k=cv2.waitKey(1) #每帧数据延时1ms,延时不能为 0,否则读取的结果会是静态帧
  13.         if k == 27: #通过esc键退出摄像
  14.             cv2.destroyAllWindows() #删除建立的全部窗口
  15.             break
  16.         elif k==ord("s"): #通过s键保存图片,并退出。
  17.             cv2.imwrite("image.jpg",frame) #保存图片
  18.             cv2.destroyAllWindows() #删除建立的全部窗口
  19.             break
  20.     time.sleep(0.1)
  21.     cap.release()#关闭摄像头
复制代码


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2022 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail