大三上学期创新实践课程作业:
硬件: 华为200dk(机器学习的套件 类似于一个主机 专门用来处理一些机器学习的任务)
软件: 对已有的样例仓中Python样例仓的拓展一个人脸注册的功能(单人)
硬件环境搭建
推荐使用合设环境 方便简单还迅速 不需要在个人电脑或虚拟机上搭建复杂的环境 直接远程登录 在200dk上进行开发
1. 下载合设环境镜像
在昇腾论坛下载合设环境镜像:Atlas200dk合设环境搭建–用镜像恢复的方式。
直接下最新的 样例跑起来更简单 功能更强大 bug更少
2. 合设环境搭建–用镜像恢复的方式(在Windows系统内执行)
合设环境搭建–用镜像恢复的方式可以在Windows/macOS/Linux系统内执行,下载相应版本的Etcher工具快速烧录镜像至您的SD卡,本实验以windows系统为例。
- 步骤 1 下载Etcher工具
Etcher工具下载地址:https://www.balena.io/etcher/
- 步骤 2 解压镜像,得到img文件
- 步骤 3 准备64G的SD卡,以及读卡器
将64G SD卡插入读卡器,接入Windows电脑。
- 步骤 4 烧录SD卡
打开Etcher工具,选择img文件和SD卡,点击Flash,注意:Flash期间会弹出是否格式化的窗口,点击取消关闭窗口,直到Flash完成。
能不能烧录成功 看脸 有的电脑行 有的电脑不行 具体原因不太清楚
官网的教程使用脚本烧录 但烧录的貌似是运行环境… 需要配置的环境比较多 不推荐新手使用
3. SD卡扩区
简单说一下
将SD插入电脑 可以使用Ubuntu下的gparted对SD未分配的SD空间进行扩区。这就跟虚拟机磁盘满了 除了将在vmware下给它分配更多的空间以外 还需要以系统镜像为启动盘 登录系统 手动用gparted对扩展的内存进行分配扩展 关于扩展虚拟机的空间 详见google 关于对200dk的sd卡扩区 详见其提供的合设环境教程 这里草草说一下
4. 修改Ubuntu服务器的USB虚拟网卡IP地址
Atlas 200 DK开发者板与Ubuntu服务器通过USB端口直连场景下,由于Atlas 200 DK的USB网卡的默认IP地址为192.168.1.2,所以需要修改Ubuntu服务器的USB虚拟网卡的IP地址为192.168.1.x(x取值范围为01,3254),使Atlas 200 DK与Ubuntu服务器可以通信。
- 切换为root
- 更改/创建: /etc/netplan/01-netcfg.yaml 如下
network:
version: 2
renderer: NetworkManager
ethernets:
enp0s12u2: #配置的网卡名称,使用ifconfig -a查看得到
dhcp4: no #dhcp4关闭
addresses: [192.168.1.223/8] #设置本机IP及掩码
gateway4: 255.255.255.0 #设置网关
nameservers:
addresses: [114.114.114.114]
- 更新配置 ->输入命令: netplan apply
5. 访问开发板 启用dhcp(接入路由器自动分配ip)
- vi /etc/netplan/01-netcfg.yaml 允许eth0启用dhcp自动分配ip地址
network:
version: 2
# renderer: NetworkManager
renderer: networkd
ethernets:
eth0:
dhcp4: yes
usb0:
dhcp4: no
addresses: [192.168.1.2/24]
gateway4: 192.168.0.1
6. 在主机的vscode下载remote-SSH插件 配置200dk的ip和公私钥以免密登录
- 先启用密码的方式登录200dk(首选项->设置->插件设置)
- 配置
Host Ascend
HostName 192.168.1.2
User HwHiAiUser
- 将本机的id_rsa.pub里的内容放在200dk里 ~/.ssh/authorized_keys 文件下
- 重启200dk sshd服务 -> systemctl restart sshd.service
- 更改主机vscode配置 通过公私钥免密登录
Host Ascend
HostName 192.168.1.2
User HwHiAiUser
IdentityFile ~/.ssh/id_rsa
关于生成windows下的公私钥以及一些细节 请自行google
人脸注册(单人功能)的实现
本文忽略样例启动的流程环节 详见代码仓里的对应样例的readme
1. main.py
import sys
sys.path.append("../../../../common")
sys.path.append("../")
project_path = sys.path[0] + "/../"
sys.path.append(project_path)
import datetime
import time
from sklearn.preprocessing import normalize
from scipy.linalg import norm
import numpy as np
np.seterr(divide='ignore',invalid='ignore')
from atlas_utils.camera import Camera
import atlas_utils.presenteragent.presenter_channel as presenter_channel
from atlas_utils.acl_model import Model
from atlas_utils.acl_resource import AclResource
from vgg_ssd import VggSsd
MODEL_PATH = project_path + "/model/face_detection.om"
MODEL_WIDTH = 304
MODEL_HEIGHT = 300
FACE_DETEC_CONF= project_path + "/scripts/face_detection.conf"
CAMERA_FRAME_WIDTH