type
status
date
slug
summary
tags
category
icon
password
URL
Rating
今年上半年国内有个很火的出海应用,叫 CoinSnap。用户拍一个硬币的正反两张图片上传后,CoinSnap 识别出这个硬币是什么硬币,提供更详细的说明和参考报价。这个应用在美国很火,美国人收藏硬币和中国人收藏古董是一样的,所以 CoinSnap 其实就是个鉴宝 App。据报道,CoinSnap 在今年 2 月份的收入已经达到 42万刀,非常喜人。
硬币识别流程
从算法角度看 CoinSnap,其核心功能就是识别用户上传图片中的硬币具体是什么硬币,即所谓的硬币识别能力。
硬币识别的流程图大致是这样的:
主要包括以下步骤:
- 硬币检测:检测用户输入的图片中硬币所在的位置。
- 预处理:检测到硬币后,图像进行预处理,包含两个子步骤:
- 水平对齐:旋转图像以确保硬币处于水平放置。
- 背景去除:移除图像背景,仅留下硬币图像。
- 硬币检索:使用预处理之后的硬币图片在候选硬币库中进行检索,检索出最相似的
top-N
个硬币。
- 重排:相似的硬币可能还是很多,需要在重排阶段对排序做进一步优化,比如识别硬币的年份、硬币的制造特点等。识别出硬币年份的技术就是 OCR,也包括两个子步骤:
- 年份文本检测:检测硬币上标示年份文本所在的位置。
- 年份文本识别:检测到位置后,识别所在位置的具体年份。
<ins/>
开源模型和项目 Coin-CLIP 🪙
这两天我开源了 Coin-CLIP 模型
breezedeus/coin-clip-vit-base-patch32
,它是在 OpenAI 的 CLIP (ViT-B/32) 模型基础上,利用对比学习技术在超过 340,000
张硬币图片数据上微调得到的。 Coin-CLIP 旨在提高模型针对硬币图片的特征提取能力,从而实现更准确的以图搜图功能。该模型结合了视觉变换器(ViT)的强大功能和 CLIP 的多模态学习能力,并专门针对硬币图片进行了优化。关于对比学习,可以参考我之前的分享《自监督学习与对比学习》。
关于 CLIP 和多模态学习,可以参考我之前的分享《视觉-语言预训练(VLP)技术介绍》。
实际使用下来,Coin-CLIP 相比于 CLIP 有以下几个明显的改进:
- Coin-CLIP 对硬币背景带来的干扰更加鲁棒。CLIP 对于干净的白底背景硬币图片,检索效果还是很不错的,但是如果背景一复杂,效果就会差很多。Coin-CLIP 面对复杂背景效果就好很多。
- Coin-CLIP 对旋转的硬币图片更加鲁棒。
- Coin-CLIP 对硬币图片具有更好的 alignment,对相似硬币图片抽取的特征向量更加接近。
为进一步简化 Coin-CLIP 模型的使用流程,我开源了新项目 breezedeus/Coin-CLIP 🪙 ,它提供了快速构建硬币图像检索引擎的相关工具,只需几行代码即可构建硬币检索引擎。
breezedeus/Coin-CLIP 🪙 当前实现了硬币检测和硬币检索两个流程,即下图中的蓝色部分。硬币检测使用的是 Google 开源的开放域目标检测模型 OWL-ViT,硬币检索使用的是 Coin-CLIP 模型。
由于 Coin-CLIP 模型对硬币图片做特征抽取时,针对旋转图片和复杂背景有较强的鲁棒性,所以流程里的预处理是可有可无的。重排序里的年份识别功能,之后也会更新到 breezedeus/Coin-CLIP 🪙 项目中。
在线 Demo
基于美国硬币的图片数据,我利用 breezedeus/Coin-CLIP 🪙 创建了美国硬币的在线检索引擎(需梯子🪜),欢迎试用,好玩记得帮忙 star 🌟 :
如果大家对其他国家的硬币检索有兴趣(中国其实也有很多不同样式的硬币,只是主要是纪念币,市面流通很少),也欢迎留言。之后看需求我也可以部署其他国家的检索引擎。
硬币检索效果对比:Coin-CLIP vs. CLIP
示例 1 (Left: Coin-CLIP; Right: CLIP):
示例 2 (Left: Coin-CLIP; Right: CLIP):
更多示例请见:breezedeus/Coin-CLIP 🪙 。
代码调用
抽取硬币图片的特征向量
如果只是使用模型 Coin-CLIP
breezedeus/coin-clip-vit-base-patch32
获取硬币图片的向量表达。只需要把原来使用 CLIP 的模型名称 openai/clip-vit-base-patch32"
换成 breezedeus/coin-clip-vit-base-patch32
即可,其他代码可完全不动。新开源的项目 breezedeus/Coin-CLIP 🪙 做了进一步的封装,提供了快速构建硬币图像检索引擎的相关工具,只需几行代码即可构建硬币检索引擎。
安装
coin_clip
Python 包:之后利用
coin_clip
获取图像特征向量:⚠️ Note:上面的代码会自动从 Huggingface 下载breezedeus/coin-clip-vit-base-patch32
模型。 如果无法自动下载,请手动下载模型到本地,然后初始化CoinClip
时通过model_name
参数指定模型的本地目录,如model_name='path/to/coin-clip-vit-base-patch32'
。
命令行工具
使用
pip install coin_clip
后, 安装 coin_clip
Python 包后,会提供以下命令方便构建硬币图像检索引擎。构建向量检索引擎
coin-clip build-db
可以用来构建向量检索引擎。它对指定目录下的所有硬币图片 🪙 进行特征提取并构建 ChromaDB 向量检索引擎。例如:
查询
利用上面的命令构建完向量检索引擎后,可以使用
coin-clip retrieve
命令检索与指定硬币图片 🪙 最相似的硬币图片。例如:
<ins/>
分享视频
References
- Coin-CLIP Model: https://huggingface.co/breezedeus/coin-clip-vit-base-patch32
- 作者:Breezedeus
- 链接:https://www.breezedeus.com/article/coin-clip
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章