木子呢 发表于 2021-12-14 18:43:24

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

本帖最后由 木子呢 于 2021-12-14 18:48 编辑

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

课程目录:

[*]Python编程进阶系列教程—序章
[*]Python编程进阶系列课程—01 趣味数字电导仪
[*]Python编程进阶系列课程—02 简易气象站
[*]Python编程进阶系列课程—03 自制通信设备(上)
[*]Python编程进阶系列课程—03 自制通信设备(下)
[*]Python编程进阶系列课程—04 穿戴计步器
[*]Python编程进阶系列课程—05鱼缸自动水位控制
[*]Python编程进阶系列课程—06植物监测仪
[*]Mind+Python编程进阶教程—07智能厨房安防系统
[*]Mind+Python编程与智能进阶教程—08智能语音开关
[*]Mind+Python编程进阶系列课程—09天气闹钟

一、实践情境

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

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


二、实践目标

本实践项目运用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()#关闭摄像头


页: [1]
查看完整版本: Mind+Python编程进阶系列课程—10游园小助手