情景记录器

角蜂鸟情景记录器


本章将为您介绍如何使用角蜂鸟Python开发工具包,来实现一个实用性非常强的情景记录器。

介绍

Idea

角蜂鸟情景记录器可将希望分类的图像实时储存在不同的“存档”下并立即生成一个分类模型,之后便可辨识它们对应的场景。比如说在门打开的时候将图像录制进[存档1],关闭的时候录制进[存档2],生成模型之后便可辨认门是否开启。将不同的手势录制进不同的存档下就变成了一个简单的手势识别。

使用说明

执行Python程序、初始化角蜂鸟之后,对准需要录制的第一个目标,按1-5之中的一个数字(对应存档编号):

比如说按1后保持7帧,终端将显示:

|        Record to bin: 1        |
|      [7]-[0]-[0]-[0]-[0]       |

接着对准第二个目标按2:

|        Record to bin: 2        |
|      [7]-[8]-[0]-[0]-[0]       |

这样记录器中储存两个目标就可以开始生成模型了。

‘r’ 将筛选去除每个存档中的冗余图像特征,并生成模型。

| .........Compressing.......... |
|      [2]-[2]-[0]-[0]-[0]       |
| ------Compress finished------- |

进入识别状态并开始实时显示5个不同类别的置信度。下例中的意思为第一个类别的可能性为74%,第二个为26%。第二个栏里简单的将置信度可视化,竖条越多说明当前场景越可能属于该存档。

| ---------Running ANN---------- |
*           [1]: 0.74            *
*           [2]: 0.26            *
*           [3]: 0.00            *
*           [4]: 0.00            *
*           [5]: 0.00            *
| --------Probabilities--------- |
|            |||||||             |
|               ||               |
|                                |
|                                |
|                                |

’s’ 将存档录入至 /misc/record.dat 文件中。按 ‘l’ 可读当。如需更改文件名或保存多个存档,请做如下修改:

prob = net.record(result, key, saveFilename='/Myfolder/NewFile.dat')

‘p’ 将重置删除所有存档。

修改存档个数

如需更改存档个数,可添加参数 numBin 如下:

prob = net.record(result, key, numBin = 9)

如需读档,建议不设置numBin。如设置与原存档数量不同的numBin会报错。

注意事项

信噪比

因为记录器会将整个图片量化为特征向量并储存,意味着情景中的关键信息占的图像比重越低,效果会越差。

负样本

识别中往往存在“无信息”的状态,这时需要加入额外的负样本来辨识。比如说识别两个不同的人分别为1和2,当两个人都不存在于场景时,分类器会强行赋予1和2之间的标签,所以需要将背景或是希望避免的干扰信息记录至一个额外的存档中。

  • 本教程基于Ubuntu 16.04系统

路径和文件

  • 情景记录器Python:SungemSDK-Python/examples/apps/SceneRecorder/SceneRecorder.py
  • 模型文件:SungemSDK-Python/examples/graphs/graph_g - GoogleNet
  • 模型文件(备选):SungemSDK-Python/examples/graphs/graph_fn - FaceNet

情景记录器 Scene Recorder

SceneRecorder目录下执行以下命令来启动 情景记录器 范例。

cd SungemSDK-Python/examples/apps/SceneRecorder
python3 SceneRecorder.py

初始化

WEBCAM = False
net = hs.SceneRecorder(zoom = True, verbose = 2)

两种模式(WEBCAM):

  • True时使用外接USB摄像头
  • False时使用角蜂鸟内置树莓派摄像头

在初始化角蜂鸟时可设置的参数:

  • zoom: 如果为True,则输出图像为640*360,否则为1920*1080 *
  • verbose: 0时不输出任何信息、1时输出设备和其他关键信息、2时输出全部信息。

情景识别

图像与其特征向量

result = net.run(img)

使用角蜂鸟模式时(WEBCAM为False),无需输入图像,img为None。在使用外置摄像头模式时需输入图像。 result中返回图像与其特征向量(GoogleNet时为1024维度向量),分别放置在result[0]与result[1]中

录入与取得分类结果

key = cv2.waitKey(5)
prob = net.record(result, key)

通过OpenCV的waitKey将获得输入的键盘键位,目前对应的键位分别为:

  • 1-5 将当前帧储存至对应的数字存档中
  • r 清理存档中图像,并生成分类模型
  • 录制时输出为None

如其他键位或没有按键,将输出识别 SoftMax 置信度。