这更通用"我在哪里找到做某事的好资源"题。我试图使用Python(OpenCV或其他)基于训练集对图像进行分类。
我的训练集:这是由许多产品缺陷图像组成的。每张图像可以在产品上的3个位置中的1个位置拍摄,每个图像将包含5种类型的产品缺陷中的1种。这些缺陷已经由人工分类和验证。
要分类的图像:这些图像由相似的图像组成,在相同的3个位置拍摄,但缺陷的类型未被分类(尽管缺陷区域是由工具识别的图片,它只是那个该工具无法正确分类,我无法更改工具。
我尝试按照“使用Python编程计算机视觉:用于分析图像的工具和算法”一书中的建议进行此分类。在这种情况下,我使用存储在mySQL数据库(训练数据)中的SIFT描述符进行Bag of Words方法。到目前为止,我没有太多的运气(我继续排除故障)并且认为我会向那里的任何OpenCV专家寻求建议。
非常感谢任何参考或建议。
所以,回到这个问题,我认为值得分享我所学到的东西。我不知道答案"答案"但这就是我结束的地方。正在进行的工作,你总能变得更好。
我现在的解决方案是结合3种不同的方法。所有这些都可以在互联网上搜索到,所以我不会详细了解如何。
首先,我使用SIFT方法,使用对VLFeat的命令行调用生成SIFT直方图。这可能是Python中其他地方的选择,它正是我使用的。我使用k-means聚类来做词汇词汇的视觉包,并建立了一个数据库,将质心与训练图像相关联的单词直方图联系起来。我通过添加Root SIFT步骤改进了一些结果。然后我使用Dense SIFT创建了一个单独的数据库(但没有Root SIFT调整)。最后,我根据训练图像的RGB分量创建了一个颜色直方图数据库。我没有使用所有256个RGB区域,而是在8个区间内将各个R,G和B值相加,然后将这些值展平为24个bin直方图。
对未知图像执行相同的处理,然后使用欧几里德距离比较直方图矢量。我也尝试了Chi Squared比较,但在我看来,Euclidean提供了更好的结果。我从每个过程中获得前3个结果,图像分类基于9投票中的5个。如果没有达到多数,则分析是不确定的。
对于我封闭的图像群体,我的误分类率为3.1%,不确定率为3.1%。
答案 0 :(得分:7)
我使用Bag of features(BoF)和SVM解决了图像分类问题。我是用C ++和OpenCV做的,但我确信你也可以为python获得类似的方法。
<强>概念强>
创建BoF词典:
培训强>
<强>测试强>
您可以参考此article
答案 1 :(得分:0)
Implementing a CNN in Theano可能会比OpenCV中的任何内容都更好。如果您在Google学者上搜索,有大量关于使用CNN进行图像分类的论文 - 使用Theano,大多数这些方法都不难实现。
答案 2 :(得分:0)
您可以尝试通过将您的培训数据(缺陷,非缺陷)上传到demo.nanonets.ai(免费使用)来构建模型
1)在此处上传您的培训数据:
2)然后使用以下(Python代码)查询API:
import requests
import json
import urllib
model_name = "Enter-Your-Model-Name-Here"
url = "http://anzalonelawcolorado.com/wp-content/uploads/2013/10/product.jpg"
files = {'uploadfile': urllib.urlopen(url).read()}
url = "http://demo.nanonets.ai/classify/?appId="+model_name
r = requests.post(url, files=files)
print json.loads(r.content)
3)响应如下:
{
"message": "Model trained",
"result": [
{
"label": "Defective",
"probability": 0.97
},
{
"label": "Not Defective",
"probability": 0.03
}
]
}