因为我像打不完的地老鼠一样不停的散布贬低甲方管理能力的负能量,甲方某人找我谈话的时候想拿华为的项目质量做对比。作为一个技术人员的我,回答说:“没接触过华为的项目,我不能做评价“。

折腾了Atlas 200DK两星期后,现在我可以说:“至少就Atlas 200DK来说,当前的项目质量是不能让人满意的“

一步一坑

编译重写的face-detection

一步一坑

Failed to import te.platform.log_util.

按照"Atlas 200 DK 开发者套件(20.1)"文档的描述一步一步的去配置开发机的话,在atc命令行转换模型的时候会发生报错

ModuleNotFoundError: No module named '_struct'
ATC run failed, Please check the detail log, Try 'atc --help' for more information
E40000: Failed to import te.platform.log_util.

此时把/usr/local/python3.7.5/bin加在PATH的最前面就行了

连不上的摄像头

开发板上电启动完毕后,要按一下板上的复位键,否则摄像头不能被认出

盖不上的上盖

开发板的盖子就不要盖了,敞开着让它吃灰吧。开发板有四个指示灯,上电时依次点亮表明不同的状态,复位时两个指示灯表示重启状态。上盖一旦盖上,就很难看清是哪个灯在闪,所以盖子就是个摆设。。。其实不是,它有非常重要的用途,见下一条

颠倒的摄像头

观察一下树莓派Zero的摄像头和排线,非常自然。淘宝上买的大路货支架工作的挺好


再看一下200DK的摄像头,一个夜视,一个普通,两个支架都得倒着才行。既然文档里用的摄像头就是树莓派兼容版,难道华为的人们就没有发现淘宝上销量最大的摄像头支架非得倒着才能用吗?

这就是上面提到的上盖的用处,倒过来的摄像头支架正好靠在上面

风扇永不眠

开发板的风扇一旦上电就永不停歇,噪音奇大,但据论坛上说这已经是改进过的了

该死的ada

如果使用Mind Studio远程部署的话,每次开发板重启后都要手工kill/var/ada进程,然后在重启此进程,否则部署会统统失败

编程实践不友好的开发板配置

如果编译时带sanitizer的话,开发板上运行会报

==4489==ERROR: AddressSanitizer failed to allocate 0x200001000 (8589938688) bytes at address ffffff000 (errno: 12)
==4489==ReserveShadowMemoryRange failed while trying to map 0x200001000 bytes. Perhaps you're using ulimit -v
Aborted

这是因为制卡脚本会把开发板上的/proc/sys/vm/overcommit_memory的值设置为2,这样会内存不够。在root下,echo 0 > /proc/sys/vm/overcommit_memory就好了

错误的网关值

制卡时可以指定两个网卡的地址,但是脚本不会更改对应的网关,改了和默认不同的网段后,你大约依旧连不上

不能带参数执行

如果用Mind Studio的话,当程序带参数运行时会报错。因为MindStudio-ubuntu/tools/run.py会生成在开发板上运行的run.sh,然后run.sh中参数生成的地方错了

if [ ! -z "$result" ];thenecho "[INFO]  pmupload exists."pmupload $currentdir/workspace_mind_studio_objectdetection_cvwithaipp
elseexport SLOG_PRINT_TO_STDOUT=0$currentdir/workspace_mind_studio_objectdetection_cvwithaipp
fi ARGS_AT_WRONG_PLACE #<<<<<<<<<<<<<<<

修改MindStudio-ubuntu/tools/run.py就行了,如果你能忍受Mind Studio的话

opencv打不开视频文件

开发板上安装libv4l-dev然后重新编译opencv就行了,好像没有文档提到这一点。而且官方安装opencv的文档中python路径之类的也和20.1的200DK文档对不上

接显示器是不可能的

我几十块钱的树莓派Zero都可以接显示器,你几千块钱的200DK没有视频输出?现在有什么开发板不带视频输出吗?!曾经ssh一登陆就报input/output error然后闪退,弄得我完全没有办法,只能重新制卡。

例程完全谈不上代码质量

官方的face detection中,camera.cpp,第122行

bool Camera::IsOpened(int channelID){if(1 < channelID)return false;return isOpened_[channelID]; // uninitialized before reading
}

当时我在改完全不相干的代码,然后发现运行时摄像头不打开了,然后发现这个bug,然后被gcc的undefined sanitizer确认

/home/HwHiAiUser/romote/src/camera.cpp:122:31:runtime error: load of value 170, which is not a valid value for type 'bool'

这说明这些代码完全没有经过工具检查,也就是说没有任何值得一提的CI/CD

我以为这是C++接口

acl的API里到处是Create/Destroy, Load/Unload之类的调用,对不起,我以为这是C++接口呢。C++相对C的最重大的改进,就是RAII,我们不需要关心资源释放问题,因为语言本身会帮我们处理。看到ACL的API,我不由得怀疑,这究竟是道德的沦丧还是人性的扭曲,不对,到底是想赶一个过时的时髦,还是压根不知道C++应该怎么写?这堆C样子的C++接口给我们增加了多少开发成本,究竟这帮家伙有没有概念?

另外,如果用到摄像头的话,链接时会报libmedia_mini.so中的函数找不到,你会非常奇怪路径什么的都是正确的。其实,你只要做如下操作就好了

extern "C" {#include "peripheral_api.h"
}

任何文档都没告诉你Media库其实是C链接的,而不是C++

重写的face-detection

官方的face detection,相同的功能,重写了一遍,可以进一步重构,但是我实在是丧失兴趣了

https://github.com/mo-xiaoming/atlas200dk-face-detection-cpp

编译

我是用了conan,配置的方法参见conan.io官方文档。2021年的C++项目应该使用包管理器,而不是手工折腾第三方库。

很遗憾opencv的一个依赖目前在arm下编译有问题,所以opencv只能依赖手工编译的方式。不过这个项目也不用opencv。

当然如果你觉得时间太多的话,也可以手工编译spdlog和fmt

记得更改src/CMakeLists.txt中的include和lib路径

cd build
conan install .. --build missing
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_C_COMPILER=/usr/bin/aarch64-linux-gnu-gcc-10 -DCMAKE_CXX_COMPILER=/usr/bin/aarch64-linux-gnu-g++-10
make -j

⚠️ 我是用了gcc 10,因为我想用最新的编译器,因为它能提供更高的优化,更简练的代码,更…,这是2021年,没有理由卡在老编译器版本上。如果有人告诉你需要担心“不兼容的问题“的话,你就有相当的理由怀疑它的产品质量。

另外CMakeLists.txt里用了C++20的标准,如果你不想安装新编译器的话,需要把它改成17以下。并且有些地方会编译不过,例如main.cpp里,gcc7不支持std::from_chars,你必须改成std::strtol之类的。至于为什么要用更新的std::from_chars?因为它的性能更好,如前所述。

再一次的说,现在是2021年了,不要写C风格的C++了,除非你知道在做什么;要用包管理器,除非你在公司有“严谨”的流程;要用新编译器,除非你的项目有“历史的沉淀”。

运行

运行前需要在另一台机器上打开presenter,./script/run_presenter_server.sh。当然需要配置好./data/param.conf,一如原始文档所示

cd ../out
./main 0

./main后面跟摄像头的channel,默认是0

CLion

BTW,我用的CLion做IDE,远程ssh的方式直接开发。如果上面的一堆"如果使用Mind Studio的话"还没有把你劝退的话,理由还有一个:在2021年,作为C++的IDE,Mind Studio弱爆了。而且我也不想升级/编译一次,得捣鼓两台机器的so/h/a之类的东西

华为Atlas 200DK,几年后再见吧?相关推荐

  1. 【华为Atlas人工智能计算平台概述】

    文章目录 AI芯片分类 AI芯片的现状 昇腾芯片硬件架构 昇腾处理器逻辑架构 昇腾AI计算引擎---达芬奇架构 达芬奇架构(AI Core)- 计算单元 达芬奇架构(AI Core)- 存储系统 昇腾 ...

  2. 华为Atlas人工智能计算平台概述

    人工智能的四大要素:数据.算力.算法.场景 AI芯片:也被称为AI加速器,即专门用于处理人工智能应用中的大量计算任务的功能模块. AI芯片分类 从技术架构来看,大致分为四个类型:CPU.GPU.ASI ...

  3. Linux虚拟机连接USB网络设备(以Atlas 200DK为例)无法上网、无法检测到网卡等故障排除

    一直用的好好的,不知道今天抽什么风了,今天我在使用Ubuntu虚拟机连接华为的Atlas 200DK开发板的时候,遇到了贼恶心的问题:能检测到网卡但是不能分配IP地址.这个问题的恶心程度远远超出了我的 ...

  4. 【昇腾AI系列】Atlas 200DK环境适配

    关于Atlas 200DK Atlas 200DK是华为昇腾推出的一款基于昇腾310芯片的NPU处理器.该芯片主要用于AI推理计算. Atlas是大力神的意思,难道这个寓意是"大力出奇迹?& ...

  5. 全国“最高”的视觉竞赛,华为Atlas打通遥感图像智能分析任督二脉

    晓查 发自 凹非寺  量子位 报道 | 公众号 QbitAI 地图是我们每天都离不开的手机应用,无论打车.外卖都离不开地图数据的支持. 地图数据又离不开遥感技术.通过飞机.无人机.卫星拍摄的大量照片应 ...

  6. 玩转Atlas 200DK(一)分设环境之开发环境准备

    打开昇腾官网 https://www.hiascend.com/software/cann/community ,会发现CANN的版本已经升级到了5.1.RC1.alpha005. 然而这不是玩转At ...

  7. 华为Atlas张迪煊:在最好的时代,做最强AI算力底座

    在张迪煊和他的团队心中,一直有一个"普惠AI"的理想,将AI带入千家万户,让智能无所不及. 作为华为Atlas数据中心业务的负责人,张迪煊和他的团队迎来了最好的时代--智能时代. ...

  8. 华为人工智能计算机平台,华为Atlas人工智能计算平台正式上市

    原标题:华为Atlas人工智能计算平台正式上市 2019年4月17日,华为宣布Atlas人工智能计算平台系列产品正式上市,开启了Atlas商用新篇章. 华为智能计算Atlas新品开售 Atlas人工智 ...

  9. 玩转Atlas 200DK(六)番外篇:寻找失去的网卡

    六.解决网卡获取不了IP的故障 张小白在玩转Atlas 200DK+CANN 5.0.4+MindStudio 3.0.4的过程中,自己的虚拟机有点不大稳定,突然意外关闭了,然后再启动就发现ifcon ...

最新文章

  1. SQL Server native client与sqlcmd单独安装
  2. 新JSON绑定库JSON-B发布公开预览版
  3. 构建DRM系统的重要基石——EME、CDM、AES、CENC和密钥
  4. c#2.0的新特性--泛型
  5. asp.net连oracle数据库,ASP.NET连接Oracle数据库的步骤详解(转)
  6. 选择排序 - python实现详解
  7. LAMP架构mariadb/apache的安装及基本使用
  8. Scala的所有符号运算符都意味着什么?
  9. 使用Blocs For Mac发布网站的方法
  10. mysql读写分离_SpringBoot+MyBatis+MySQL读写分离
  11. 数据线CE测试标准 准备资料
  12. CodeBlock:Process terminated with status1073741510
  13. Android平台集成华为AGC性能管理服务问题处理指南
  14. mysql数据库myd文件丢失怎么_mysql数据库的恢复(frm、Myd、MyI文件仍存在)
  15. 软著注销流程 软件著作权撤销 操作流程
  16. BLE中的Service(服务)和characteristic(特征值)
  17. 编辑器下运行exe或bat run exe or bat in editor
  18. java 渗透_渗透课程笔记
  19. Python编程语言好学吗? 零基础转行能学Python吗?
  20. 分享职场心得《14》

热门文章

  1. Android聊天软件的开发(四)--通讯录
  2. Delphi中捕获音频函数OnWaveIn的使用小记
  3. 学校计算机网络方案书,德特威勒学校智能化系统方案规划(一)
  4. 【JVM系列】读懂Java虚拟机(JVM)这一篇就够了!
  5. oracle ocr组成员替换,11gR2 OCRVOTE磁盘组替换
  6. 公司内外网访问路由设置
  7. decode函数的妙用
  8. 移动端 禁止/开启页面上下滑动
  9. Idea工具点滴积累
  10. 【Docker记录】docker安装mosquito