HaaS Python + AI 隆重登场 使用 ESP32 + 摄像头 机器视觉实现水果识别

2023-10-28

水果识别系统

   现在很多农场里边使用摘采机器人识别水果进行水果摘采,盒马超市也使用自动识别称来识别水果种类自动计费。本案例则是使用HaaS Python对摄像头图像进行采集,并调用HaaS云端积木能力对水果进行识别。

1、背景知识

   水果的种类繁多,识别种类越多,需要越多的水果图片数据进行模型训练。本章通过使用串口摄像头采集水果照片上传至云端进行识别。目前HaaS云端积木的水果检测识别功能可以检测图像中的所有水果,并返回水果的名称和置信度。水果识别可以识别60种常见的水果和16种坚果。比如:八月瓜、百香果、菠萝、菠萝蜜、草莓、橙子、脆瓜、甘蔗、桂圆、哈蜜瓜、海底椰、海红果、红毛丹、火龙果、桔子、蓝莓、梨、荔枝、李子、榴莲、蔓越莓、芒果、梅子、猕猴桃、木瓜、柠檬、牛油果、欧李、枇杷、苹果、葡萄、茄瓜、桑葚、沙果、沙棘果、山楂、山竹、蛇皮果、石榴、柿子、树莓、桃、桃胶、西瓜、西梅、仙人掌果、香瓜、香蕉、橡子、小番茄、杏子、雪莲果、杨梅、洋蒲桃、杨桃、椰子、银杏果、樱桃、柚子、枣、南瓜子、夏威夷果、巴旦木、开心果、杏仁、松子、板栗、核桃、榛子、白果、碧根果、腰果、花生、葡萄干、葵花子、西瓜子等。

1.1、场景功能拆解

   实验整体步骤如下:

    1. 连接硬件
    2. HaaS云端积木平台创建设备
    3. 设备端开发
    4. 运行结果

1.2、准备

  1. M5Stack Core2开发板 一套
  2. M5Stack Unit CAM摄像头 一个
  3. 连接线 一条

   涉及到的硬件购买链接如下,仅供参考,不负责商家发货的品质保障等问题!

名称 数量 参考链接
M5Stack Core2开发版 1 M5Stack Core2
microUSB数据线 1 M5Stack Core2开发套件自带
摄像头 1 M5Stack Unit CAM摄像头
连接线 1 M5Stack GROVE连接线 请选用10cm长即可

   硬件连线图如下图所示:

2、云端设备创建

2.1、注册阿里云账号

   进入阿里云账号注册页面 进行阿里云账号注册,注册完成后登录官网。如果您已经有阿里云账号,直接登录即可。

2.2、HaaS云端积木平台

   进入阿里云HaaS官网

   如上图所示,点击右上角的“控制台”,进入HaaS云端积木的控制台页面。

  1. 创建设备

   在左侧导航栏设备管理中,可以看到产品设备选项,点击“产品”,可以看到平台默认创建了“haas_正式游客产品”这个产品; 所以开发者只需要创建设备即可。点击“批量添加”, 添加方式为“自动生成”, 申请数量可填为“1”个,即可完成新设备的创建。

  1. 获取设备的三元组

   在设备的列表中,新创建的设备上点击“查看”,就可以获得设备的三元组信息,之后这个三元组信息会在设备端代码中使用到。

3、设备端开发

3.1、开发环境准备

   在进行下一步之前请确保M5StackCore2中已经烧录了HaaS Python固件并且其开发环境已经搭建完毕。详情请参考M5StackCore2快速开始中的说明。

3.2、创建解决方案

   如下图所示,打开VS Code之后在新建一个基于helloworld的python工程,设定好工程名称(“fruits_recognization”)及工作区路径之后,硬件类型选择m5stackcore2,点击”立即创建“,创建一个Python轻应用的解决方案。

   将HaaS Pyhton水果识别代码文件下的所有脚本进行复制到“fruits_recognization”工程根目录中覆盖原本的脚本,然后进行如下设定完成设备端代码的开发。

Python脚本的详细说明请参考脚本内嵌的文字注释

  1. 修改路由器名称及密码

   修改fruits_recognization工程里main.py中SSID和PWD的值为读者实际要连接的路由器的名称及密码(请注意名称和密码都需要放在''符号中间)。

# Wi-Fi SSID和Password设置
SSID='Your-AP-SSID'
PWD='Your-AP-Password'

   修改完成之后connect_wifi函数就会连接读者自己设定的路由器。

  1. 修改设备的三元组信息

   按照[获取设备的三元组]获取三元组信息,填入main.py中:

# HaaS设备三元组
productKey = "Your-ProductKey"
deviceName  = "Your-devicename"
deviceSecret  = "Your-deviceSecret"

4、运行结果

   推送fruits_recognization工程到M5StackCore2开发板之后,脚本在网络连接成功后,会将IP地址信息打印在屏幕上。

   屏幕上提示”NTP done“代表NTP时间同步成功。NTP时间同步成功之后,脚本会自动从摄像头采集图像信息并调用HaaS云端积木能力进行水果识别,在检测到水果后会在屏幕上显示红色”XXXX Detected“字样。

   如下是整个过程中串口的日志打印,其中:

  • Wi-Fi is connecting:代表正在连接路由器
  • IP: 192.168.0.158:打印获取到的IP地址信息
  • NTP start:表示开始进行NTP对时
  • NTP done: 表示NTP对时结束
  • link platform connected:表示成功连接到阿里云平台服务
  • {'ext': '{"fruitList"...:打印云端对图片进行水果检测后返回的检测结果
  • Fruits Detected:表示检测到水果
I (71364) phy: phy_version: 4500, 0cd6843, Sep 17 2020, 15:37:07, 0, 0
Wi-Fi is connecting...
Wi-Fi is connecting...
Wi-Fi is connected
IP: 192.168.3.26
NTP start
NTP done
establish tcp connection with server(host='a1kJJvGN9ko.iot-as-mqtt.cn-shanghai.aliyuncs.com', port=[443])
tcp_connect: can only connect from state CLOSED
success to establish tcp, fd=54
link platform connected
capture time : 214
image time : 151
{'ext': '{"fruitList":[{"box":[117.39963,37.268333,267.16675,202.39557],"name":"\u82f9\u679c","score":0.78409535}],"result":"success"}', 'commandName': 'detectFruitsReply', 'commandType': 'haas.faas', 'argInt': 1}
detect: Apple
get response time : 413
Fruits Detected!!!

更多有趣案例请见

HaaS开发框架icon-default.png?t=M1L8https://haas.iot.aliyun.com/solution

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

HaaS Python + AI 隆重登场 使用 ESP32 + 摄像头 机器视觉实现水果识别 的相关文章

  • 类的 IPython 表示

    我正在使用我创建的模块尝试 IPython 但它没有显示类对象的实际表示 相反 它显示类似的内容 TheClass module TheClass name I heavily在这个模块中使用元类 我有真正有意义的类表示 应该向用户显示 是
  • Pandas set_levels,如何避免标签排序?

    我使用时遇到问题set levels多索引 from io import StringIO txt Name Height Age Metres A 1 25 B 95 1 df pd read csv StringIO txt heade
  • 如何在 __init__ 中使用await设置类属性

    我如何定义一个类await在构造函数或类体中 例如我想要的 import asyncio some code class Foo object async def init self settings self settings setti
  • 在 Python 中将列表元素作为单独的项目返回

    Stackoverflow 的朋友们大家好 我有一个计算列表的函数 我想单独返回列表的每个元素 如下所示 接收此返回的函数旨在处理未定义数量的参数 def foo my list 1 2 3 4 return 1 2 3 4 列表中的元素数
  • 嵌套列表的重叠会产生不必要的间隙

    我有一个包含三个列表的嵌套 这些列表由 for 循环填充 并且填充由 if 条件控制 第一次迭代后 它可能类似于以下示例 a 1 2 0 0 0 0 0 0 4 5 0 0 0 0 0 0 6 7 根据条件 它们不重叠 在第二次迭代之后 新
  • 使用主题交换运行多个 Celery 任务

    我正在用 Celery 替换一些自制代码 但很难复制当前的行为 我期望的行为如下 创建新用户时 应向tasks与交换user created路由键 该消息应该触发两个 Celery 任务 即send user activate email
  • 在 Django Admin 中调整字段大小

    在管理上添加或编辑条目时 Django 倾向于填充水平空间 但在某些情况下 当编辑 8 个字符宽的日期字段或 6 或 8 个字符的 CharField 时 这确实是一种空间浪费 字符宽 然后编辑框最多可容纳 15 或 20 个字符 我如何告
  • 为什么 web2py 在启动时崩溃?

    我正在尝试让 web2py 在 Ubuntu 机器上运行 所有文档似乎都表明要在 nix 系统上运行它 您需要下载源代码并执行以下操作 蟒蛇 web2py py 我抓住了source http www web2py com examples
  • Pycharm 在 os.path 连接上出现“未解析的引用”

    将pycharm升级到2018 1 并将python升级到3 6 5后 pycharm报告 未解析的引用 join 最新版本的 pycharm 不会显示以下行的任何警告 from os path import join expanduser
  • 矩形函数的数值傅里叶变换

    本文的目的是通过一个众所周知的分析傅里叶变换示例来正确理解 Python 或 Matlab 上的数值傅里叶变换 为此 我选择矩形函数 这里报告了它的解析表达式及其傅立叶变换https en wikipedia org wiki Rectan
  • GUI(输入和输出矩阵)?

    我需要创建一个 GUI 将数据输入到矩阵或表格中并读取此表单数据 完美的解决方案是限制输入表单仅允许float 例如 A 1 02 0 25 0 30 0 515 0 41 1 13 0 15 1 555 0 25 0 14 1 21 2
  • 如何使用 Selenium 和 ChromeDriver 解决 TypeError: 'module' object is not callable 错误 [重复]

    这个问题在这里已经有答案了 代码试验 from selenium import webdriver from selenium webdriver chrome options import Options as Chromeoptions
  • python的shutil.move()在linux上是原子的吗?

    我想知道python的shutil move在linux上是否是原子的 如果源文件和目标文件位于两个不同的分区上 行为是否不同 或者与它们存在于同一分区上时的行为相同吗 我更关心的是如果源文件和目标文件位于同一分区上 shutil move
  • 通过Python连接到Bigquery:ProjectId和DatasetId必须非空

    我编写了以下脚本来通过 SDK 将 Big Query 连接到 Python 如下所示 from google cloud import bigquery client bigquery Client project My First Pr
  • 当字段是数字时怎么说...在 mongodb 中匹配?

    所以我的结果中有一个名为 城市 的字段 结果已损坏 有时它是一个实际名称 有时它是一个数字 以下代码显示所有记录 db zips aggregate project city substr city 0 1 sort city 1 我需要修
  • Python GTK+ 画布

    我目前正在通过 PyGobject 学习 GTK 需要画布之类的东西 我已经搜索了文档 发现两个小部件似乎可以完成这项工作 GtkDrawingArea 和 GtkLayout 我需要一些基本函数 如 fillrect 或 drawline
  • 如何以正确的方式为独立的Python应用程序制作setup.py?

    我读过几个类似的主题 但还没有成功 我觉得我错过或误解了一些基本的事情 这就是我失败的原因 我有一个用 python 编写的 应用程序 我想在标准 setup py 的帮助下进行部署 由于功能复杂 它由不同的 python 模块组成 但单独
  • 如何将 Django 中的权限添加到模型并使用 shell 进行测试

    我在模型中添加了 Meta 类并同步了数据库 然后在 shell 中创建了一个对象 它返回 false 所以我真的无法理解错误在哪里或者缺少什么是否在其他文件中可能存在某种配置 class Employer User Employer in
  • 如何使用 PrimaryKeyRelatedField 更新多对多关系上的类别

    Django Rest 框架有一个主键相关字段 http www django rest framework org api guide relations primarykeyrelatedfield其中列出了我的 IDmany to m
  • 如何将Python3设置为Mac上的默认Python版本?

    有没有办法将 Python 3 8 3 设置为 macOS Catalina 版本 10 15 2 上的默认 Python 版本 我已经完成的步骤 看看它安装在哪里 ls l usr local bin python 我得到的输出是这样的

随机推荐

  • STM32之舵机转动————寄存器版

    以STM32F407VGT6单片机为例 控制舵机转动的角度0 180 include pwm h 函数名 tim3 ch4 pwm 函数功能 舵机配置 返回值 void 形参 void 函数说明 红色线 5V 棕色线 GND 橘色线 PB1
  • java.lang.manament API 简介

    java lang management 包提供管理接口用于监控以及管理 JVM 以及 Java 运行时的其他组件 我们开发的 JVM Agent 就是通过这个包提供的接口 收集到 JVM 中包括内存 GC 线程在内的信息 java lan
  • 《JAVA核心知识》学习笔记(JVM)-1

    JVM 1 基本概念 JVM 是可运行 Java 代码的假想计算机 包括一套字节码指令集 一组寄存器 一个栈 一个垃圾回收 堆 和 一个存储方法域 JVM 是运行在操作系统之上的 它与硬件没有直接 的交互 Hotspot JVM 后台运行的
  • Android 实现ListView 文字+ 图片

    1 ListView item 布局
  • 用Go实现的简易TCP通信框架

    接触到GO之后 GO的网络支持非常令人喜欢 GO实现了在语法层面上可以保持同步语义 但是却又没有牺牲太多性能 底层一样使用了IO路径复用 比如在LINUX下用了EPOLL 在WINDOWS下用了IOCP 但是在开发服务端程序的时候 很多都是
  • 何为 递归 ?

    递归 递 归 的操作 将大问题化解成小问题的过程 为什么可以化解 是因为大问题的处理方式和小问题的处理方式是一样的 1 要调用自己本身 2 要有一个趋于终止的条件 下面以一个求阶乘的例子简单介绍一下 public class recursi
  • Python基础入门—while循环

    Python基础入门 while循环 while循环 while控制语句 例题1 例题2 例题3 例题4 while循环 语法格式 while 条件 执行语句1 执行语句2 适用条件 无限循环 死循环 while True print 条件
  • 1.10.0版本下tensorflow与matplotlib不兼容问题解决

    1 10 0版本tensorflow默认下载numpy 1 14 5 最新版matplotlib要求numpy版本高于1 15 解决办法 先建虚拟环境 下载1 15或更高版本numpy 再安装2 2或2 3版本的matplotlib 最后安
  • 依赖Linux内核源码编译模块报错arch_hweight.h:54:42: error: expected ‘:’ or ‘)’ before ‘POPCNT64

    问题描述 想要编译一个模块 单独加载到开发板上 一次需要依赖开发板的Linux内核源码进行编译这个模块 编译模块的Makefile如下 home beal wu norflash kernel是开发板使用的内核源码路径 执行make之后报错
  • Zookeeper闪退、报错JAVA_HOME is not set 解决方法

    打开服务端闪退 编辑打开zkServer cmd 在末尾添加 pause 查看报错原因 这里的报错原因是JAVA HOME is not set 没有设置JAVA HOME 这里我们可以看到zkService 启动的时候 加载zkEvn文件
  • mac浏览器没有网络,通讯软件(QQ、微信、飞书等)正常

    网上的方法 1 在网络dns里加 114 114 114 114 或者8 8 8 8 我自己试的是没有解决问题 2 关闭网络代理中的一些勾选 我电脑里本来就没有勾选 3 重置DNS 可能是mac版本不同 提示discoveryutil未找到
  • 企业数字化转型之道:3L8P转型模型

    作者 韩磊 摘要 数字化转型的本质是 在 数据 算法 定义的世界中 以数据服务的流动 化解复杂系统的不确定性 优化资源配置效率 企业数字化转型的本质则是以需求为中心 以数据为资产 以技术为手段 以人才为依托 快速构建能满足客户需求的 支持业
  • Java IO流

    1File类 java io File类 文件和文件目录路径的抽象表示形式 与平台无关 File 能新建 删除 重命名文件和目录 但 File不能访问文件内容本身 如果需要访问文件内容本身 则需要使用输入 输出流 想要在Java程序中表示一
  • 微信小程序之数据的同步渲染

    微信小程序之数据的同步渲染 结论 微信小程序通过setData方法实现数据的同步渲染 直接修改data无法实现同步渲染 setData工作原理 小程序分为逻辑层和渲染层 而每次逻辑层改变了 要借用Native运行 小程序的渲染层和逻辑层由两
  • ExayExcel 阿里出品的ExayExcel

    1 首先引入依赖
  • cJSON笔记——三种结构的cJSON数组

    最近的项目中 涉及对cJSON库的使用 特别是不同结构的cJOSN数组的运用 在此小结以下 1 指定 路径 文件类型 文件名 读取整个文本 brief param file dir 文件所在的路径 param file name 文件名 p
  • 模型参数量(Parameters)和计算量(FLOPs)获取【使用thop】

    Tips 针对部分开源代码没有提供相关计算网络参数量和计算量的代码 这里给出一个通用的获取网络的参数量和计算量的方法 使用thop即可快速获取 1 模型参数量和计算量 参数量 params 即为网络模型中含有多少个参数 与输入的数据无关 主
  • win11热点提示我们无法设置热点

    问题还原 首先是连接win11的热点时 手机总是显示正在获取IP地址 然后连不上 之前都好好的 也没干过啥 或者选择性失忆 然后一通瞎操作 把电脑IP都给整成自动ip去了 初步估计是点了 网络重置 了如图 公司设置了固定ip 接下来就难受了
  • vue+iview 进行table表格数据的更新显示,局部刷新

    hello 在这个新做了一个网站 想提高一下权重 麻烦看见的给我点一下哦 是吉他乐谱分享的哦 www lsjita com 使用vue iview进行vue后台管理系统 对iview不太熟悉 然后就出现了好多问题 上一个有记录 这个来区分一
  • HaaS Python + AI 隆重登场 使用 ESP32 + 摄像头 机器视觉实现水果识别

    水果识别系统 现在很多农场里边使用摘采机器人识别水果进行水果摘采 盒马超市也使用自动识别称来识别水果种类自动计费 本案例则是使用HaaS Python对摄像头图像进行采集 并调用HaaS云端积木能力对水果进行识别 1 背景知识 水果的种类繁