type
status
date
slug
summary
tags
category
icon
password
URL
Rating
 
今年上半年国内有个很火的出海应用,叫 CoinSnap。用户拍一个硬币的正反两张图片上传后,CoinSnap 识别出这个硬币是什么硬币,提供更详细的说明和参考报价。这个应用在美国很火,美国人收藏硬币和中国人收藏古董是一样的,所以 CoinSnap 其实就是个鉴宝 App。据报道,CoinSnap 在今年 2 月份的收入已经达到 42万刀,非常喜人。

硬币识别流程

从算法角度看 CoinSnap,其核心功能就是识别用户上传图片中的硬币具体是什么硬币,即所谓的硬币识别能力。
硬币识别的流程图大致是这样的:
notion image
主要包括以下步骤:
  1. 硬币检测:检测用户输入的图片中硬币所在的位置。
  1. 预处理:检测到硬币后,图像进行预处理,包含两个子步骤:
      • 水平对齐:旋转图像以确保硬币处于水平放置。
      • 背景去除:移除图像背景,仅留下硬币图像。
  1. 硬币检索:使用预处理之后的硬币图片在候选硬币库中进行检索,检索出最相似的 top-N 个硬币。
  1. 重排:相似的硬币可能还是很多,需要在重排阶段对排序做进一步优化,比如识别硬币的年份、硬币的制造特点等。识别出硬币年份的技术就是 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 🪙 项目中。
notion image
 

在线 Demo

基于美国硬币的图片数据,我利用 breezedeus/Coin-CLIP 🪙 创建了美国硬币的在线检索引擎(需梯子🪜),欢迎试用,好玩记得帮忙 star 🌟 :
 
📌
如果大家对其他国家的硬币检索有兴趣(中国其实也有很多不同样式的硬币,只是主要是纪念币,市面流通很少),也欢迎留言。之后看需求我也可以部署其他国家的检索引擎。
 

硬币检索效果对比:Coin-CLIP vs. CLIP

以下是上面在线 demo 的一些结果录屏,其中左边的结果来自 Coin-CLIP,右边的结果来自 CLIP。可以看到效果改进还是不小的。欢迎大家去上面的在线 Demo 直接试玩。
 
示例 1 (Left: Coin-CLIP; Right: CLIP):
notion image
示例 2 (Left: Coin-CLIP; Right: CLIP):
notion image
 
更多示例请见: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/>

分享视频

Youtube
Video preview
Bilibili
 

References

 
CnOCR V2.3 新版发布:模型更好、更多、更大OpenAI 如何优化 LLM 的效果
Loading...