GoFly快速开发框架/Go语言封装的图像相似性比较插件使用说明

embedded/2024/10/21 10:14:45/

说明

图像相似性搜索应用广泛、除了使用搜索引擎搜索类似图片外,像淘宝可以让顾客直接拍照搜索类似的商品信息、应用在商品购物上,也可以应用物体识别比如拍图识花等领域。还有在调研图片鉴权的方案,通过一张图片和图片库中的图片进行比对,来确定这张图片是否侵权,或者退一步讲,图片库中是否包含和这张图片类似。 

本插件比较两图片相似和深度学习应用中的图像识别还不一样,不需要把图像中的物体识别出来,只需能查找相似图片的东西即可。

技术介绍

这里使用感知哈希算法来做,感知哈希算法根据图像的特征生成一个确定的指纹,这些指纹可以用来比较。指纹越接近,说明图片越接近。当要比较两张图片的时候,计算它们的hash值,然后再计算它们的汉明距离即可。

这里直接使用goimagehash库来实现,它提供aHash、dHash、pHash三种算法, aHash基于平均值,pHash基于图像频率,而dHash基于直方图。dhash准确性和aHash(Average Hash algorithm)查不多,但是更快。

比较图片相似方法有很多种,我们根据业务选择合适办法就是最好的,我们这个方法是用一张图去找和它相似的图对应内容,这个场景需要我们能够快速计算,找出相似图片即可,不需要图像识别出具体某个东西(如猫、狗),而且需要识别出具体东西,需要做大量计算,同时也需要消耗很多时间,在查找场景中我们不能让使用客户等待很久,这样体验太差了,所以合适需求场景就是方法。 

插件提供方法

DifferenceHash和AverageHash的准确性差不多, AverageHash非常快,在特定场景下是一个非常好的算法。三个接口计算返回是两张图片之间差异值,值越小说明它们相似性高。

  • Average Hash算法-基于平均值
distance, err := plugin.AverageHash("被对比图片路径", "对比图片路径")
  • Difference hash算法-基于图像频率
distance, err := plugin.DifferenceHash("被对比图片路径", "对比图片路径")
  • perception hash算法-基于直方图
    distance, err := plugin.PerceptionHash("被对比图片路径", "对比图片路径")

接口使用示例

package createcodeimport ("gofly/utils/gf""gofly/utils/plugin"
)// 后端代码模版
type Test struct{}func init() {fpath := Test{}gf.Register(&fpath, fpath)
}
// 测试图片相似性比较-返回差值,值越小相识度越高
func (api *Test) GetImgsml(c *gf.GinCtx) {distance, err := plugin.AverageHash("./resource/static/Imgsml_base.jpg", "./resource/static/Imgsml_do.jpg")if err != nil {gf.Failed().SetMsg(err.Error()).Regin(c)return}gf.Success().SetMsg("测试图片相似性比较,返回差值,值越小相识度越高").SetData(distance).Regin(c)
}

GoFly全栈社区插件市场地址:https://goflys.cn/codedetail?id=58 


http://www.ppmy.cn/embedded/114284.html

相关文章

Adobe出现This unlicensed Photoshop app has been disabled

Adobe Acrobat或Photoshop软件突然出现This unlicensed Photoshop app has been disabled 症状 解决方法 删除软件安装目录下的AcroCEF和acrocef_1l两个子文件夹。主要是为了删除AcroCEF.exe。 如果存在复发,则删除xxxxxxx\AdobeGCClient\AdobeGCClient.exe。 不…

Live800:从心出发,以情动人:构建深度客户服务文化

在当今这个竞争激烈的市场环境中,企业之间的较量已不仅仅局限于产品质量的比拼,更在于谁能提供更优质、更贴心的客户服务。在这个背景下,“从心出发,以情动人”成为了构建深度客户服务文化的核心理念,它要求企业不仅要…

python 实现average mean平均数算法

average mean平均数算法j介绍 “平均数”(Mean)或"平均数算法"是统计学中用于描述一组数据集中趋势的一个基本且重要的概念。它表示了数据集中所有数值的“平均”或“中心”位置。最常见的平均数是算术平均数(Arithmetic Mean&…

滚雪球学SpringCloud[4.1讲]: Spring Cloud Gateway详解

全文目录: 前言API Gateway的概念与作用什么是API Gateway?API Gateway的作用: Spring Cloud Gateway的核心特性配置Spring Cloud Gateway1. 引入依赖2. 基本路由配置3. 路由与过滤器的使用示例:路径匹配与过滤器 4. 动态路由与负…

Linux 系统盘空间不足,想要将 Docker 镜像和容器数据迁移到数据盘

摘要:大家在Linux上用Docker部署项目的时候,有时候会部署多个项目,系统盘空间不足,数据盘又挂载有很多空间,这时候就会想要将 Docker 镜像和容器数据迁移到数据盘,本文主要讲解迁移步骤和迁移过程中遇到的一…

xml中的转义字符

文章目录 xml中的转义字符 xml中的转义字符 &amp;对应的字符是& <对应的字符是< >对应的字符是> &quot;对应的字符是" &apos;对应的字符是转义的实体引用虽然简单易用&#xff0c;但是需要记忆&#xff0c;而且如果字符串中包含大量的特殊字…

rust学习——关联类型

什么是关联类型 关联类型是Rust中一种特殊的泛型抽象机制。在trait中&#xff0c;可以定义一个或多个关联类型&#xff0c;这些关联类型与trait的实现类型相关联。关联类型允许我们在trait中使用泛型&#xff0c;但不需要提前指定具体的类型。 不使用关联类型存在的问题 tra…

[SDX35+WCN6856]SDX35 + WCN6856 WiFi 起来之后,使用终端连接会导致系统重启

SDX35 SDX35介绍 SDX35设备是一种多模调制解调器芯片,支持 4G/5G sub-6 技术。它是一个4nm芯片专为实现卓越的性能和能效而设计。它包括一个 1.9 GHz Cortex-A7 应用处理器。 SDX35主要特性 ■ 3GPP Rel. 17 with 5G Reduced Capability (RedCap) support. Backward compati…