据我所知,Project Oxford (MS Azure CV API) 不适合您的任务。他们的 API 非常专注于人脸相关的任务(检测、验证等)、OCR 和图像描述。显然,您无法扩展他们的模型或从现有模型训练新模型。
但是,即使我不知道针对您的对象检测问题的开箱即用解决方案;您可以尝试一些足够简单的方法,这些方法会给您一些起点结果。
例如,您可以使用以下简单的方法:
1) 创建数据集:
这可能是更乏味的一步,但矛盾的是,这是至关重要的一步。我会假设你有大量的图像可以使用。你需要做的是选择一个固定的窗口大小并提取正面和负面的例子。
如果您的数据集中的某些图像大小不同,您需要将它们重新缩放为通用大小。您不需要对尺寸过于疯狂,可能 30x30 的图像就足够了。为了让事情变得更容易,我也会将图像转换为灰度。
2) 选择一个分类算法并对其进行训练:
那里有大量的分类算法。但如果你是机器学习的新手,我会选择我最了解的一个。记住这一点,我会检查逻辑回归,它给出了不错的结果,对于初学者来说很容易,并且有很多库和教程。例如,this one 或 this one。一开始我会说专注于二分类问题(比如图片中是否有 UD 标志),当你掌握了这个问题后,你可以跳转到多分类案例。有too 的资源,或者您始终可以为每个徽标提供多个模型,并为每个模型单独运行此配方。
要训练您的模型,您只需读取步骤 1 中生成的图像并将它们转换为向量并相应地标记它们。那将是为您的模型提供数据的数据集。如果您使用灰度图像,则向量中的每个位置将对应于 0-255 范围内的像素值。根据算法,您可能需要将这些值重新调整到 [0-1] 范围内(这是因为某些算法在该范围内的值表现更好)。请注意,在这种情况下重新调整范围相当容易(new_value = value/255)。
您还需要拆分数据集,保留一些示例用于训练,一个子集用于验证,另一个用于测试。同样,有不同的方法可以做到这一点,但我尽量保持这个答案很幼稚。
3) 执行检测:
所以现在让我们开始有趣的部分。给定任何您想要运行模型并在有徽标的图片中生成坐标的图像。有不同的方法可以做到这一点,我将描述一种可能不是最好的也不是更有效的,但在我看来它更容易开发。
您将扫描图片,在“窗口”中提取像素,将这些像素重新缩放为您在步骤 1 中选择的大小,然后将它们提供给您的模型。
如果模型给你一个肯定的答案,那么你在原始图像中标记那个窗口。由于徽标可能以不同的比例出现,您需要使用不同的窗口大小重复此过程。您还需要调整窗口之间的空间量。
4) 冲洗并重复:
在第一次迭代中,您很可能会得到很多误报。然后你需要把这些作为负面例子并重新训练你的模型。这将是一个迭代过程,希望在每次迭代中,您的误报和漏报都会越来越少。
一旦您对自己的解决方案感到相当满意,您可能想要改进它。您可能想尝试其他分类算法,例如SVM 或Deep Learning Artificial Neural Networks,或者尝试更好的对象检测框架,例如Viola-Jones。此外,您可能需要使用crossvalidation 来比较您的所有解决方案(您实际上可以从一开始就使用交叉验证)。到现在为止,我敢打赌,您将有足够的信心使用 OpenCV 或其他现成的框架,在这种情况下,您将对幕后发生的事情有一个公平的了解。
您也可以忽略所有这些答案,然后去学习像 one 这样的 OpenCV 对象检测教程。或者从像one 这样的另一个问题中得到另一个答案。祝你好运!