识别图像上的内容

时间:2016-11-30 20:03:50

标签: python opencv computer-vision neural-network

我正在用神经网络做一个小项目。我已经阅读了有关数字识别的内容,使用MNIST数据集并思考是否可以制作相同的数据集,但我们每天都会看到常规对象。 所以这里的算法(如果我们可以这样说): 所有这些都是通过opencv库为python完成的 1)从图像中获取轮廓。这不是字面上的轮廓,但看起来如此。 我已用此代码完成此操作:

def findContour(self):
    gray = cv2.cvtColor(self.image, cv2.COLOR_BGR2GRAY)
    gray = cv2.bilateralFilter(gray, 11, 17, 17)
    self.image = cv2.Canny(gray, 30, 200)

2)接下来需要创建训练集。 我复制并编辑了这条消息。改变旋转并翻转它 - 现在我们有大约40个图像,它们由旋转的轮廓组成。 3)现在我要将这些图像转储到csv文件中。 这些图像表示为3D数组,因此我使用numpy中的.flatten函数将它们展平。接下来,这个展平向量用csv文件编写,标签作为最后一个字符

这就是我所做的,并想问:它会成功吗? 接下来我想使用除最后一个元素之外的所有内容作为输入x向量,并将最后的元素用作y向量。 (如here

认识将以同样的方式完成:我们获取图像的轮廓,并将其提供给神经网络,输出将是标签。

是否可能,或者最好不要尝试?

1 个答案:

答案 0 :(得分:1)

有充足的实验空间。但是,除了学习练习外,你不应该重新发明轮子。研究范式,了解已经存在的东西,然后进行自己的车轮改进。

我强烈建议您从CNN(卷积神经网络)中的图像识别开始。 ILSVRC 2012图像数据集(a.k.a. ImageNet文件)已经完成了许多精彩的工作。事实上,今天NN受欢迎程度的很大一部分来自Alex Krizhevsky的突破(导致AlexNet,第一个赢得ILSVRC的NN)和随后的拓扑(ResNet,GoogleNet,VGG等)。

简单的答案是让您的网络"决定"在原始照片中重要的是什么。当然,要平整图像并为其提供轮廓,但如果对原始图像进行训练可以产生出色的效果,请不要感到惊讶。

搜索资源"图像识别介绍"并选择一些符合您当前阅读和主题兴趣的点击。那里有很多好的。

当你编写自己的模型时,我强烈建议你使用现有的框架,而不是从头开始构建所有的抵押品。转储CSV格式;有更好的预先打包的I / O例程和大量的支持。我们的想法是让您设计网络,而不是一直操纵数据。

流行框架包括Caffe,TensorFlow,Torch,Theano和CNTK等。到目前为止,我发现Caffe和Torch拥有最简单的整体学习曲线,尽管我实际上推荐一个在另一个上面并没有那么大的区别。寻找在您感兴趣的领域中具有良好文档和示例的文档。