返回顶部
首页 > 资讯 > 后端开发 > Python >Python3 图像识别(二)
  • 807
分享到

Python3 图像识别(二)

图像 2023-01-30 22:01:12 807人浏览 八月长安

Python 官方文档:入门教程 => 点击学习

摘要

Infi-chu: Http://www.cnblogs.com/Infi-chu/ 以图搜图的使用已经非常广泛了,我现在来介绍一下简单的以图搜图的相关算法及其实践。 一、感知hash算法 感知哈希算法:感知哈希算法(Perceptual

Infi-chu:

Http://www.cnblogs.com/Infi-chu/

以图搜图的使用已经非常广泛了,我现在来介绍一下简单的以图搜图的相关算法及其实践。

一、感知hash算法

感知哈希算法:
感知哈希算法(Perceptual hash alGorithm)是哈希算法的一类,主要用来做相似图片的搜索工作。
图片所包含的特征被用来生成一组指纹(不过它不是唯一的), 而这些指纹是可以进行比较的。
步骤:
1.把图片转化为字符串,这个字符串就是图片的hash值,又称指纹。
2.求两个字符串之间的相似度(汉明距离),字符串越相似,即图片越相似。

 二、汉明距离

汉明距离:
汉明距离是两个字符串对应位置的不同字符的个数。换句话说,它就是将一个字符串变换成另外一个字符串所需要替换的字符个数。
例如:
1011101 与 1001001 之间的汉明距离是 2。
2143896 与 2233796 之间的汉明距离是 3。
“toned” 与 “roses” 之间的汉明距离是 3。

三、均值hash

下面的例子是使用了像素平均值,又叫均值哈希。
优点:均值哈希较为简单。
缺点:对图像灰度的平均值特别敏感,也不具备旋转不变性。
import cv2
def p_hash(path):
    # Step1. 把图像缩小为8 * 8,并转化为灰度图
    src = cv2.imread(path, 0)
    src = cv2.resize(src, (8, 8), cv2.INTER_LINEAR)
    # Step2. 计算64个像素的灰度均值
    avg = sum([sum(src[i]) for i in range(8)]) / 64
    #  Step3. 与平均值比较,生成01字符串
    string = ''
    for i in range(8):
        string += ''.join(map(lambda i: '0' if i < avg else '1', src[i]))
    # Step4. 计算hash值
    result = ''
    for i in range(0, 64, 4):
        result += ''.join('%x' % int(string[i: i + 4], 2))
        return result

def hamming(str1, str2):
    if len(str1) != len(str2):
        return
    count = 0
    for i in range(0, len(str1)):
        if str1[i] != str2[i]:
            count += 1
    return count

# 读取四张图片,进行测试
h1 = p_hash('1.jpg')
h2 = p_hash('2.jpg')
h3 = p_hash('3.jpg')
h4 = p_hash('4.jpg')

# 四张图片的相互对比
print('1&2 --> ',hamming(h1,h2))
print('1&3 --> ',hamming(h1,h3))
print('1&4 --> ',hamming(h1,h4))
print('2&3 --> ',hamming(h2,h3))
print('2&4 --> ',hamming(h2,h4))
print('3&4 --> ',hamming(h3,h4))

结果:

1&2 -->  1
1&3 -->  0
1&4 -->  1
2&3 -->  1
2&4 -->  1
3&4 -->  1

四、余弦感知哈希

为了提升更好的识别效果,可以使用余弦感知哈希算法。
优点:能够处理旋转图形。
缺点:只能够识别变形程度在25%以内的图片。

步骤:
1.缩小尺寸:将图像缩小到32*32,并转为灰度图。
2.计算DCT:对图像进行二维离散余弦变换。
3.缩小DCT:只保留矩阵左上角8*8区域,对这个区域求哈希均值,并生成01字符串。
4.计算hash值。
5.求汉明距离
import numpy as np
import cv2

def p_hash(path):
    # Step1. 把图像缩小为32 * 32,并转化为灰度图
    src = cv2.imread(path, 0)
    src = cv2.resize(src, (32, 32), cv2.INTER_LINEAR)

    # Step2. 对图像进行余弦变换
    h, w = src.shape[:2]
    arr = np.zeros((h, w), np.float32)
    arr[:h, :w] = src
    src = cv2.dct(cv2.dct(arr))  # 离散余弦变换
    src.resize(8, 8)

    # Step3. 计算64个像素的灰度均值
    avg = sum([sum(src[i]) for i in range(8)]) / 64

    # Step4. 与平均值比较,生成01字符串
    string = ''
    for i in range(8):
        string += ''.join(map(lambda i: '0' if i < avg else '1', src[i]))

    # Step5. 计算hash值
    result = ''
    for i in range(0, 64, 4):
        result += ''.join('%x' % int(string[i: i + 4], 2))
    return result


def hamming(str1, str2):
    if len(str1) != len(str2):
        return
    count = 0
    for i in range(0, len(str1)):
        if str1[i] != str2[i]:
            count += 1
    return count

# 读取四张图片,进行测试
h1 = p_hash('1.jpg')
h2 = p_hash('2.jpg')
h3 = p_hash('3.jpg')
h4 = p_hash('4.jpg')

# 四张图片的相互对比
print('1&2 --> ',hamming(h1,h2))
print('1&3 --> ',hamming(h1,h3))
print('1&4 --> ',hamming(h1,h4))
print('2&3 --> ',hamming(h2,h3))
print('2&4 --> ',hamming(h2,h4))
print('3&4 --> ',hamming(h3,h4))
print('1&1 --> ',hamming(h1,h1))

结果:

1&2 -->  3
1&3 -->  1
1&4 -->  6
2&3 -->  3
2&4 -->  6
3&4 -->  5
1&1 --> 0

图例:

‘1.jpg’

‘2.jpg’

 

‘3.jpg’

 

‘4.jpg’

 

--结束END--

本文标题: Python3 图像识别(二)

本文链接: https://lsjlt.com/news/180159.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python3 图像识别(二)
    Infi-chu: http://www.cnblogs.com/Infi-chu/ 以图搜图的使用已经非常广泛了,我现在来介绍一下简单的以图搜图的相关算法及其实践。 一、感知hash算法 感知哈希算法:感知哈希算法(Perceptual...
    99+
    2023-01-30
    图像
  • Python3 图像识别(一)
    Infi-chu: http://www.cnblogs.com/Infi-chu/ 一、环境准备: 1.Python3.x(我是用的是Python3.6.5),这个问题不大,只要3.4以上就OK。 2.Numpy(直接pip安装即可) ...
    99+
    2023-01-30
    图像
  • 【python 图像识别】图像识别从菜鸟
    一、安装配置(python2.7) 1.pip install pytesseract 2、pip install pyocr 3、pip install pillow 4、安装tesseract-ocr:http://jaist...
    99+
    2023-01-31
    图像 菜鸟 python
  • 数字识别之图像转为二进制数据
    数字识别是人工智能的一个应用 现在来实现如何将一个图片数字转为二进制的数据,并保存到为本中 图片是32x32的一个白底黑字的png图片 使用PIL模块获取像素,进行比对 存储数字二进制文件,方便后续训练数据使用 代码在github托管...
    99+
    2023-01-31
    图像 数字 二进制数
  • Python怎么识别图像
    这篇文章主要介绍“Python怎么识别图像”,在日常操作中,相信很多人在Python怎么识别图像问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python怎么识别图像”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-17
  • Python图像识别及操作
    导语 自动化测试实施过程中,由于Android或web部分控件和区域无法通过uiautomator或hierarchy、selenium等系统提供的方式获取相关区域属性,无法通过控件属性访问指定区域,...
    99+
    2023-09-04
    python 开发语言
  • imageAI图像识别,并用pytho
    imageai是一套开源免费的,可以用于图像智能识别的python应用包,使用门槛不高,基本上按照官方文档去写就可以简单实现利用已经训练好的模型识别图像中的物体。imageai图像预检目前实现了四种模型的算法支持,分别是SqueezeNe...
    99+
    2023-01-31
    图像 imageAI pytho
  • 如何使用Java开发二维码图像识别系统?
    二维码图像识别是一项非常有用的技术,可以应用于许多场景,如门禁系统、身份验证等。Java是一种流行的编程语言,也可以用来开发二维码图像识别系统。在本文中,我们将介绍如何使用Java开发二维码图像识别系统,包括如何使用Java实现二维码解码和...
    99+
    2023-09-18
    二维码 开发技术 对象
  • Python中AI图像识别实现身份证识别
    目录需求分析步骤申请华为云OCR接口获取token调用身份证识别接口总结图像识别说白了就是把一张照片上面的文字进行提取,提供工作效率 需求分析 身份证识别主要是把一张身份证照片上面的文字信息进行提取,不用再使用人工去...
    99+
    2022-06-02
    Python 身份证识别 Python AI图像识别
  • pytorch实现图像识别(实战)
    目录1. 代码讲解1.1 导库1.2 标准化、transform、设置GPU1.3 预处理数据1.4 建立模型1.5 训练模型1.6 测试模型1.7结果1. 代码讲解 1.1 导库 ...
    99+
    2024-04-02
  • PyTorch怎么实现图像识别
    这篇文章主要介绍“PyTorch怎么实现图像识别”,在日常操作中,相信很多人在PyTorch怎么实现图像识别问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PyTorch怎么实现图像识别”的疑惑有所帮助!接下来...
    99+
    2023-06-29
  • 基于OpenMV的图像识别之数字识别功能
    目录基于OpenMV的图像识别一、数字识别基于OpenMV的图像识别 OpenMV简介 什么是OpenMV OpenMV是由美国克里斯团队基于MicroPython发起的开源机器视...
    99+
    2024-04-02
  • Python3与OpenCV3.3 图像
    一、模糊方式以及每种方式的使用场景 模糊操作方式: 均值模糊:一般用来处理图像的随机噪声 中值模糊:一般用来处理图像的椒盐噪声 自定义模糊:对图像进行锐化之类的操作 二、模糊基本原理 基于离散卷积、定义好每个卷积核、不同卷积核得到不...
    99+
    2023-01-31
    图像
  • python pytorch图像识别基础介绍
    目录一、数据集爬取二、数据处理三、开始识别四、模型测试总结一、数据集爬取 现在的深度学习对数据集量的需求越来越大了,也有了许多现成的数据集可供大家查找下载,但是如果你只是想要做一下深...
    99+
    2024-04-02
  • 使用python如何做图像识别
    在python中使用pytesseract模块实现一个图像识别,具体方法如下:import pytesseract #导入pytesseract模块from PIL import Imageclass GetImageDate(object...
    99+
    2024-04-02
  • Python中如何实现图像识别
    Python中如何实现图像识别,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1. 安装Python 3.5.1或更高版本和pip(如果您已经安装了Python 3.5.1或...
    99+
    2023-06-17
  • Python如何给图像分类(图像识别模型构建)
    在日常生活中总是有给图像分类的场景,比如垃圾分类、不同场景的图像分类等;今天的文章主要是基于图像识别场景进行模型构建。图像识别是通过 Python深度学习来进行模型训练,再使用模型对...
    99+
    2024-04-02
  • python3 opencv图像二值化的问题怎么解决
    这篇“python3 opencv图像二值化的问题怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“pytho...
    99+
    2023-06-29
  • Pytorch实现图像识别之数字识别(附详细注释)
    使用了两个卷积层加上两个全连接层实现 本来打算从头手撕的,但是调试太耗时间了,改天有时间在从头写一份 详细过程看代码注释,参考了下一个博主的文章,但是链接没注意关了找不到了,博主看到...
    99+
    2024-04-02
  • PyTorch实现图像识别实战指南
    目录概述预处理导包数据读取与预处理数据可视化主体加载参数建立模型设置哪些层需要训练优化器设置训练模块开始训练测试测试网络效果测试训练好的模型测试数据预处理展示预测结果总结 ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作