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

说明

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

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

技术介绍

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

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

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

插件提供方法

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

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

    Go 复制代码
    distance, err := plugin.PerceptionHash("被对比图片路径", "对比图片路径")

接口使用示例

Go 复制代码
package createcode

import (
	"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

相关推荐
Escalating_xu2 分钟前
【C语言项目实战】贪吃蛇(下):移动、碰撞与计分,完成一局可玩的游戏
c语言·开发语言·游戏
乘风gg20 分钟前
出事了,AI 提效后,老板让我裁员20%
前端·后端·ai编程
Rain的Java大神之路39 分钟前
面了 50 个候选人,90% 都挂在 LeetCode 3 无重复字符的最长子串:滑动窗口的 5 个致命坑
java·后端·leetcode
qq_401700411 小时前
Qt Modbus 源码剖析:从 QModbusClient 到工业级通信框架
开发语言·qt·系统架构
星夜离尘561 小时前
MATLAB 角度解缠遇到丢样:先分段,再说明圈数为什么不可恢复
开发语言·matlab
我命由我123451 小时前
6-2.Python 异常处理 - 异常捕获(捕获指定异常、常见异常类型、异常信息)
java·运维·开发语言·python·http·https·java-ee
ZoeLandia1 小时前
React08:自定义 Hook
开发语言·前端·react.js·typescript
狂师1 小时前
夯爆了!分享几个我在用的,基于业务场景接口串联测试Skill !
人工智能·后端·测试
北京地铁1号线1 小时前
后端开发:缓存(Cache)简介
后端·缓存·cache
IT_陈寒1 小时前
Vue项目实战经验分享:动态组件在Keep-Alive下的缓存陷阱
前端·人工智能·后端