情人节巧克力识别项目

使用计算机视觉技术,精确识别巧克力内部的填充物。

关于项目

情人节是一个充满爱意和巧克力的节日。但是,当咬开一颗看似美味的巧克力,却尝到了最不喜欢的口味,那是多么令人失望的事情!为了避免这种心碎,有些人可能会选择啃咬巧克力的角落,或者用手指戳进糖果里,但这些方法都是破坏性的识别方式。那么,是否有办法在不破坏糖果的情况下识别出填充物呢?

在这个情人节,希望能够使用计算机视觉技术来解决这个问题。目标是创建一个模型,能够识别See's Candies品牌的巧克力,因为它们是最爱。See's Candies以其不包含指南而闻名——除非对他们的产品非常熟悉,否则可能不知道盒子里有什么。

将项目限制在See's 1lb Classic Red Heart - Assorted Chocolates的内容上。虽然希望建立一个能够识别所有See's巧克力(或所有巧克力)的强大模型,但这将需要更多的时间和更多的巧克力盒,这超出了目前的能力范围。

项目步骤

由于专注于特定的巧克力组合,发现在网上很难找到图片,所以选择自己拍摄照片。尽管只有有限数量的巧克力,尽量在不同表面、不同光照条件下拍摄照片,并且重新排列巧克力在盒子中的位置。还拍摄了缺少巧克力的照片,就像有些已经被吃掉一样。

在重新排列巧克力的过程中,意识到在开始标注之前,需要先训练自己。这出乎意料地具有挑战性,因为See's并不保证确切的组合(“根据糖果的可用性,可能会进行替换。”),他们也不包括指南。这意味着需要做一些侦探工作,然后才能开始标注。

由于想要模型能够识别特定类型的巧克力,必须为每种巧克力创建一个不同的类别。这意味着有超过20个类别,每张照片中有20多个需要标注的项目。这就意味着需要一些时间来标注每张图片。幸运的是,得到了Label Assist的帮助。

# 使用Label Assist来帮助标注

在标注了图片之后,查看了数据集健康检查,以确保不同巧克力之间有一个合适的平衡。它还帮助几次捕捉到标注错误——最初用于Label Assist的旧模型有几个类别是这个盒子里没有的巧克力,看到这些在健康检查中帮助发现并修复了一些被错误标注的随机背景物品。

还应用了一些基本的预处理选项:自动定向、调整大小、修改类别、过滤空值。为了获得更多的数据,应用了一些增强:翻转和旋转来模拟巧克力盒的不同视图;色相、饱和度、亮度和模糊来模拟使用手机扫描一盒巧克力时可能遇到的不同条件。

# 应用预处理和增强

使用最初的巧克力盒模型作为检查点,对情人节巧克力数据集进行了训练,并得到了以下结果。由于最初的数据集是用如此少的图片创建的(在增强之前是32张照片),想知道如果添加更多的数据,是否能够改进模型,所以又添加并标注了55张照片,应用了相同的增强,并训练了新模型。新数据似乎提高了准确性。对那个结果相当满意,但注意到了几个标注错误,所以修复了它们,但可能也把其他东西搞砸了,因为精确度下降了。

# 训练结果

部署和使用模型是这个项目最有趣的部分——尝试模型,并看看它工作得如何。拍了一张新照片,通过Example Web App运行它,它做得还不错!

# 部署与使用

尽管模型确实有一些局限性,最大的限制是图片的来源有限。See's bonbons是手工蘸制的,并不完全统一,但数据集并没有真正包含那种多样性。可能只训练了一个模型来识别一个特定的巧克力盒……但仍然为它感到骄傲。

在加入Roboflow之前,创建数据集和训练计算机视觉模型似乎令人困惑,超出了能力范围。承认,一开始确实有点令人困惑,但学习如何使用Roboflow的工具并不难。计算机视觉不再似乎遥不可及。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485