电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
文章
如何打造属于你的私人语音助手之植物识别
分 享
扫描二维码分享
如何打造属于你的私人语音助手之植物识别
树莓派
wukong
语音助手
IAMLIUBO
关注
发布时间: 2020-01-09
丨
阅读: 2861
## 我是谁,谁又是我 Hi, 大家好,我是刘波,人在江湖行走的ID是:[IAMLIUBO](https://blogs.oopswow.com/)!受到电子芯吧客平台用户活跃度的感召,为了防止世界被破坏,为了保护世界的和平,于是我决定也要来电子芯吧客平台混个脸熟了(我不会承认我是为了稿费才来的!绝对不会!滑稽.gif)。 ## 前言 距离上一篇文章,已经过去一段时间了,不知道大家有没有成功跑起来呢?最近比较忙,也没能持续更新,不过今晚忙里偷闲,给家更新一篇!本篇文章教大家如何开发一个技能——植物识别!没错就是通过摄像头识别植物!不过这里我们是调用的百度接口,没错百度AI接口,使用了很长时间了,感觉准确率还是可以的,貌似百度在国内的几家大厂中,图像识别做的还是非常不错的。 ## 准备 ### 硬件 * 摄像头(个人推荐使用CSI接口的) ### 软件 无 ## 百度AI应用创建 相信注册账号,大家肯定都比较熟练了,这里也就不给大家一步步的演示了,大家打开下面的官网链接,相信一看就知道去哪里注册了: **[百度AI开发平台](https://ai.baidu.com/)** 这里我给大家演示一下如何注册一个图像识别的应用,其实也非常简单,一共四大步,我们就可以完成一个应用的创建: * 先从控制台找到图像识别应用 ![图像识别应用](https://cf04.ickimg.com/bbsimages/202001/eb6956e48ad0b07684c9b62d0428116c.png "图像识别应用") * 然后点击创建应用按钮: ![点击创建应用按钮](https://cf04.ickimg.com/bbsimages/202001/ce77cc47141d7bab2d379305f514d025.png "点击创建应用按钮") * 然后按照下面的格式填好你的应用属性,不一定跟我的一样,然后最后点击创建应用就可以了: ![应用属性](https://cf04.ickimg.com/bbsimages/202001/bfa89d204fc6253a71ba6c3a697cf84e.png "应用属性") * 最后回到应用列表,可以看到有AppID、API Key和Secret Key,一会我们需要用到这几个参数,大家知道在这里找就可以: ![参数](https://cf04.ickimg.com/bbsimages/202001/84a0f7e22212483c6448ec47b855cc71.png "参数") 到这里我们的百度AI图像应用就创建好了,其实就是为了得到上面那几个密钥。 ## 依赖库安装 所谓的依赖库其实就是百度给我们写好的SDK,这里我们选择python SDK来进行开发,因为我们的语音助手的代码也是用python来写的,安装方法也很简单,大家只需要执行下面的一条命令即可: ```bash sudo pip install baidu-aip ``` 相信大家多多少少对python应该都有一部分了解,我们安装好依赖库后,基本就都准备好了,baidu-aip怎么用,可以去看一下百度的文档:[文档链接](https://ai.baidu.com/ai-doc/IMAGERECOGNITION/vk3bcxiu2),当然你还需要将你的硬件连接起来,就是需要把你的摄像头使用FPC软排线跟树莓派连接起来,相信聪明伶俐的你肯定会的! ## 如何开发一个技能? 其实我们自己去开发技能还是非常简单的,因为很多麻烦的地方作者都已经帮我们处理好了,当然大家也可以看一下文档:[技能开发](https://wukong.hahack.com/#/writing-skill),不过这里还是简单给大家介绍一下。 ### 准备工作 创建一个文件夹,用来存放我们的技能代码: ```bash sudo mkdir -p ~/.wukong/custom ``` 没错就是在在.wukong这个目录下创建一个custom文件夹,名称是固定的,这里的路径相信你的跟我的应该也一样,这是官方文档中固定的,大家按照这个格式去写好了。 不知道大家还记得那个配置文件吗?就是在个性化定制的那篇文章中我们修改了很多参数的那个配置文件,这里我们增加一些内容到里面: ```bash nano ~/.wukong/config.yml ``` 在文件的最后增加以下内容: ```config #植物识别 #使用百度AI接口 #作者: IAMLIUBO plantDetect: enable: true appid: 'XXXXXXXXXXX' api_key: 'XXXXXXXXXXX' secret_key: 'XXXXXXXXXXX' type: 1 # 摄像头类型 0:usb_camera,1:树莓派 5MP 摄像头,2$ dest_path: "/home/pi/Pictures/" # 保存目录 quality: 5 # 成像质量(0~100),不支持 imagesnap vertical_flip: true # 竖直翻转,不支持 imagesnap horizontal_flip: true # 水平翻转,不支持 imagesnap count_down: 3 # 倒计时(秒),仅当开启倒计时时有效 ``` 不过这里你需要注意了,请将上面的 **XXXXXXXXXXX** 替换成我们在上面创建百度AI应用得到的appid、api_key和secret_key,不然后面运行会出错的!一定要记得修改! 到这里准备工作基本就完成了,如果你是第一次使用摄像头的话,记得先运行: ```bash sudo raspi-config ``` 然后在**Interfacing Option**里面找到**Camera**并使能,不然后面还是会报错的! ## 颤抖吧!少年! 哈哈,开玩笑,准备工作都准备好了,那我们就开始运行代码吧,不过我们需要先写好程序: ```bash nano ~/.wukong/custom/CameraPlantDetect.py ``` 然后复制下面的代码并保存: ```python # -*- coding: utf-8-*- # Camera plant detect # author: IAMLIUBO # github: https://github.com/imliubo # website: https://blogs.oopswow.com import os import subprocess import time from robot import config, constants, logging from robot.sdk.AbstractPlugin import AbstractPlugin from aip import AipImageClassify logger = logging.getLogger(__name__) options = {} options["baike_num"] = 1 def get_file_content(filePath): with open(filePath, 'rb') as fp: return fp.read() class Plugin(AbstractPlugin): SLUG = "plantDetect" def handle(self, text, parsed): APP_ID = config.get('/plantDetect/appid') API_KEY = config.get('/plantDetect/api_key') SECRET_KEY = config.get('/plantDetect/secret_key') client = AipImageClassify(APP_ID, API_KEY, SECRET_KEY) quality = config.get('/plantDetect/quality', 100) count_down = config.get('/plantDetect/count_down', 3) dest_path = config.get('/plantDetect/dest_path', os.path.expanduser('~/Pictures')) device = config.get('/plantDetect/device', '/dev/video0') vertical_flip = config.get('/plantDetect/verical_flip', False) horizontal_flip = config.get('/plantDetect/horizontal_flip', False) camera_type = config.get('/plantDetect/type', 1) if config.has('/plantDetect/usb_camera') and config.get('/plantDetect/usb_camera'): camera_type = 0 try: if not os.path.exists(dest_path): os.makedirs(dest_path) except Exception: self.say(u"抱歉,照片目录创建失败", cache=True) return dest_file = os.path.join(dest_path, "%s.jpg" % time.time()) if camera_type == 0: # usb camera logger.info('usb camera') command = ['fswebcam', '--no-banner', '-r', '1024x765', '-q', '-d', device] if vertical_flip: command.extend(['-s', 'v']) if horizontal_flip: command.extend(['-s', 'h']) command.append(dest_file) elif camera_type == 1: # Raspberry Pi 5MP logger.info('Raspberry Pi 5MP camera') command = ['raspistill', '-o', dest_file, '-q', str(quality)] if count_down > 0 : command.extend(['-t', str(count_down*1000)]) if vertical_flip: command.append('-vf') if horizontal_flip: command.append('-hf') else: # notebook camera logger.info('notebook camera') command = ['imagesnap', dest_file] if count_down > 0 : command.extend(['-w', str(count_down)]) if count_down > 0: self.say(u"收到,%d秒后启动拍照" % (count_down), cache=True) if camera_type == 0: time.sleep(count_down) try: subprocess.run(command, shell=False, check=True) self.play(constants.getData('camera.wav')) image = get_file_content(dest_file) result = client.plantDetect(image, options) plant_name = result['result'][0]['name'] try: baike_info = result['result'][0]['baike_info']['description'] buffer = u"主人,识别到的植物是%s,百度百科描述是%s"%(plant_name, baike_info) self.say(buffer, cache=False) except KeyError: buffer = u"主人,识别到的植物是%s,暂无百度百科描述"%(plant_name) self.say(buffer, cache=False) except subprocess.CalledProcessError as e: logger.error(e) self.say(u"拍照失败,请检查相机是否连接正确", cache=True) def isValid(self, text, parsed): return any(word in text for word in [u"植物识别",u"植物"]) ``` 大家先不用了解代码是怎么写的,当然我这里写的可能也不够好,因为我平常主要做嵌入式开发,python只是业余爱好,保存好后我们就可以直接运行wukong了。 为了方便大家测试,这里给大家贴张图片,大家可以将摄像头对准下面的图片,然后唤醒悟空,并对它说 **“植物识别”** 或者 **“植物”** 都可以: ![牡丹](https://cf04.ickimg.com/bbsimages/202001/1578d7df54333ba9ad48cfc3bbd706ee.png "牡丹") 不出意外的话,应该可以准确识别出牡丹花,并且播放牡丹花的百度百科! OK,本篇文章就到这里,大家可以先去测试,有问题可以在评论里提出,后面我会录制一个测试视频给大家!
原创作品,未经权利人授权禁止转载。详情见
转载须知
。
举报文章
点赞
(
3
)
IAMLIUBO
擅长:工控电子 能源电源 光电显示 设计,制造及服务 智能硬件
关注
评论
(1)
登录后可评论,请
登录
或
注册
36b3080f4f0320f1
302
天前...
可不可以做一篇语音助手调用小爱api的
0
回复
发布
相关文章推荐
MK-米客方德推出工业级存储卡
Beetle ESP32 C3 蓝牙数据收发
Beetle ESP32 C3 wifi联网获取实时天气信息
开箱测评Beetle ESP32-C3 (RISC-V芯片)模块
正点原子数控电源DP100测评
DP100试用评测-----开箱+初体验
Beetle ESP32 C3环境搭建
【花雕体验】16 使用Beetle ESP32 C3控制8X32位WS2812硬屏之二
X
你的打赏是对原创作者最大的认可
请选择打赏IC币的数量,一经提交无法退回 !
100IC币
500IC币
1000IC币
自定义
IC币
确定
X
提交成功 ! 谢谢您的支持
返回
我要举报该内容理由
×
广告及垃圾信息
抄袭或未经授权
其它举报理由
请输入您举报的理由(50字以内)
取消
提交