AI 实战篇 |基于 AI开放平台实现 【植物识别】 功能,成为行走的百科全书
🎬 博客主页:https://xiaoy.blog.csdn.net
🎥 本文由 呆呆敲代码的小Y 原创,首发于 CSDN🙉
🎄 学习专栏推荐:Unity系统学习专栏
🌲 游戏制作专栏推荐:游戏制作
🌲Unity实战100例专栏推荐:Unity 实战100例 教程
🏅 欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
📆 未来很长,值得我们全力奔赴更美好的生活✨
------------------❤️分割线❤️-------------------------
- 前言
- AI 实战篇 |基于 AI开放平台实现 【植物识别】 功能
- 一、获取SDK准备工作
- 1.1 前往 百度AI开放平台 登录
- 1.2 前往 植物识别
- 1.3 创建一个应用
- 1.4 下载图像识别SDK资源
- 1.5 从SDK中取出我们会使用的文件
- 1.6 植物识别功能介绍
- 二、正文操作流程
- 2.1 新建一个Unity工程
- 2.3 新建交互类
- 2.4 使用图片进行 植物识别
- 总结
前言
- 前面写过给基于百度AI开放平台实现【人脸识别】和【动物识别】的文章。
- 感兴趣的小伙伴也可以去看一下这两篇文章,都是使用AI开放平台制作的,原理都一样,只不过换了不同的SDK实现。
- AI 实战篇 |基于 AI开放平台实现 人脸识别对比 功能,超详细教程【附带源码】
- AI 实战篇 |十分钟学会【动物识别】,快去寻找身边的小动物试试看吧
- 本篇文章继续使用借助平台实现【植物识别】功能,一起来看看吧!
AI 实战篇 |基于 AI开放平台实现 【植物识别】 功能
一、获取SDK准备工作
文章部分文档链接如下:
- 百度AI开放平台:https://ai.baidu.com/
- C#文档:https://ai.baidu.com/ai-doc/FACE/Ck37c1ri0
- SDK下载地址:https://ai.baidu.com/sdk#bfr
- C# SDK 开源:https://github.com/Baidu-AIP/dotnet-sdk
- 控制台地址:https://console.bce.baidu.com/ai/?fromai=1#/ai/face/offline/index
1.1 前往 百度AI开放平台 登录
既然选择了使用 百度AI开放平台的SDK,那我们就需要去官网下载SDK啦!
首先我们需要前往 百度AI开放平台,要登录百度账号。
如果之前有账号则直接登录,没有的话点击去注册一个就好了,这里不多赘述。
1.2 前往 植物识别
然后点击 `开放能力 -> 图像技术 -> 植物识别``
然后点击 立即使用
点击立即使用会跳转到控制台界面,然后点击 公有云服务 -> 应用列表。
1.3 创建一个应用
在 公有云服务 中点击 应用列表。
若此时没有应用,则进行创建。
点击完之后该应用就创建完毕了,APPID
和 API KEY
以及 Secret Key
要保存好,后面在Unity中也会用到!
1.4 下载图像识别SDK资源
接下来在 百度AI开放平台 的首页点击 开发与教学 -> SDK下载
选择 图像识别 -> C# HTTP SDK
点击下载
这里下载的图像识别,其实里面包含了动物识别、植物识别、菜品识别等等多种图像识别技术的内容,所以我们后面在使用其它图像识别技术的识别,还是使用该资源包就可以实现啦!
1.5 从SDK中取出我们会使用的文件
下载SDK后,解压到本地文件夹中。
之后打开 net35
文件夹,其中 AipSdk.dll
和 Newtonsoft.Json.dll
这两个dll文件,后边会放到Unity3d工程中使用。
1.6 植物识别功能介绍
- 识别植物名称
可识别超过2万种常见植物和近8千种花卉,接口返回植物名称和置信度信息 - 获取百科信息
支持获取识别结果的百科信息,返回百科词条URL、图片和描述,可自定义返回词条数 - EasyDL定制植物识别
通过EasyDL定制图像分类、物体检测模型,自定义识别标签,实现定制植物识别功能
二、正文操作流程
2.1 新建一个Unity工程
新建一个Unity打开后 打开 File>BuildSettings -> PlayerSettings -> OtherSettings
改变Api Compatibility Level
为 .NET2.0
,若本来就是则不需要修改。
在Assets
下新建一个Plugins
文件夹,注意不要拼错单词哦~
将上面讲到的两个文件AipSdk.dll
和 Newtonsoft.Json.dll
放入该文件夹。
然后新建一个测试场景和脚本,命名随意。
打开 植物识别 的C#官方文档:https://ai.baidu.com/ai-doc/IMAGERECOGNITION/ek3bcxh2q#%E6%A4%8D%E7%89%A9%E8%AF%86%E5%88%AB
文档中的步骤挺详细,可以结合文章与文档共同参考 ~
2.3 新建交互类
定义一个客户端,此时要用到之前创建的应用的 APPID
、 APIKey
和 SecretKey
代码如下:
using Baidu.Aip.ImageClassify;
using UnityEngine;
public class AnimalRecognitionDemo : MonoBehaviour
{
[Header("设置APPID/AK/SK")]
public string APP_ID = "输入你的 App ID";
public string API_KEY = "输入你的 Api Key";
public string SECRET_KEY = "输入你的 Secret Key";
ImageClassify client;
private void Awake()
{
client = new ImageClassify(API_KEY, SECRET_KEY);
client.Timeout = 60000; // 修改超时时间
}
}
2.4 使用图片进行 植物识别
这里先准备一张植物的照片,只要是植物就行,看自己喜好。
然后放到Unity的 StreamingAssets/AnimalDetect
文件夹下
我这里的图片名字为 Cat1.png
,在测试的时候改为自己的即可。
实例代码如下:
public void PlantDetectDemo()
{
var image = File.ReadAllBytes(Application.streamingAssetsPath + "/ImageDetect/Image1.png");
// 调用植物识别,可能会抛出网络等异常,请使用try/catch捕获
var result = client.PlantDetect(image);
Debug.Log(result);
// 如果有可选参数
var options = new Dictionary<string, object>{
{"baike_num", 5}
};
// 带参数调用植物识别
result = client.PlantDetect(image, options);
Debug.Log(result);
}
不带百科信息的返回值如下:
{
"result": [
{
"score": 0.84965223,
"name": "向日葵"
},
{
"score": 0.0028629294,
"name": "菊芋"
},
{
"score": 0.0019340722,
"name": "心叶向日葵"
}
],
"log_id": 1601929039709466159
}
带百科信息的返回值如下:
{
"result": [
{
"score": 0.84965223,
"name": "向日葵",
"baike_info": {
"baike_url": "http://baike.baidu.com/item/%E5%90%91%E6%97%A5%E8%91%B5/6106",
"image_url": "https://bkimg.cdn.bcebos.com/pic/7acb0a46f21fbe095c93f6c165600c338644ad11",
"description": "向日葵(学名:Helianthus annuus L.;英文名:Sunflowers):是桔梗目、菊科、向日葵属的植物。因花序随太阳转动而得名。一年生草本,高1-3.5米,最高可达9米。茎直立,圆形多棱角,质硬被白色粗硬毛。广卵形的叶片通常互生,先端锐突或渐尖,有基出3脉,边缘具粗锯齿,两面粗糙,被毛,有长柄。头状花序,直径10-30厘米,单生于茎顶或枝端。总苞片多层,叶质,覆瓦状排列,被长硬毛,夏季开花,花序边缘生中性的黄色舌状花,不结实。花序中部为两性管状花,棕色或紫色,能结实。矩卵形瘦果,果皮木质化,灰色或黑色,称葵花籽。野生向日葵栖息地主要是草原以及干燥、开阔的地区。它们沿着路边、田野、沙漠边缘和草地生长。在阳光充足,潮湿或受干扰的地区生长最好。原产南美洲,驯化种由西班牙人于1510年从北美带到欧洲,最初为观赏用。19世纪末,又被从俄国引回北美洲。世界各国和中国均有栽培,通过人工培育,在不同生境上形成许多品种,特别在头状花序的大小色泽及瘦果形态上有许多变异,并为综合利用的最好原料。主要分两大类,食用和观赏。向日葵种子叫葵花籽,含油量很高,为半干性油,味香可口,供食用。花穗、种子皮壳及茎秆可作饲料及工业原料,如制人造丝及纸浆等,花穗也供药用。(概述图参考资料:)"
}
},
{
"score": 0.0028629294,
"name": "菊芋",
"baike_info": {
"baike_url": "http://baike.baidu.com/item/%E8%8F%8A%E8%8A%8B/3066548",
"image_url": "https://bkimg.cdn.bcebos.com/pic/c83d70cf3bc79f3d4337d194bca1cd11738b29bb",
"description": "菊芋,学名:Helianthus tuberosus (L.1753),又名洋姜、鬼子姜,是一种多年宿根性草本植物。高1-3米,有块状的地下茎及纤维状根。茎直立,有分枝,被白色短糙毛或刚毛。叶通常对生,有叶柄,但上部叶互生;下部叶卵圆形或卵状椭圆形。头状花序较大,少数或多数,单生于枝端,有1-2个线状披针形的苞叶,直立,舌状花通常12-20个,舌片黄色,开展,长椭圆形,管状花花冠黄色,长6毫米。瘦果小,楔形,上端有2-4个有毛的锥状扁芒。花期8-9月。原产北美洲,十七世纪传入欧洲,后传入中国。其地下块茎富含淀粉、菊糖等果糖多聚物,可以食用,煮食或熬粥,腌制咸菜,晒制菊芋干,或作制取淀粉和酒精原料。宅舍附近种植兼有美化作用。菊芋被联合国粮农组织官员称为“21世纪人畜共用作物”。(概述图片参考资料来源:)"
}
},
{
"score": 0.0019340722,
"name": "心叶向日葵",
"baike_info": {
"baike_url": "http://baike.baidu.com/item/%E5%90%91%E6%97%A5%E8%91%B5%E5%B1%9E/2965229",
"image_url": "https://bkimg.cdn.bcebos.com/pic/6d81800a19d8bc3e6486f9668c8ba61ea9d34594",
"description": "向日葵属植物包括52种以及许多亚种,全部都是起源于北美洲,但有许多种已经作为食物或花卉被引进到世界各地种植。向日葵约100种,大部产北美,我国引入栽培的有向日葵 H.annuus L.等4种,各地多有栽培,果供食用或榨油。"
}
}
],
"log_id": 1601929044255182285
}
功能展示效果:
如果使用上述代码一直调用失败,可以检查一下是否领取了免费的试用资源。
之前的文章中有提到怎怎样获取,有需要的可以去看一下,这里不多赘述啦~
{
"error_code": 18,
"error_msg": "Open api qps request limit reached"
}
总结
- 本文对
植物识别
做了一个简单的学习使用教程。 - 在使用了AI平台的SDK之后,我们在最上层使用其实没有用到什么技术。只是负责调用对应的API接口就可以实现我们想要的效果。
- 作为开发人员,懂得如何正确的使用现有的工具就已经可以满足基本需求了!
- 学会了植物识别,可以将此功能导入自己的所需的项目中!
- 这样以后遇到任何植物都可以大概将它们分辨出来啦,掌握此功能就是行走的百科全书~