获得一个生日礼物 raspberry pi 已将近一年, 然而因为它只有四个核所以被嫌弃地闲置了很久. 近期因为上了嵌入式的课, 所以又开始了一轮折腾. 把一些有趣的事记录一下.

网络连接配置

老师说让我们先插上显示器配wifi, 之前我也是这么干的, 于是照做了.

然后想拿回家用, 家里没显示器, wifi 密码输入错误, 失联 ovo

后来想起直接给有线网口配个静态ip 就完事了. 和电脑直接对插就能访问 ovo.

延迟测试

发了一个示波器很好玩, 然而只有 windows 的 pc 端驱动差评.

GPIO 管脚控制居然是 python, 严重怀疑效率.

实验本身倒是很简单. 接下来是给 kernel 打实时性补丁. (中断响应优先级? 时间步大小? 感觉 很有趣)

视频流

网上看到一个例子是把 raspivid 的输出用 nc 接起来到 host 上用 mplayer / vlc 播放. 非常有趣就试了一下. cvlc 转发延迟略高. 直接 mplayer 放 h264 格式的视频非常流畅.

Modius NN 计算棒

去 intel 上找到了 openvino 作为 myriad 计算棒的驱动.

openvino 看起来是提供了一个特别版本的 opencv 来支持各种计算. 暂时没有找到别的把这个棒棒用起来的方式. (比如搞个 lapack 跑个 hpl?)

opencv 之前接触不多. (唯一一次是 oop 课然后我觉得 cv 太重了给换成 libpng了) 发现它以 xml + bin 的方式支持各种 nn. (tf, caffee, onnx, etc.) 非常神奇. 然后还有提供一个 optimizer 大概是一个格式转换 + 迷之性能优化的工具. 非常有趣.

openvino 自带一个 mobile net 做人脸检测 (2d bbox) 的模型, 于是跑了一下, 发现精度非常好.

人脸识别的视频流

想把以上两者结合起来作为练手. 使用 pytho + opencv 输出带框视频流到 tcp 在本机播放.

一个坑在于 opencv 自带的 videowriter 必需用正常的文件, 没法 pipe. 于是想到把 rawvideo 格式直接 pipe 进 ffmpeg 转 h264. 然后问题来了, ffmpeg 吃的是 cpu, 在辣鸡 arm 上吞吐量非常低. (vid 帧率 30, 接进 ffmpeg 就只有 10 不到了) 如果不转的话会巨卡, 因为是用 wifi 把 pi 和 host 连起来的.

于是 只好 给 pi 和 host 中间插了根网线 ovo 然后直接把 rawvideo 拿回来.

另外其实识别也不快, 大概 6fps. 所以传 raw 带宽也就 70mbps 打住了. (不然可能得给 pi 和 host 插 infiniband?)

想法零: 之后大作业的输出视频用远程推流的方式推到 host 上.

猜想一: 这个棒棒的 usb 接口限制了带宽.

想法二: 把棒棒算出来的框强行合进 raspivid 的输出.

内核裁剪

坑. 还没开搞.

功耗管理

好像和超算比赛有些相关. 还没开搞.