简介和背景
本文档介绍如何用香橙派 AIpro和硬盘制作个人NAS服务器。
在一般场景下,专用的NAS设备或者台式电脑,他们占用体积庞大,并且功耗轻松就会到达100W以上,并且存在噪音大的问题。我们希望能够通过比较便捷简易的方法将硬盘接入到本地局域网当中,同时希望我们的宿主机拥有较低的功耗,以及当磁盘长时间没有访问请求时,可以将硬盘停转以节约能源和增长硬盘寿命。而我们采用USB转SATA+外接供电的方法。连接香橙派AI Pro可以很好的满足我们的这个需求。同时,由于此开发板带有8G或者16G的运行内存,以及支持NPU加速AI运算,我们可以利用其强大的AI功能,对硬盘当中的数据进行分析。例如:利用NPU加速文本识别OCR快速提取图片当中的文字便于搜索,使用语音识别功能对视频、录音中的语音进行转换文字方便搜索。而且这些AI操作都无需我们连接互联网,均可以在本地就完成。而常规使用普通CPU搭建的NAS主机是无法高效完成此任务的。所以基于此需求场景出发,我们开发香橙派AIPro搭建NAS挂载我们的数据硬盘,再尝试其中的AI功能。
利用香橙派 AIpro制作个人NAS服务器
默认的用户名是:HwHiAiUser,默认的密码是:Mind@123
准备
- 香橙派 AIpro
- SATA硬盘(笔者选择的是HGST 4T的硬盘)
- USB-SATA适配器(用于连接硬盘,同时需要12V-1A的外接供电以带动机械硬盘)
- 电源适配器(12V-1A,用于驱动机械硬盘)
- microSD卡(写入香橙派系统)
安装系统
1. 下载香橙派 AIpro系统镜像。
2. 写入SD卡。
3. 连接香橙派 AIpro至显示器、键盘、鼠标。
4. 开机,设置网络等。
配置NAS
- 安装必要的软件包。
sudo apt update
sudo apt install samba samba-common-bin
- 插电、连接外置SATA硬盘
使用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
- 备份SMB配置文件
sudo cp /etc/samba/smb.conf /etc/samba/smb.conf.backup
- 编辑SMB配置
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
- 添加Samba用户
sudo adduser mysmb
- 然后,为Samba添加这个用户:
sudo smbpasswd -a mysmb
要输入密码,将用于访问Samba共享。
- 更改配置文件后,需要重启Samba服务以应用这些更改:
sudo systemctl restart smbd
- 验证安装
sudo systemctl status smbd
- 访问共享目录
输入刚才设置的账号和密码。即可进入访问到文件。
千兆网络下,两个机械硬盘互拷速度尚可。
观察cpu和内存占用,尚可。用香橙派 AIpro作为NAS的待机功耗低,适合部署使用
香橙派AIPro AI功能介绍
ssh连接进去之后,切换到~/samples/notebooks,执行:bash start_notebook.sh
在这里可以看到带有token的启动连接,将这个复制到香橙派AIPro的浏览器中,即可进入功能界面。
内容还挺多的
打开之后发现里面的样例都可以直接运行起来。好评。
YOLO v5识别视频中物体
可以使用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任务
几秒钟就能搞定,想到了我又好多截图需要OCR,hhh:
Resnet
也是非常快。
HDR增强
310ms
GAN
0.1ms都压不住看来,跑的都很快啊。
换背景
速度也非常快。
语音识别
这里npu没有记录到使用,不知为何。尝试增加以下获取npu信息频率
改成0.001s(但是并不能确定实际sleep了几秒钟,具体就是时间片切换之类的各种问题了,不深入讨论了) 还是没有。不知道什么情况。但是识别过程也还是很快的。
后续计划补充:
对语音识别这块比较感兴趣。正好手上还有一个SU-03T语音芯片,可以纯离线进行语音唤醒,语音控制。但是好像不能限定唤醒人是谁。这次时间有一点匆忙,加上其他事情比较多,之后打算弄一个带隐私保护的小爱同学。因为担心智能音箱监听声音,我们可以把手机放到保密盒子中,因为手机便于移动,但是音响一般个头比较大,还有电源线,不方便移动。我们希望能够在不破坏音响本体的前提下,在他的麦克风上贴近蜂鸣器或者喇叭,播放人耳不敏感的噪声(最好降噪算法还不容易去除的),以避免隐私泄露。然后添加自己安全的,纯离线的语音唤醒,当收到自己指定的语音唤醒指令时,关闭噪声,再叫小爱同学唤醒。这样可以保护隐私免受监听。这个理论也不难,主要是可能音响上面有多个麦克风,要都覆盖全保证声音遮挡还需要有声学基础。之前在网上看到有国外的人做过类似的项目,有空自己也复现一下。
这个板子也就比指甲盖大一小圈,带一个咪头麦克风,距离5m开外正常普通说话声音都可以正常唤醒。
附录
文章最后转载一下香橙派AIPro的接口图,备用: