摘要:爬蟲敏感圖片的識別與過濾,了解一下需求我們需要識別出敏感作者的頭像把皮卡丘換成優(yōu)雅的。對比哈希不同圖片對比的方法,就是對比它們的位哈希中,有多少位不一樣漢明距離。
爬蟲敏感圖片的識別與過濾,了解一下? 需求
我們需要識別出敏感作者的avatar頭像,把”皮卡丘“換成”優(yōu)雅的python“。
敏感圖片樣本屬性:
爬蟲獲取的圖片屬性:
替換成:
檢查兩個(gè)圖片的相似度,一個(gè)簡單而快速的算法:感知哈希算法(Perceptual Hash),通過某種提取特征的方式為每個(gè)圖片計(jì)算一個(gè)指紋(哈希),這樣對比兩個(gè)圖片相似與否就變成了對比兩個(gè)指紋異同的問題。
實(shí)現(xiàn)Step1.縮小尺寸代碼(python3)將圖片縮小到8*8的大小,這樣做可以去除圖片的細(xì)節(jié),只保留結(jié)構(gòu)和明暗等基本信息,同時(shí)摒棄不同尺寸和比例帶來的圖片差異。
Step2.灰度處理把縮小后的圖片轉(zhuǎn)化為64級灰度圖(每個(gè)像素只有64種顏色)。
Step3.計(jì)算平均值計(jì)算所有64個(gè)像素的灰度平均值。
Step4.計(jì)算哈希這里哈希的計(jì)算方法是:上面說的64個(gè)像素的灰度與平均值進(jìn)行比較,大于或等于平均值記為1,小于記為0。
將每個(gè)像素的比較結(jié)果組合在一起成為一個(gè)64位的二進(jìn)制整數(shù),這個(gè)整數(shù)就是此圖片的指紋。
Step5.對比哈希不同圖片對比的方法,就是對比它們的64位哈希中,有多少位不一樣(漢明距離)。一般來說如果不同的位數(shù)不超過5,就說明兩張圖片很相似,如果大于10,就很可能是兩張不同的圖片。
先來安裝pillow、requests:
pip3 install pillow requests
導(dǎo)入包:
from functools import reduce from PIL import Image import requests
實(shí)現(xiàn)圖片相似度算法:
# 計(jì)算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 ) # 計(jì)算漢明距離: def hamming_distance(a, b): return bin(a^b).count("1") # 計(jì)算兩個(gè)圖片是否相似: def is_imgs_similar(img1,img2): return True if hamming_distance(phash(img1),phash(img2)) <= 5 else False
結(jié)合爬蟲:
# 打開本地存放一張敏感圖片; # 本次為了方便演示,從新浪圖床拉下一張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張圖片相似,替換敏感圖片為”優(yōu)雅的python“:{}".format("https://ws2.sinaimg.cn/large/006tNbRwgy1fw9yjmot3uj30y60y6q40.jpg")) else: print("不相似")
運(yùn)行結(jié)果:
github源碼https://gist.github.com/luzih...
參考文章相似圖片檢測?三行代碼就夠了 - 掘金
此 Python2 腳本怎么修改為 Python3 運(yùn)行 - V2EX
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/44923.html
摘要:異步事件處理本項(xiàng)目涉及到多種異步事件的處理。即是的粉絲,是的關(guān)注對象。模式定義優(yōu)缺點(diǎn)推事件觸發(fā)后廣播給所有粉絲。具體來說,推模式就是事件觸發(fā)后產(chǎn)生,觸發(fā)事件的用戶下所有粉絲的實(shí)現(xiàn)中都存入該的。 項(xiàng)目源代碼已托管在 Github,歡迎 Star、Fork。 Q & A 問答社區(qū) QA 是一個(gè)基于 B/S 架構(gòu)而設(shè)計(jì)開發(fā)的社區(qū)網(wǎng)站。 showImg(https://segmentfault...
摘要:時(shí)間永遠(yuǎn)都過得那么快,一晃從年注冊,到現(xiàn)在已經(jīng)過去了年那些被我藏在收藏夾吃灰的文章,已經(jīng)太多了,是時(shí)候把他們整理一下了。那是因?yàn)槭詹貖A太亂,橡皮擦給設(shè)置私密了,不收拾不好看呀。 ...
摘要:圖意淫爬蟲與反爬蟲間的對決數(shù)據(jù)的重要性如今已然是大數(shù)據(jù)時(shí)代,數(shù)據(jù)正在驅(qū)動著業(yè)務(wù)開發(fā),驅(qū)動著運(yùn)營手段,有了數(shù)據(jù)的支撐可以對用戶進(jìn)行用戶畫像,個(gè)性化定制,數(shù)據(jù)可以指明方案設(shè)計(jì)和決策優(yōu)化方向,所以互聯(lián)網(wǎng)產(chǎn)品的開發(fā)都是離不開對數(shù)據(jù)的收集和分析,數(shù) showImg(https://segmentfault.com/img/remote/1460000013428119?w=539&h=337)...
摘要:月日下午,趙之健在七牛架構(gòu)師實(shí)踐日第二十九期進(jìn)行了多維度融合賦能視頻的實(shí)踐為題的實(shí)戰(zhàn)分享。本文主要分享了七牛人工智能實(shí)驗(yàn)室在視頻方面的一些工作,分別有兩個(gè)關(guān)鍵詞一個(gè)是多維度融合,另外一個(gè)關(guān)鍵詞是視頻。 6 月 30 日下午,趙之健在七牛架構(gòu)師實(shí)踐日第二十九期進(jìn)行了《多維度融合賦能視頻 AI 的實(shí)踐》為題的實(shí)戰(zhàn)分享。? 作者簡介:?showImg(https://segmentfault...
閱讀 2866·2021-10-21 09:38
閱讀 2764·2021-10-11 10:59
閱讀 3057·2021-09-27 13:36
閱讀 1673·2021-08-23 09:43
閱讀 806·2019-08-29 14:14
閱讀 3044·2019-08-29 12:13
閱讀 3212·2019-08-29 12:13
閱讀 319·2019-08-26 12:24