爬虫敏感图片的识别与过滤,了解一下?

地精撕裂者
• 阅读 2083

爬虫敏感图片的识别与过滤,了解一下?

需求

我们需要识别出敏感作者的avatar头像,把”皮卡丘“换成”优雅的python“。

敏感图片样本属性:

爬虫敏感图片的识别与过滤,了解一下?

爬虫获取的图片属性:

爬虫敏感图片的识别与过滤,了解一下?

替换成:
爬虫敏感图片的识别与过滤,了解一下?

原理

检查两个图片的相似度,一个简单而快速的算法:感知哈希算法(Perceptual Hash),通过某种提取特征的方式为每个图片计算一个指纹(哈希),这样对比两个图片相似与否就变成了对比两个指纹异同的问题。

实现

Step1.缩小尺寸

将图片缩小到8*8的大小,这样做可以去除图片的细节,只保留结构和明暗等基本信息,同时摒弃不同尺寸和比例带来的图片差异。

Step2.灰度处理

把缩小后的图片转化为64级灰度图(每个像素只有64种颜色)。

Step3.计算平均值

计算所有64个像素的灰度平均值。

Step4.计算哈希

这里哈希的计算方法是:上面说的64个像素的灰度与平均值进行比较,大于或等于平均值记为1,小于记为0。

将每个像素的比较结果组合在一起成为一个64位的二进制整数,这个整数就是此图片的指纹。

Step5.对比哈希

不同图片对比的方法,就是对比它们的64位哈希中,有多少位不一样(汉明距离)。一般来说如果不同的位数不超过5,就说明两张图片很相似,如果大于10,就很可能是两张不同的图片。

代码(python3)

先来安装pillow、requests:

pip3 install pillow requests

导入包:

from functools import reduce
from PIL import Image
import requests

实现图片相似度算法:

# 计算pHash(只需要三行):
def phash(img):
    img = img.resize((8, 8), Image.ANTIALIAS).convert('L')
    avg = reduce(lambda x, y: x + y, img.getdata()) / 64.
    return reduce(
        lambda x, y: x | (y[1] << y[0]),
        enumerate(map(lambda i: 0 if i < avg else 1, img.getdata())),
        0
    )

# 计算汉明距离:
def hamming_distance(a, b):
    return bin(a^b).count('1')

# 计算两个图片是否相似:
def is_imgs_similar(img1,img2):
    return True if hamming_distance(phash(img1),phash(img2)) <= 5 else False

结合爬虫:

# 打开本地存放一张敏感图片;
# 本次为了方便演示,从新浪图床拉下一张1024X1024的图片,保存命名为sensitive.jpg
sensitive_url="https://ws4.sinaimg.cn/large/006tNbRwgy1fwttj7bi36j30sg0sgwm0.jpg"
headers = {
        "User-Agent": "Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/532.5 (KHTML, like Gecko) Chrome/4.0.249.0 Safari/532.5"}
pic = requests.get(sensitive_url, headers=headers, timeout=300)
if pic.status_code == 200:
    with open("sensitive.jpg", 'wb') as f:
        f.write(pic.content)
sensitive_pic = Image.open("sensitive.jpg")

# 爬虫获取的图片
target_url="https://ws3.sinaimg.cn/large/006tNbRwgy1fwttsauo6jj30h80han0y.jpg"
pic = requests.get(target_url, headers=headers, timeout=300)
if pic.status_code == 200:
    with open("target.jpg", 'wb') as f:
        f.write(pic.content)
target_pic = Image.open("target.jpg")

# 判断爬虫获取的图片和敏感图片是否相似
if is_imgs_similar(target_pic, sensitive_pic):
    print("2张图片相似,替换敏感图片为”优雅的python“:{}".format("https://ws2.sinaimg.cn/large/006tNbRwgy1fw9yjmot3uj30y60y6q40.jpg"))
else:
    print("不相似")

运行结果:

爬虫敏感图片的识别与过滤,了解一下?

github源码

https://gist.github.com/luzih...

参考文章

  • 相似图片检测?三行代码就够了 - 掘金
  • 此 Python2 脚本怎么修改为 Python3 运行 - V2EX
点赞
收藏
评论区
推荐文章
DevOpSec DevOpSec
4年前
敏感词库下载
链接: https://github.com/chason777777/mgck.git(https://github.com/chason777777/mgck.g
Wesley13 Wesley13
3年前
java 基本语法
编写Java程序时,应注意以下几点:大小写敏感:Java是大小写敏感的,这就意味着标识符Hello与hello是不同的。类名:对于所有的类来说,类名的首字母应该大写。如果类名由若干单词组成,那么每个单词的首字母应该大写,例如 MyFirstJavaClass。
Karen110 Karen110
3年前
一篇文章教会你使用Python图片格式转换器并识别图片中的文字
在日常生活中,我们经常需要用到图片,我们都知道,图片的种类挺多的,在这里不一一列举。我们今天要完成就是一个图片转换器外加图片识别程序,废话不多说,直接就是淦!1.文字识别技术2.图片转换器一、文字识别技术首先介绍文字识别技术,就是读取图片之后然后把图片中的文字提取出来。1.打开百度开放平台进去之后咱们选择文字识别,可以看出,语音合成和图片识别的参数不一
Aimerl0 Aimerl0
4年前
Python网络爬虫与信息提取
title:Python网络爬虫与信息提取date:2020121001:00:23tags:Pythoncategories:学习笔记写在前面不知道写啥其实说实话TOC网络爬虫之规则安装requests库cmd命令行打开输入pip3installrequests,等待即可简单测试,爬一下bkjwpythonimportrequ
Wesley13 Wesley13
3年前
PHP 实现微信小程序敏感图片、内容检测接口
主要是为了调用微信小程序msgSecCheck、imgSecCheck接口。先附上小程序接口说明文档地址:https://developers.weixin.qq.com/miniprogram/dev/api/openapi/seccheck/msgSecCheck.html1、首先要获取a
Wesley13 Wesley13
3年前
mysql中varchar 大小写敏感问题
首先解释一下问题,大小写敏感分为两个层面:1.varchar类型的值,insert和select的结果是否是大小写敏感的?2.varchar类型的数据在比较的时候是否是大小写敏感的?insert和get是否大小写敏感通过查询mysql的配置参数,可以获得mysql本身对于varchar
Wesley13 Wesley13
3年前
Java编程安全漏洞之:数据或系统信息安全
Cleartext\_Submission\_of\_Sensitive\_Information明文提交敏感数据,使用明文通信方式传输、提交敏感数据修复建议加密后再提交或使用加密的通信方式传输、提交敏感数据。Use\_of\_Insufficiently\_Random\_Values使用了不够随机的随机值
Stella981 Stella981
3年前
Serverless 实战:3 分钟实现文本敏感词过滤
敏感词过滤是随着互联网社区发展一起发展起来的一种阻止网络犯罪和网络暴力的技术手段,通过对可能存在犯罪或网络暴力可能的关键词进行有针对性的筛查和屏蔽,很多时候我们能够防患于未然,把后果严重的犯罪行为扼杀于萌芽之中。随着各种社交平台等的日益火爆,敏感词过滤逐渐成了非常重要的也是值得重视的功能。那么在Serverless架构下,通过Python语言,敏感
计算机视觉与信息取证技术讲解
今晚20:0022:00人工智能技术与自信计算机视觉就是用各种成像系统代替视觉器官作为输入敏感手段,由计算机来代替大脑完成处理和解释。计算机视觉的最终研究目标就是使计算机能象人那样通过视觉观察和理解世界,具有自主适应环境的能力。要经过长期的努力才能达到的目标。因此,在实现最终目标以前,人们努力的中期目标是建立一种视觉系统,这个系统能依据视觉敏感和反馈的某
崇恩圣帝 崇恩圣帝
1年前
使用Python识别英文数字验证码的实用指南
在网络应用中,英文数字验证码通常用于验证用户身份或防止机器人恶意行为。本文将介绍如何使用Python和一些常用的库来识别这类验证码,让你轻松应对验证码识别问题。1.下载验证码图片首先,我们需要从网络上下载验证码图片。假设验证码图片的URL为http://e
融云IM即时通讯 融云IM即时通讯
6个月前
融云 IM 干货丨如何确保拦截功能不会误拦截正常消息?
要确保拦截功能不会误拦截正常消息,可以采取以下几个措施:1.精确配置拦截规则:在配置拦截规则时,应尽可能精确地定义哪些消息或行为应该被拦截,哪些不应该。例如,在华为云的敏感信息过滤中,可以添加防敏感信息泄露规则,对返回页面中包含的敏感信息做屏蔽处理,防止用