关于前端:基于计算机视觉的棋盘图像识别

60次阅读

共计 1883 个字符,预计需要花费 5 分钟才能阅读完成。

咱们利用计算机视觉技术和卷积神经网络(CNN)为这个我的项目创立分类算法,并确定棋子在棋盘上的地位。最终的应用程序会保留整个图像并可视化的体现进去,同时输入棋盘的 2D 图像以查看后果。01. 数据

咱们对该项目标数据集有很高的要求,因为它最终会影响咱们的试验后果。咱们在网上能找到的国际象棋数据集是应用不同的国际象棋集、不同的摄影机拍摄失去的,这导致咱们创立了本人的数据集。我应用国际象棋和摄像机(GoPro Hero6 Black 以“第一人称视角”角度)生成了自定义数据集,这使我的模型更加准确。该数据集蕴含 2406 张图像,分为 13 类远程桌面(请参阅下文)。总结:这破费了咱们很多工夫,然而这使得训练图像尽可能地靠近在应用程序中应用时所看到的图像。

为了构建该数据集,我首先创立了 capture_data.py,当单击 S 键时,该视频从视频流中获取一帧并将其保留。这个程序使我可能无缝地更改棋盘上的棋子并一遍又一遍地捕捉棋盘的图像,直到我建设了大量不同的棋盘配置为止。接下来,我创立了 create_data.py,以应用下一部分中探讨的检测技术将其裁剪为独自小块。最初,我通过将裁剪后的图像分成带标签的文件夹来对它们进行分类。

  1. 棋盘检测

对于棋盘检测,我想做的事件比应用 OpenCV 函数 findChessboardCorners 简单的多,但又不像 CNN 那样高级。应用低级和中级计算机视觉技术来查找棋盘的特色,而后将这些特色转换为外边界和 64 个独立正方形的坐标。该过程以 Canny 边缘检测和 Hough 变换生成的相交水平线、垂直线的交点为核心。档次聚类用于按间隔对交叉点进行分组,并对各组取平均值以创立最终坐标(请参见下文)。

  1. 棋盘分类

我的项目伊始,咱们想应用 Keras / TensorFlow 创立 CNN 模型并对棋子进行分类。然而,在创立数据集之后,仅思考 CNN 的大小,单靠 CNN 就无奈取得想要的后果。为了克服这一阻碍,我利用了 ImageDataGenerator 和 transfer learning,它减少了我的数据并应用了其余预训练的模型作为根底。

创立 CNN 模型

为了应用 GPU,我在云中创立并训练了 CNN 模型,从而大大减少了训练工夫。疾速提醒:Google Colab 是应用 GPU 疾速入门的简便办法。为了进步数据的有效性,我应用了 ImageDataGenerator 来扩大原始图像并将模型裸露给不同版本的数据。ImageDataGenerator 函数针对每个期间随机旋转,从新缩放和翻转(程度)训练数据,从实质上创立了更多数据。只管还有更多的转换选项,但这些转换选项对该我的项目最无效。

from keras.preprocessing.image import ImageDataGeneratordatagen = ImageDataGenerator(rotation_range=5,        rescale=1./255,        horizontal_flip=True,        fill_mode=’nearest’)test_datagen = ImageDataGenerator(rescale=1./255)train_gen = datagen.flow_from_directory(folder + ‘/train’,    target_size = image_size,    batch_size = batch_size,    class_mode = ‘categorical’,    color_mode = ‘rgb’,    shuffle=True)test_gen = test_datagen.flow_from_directory(folder + ‘/test’,    target_size = image_size,    batch_size = batch_size,    class_mode = ‘categorical’,    color_mode = ‘rgb’,    shuffle=False)

咱们没有从头开始训练模型,而是通过利用事后训练的模型并增加了应用我的自定义数据集训练的顶层模型来实现转移学习。我遵循了典型的转移学习工作流程:

1. 从先前训练的模型(VGG16)中获取图层。

from keras.applications.vgg16 import VGG16model = VGG16(weights=’imagenet’)model.summary()

2. 解冻他们,以防止毁坏他们在训练回合中蕴含的任何信息。

3. 在解冻层的顶部增加了新的可训练层。

正文完
 0