基于OrangePi的智能垃圾桶(全程可实现)

目录

一、阿里云平台垃圾分类接入

二、用C语言调用阿里云Python的接口

1.首先将阿里云自启动

 2.封装函数,方便C语言调用

3、用C语言调用

 三、香橙派调用摄像头

1) 首先将 USB 摄像头插入到 Orange Pi 开发板的 USB 接口中

2) 然后通过 lsmod 命令可以看到内核自动加载了下面的模块

3) 通过 v4l2-ctl 命令可以看到 USB 摄像头的设备节点信息为/dev/video0

 ​编辑

4) 使用 fswebcam 测试 USB 摄像头

a. 安装 fswebcam

b . 安装完 fswebcam 后可以使用下面的命令来拍照 a)

c. 在服务器版的 linux 系统中,拍完照后可以使用 scp 命令将拍好的图片传到 Ubuntu PC 上镜像观看(这里直接使用FTP拖出去)

6) 使用 mjpg-streamer 测试 USB 摄像头

a. 下载 mjpg-strea

b. 安装依赖的软件包

c. 编译安装 mjpg-streamer

d. 开启服务

7.使用wget命令,从网页上获取图片

8.设置开机就能自己启动(编写脚本文件)

使用shell之bash解释器执行(目的是为了简化,不在到指定的目录下面去执行文件)

设置开机就能自己启动:

四、垃圾识别中语音识别的配置

五、使用VSCode进行远程开发

 六、语音模块和摄像头与 阿里云结合

1.先将语音模块和香橙派相连接(这里看一下连接顺序)

2、查看uart5是否已经打开

3、USB摄像头接到香橙派上面

​编辑

4、执行的流程图

5.修改代码(uartTool.c)刷抖音项目的文件来修修改改,对应的头文件uartTool.h也要修改

修改头文件 

6.整合代码(摄像头,语音模块)

七、增加垃圾桶及开关盖功能

八、对项目进行优化

缺陷:

 1、优化后的流程图(多线程)

2、优化第一步

增加线程的条件

 书写线程函数的框架

3、优化第二步(写具体实现线程的过程)

九、增加OLED显示屏功能

十、增加网络控制功能:

1、增加socket.h文件和.c文件

main.c里面的pget_socket线程里面的功能是实现

编译再运行一下

检测异常退出

1、做一个小测试:(以前的代码)

 2、异常退出时候的状态

此时就要引入,

TCP 心跳机制解决Soket异常断开问题 

Socket客户端得断开情形无非就两种情况:

 为了解决上述问题,引入TCP心跳包机制:

3、自己实现异常检测


一、阿里云平台垃圾分类接入

1、首先我们要通过调用阿里云|达摩院视觉智能开放平台 (aliyun.com)里面的垃圾分类平台来对垃圾进行识别

2、输入垃圾分类技术文档

3、根据以下的技术文档的指引一步一步的操作

(这里说一下什么是AccessKey,它是一个账号用来与阿里云平台进行交互的,通过这个账号把图片传入到创建的阿里云账号里面,再调用对应的功能来进行识别

4、参考6中的示例代码进行测试

 # -*- coding: utf-8 -*-
  2 # 引入依赖包
  3 # pip install alibabacloud_imagerecog20190930
  4 
  5 import os
  6 import io
  
  7 from urllib.request import urlopen
  8 from alibabacloud_imagerecog20190930.client import Client
  9 from alibabacloud_imagerecog20190930.models import ClassifyingRubbishAdvanceRequest
 10 from alibabacloud_tea_openapi.models import Config
 11 from alibabacloud_tea_util.models import RuntimeOptions
 12 
 13 config = Config(
 14         # 创建AccessKey ID和AccessKey Secret,请参考https://help.aliyun.com/document_detail/175144.html。
 15         # 如果您用的是RAM用户的AccessKey,还需要为RAM用户授予权限AliyunVIAPIFullAccess,请参考https://help.aliyun.com/document_detail/145025.html
 16         # 从环境变量读取配置的AccessKey ID和AccessKey Secret。运行代码示例前必须先配置环境变量。
 17         access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'),
 18         access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
 19         # 访问的域名
 20         endpoint='imagerecog.cn-shanghai.aliyuncs.com',
 21         # 访问的域名对应的region
 22         region_id='cn-shanghai'
 23         )
 24 #场景一:文件在本地
 25 img = open(r'/home/orangepi/Pictures/garbageCategory/guazike.jpg', 'rb')
 26 #场景二:使用任意可访问的url
 27 #url = 'https://viapi-test-bj.oss-cn-beijing.aliyuncs.com/viapi-3.0domepic/imagerecog/ClassifyingRubbish/ClassifyingRubbish1.jpg'
 28 #img = io.BytesIO(urlopen(url).read())
 29 classifying_rubbish_request = ClassifyingRubbishAdvanceRequest()
 30 classifying_rubbish_request.image_urlobject = img
 31 runtime = RuntimeOptions()
 32 try:
 33     # 初始化Client
 34   client = Client(config)
 35   response = client.classifying_rubbish_advance(classifying_rubbish_request, runtime)
 36   # 获取整体结果
 37   print(response.body)
        except Exception as error:
 39     # 获取整体报错信息
 40   print(error)
 41   # 获取单个字段
 42   print(error.code)
~                      

 5、将其复制到OrangePi上面进行测试

        a.首先测试的时候要关闭url,因为目前只是在本地进行测试

        b.本地测试要修改图片的绝对路径 

测试结果:

 -------------------------------------------------------------------------------------------------------------------------------

二、用C语言调用阿里云Python的接口

1.首先将阿里云自启动

也就是首先配置环境变量,每次开机或者关闭终端时都要重新配置环境变量,所以就设置配置文件在一开机就先启动它

        a.使用  vi Linux的~/.bashrc文件介绍-CSDN博客 ~/.bashrc 命令       Linux的~/.bashrc文件介绍-CSDN博客

        b.

export ALIBABA_CLOUD_ACCESS_KEY_ID=“你的ID” #根据自己实际的ID填写

export ALIBABA_CLOUD_ACCESS_KEY_SECRET="你的SECRET" 

        c.再使用export命令查看是否显示,有显示则说明配置成功,打开新终端也能够自启动

 2.封装函数,方便C语言调用

将阿里云的代码封装成一个函数,方便后续用C语言进行调用

测试类的结果,结果为  ClassifyingRubbishResponseBody  这个类

所以接下来我们要查找查找有什么函数或者方法能够把这些数据转换成dict数据类型 

在安装图像的地方查找 输入:pip install alibabacloud_imagerecog20190930

也就是查找alibaba的SDK包具体安装在Linux系统的哪个位置

 在该目录下查找我们刚才type出来的类 ,./alibabacloud_imagerecog20190930/models.py:class ClassifyingRubbishResponseBody(TeaModel): 

这个类才是我们想要查找的类(完全重合)

使用vi 编辑器打开该类,然后看到我们想要的函数 

在我们原本的.py文件里面修改打印出来的东西,看看是否能够打印出来dict数据类型 

去除多余的信息,只保留关键的信息,这里就要使用Python里面的字典的方法

 

再次修改garbage.py文件,最终达到相应的效果 

 garbage.py

# -*- coding: utf-8 -*-
  2 # 引入依赖包
  3 # pip install alibabacloud_imagerecog20190930
  4 
  5 import os
  6 import io
  7 from urllib.request import urlopen
  8 from alibabacloud_imagerecog20190930.client import Client
  9 from alibabacloud_imagerecog20190930.models import ClassifyingRubbishAdvanceRequest
 10 from alibabacloud_tea_openapi.models import Config
 11 from alibabacloud_tea_util.models import RuntimeOptions
 12 
 13 config = Config(
 14         # 创建AccessKey ID和AccessKey Secret,请参考https://help.aliyun.com/document_detail/175144.html。
 15         # 如果您用的是RAM用户的AccessKey,还需要为RAM用户授予权限AliyunVIAPIFullAccess,请参考https://help.aliyun.com/document_detail/145025.html
 16         # 从环境变量读取配置的AccessKey ID和AccessKey Secret。运行代码示例前必须先配置环境变量。
 17         access_key_id=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_ID'),
 18         access_key_secret=os.environ.get('ALIBABA_CLOUD_ACCESS_KEY_SECRET'),
 19         # 访问的域名
 20         endpoint='imagerecog.cn-shanghai.aliyuncs.com',
 21         # 访问的域名对应的region
 22         region_id='cn-shanghai'
 23         )
 24 
 25 def alibaba_garbage():
 26     #场景一:文件在本地
 27     img = open(r'/home/orangepi/Pictures/garbageCategory/guazike.jpg', 'rb')
 28     #场景二:使用任意可访问的url
 29     #url = 'https://viapi-test-bj.oss-cn-beijing.aliyuncs.com/viapi-3.0domepic/imagerecog/ClassifyingRubbish/ClassifyingRubbish1.jpg'
 30     #img = io.BytesIO(urlopen(url).read())
 31     classifying_rubbish_request = ClassifyingRubbishAdvanceRequest()
 32     classifying_rubbish_request.image_urlobject = img
 33     runtime = RuntimeOptions()
 34     try:
   # 初始化Client
 36       client = Client(config)
 37       response = client.classifying_rubbish_advance(classifying_rubbish_request, runtime)
 38       # 获取整体结果
 39       print(response.body.to_map()['Data']['Elements'][0]['Category'])
 40       return response.body.to_map()['Data']['Elements'][0]['Category']
 41     except Exception as error:
 42       return '获取失败'
 43 
 44 
 45 if __name__ == "__main__":
 46     alibaba_garbage()
 47 

3、用C语言调用

使用之前的para.c文件修修改改

调用成功 

修改函数 (garbage.py)

头文件的编写 )(garbage.h)

使用main函数进行调用(C文件)(garbage.c):

  • 46
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值