本章将为您介绍如何使用角蜂鸟Python开发工具包,来实现一个实用性非常强的情景记录器。
角蜂鸟情景记录器可将希望分类的图像实时储存在不同的“存档”下并立即生成一个分类模型,之后便可辨识它们对应的场景。比如说在门打开的时候将图像录制进[存档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之间的标签,所以需要将背景或是希望避免的干扰信息记录至一个额外的存档中。
在SceneRecorder目录下执行以下命令来启动 情景记录器 范例。
cd SungemSDK-Python/examples/apps/SceneRecorder
python3 SceneRecorder.py
WEBCAM = False
net = hs.SceneRecorder(zoom = True, verbose = 2)
两种模式(WEBCAM):
在初始化角蜂鸟时可设置的参数:
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将获得输入的键盘键位,目前对应的键位分别为:
如其他键位或没有按键,将输出识别 SoftMax 置信度。