赞
踩
本文档介绍如何用香橙派 AIpro和硬盘制作个人NAS服务器。
在一般场景下,专用的NAS设备或者台式电脑,他们占用体积庞大,并且功耗轻松就会到达100W以上,并且存在噪音大的问题。我们希望能够通过比较便捷简易的方法将硬盘接入到本地局域网当中,同时希望我们的宿主机拥有较低的功耗,以及当磁盘长时间没有访问请求时,可以将硬盘停转以节约能源和增长硬盘寿命。而我们采用USB转SATA+外接供电的方法。连接香橙派AI Pro可以很好的满足我们的这个需求。同时,由于此开发板带有8G或者16G的运行内存,以及支持NPU加速AI运算,我们可以利用其强大的AI功能,对硬盘当中的数据进行分析。例如:利用NPU加速文本识别OCR快速提取图片当中的文字便于搜索,使用语音识别功能对视频、录音中的语音进行转换文字方便搜索。而且这些AI操作都无需我们连接互联网,均可以在本地就完成。而常规使用普通CPU搭建的NAS主机是无法高效完成此任务的。所以基于此需求场景出发,我们开发香橙派AIPro搭建NAS挂载我们的数据硬盘,再尝试其中的AI功能。
默认的用户名是:HwHiAiUser,默认的密码是:Mind@123
1. 下载香橙派 AIpro系统镜像。
2. 写入SD卡。
3. 连接香橙派 AIpro至显示器、键盘、鼠标。
4. 开机,设置网络等。
sudo apt update
sudo apt install samba samba-common-bin
使用lsblk查看:
- lsblk
- NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
- sda 8:0 0 3.6T 0 disk
- ├─sda1 8:1 0 128M 0 part
- └─sda2 8:2 0 3.6T 0 part
- mmcblk1 179:0 0 29.7G 0 disk
- ├─mmcblk1p1 179:1 0 1M 0 part
- ├─mmcblk1p2 179:2 0 29.4G 0 part /
- └─mmcblk1p3 179:3 0 50M 0 part /exchange
我们的数据在sda2分区,我们挂载sda2分区:
对于NTFS分区,我们需要工具ntfs-3g才可以进行挂载。默认情况下,官方提供的镜像里面已经安装好了。如果没有的话,可以通过这个命令安装:
sudo apt update && sudo apt install ntfs-3g
创建挂载点:
mkdir /media/sda2
挂载硬盘到我们的挂载点:
sudo mount /dev/sda2 /media/sda2
这样就可以在/media/sda2下面看到我们硬盘里面的文件了。
设置开机自动挂载:
编辑 /etc/fstab 文件,添加以下内容以确保在启动时自动挂载磁盘:
/dev/sda2 /media/sda2 ntfs-3g defaults 0 0
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup
sudo vim /etc/samba/smb.conf
在里面增加:
- [Share]
- path = /media/sda2
- writeable = yes
- browseable = yes
- create mask = 0777
- directory mask = 0777
- public = no
- valid users = mysmb
sudo adduser mysmb
sudo smbpasswd -a mysmb
要输入密码,将用于访问Samba共享。
sudo systemctl restart smbd
sudo systemctl status smbd
输入刚才设置的账号和密码。即可进入访问到文件。
千兆网络下,两个机械硬盘互拷速度尚可。
观察cpu和内存占用,尚可。用香橙派 AIpro作为NAS的待机功耗低,适合部署使用
ssh连接进去之后,切换到~/samples/notebooks,执行:bash start_notebook.sh
在这里可以看到带有token的启动连接,将这个复制到香橙派AIPro的浏览器中,即可进入功能界面。
内容还挺多的
打开之后发现里面的样例都可以直接运行起来。好评。
可以使用npu-smi info查看npu的使用情况。
写一个小脚本,提取一下npu-smi info的输出信息:
- import subprocess
- import json
- import time
-
- def parse_npu_smi_output(output):
- lines = output.split('\n')
- data = {}
- data_line_begin = -1
- for i, line in enumerate(lines):
- if ('NPU' in line and 'Name' in line) or ('Chip' in line and 'Device' in line):
- keys = lines[i].split(' ')
- for key in keys:
- key = key.replace("|", "").strip()
- if len(key) > 0:
- data[key] = -1
- if ('Chip' in line and 'Device' in line):
- data_line_begin = i + 2
- break
- data_lines = lines[data_line_begin:data_line_begin+2]
- keys_list = list(data.keys())
- value_index = 0
- for line in data_lines:
- values = line.replace("|", "").strip().split(" ")
- # print(values)
- for value in values:
- value = value.strip()
- if len(value) == 0:
- continue
- data[keys_list[value_index]] = value
- value_index += 1
-
-
- print(data)
- return data
-
- def npu_smi_to_json():
- while True:
- try:
- result = subprocess.run(['npu-smi', 'info'], stdout=subprocess.PIPE)
- output = result.stdout.decode('utf-8')
- data = parse_npu_smi_output(output)
- json_data = json.dumps(data, indent=4)
- except Exception as e:
- print(f"Error: {e}")
- time.sleep(0.1)
-
- if __name__ == "__main__":
- npu_smi_to_json()
-
可以获取到aicore的占用率情况
跑不满。
CPU也没跑满。看来这块板子的性能挺优秀啊。
几秒钟就能搞定,想到了我又好多截图需要OCR,hhh:
也是非常快。
310ms
0.1ms都压不住看来,跑的都很快啊。
速度也非常快。
这里npu没有记录到使用,不知为何。尝试增加以下获取npu信息频率
改成0.001s(但是并不能确定实际sleep了几秒钟,具体就是时间片切换之类的各种问题了,不深入讨论了) 还是没有。不知道什么情况。但是识别过程也还是很快的。
对语音识别这块比较感兴趣。正好手上还有一个SU-03T语音芯片,可以纯离线进行语音唤醒,语音控制。但是好像不能限定唤醒人是谁。这次时间有一点匆忙,加上其他事情比较多,之后打算弄一个带隐私保护的小爱同学。因为担心智能音箱监听声音,我们可以把手机放到保密盒子中,因为手机便于移动,但是音响一般个头比较大,还有电源线,不方便移动。我们希望能够在不破坏音响本体的前提下,在他的麦克风上贴近蜂鸣器或者喇叭,播放人耳不敏感的噪声(最好降噪算法还不容易去除的),以避免隐私泄露。然后添加自己安全的,纯离线的语音唤醒,当收到自己指定的语音唤醒指令时,关闭噪声,再叫小爱同学唤醒。这样可以保护隐私免受监听。这个理论也不难,主要是可能音响上面有多个麦克风,要都覆盖全保证声音遮挡还需要有声学基础。之前在网上看到有国外的人做过类似的项目,有空自己也复现一下。
这个板子也就比指甲盖大一小圈,带一个咪头麦克风,距离5m开外正常普通说话声音都可以正常唤醒。
文章最后转载一下香橙派AIPro的接口图,备用:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。