初见香橙派AiPro
首先非常高兴能体验我们国产香橙派Aipro,在收到产品的时候还是被这精美的做工和强大的配置所折服。也为国内有这么多优秀的企业不断在进步和攀登而自豪。
比起我之前玩派的时候,同样的价格,现在给的实在是太多了,所以从以下几个维度谈一下我对香橙派Aipro的体验感受。分别是:硬件设计、软件支持、资料内容和案例分享。
硬件设计——质感满满
很深刻以前用树莓派2b的时候,被他的精妙小巧所震惊到,但是我拿到香橙派 Aipro的时候给我的是一种齐全规整的印象,整齐的排列、强大的散热、丰富的接口和扩展方式,让我觉得这块板子有无限多的可能和玩法。
而且从配置上来说,这个价格买到不可谓不豪华了
昇腾AI技术路线
8GB/16GB LPDDR4X
8/20 TOPS AI算力
支持SATA/NVMeSSD 2280的M.2插槽、支持wifi5/bt4.2/ble、千兆网口
除了以上这些强有力的配置之外,同样也支持传统玩法的tf卡槽启动,可以让你有玩和体验更多系统的便捷性,只需更换tf卡即可。
虽然优点很多,但是也有一些设计上的槽点,例如
①power和reset按键稍微有些不合理,容易被误触,导致重启工作内容丢失
②wifi天线封装过于简陋,拉低整体质感,且较为容易损坏
但是总体上对于硬件上的配置和设计来说还是十分满意的,能够体现出我们的科技企业达到了一个业内领先的水准。
软件支持——可玩性极强
对于香橙派 Aipro最大的亮点就是加入了昇腾AI的特性,虽然我们现在跑的很多模型和内容都还是比较依赖英伟达的cuda计算架构,但是昇腾在目前市场上的表现来看也并不处于弱势,只是因为起步晚和适配等问题在阻挠。
软件系统上支持了两款官方定制系统:Ubuntu和Openeuler,前者事宜大部分属性linux系统的玩家入手,后者则是备案计划我们也可以去体验和研究的一个系统。考虑得还是很周全。
同样的官方在系统中给了一些ai训练模型demo给我们去体验,我们体验了其中一个。
该样例是基于PyTorch框架的ResNet50模型,对*.jpg图片分类,并在终端显示该图片的Top5置信度的分类ID、分类名称。
样例代码逻辑如下所示:
(1)数据预处理(解码+缩放),输出YUV420SP格式、224224分辨率的图片;
(2)色域转换、归一化,输出RGB格式、224224分辨率的图片;
(3)模型推理,输出该图片所属各分类的置信度;
(4)数据后处理,该图片的Top5置信度的分类ID、分类名称。
具体操作步骤如下:
①通过mobaxtern使用ssh连接香橙派 Aipro
账户:HwHiAiUser
密码:MInd@123
②进入桌面,进入到用例目录下
③切换为root用户
④执行该用例脚本
从图中可以看到识别的效果和反应速度都是非常不错的。
资料内容——丰富社群生态
最后谈到的是对于我们这些业余玩家最为友好的内容,就是相关资料和入门教程,这些是我们去玩新板子的一个指南,也是更多想玩的人的一个引路人,我们在官网上可以看到的资料是非常的多,种类也很齐全(ps:这些下载能不能别用百度云了,没会员实在是太慢了)
对于想学习和扩展的人,这些资料来源都非常宝贵,给他们在学习路上解开了很多疑惑和苦恼。也有助于形成社群文化,大家在香橙派Ai pro的基础上发挥自己的想象和智慧,开发更多好玩的东西。
案例分析——搭建自己的智能家庭控制中枢
开源项目WukongRobot介绍
wukong-robot 是一个简单、灵活、优雅的中文语音对话机器人/智能音箱项目,目的是让中国的 Maker 和 Haker 们也能快速打造个性化的智能音箱。wukong-robot 还可能是第一个开源的脑机唤醒智能音箱。
关于智能家庭控制中枢整体设想架构如下图:
控制数据采集终端硬件结构框图如图 3.1 所示,它主要包括中央处理器(香橙派Aipro)、阵列式麦克风、Kinect 2、移动终端设备、无线通信等模块。除此之外还有电源模块和指示灯。
准备工作
①搭建python环境(python安装再此不多做复述)
wukong-robot 只支持 Python >= 3.7 且 < 3.10 ,不支持 Python 2.x 。
②准备整列麦克风
使用linux的alsa驱动麦克风阵列录音
③Zigbee模块
Zigbee模块通讯完成智能设备的控制
④安卓手机
开发app应用和使用公众号进行访问
安装Wukong
1.克隆该项目到本地
git clone https://github.com/wzpan/wukong-robot.git
2.安装ffmpeg pyaudio等模块为语音识别服务
sudo apt-get update -y
sudo apt-get install portaudio19-dev python-pyaudio python3-pyaudio sox pulseaudio libsox-fmt-all ffmpeg
pip3 install pyaudio
3.进入wukong文件夹中安装python项目依赖
cd wukong-robot
pip3 install -r requirements.txt
4.编译_snowboydetect.so
cd $HOME
wget https://wzpan-1253537070.cos.ap-guangzhou.myqcloud.com/misc/swig-3.0.10.tar.gz
tar xvf swig-3.0.10.tar.gz
cd swig-3.0.10
sudo apt-get -y update
sudo apt-get install -y libpcre3 libpcre3-dev
./configure --prefix=/usr --without-clisp --without-maximum-compile-warnings
make
sudo make install
sudo install -v -m755 -d /usr/share/doc/swig-3.0.10
sudo cp -v -R Doc/* /usr/share/doc/swig-3.0.10
sudo apt-get install -y libatlas-base-dev
//构建snowboy
cd $HOME
wget https://wzpan-1253537070.cos.ap-guangzhou.myqcloud.com/wukong/snowboy.tar.bz2 # 使用我fork出来的版本以确保接口及Ubuntu 22兼容
tar -xvjf snowboy.tar.bz2
cd snowboy/swig/Python3
make
cp _snowboydetect.so wukon-robot的根目录/snowboy/
4.安装目前构建的第三方技能列表
mkdir $HOME/.wukong
cd $HOME/.wukong
git clone http://github.com/wzpan/wukong-contrib.git contrib
pip3 install -r contrib/requirements.txt
5.运行wukong
cd wukong-robot 所在的目录
python3 wukong.py
Zigbee模块在香橙派AI上使用
Zigbee无线通信网络主要由协调器、路由器以及终端设备节点3种类型组成,在网络建立初期,主要由协调器完成网络的发起、参数的设定以及信息的管理和维护的功能,路由器则负责转发消息和构建数据传输的链路,终端设备节点则负责控制连接的设备或者采集节点上的数据信息
这里我使用的是TI公司的Basic RF通信作为节点之间通信的基础,它拥有IEEE 802.15.4的标准的数据包的接收和发送功能,Basic RF包括Hardware layer、Hardware Abstraction layer、Basic RF layer以及Application layer四层,Hardware layer负责实现数据传输的基础,Hardware Abstraction layer提供结构来访问控制GPIO、UART、ADC等,Basic RF为无线传输提供协议,Application layer封装好提供给用户使用Basic RF和HAL层的函数。其组成框架图如图所示
DHT11模块在香橙派Aipro上使用
DHT11数字温湿度传感器是一款已含有校准数字信号输出的温湿度复合传感器,具有响应快、抗干扰能力强等优点。
在收到连接节点GPIO口信息后,传感器采用串行接口(单线双向)的方式工作,按照每次4ms左右的时间间隔进行通讯,在得到发送数据指令后,向对方发送按照温湿度整数小数部分加上校验和部分的数据供对方采集处理。
其工作流程为:用户通过香橙派Aipro的语音交互模式或者移动终端模式下达查询指令后,协调器节点通过GPIO口发送规定时间的低电平,DHT11温湿度传感器由低功耗节能模式转换为活跃应答模式,等待GPIO开始信号结束后,反馈一个响应信号,送出按照温湿度整数小数部分加上校验和部分的40bit的数据,并出发一次信号采集,香橙派Aipro对接收的信息进行读取.
外部Android应用设计
在Android模块设计中,设计了基于socket的Android应用作为移动终端交互方式,在Android终端可以完成和wukong语音平台的简单的信息交互和触发wukong平台下的插件来实现移动终端控制家居设备的功能。通过内网穿透的做法将loaclhost映射成公网IP,以实现远程控制功能,便于扩大控制范围以及系统使用的便捷性。
Android应用和香橙派Aipro的通信主要靠socket完成,在ReSpeaker上运行wukong的同时在后台通过线程方式启动scoket的服务端并通过对本地IP和端口映射的方式得到公网的IP地址和端口,Android应用则只需要开启移动数据和添加网络访问权限然后向该公网IP和端口发送内容即可。
Android应用的设计主要包括:应用启动过场动画、登陆验证界面、主通信界面。
过场动画在设计好xml以及画面加载过程设定后,通过修改AndroidManifest.xml文件可以定义启动顺序,最后开启一个线程并设定暂停时间负责过程动画的展示。
登陆界面主要是对使用者的身份进行一个校验过程,保证使用者的所有权限以及安全问题,首先在启动主页面之前先启动一个Intent,负责加载验证页面,验证页面会对编辑框内是否为空、是账号否符合格式、密码长度是否足够进行检测,按下sing in按键后在后台启动验证过程,向tornado后台指定描述层发送get请求获得用户设置的账号和密码,对比校验账号和密码是否正确。
主通信界面是核心部分,用于Android移动终端和wukong完成通信交互,分为编辑框部分,按键部分、文本显示部分。
用户向msg编辑框输入需要传达的指令,向ip和port输入需要发送的ip地址和端口,之后的线程将从此通过getText、setText等函数获得编辑框内容和修改编辑框内容。
send按键负责从msg编辑框获得文字内容,并转换为bytes数据然后打开向Outputstream进行写入,connect负责连接socket,按下后会启动ConnectThread线程完成向服务端发送connect信号的工作,并启动ReciveThread线程用于接收服务端反馈的信息,eixt按键用于结束整个应用。
界面顶部有文本显示控件,负责显示ReciveThread接收的信息,以达到更加直观的显示效果。
具体UI如图所示:
基于tornado的http服务器设计
考虑到ios用户无法安装Android应用,基于tornado的http服务器的设计很好的解决了这个问题,tornado是一种web服务器软件的开源版本,它的主要特点是:单线程异步的非阻赛式服务器、速度快、学习成本很低。
tornado后台遵循resetful架构,为每个资源单独设计类以及get和post等处理方法。
Web前端的设计包括登陆界面、主界面。
登陆界面负责通过从本地配置文件中读取设置的用户和密码的方式校验登陆用户的身份信息信息是否匹配,保证访问是被认可的,通过从html页面读取编辑框内输入信息然后post方法对其进行和本地文件设置进行校验。
主界面主要负责和wukong进行交互,用户通过编辑框编辑命令,在按下发送按钮后,触发index.js中的函数进行处理,最后将处理结果以{“type”: “text”, “query”: query, ‘validate’: getCookie(‘validation’), “uuid”: uuid}的json格式作为网页参数,服务端的post读取对应参数交付回复函数进行应答,html再读取通过logger.debug(‘response msg: {}’.format(msg))读取日志记录文件将插件回复的内容以{‘code’: 0, ‘message’: ‘ok’, ‘resp’: msg, ‘audio’: audio, ‘plugin’: plugin}的json格式作为网页读取参数,读取msg字段进行显示,具体UI如图所示:
除了web版本,还在便利的原则上对微信公众号进行了接入,利用tornado后台对微信公众号进行二次开发,实现了公众号接入wukong语音平台回复功能,在tornado程序中加入一个层级目录,再利用wechatpy的SDK,完成get方法对token的验证过程以及post方法的回复功能,具体效果如图所示: