分享一个基于 RTT-MicroPython 实现的图像识别

发布于 2020-01-16 14:53:22

分享一个基于 RTT-MicroPython 实现的图像识别

如果想尝试通过简单的几行 Python 代码实现一个简单的图像识别的功能,你需要有所准备如下:

1.硬件准备:麻雀1号开发板
2.软件准备:VS Code 和 RT-Thread MicroPython IDE

关于硬件准备:这个只能自己淘宝上买了,官方的淘宝链接。

关于软件的安装与使用这里不作过多的说明,详细的方法可以参考 RT-Thread 微信公众号里面的“2019年RT-Thread线下培训全套资料都在这里了!无套路直接领取”里面`深圳开发者大会CodeLab资料:基于BK7252麻雀一号+RT-Thread-MicroPython图像识别`的资料文档,那应该如何获取这份资料呢,据说只需要在公众号后台回复关键词“2019”,即可获得。

话不多说,直接上个效果图给大伙瞧瞧。

识别结果.png
实际效果图
终端识别结果打印.png
串口终端打印识别结果图


此处留个小疑问,稍后再说。

下面简单说明一下,基于麻雀1号开发板如何通过简单的几行 Python 代码实现一个简单的图像识别的功能。

实现原理
设备在联网状态下,通过按键中断触发拍照并保存到本地,通过 request 模块把经过服务器要求的 base64 编码和 url 编码后的图片数据上传到云端识别,在终端中打印获得的识别结果,并把部分图片识别结果到 LCD 屏上。
实现过程
1.设备联网

#麻雀 1 号联网指令
#导入联网模块
import rtthread
#注意这里的"test"为热点名称,"123456789"为热点的密码,这里要改为自己手机热点的名称
rtthread.wifi_join("w0","test","12345678")


2.设备拍照保存
#导入 camera 模块
from camera import camera

cam = camera()
#保存图片到文件系统中,"picture.jpg"为保存文件的名称
cam.snapshot("picture.jpg")

3.图片经过 base64 编码和 url 编码上传到云端识别,串口终端打印获得返回的识别结果
#使用此示例必须保证设备联网
#导入自定义的 userfunc 和 requests的模块
import userfunc
try:
import urequests as requests
except ImportError:
import requests
#请求云服务器的 url 地址
request_url = ";
image_tag = 'image='
#组合上传的数据,在图片数据前添加'image='的标签,图片数据通过自定义模块经过 base64 和 urlencode 处理。
#'picture.jpg'为前面拍照保存到本地的图片
params = image_tag + userfunc.picbase64urlencode('picture.jpg')
#注意这里的 access_token 值可以修改为自己获取的 token值
access_token = '[24.fb87fe7335f073ac02bd2e8c9a3e3173.2592000.1579168740.282335-18048107]'
#组合请求的 url 参数
request_url = request_url + "?access_token=" + access_token
# 设置 headers
headers = {'content-type': 'application/x-www-form-urlencoded'}
#post 上传数据
response = requests.post(request_url, data=params, headers=headers)
#打印服务器回应的数据
if response:
print(response.text)

4.识别结果显示在 LCD 屏上
#显示中文到 LCD 上
#导入自定义的 userfunc 模块
import userfunc
#显示图片到 LCD 上
userfunc.lcd_show_pic(pic_name)
#显示中文到 LCD 上
userfunc.show_chinese(60,130,'识别结果:',0x001F,0x0000)
5.按键中断触发拍照识别。
from machine import Pin

def func(v):
print("Hello rt-thread!")

# Get the GPIO pin number from GPIO index, for details see pin_num example.
key_0 = Pin(("key_0", 13), Pin.IN, Pin.PULL_UP)
key_0.irq(trigger=Pin.IRQ_RISING, handler=func)
key_0 = Pin(("key_0", 13), Pin.IN, Pin.PULL_UP)
注意上面的代码均为单个功能实现的Python 代码,完整功能代码在附件文件夹中的`main_example.py`文件中。

如何快速上手体验一把基于 RTT-MicroPython 实现的图像识别功能,请严格参考下面的使用教程。

使用教程

在麻雀1号开发板上烧录附件中的 MicroPython_demo.bin 文件,然后可以参考附件中的项目工程代码,也可以直接打开该项目工程文件,注意需要修改联网部分的WiFi 热点名称和密码。

总结
不得不赞,MicroPython 的使用真的很方便,就简单的几行代码就可以实现了云端图像识别的功能,RT-Thread MicroPython IDE 的功能界面也是挺棒的,使用起来可方便了。

资料分享:

在附件中有两个文件分别是(1)MicroPython_demo.bin 文件该文件需要烧录到麻雀1号开发板上。
(2)图像识别的完整项目工程文件夹,解压缩后通过 VS code 的 RT-Thread MicroPython IDE 插件打开工作区然后同步文件夹里面的所有文件到设备上,注意需要修改对应的联网指令。
项目工程代码

下载附件[MicroPython_demo.bin]
下载附件[empty_project_demo.zip]

查看更多

关注者
0
被浏览
2k
1 个回答
我夏了夏天
我夏了夏天 认证专家 2020-01-16
哇 太厉害了,我也要试试

撰写答案

请登录后再发布答案,点击登录

发布
问题

分享
好友

手机
浏览

扫码手机浏览