traitlets.dlink
时间:2022-03-16 16:24:01 | 来源:行业动态
时间:2022-03-16 16:24:01 来源:行业动态
((camera, 'value'), (image, 'value'), transform=bgr8_to_jpeg)
执行这个阶段代码之后,下面应该会出现如下图左方的显示框,试着在镜头前晃动手,看看画面内容十分产生变化?显示框右边与下方分别出现 blocked 与 speed 两个滑块,就是前面代码所建立的小工具。
由于后面会使用到这个 speed 滑块对Jetbot进行速度调整,并且我们也希望能实时观察到摄像头的画面,因此建议用鼠标在画面上点击右键,点选上图右方 Create New View for Output 去创建另一个独立输出框,然后进行位置调整如下图,这样就方便后续的操作。
- 将控制元件与网络模型、机电控制进行结合:
这是整个应用中最核心的整合与计算过程,虽然代码量不多,但信息量却非常大,现在将这部分切割成几个小块来进行说明。
- 获取图像进行识别:
| def update(change):
x = change['new']
x = preprocess(x)
y = model(x)
。。。
update({'new': camera.value})
|
- 这里首先定义 update(change),在最下方用update()进行调用。
- 在 update({'new': camera.value}) 里使用{key:value}对的方式,将camera.value图像内容透过change['new']传给x变量;
- 将x变量传入进行前面定义的preprocess()格式转换与正规化处理;
- y是model(x)推理计算所得出来blocked与free两个类的个别置信度,例如为[-0.9425, 0.4077];
- 将置信度转换成[0,1]范围的值:
| y = F.softmax(y, dim=1)
prob_blocked = float(y.flatten()[0])
blocked_slider.value = prob_blocked
|
- 这里调用torch.nn.functional.softmax函数,