ルーチンの説明 25-Machine-Learning->nn_cifar10_search_just_center ニューラル ネットワーク地域センター識別
(注: このルーチンはファームウェア バージョン 3.6.5 以降では削除され、より良い結果が得られる TensorFlow Lite に置き換えられます。ビデオ チュートリアル 42 - ニューラル ネットワーク ターゲットの検出を参照してください: https://singtown.com/learn/50918/ )
ビデオ チュートリアル 22 - cifar10 ニューラル ネットワーク: https://singtown.com/learn/50045/
このルーチンを実行する前に、OpenMV IDE -> ツール -> マシン ビジョン -> CNN ネットワーク ライブラリで、対応するニューラル ネットワーク ファイルを OpenMV SD メモリ カードに保存してください。
# cifar10在图像区域中心识别例程
#
# CIFAR是一个卷积网络,旨在将其视野分类为几种不同的对象类型,并处理RGB视频数据。
#
# 在此示例中,我们将LeNet检测器窗口滑动到图像上,并获取可能存在对象的激活列表。 请注意,使用带有滑动窗口的CNN非常昂贵,因此对于穷举搜索而言,不要期望CNN是实时的。
import sensor, image, time, os, nn
sensor.reset() # 复位并初始化传感器。
sensor.set_pixformat(sensor.RGB565) # Set pixel format to RGB565 (or GRAYSCALE)
#设置图像色彩格式,有RGB565色彩图和GRAYSCALE灰度图两种
sensor.set_framesize(sensor.QVGA) # 将图像大小设置为QVGA (320x240)
sensor.set_windowing((128, 128)) # 设置128 x128窗口。
sensor.skip_frames(time=750) # 不要让自动增益运行太长时间。
sensor.set_auto_gain(False) # 关掉自动增益。
sensor.set_auto_exposure(False) # 关掉自动曝光。
# 加载cifar10网络。OpenMV3 M7上使用此网络可能会超出内存。
#net = nn.load('/cifar10.network')
# 更快,更小,更准确。建议OpenMV3 M7上使用此网络。
net = nn.load('/cifar10_fast.network')
labels = ['airplane', 'automobile', 'bird', 'cat', 'deer', 'dog', 'frog', 'horse', 'ship', 'truck']
clock = time.clock()
while(True):
clock.tick()
img = sensor.snapshot()
# net.search()将在图像中搜索网络中的roi(如果未指定roi,则搜索整个图像)。
# 如果其中一个分类器输出大于阈值,则在每个位置查看图像,位置和标签将存储在对象列表中并返回。
# 在每个比例下,使用x_overlap(0-1)和y_overlap(0-1)作为指导,在ROI中移动检测窗口。
# 如果将overlap设置为0.5,则每个检测窗口将与前一个检测窗口重叠50%。
# 请注意,计算工作重叠越多,负载越多。
# 最后,对于在x/y维度上滑动网络之后的多尺度匹配,检测窗口将通过scale_mul(0-1)缩小到min_scale(0-1)。
# 例如,如果scale_mul为0.5,则检测窗口将缩小50%。
# 请注意,在较低比例下,如果x_overlap和y_overlap较小,则搜索区域会更多...
# contrast_threshold会跳过平坦区域。
# 设置x_overlap = -1会强制窗口始终保持在x方向的ROI中心。
# 如果y_overlap不为-1,则该方法将搜索所有垂直位置。
# 设置y_overlap = -1会强制窗口始终在y方向的ROI中居中。
# 如果x_overlap不是-1,则该方法将在所有水平位置搜索。
for obj in net.search(img, threshold=0.6, min_scale=0.4, scale_mul=0.8, \
x_overlap=-1, y_overlap=-1, contrast_threshold=0.5):
print("Detected %s - Confidence %f%%" % (labels[obj.index()], obj.value()))
img.draw_rectangle(obj.rect(), color=(255, 0, 0))
print(clock.fps())