因此,我认为您在第 1 步中走在正确的轨道上(将一些算法应用于图像,将其转换为一组特征)。
这个项目比大多数 ML 问题更具挑战性,因为在这里您实际上必须从原始数据(组成卡通的各个帧)创建训练数据集。例如,抓取一个帧,识别该帧中的两个字符,呆伯特和有角的字符(我相信呆伯特的老板,不知道他的名字),从该帧中提取这两个字符并附加到每个适当的类标签(例如,“1”代表 Dlibert)。
第1步
为了从构成呆伯特卡通的每个帧中提取单个字符,我建议对每个帧进行光谱分解。如果您不熟悉这种技术,那么它的核心就是一个特征向量分解。
如果您喜欢 python(或 R,因为您可以使用RPy之类的 python-to-R 绑定),那么我强烈建议您查看sklearn。特别是这个优秀的库(最初是在SciPy scikits项目保护伞下开发的,因此使用 NumPy + SciPy 进行矩阵计算)具有多种图像分割算法,其中一种是基于光谱聚类的算法。对于您项目中的这一步,您很可能希望查看这两个 scikits.learn 模块
这两个模块包括两个很好的示例脚本,一个分割数码照片,另一个分割由三个部分叠加的圆圈组成的图像,彼此之间的对比度最小,背景为 w/r/t——我怀疑两者都是您需要执行的分解的更困难的问题。换句话说,sklearn有两个完整的、有据可查的示例脚本包含在源代码分发中,它们都处理与您的数据相似的数据。任何一个或两者都将是此步骤的绝佳模板。
第2步
这是第一步;这是第二个:将分解图像的所有组件分组,每个 Dilbert 字符一组。接下来,为每个组分配一个类标签,例如,如果分解步骤中有四个字符,那么类标签的合适选择是“0”、“1”、“2”和“3”。将这些类标签附加到组件矩阵(步骤 1 中的分解产物),以便将每个字符矩阵映射到其对应的类(Dilbert 字符)。
第 3 步
选择合适的机器学习技术。这一步你有很多选择;唯一的标准是该技术属于受监督类别(因为您已为数据分配了类标签)并且它充当分类器(即,它返回类标签,而不是输出数值的回归器)。鉴于这是一个个人项目,我会选择你觉得最有趣的一个。满足我刚才提到的标准的一些是:多层感知器(神经网络)、支持向量机(SVM)和k 近邻(kNN)。
第4步
训练、验证和测试您的分类器
替代技术:模板匹配
一旦步骤 1 完成(每个图像被分解成一组对象,其中一些无疑将代表角色),您可以手动筛选这些分解产物并为卡通中的每个角色收集样本。是模板。
接下来,您将从图像中分割的对象与这组独特的模板进行比较。在scikit-image,另一个 scipy scikit 中,您可以使用方法match_template,您将模板图像和候选图像传递给该方法,并且此方法返回显示逐像素相关性的 2D 数组(在 -1 和 1 之间)。