AI 实战篇 |基于 AI开放平台实现 【植物识别】 功能,成为行走的百科全书

news2024/10/7 3:22:18

请添加图片描述

  • 🎬 博客主页: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 创建一个应用

在 公有云服务 中点击 应用列表。
在这里插入图片描述

若此时没有应用,则进行创建。
在这里插入图片描述
在这里插入图片描述

点击完之后该应用就创建完毕了,APPIDAPI KEY 以及 Secret Key 要保存好,后面在Unity中也会用到!
在这里插入图片描述

1.4 下载图像识别SDK资源

接下来在 百度AI开放平台 的首页点击 开发与教学 -> SDK下载

在这里插入图片描述

选择 图像识别 -> C# HTTP SDK 点击下载
在这里插入图片描述

这里下载的图像识别,其实里面包含了动物识别、植物识别、菜品识别等等多种图像识别技术的内容,所以我们后面在使用其它图像识别技术的识别,还是使用该资源包就可以实现啦!

1.5 从SDK中取出我们会使用的文件

下载SDK后,解压到本地文件夹中。

之后打开 net35 文件夹,其中 AipSdk.dllNewtonsoft.Json.dll 这两个dll文件,后边会放到Unity3d工程中使用。

在这里插入图片描述
在这里插入图片描述

1.6 植物识别功能介绍

  1. 识别植物名称
    可识别超过2万种常见植物和近8千种花卉,接口返回植物名称和置信度信息
  2. 获取百科信息
    支持获取识别结果的百科信息,返回百科词条URL、图片和描述,可自定义返回词条数
  3. 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 新建交互类

定义一个客户端,此时要用到之前创建的应用的 APPIDAPIKeySecretKey

在这里插入图片描述

代码如下:

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接口就可以实现我们想要的效果。
  • 作为开发人员,懂得如何正确的使用现有的工具就已经可以满足基本需求了!
  • 学会了植物识别,可以将此功能导入自己的所需的项目中!
  • 这样以后遇到任何植物都可以大概将它们分辨出来啦,掌握此功能就是行走的百科全书~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/80773.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

代码随想录刷题记录day40 爬楼梯+零钱兑换+完全平方数·

代码随想录刷题记录day40 爬楼梯零钱兑换完全平方数 参考&#xff1a;代码随想录 70. 爬楼梯 思想 当作完全背包问题&#xff0c;物品是1&#xff0c;2&#xff0c;可以无限次取用&#xff0c;背包的容量是n 1.dp[j]表示容量为j的背包&#xff0c;装满有dp[j]次 2.dp[j]dp…

【图像处理】opencv | 图像的二值化操作| cv2.threshold() | cv2.adaptiveThreshold()

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录前言一、cv2.threshold()阈值操作函数1.1、初见1.2、阈值不同时的效果二、cv2.adaptiveThreshold()自适应阈值操作函数2.1、初见2.2、固定blocksize,改变C值大小的实…

104-127-linux-vim-shell基础

104-linux-shell: 1.shell基础 分类&#xff1a;linux使用Bash&#xff0c;可通过vi /etc/shells查看linux支持的shell类型。 1、echo [rootlocalhost ~]#echo [选项] [输出内容] 选项:-e:支持反斜线控制的字符转换&#xff08;具体百度吧)-n:取消输出后行末的换行符号&…

Python实现ALO蚁狮优化算法优化支持向量机分类模型(SVC算法)项目实战

说明&#xff1a;这是一个机器学习实战项目&#xff08;附带数据代码文档视频讲解&#xff09;&#xff0c;如需数据代码文档视频讲解可以直接到文章最后获取。 1.项目背景 蚁狮优化(Ant Lion Optimizer&#xff0c;ALO)算法是Mirjalili于2015提出的一种新型元启发式群智能算法…

185.基于Django的富文本编辑器安装与使用

1.DjangoUeditor 1.1 概述 富文本编辑器&#xff0c;在web开发中必不可少&#xff0c;但是django没有自带富文本编辑器&#xff0c;因此我们需要使用第三方库&#xff0c;这里使用DjangoUeditor DjangoUditor是百度开源的在线HTML编辑器&#xff0c;功能非常强大&#xff0c;像…

VUEElement简单介绍。

目录 一、VUE 1、基本介绍 2、Vue 指令 3、生命周期 二、Element 1、基本介绍 2、Element 布局 一、VUE 1、基本介绍 ▶ 概述 Vue 是一套前端框架&#xff0c;免除原生JavaScript中的DOM操作&#xff0c;简化书写。 我们之前也学习过后端的框架 Mybatis &#xff0c;My…

Linux下C/C++实现类似netstat命令(列出TCP和UDP连接)

网络连接一般包括最基本的五元组信息(源地址、目标地址、源端口、目标端口、协议号)再加上所属进程信息pid, exe, cmdline等。其中这两项数据大多可直接读取linux /proc目录下的网络状态连接文件/proc/net/tcp、/proc/net/udp), 进程状态目录(/proc/pid/xx)。 Linux 下的/proc…

Java基于JSP的报刊订阅管理系统

随着人类的发展&#xff0c;人们对信息的获取方式也越来越多&#xff0c;虽然很多时候人们习惯了通过手机来获取各类信息&#xff0c;但是手机也逐渐的成为了危害人类健康的杀手之一&#xff0c;为了能够让大家回归到健康的生活中来&#xff0c;我开发了本系统&#xff0c;旨在…

基于jsp+mysql+ssm医药进销存管理系统-计算机毕业设计

项目介绍 为了减少传统医药进销存管理的繁杂的工作量&#xff0c;提高医药进销存管理的效率而设计开发了此系统。本系统综合各方面的需求决定采用B/S架构&#xff0c;并利用clipse搭建java开发平台。从而共同完成整个医药的设计开发。系统实现的功能主要包括&#xff1a;用户在…

java 通过InetAddress获取ip 计算机名称操作

本文属于java网络编程部分 需要你的网络编程三要素 有所了解 如果您尚未了解 可以先查看我的文章 java网络编程三要素 而 为了更好的获取和使用IP地址 java提供了InetAddress类 来到文档 首先 他在 java的net包下 所以 想用它 是需要导包的 根据文档叙述 InetAddress就是一个…

python数据分析及可视化(十七)聚宽(双均线分析、因子选股策略、多因子选股策略、均值回归理论、布林带策略、PEG策略、权重收益策略)

聚宽 聚宽是一个做金融量化的网站&#xff0c;https://www.joinquant.com&#xff0c;登录注册&#xff0c;如果你写的文章、策略被别人采纳&#xff0c;增加积分&#xff0c;积分用于免费的回测时长。在我的策略&#xff0c;进入策略列表&#xff0c;里面有做好的策略模板可以…

Web前端105天-day40-GIT

git--版本控制系统(VCS) 目录 前言 一、版本控制系统(VCS) 二、Git中的常用概念 三、Git中的常用命令 四、分支 五、远程仓库(代码托管平台) 总结 前言 day40学习开始 一、版本控制系统(VCS) 用于项目中文件的存储、共享、历史回退、合并、代码追踪文件历史常用版本控制…

acwing基础课——spfa

由数据范围反推算法复杂度以及算法内容 - AcWing 常用代码模板3——搜索与图论 - AcWing 基本思想&#xff1a; 一般单源最短路我们都可以用spfa算法来做&#xff0c;如果过不了再尝试其他算法。 spfa算法就是在bellman-ford算法的基础上就行优化&#xff0c;bellman-算法是每…

微信小程序|小程序事件

首先,我们在index.wxml中与index.js中添加如下代码: <button bindtap="alert">bindtap</button>Page({data: {},alert: function (event) {wx.showToast({title: 触发成功, // 标题icon: success, // 图标类型,默认successduration: 1500 // 提示窗停…

贪吃蛇复现-CoCube

需要完成下面所提及博文中里面所有前序案例&#xff1a; 从开环到闭环的旅程-CoCube 在完成如上代码之后&#xff0c;添加一个彩蛋&#xff0c;贪吃蛇的案例。 蓝桥ROS之半自动贪吃龟turtlesim版 基本上就是上述代码复现一下&#xff0c;完全没有难度的。 贪吃蛇复现-CoCubep…

程序员最关心的问题,我都帮你们问AI了

前言 最近几天互联网刮起了一阵ChatGPT风&#xff0c;起因是OpenAI发布了一个全新的聊天机器人模型—— ChatGPT&#xff0c;可以像人类交谈般回答大部分问题甚至还能直接帮你写代码。 我们先来试试让它帮我们写个代码&#xff1a; 有一丝丝的恐惧&#xff0c;害怕过两年就会失…

redis—主从,哨兵,集群

redis常见的使用方式 Redis的几种常见使用方式包括: Redis单副本;Redis多副本(主从) ;Redis Sentinel (哨兵) ;Redis Cluster;Redis自研。 使用场景: 如果数据量很少&#xff0c;主要是承载高并发高性能的场景&#xff0c;比如缓存一般就几个G的话&#xff0c; 单机足够了。…

Qt扫盲-QPushButton 理论总结

QPushButton 理论总结一、简述二、常用要点1. 快捷键相关2. 信号相关3. 默认按钮3. 推荐使用4. 重复功能5. 菜单功能一、简述 PushButton 按钮或CommandButton 按钮应该是图形用户界面中最常用的小部件。按下&#xff08;单击&#xff09;一个按钮就可以命令计算机执行某些操作…

【1691. 堆叠长方体的最大高度】

来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 描述&#xff1a; 给你 n 个长方体 cuboids &#xff0c;其中第 i 个长方体的长宽高表示为 cuboids[i] [widthi, lengthi, heighti]&#xff08;下标从 0 开始&#xff09;。请你从 cuboids 选出一个 子集 &#xff0c…

快速傅里叶变换及Python代码实现

一、前言 我想认真写好快速傅里叶变换&#xff08;Fast Fourier Transform&#xff0c;FFT&#xff09;&#xff0c;所以这篇文章会由浅到细&#xff0c;由窄到宽的讲解&#xff0c;但是傅里叶变换对于寻常人并不是很容易理解的&#xff0c;所以对于基础不牢的人我会通过前言普…