示例代码:
from PIL import Image
import imagehash
def img_simi(img_url,arr):
simi = 0
simi_img = ''
for img in arr:
# 生成图像的感知哈希
hash1 = imagehash.average_hash(Image.open(img_url))
hash2 = imagehash.average_hash(Image.open(img))
# 计算相似度
similarity = 1 - (hash1 - hash2) / len(hash1.hash) # 范围为0到1,值越大表示相似度越高
if similarity > simi:
simi = similarity
simi_img = img
return simi_img
from flask import Blueprint,request
from utils.entity import r
import aiohttp,base64
from io import BytesIO
from PIL import Image
import ddddocr
async def sendMsgAuto():
email = '邮箱账号'
async with aiohttp.ClientSession(connector=aiohttp.TCPConnector(limit=64, verify_ssl=False)) as session:
async with session.get('初始化滑动验证码的接口') as resp:
result = await resp.json()
result = result['data']
# 去除base64数据的前缀
prefix, data = result['img'].split(',', 1)
# 解码base64数据
decoded_data = base64.b64decode(data)
# 使用BytesIO将字节数据转为文件对象
image_file = BytesIO(decoded_data)
# 使用PIL创建图片
image = Image.open(image_file)
bg = image.crop([0,0,340,190])
bg.save('bg.png')
target = image.crop([4,196,56,246])
target.save('target.png')
bg_origin = img_simi('bg.png',['layer01.jpg','layer02.jpg','layer03.jpg'])
det = ddddocr.DdddOcr(det=False,ocr=True,show_ad=False)
with open('target.png','rb') as f:
target_bytes = f.read()
with open(bg_origin,'rb') as f:
background_bytes = f.read()
res = det.slide_match(target_bytes,background_bytes,simple_target=True)
value = res['target'][0]
async with session.post('验证滑动验证码接口',data={
'value': value,
'key': result['key'],
'email': email
}) as resp1:
data = await resp1.text()
return r(code=200, msg='success', data=data)