百度图像模糊程度判断

本文介绍了在模糊图像环境下,使用百度API进行图像质量检测的过程。作者发现默认API并未提供清晰度信息,于是深入研究文档,配置了自定义策略以获取图像清晰度评分。经过调整策略阈值,验证并启用策略后,成功实现了对图像清晰度的判断。同时,文章探讨了基于OpenCV的模糊度检测方法,并对比了不同图片的测试结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

💖 1. 问题说明

1.1 模糊/反光图像

之前做项目的时候,摄像头采集数据环境,在demo现场,由于摄像头被放在玻璃柜中,玻璃反光和灯光等原因,采集到的图像比较模糊。

类似下图。
在这里插入图片描述
所以这里对百度的判断图像模糊程度的API进行简单使用,主要参考:

1.2 直接使用百度web测试

测试网页:https://ai.baidu.com/tech/imagecensoring
在这里插入图片描述
可以看到,识别结果中有图文审核的结果,但是其信息是存在恶意推广不合格,没有给出我想要的图像质量信息。

🎂 2. 实施

2.1 跑通代码

# encoding:utf-8
import requests
import json

# 第一步:通过AK和SK获取token 参考 https://ai.baidu.com/ai-doc/ANTIPORN/skk9093a1

def getToken(client_id, client_secret):
    # client_id 为官网获取的AK, client_secret 为官网获取的SK
    host = f'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id={client_id}&client_secret={client_secret}'
    response = requests.get(host)
    dictRS = dict(response.json())
    if response:
        print(dictRS)
    token = dictRS["access_token"]
    return token


# 第二步:根据给出的token去进行post请求
import base64

def getRS(token, imgPath):
    request_url = "https://aip.baidubce.com/rest/2.0/solution/v1/img_censor/v2/user_defined"
    # 二进制方式打开图片文件
    f = open(imgPath, 'rb')
    img = base64.b64encode(f.read())
    params = {"image": img}
    access_token = token
    request_url = request_url + "?access_token=" + access_token
    headers = {'content-type': 'application/x-www-form-urlencoded'}
    response = requests.post(request_url, data=params, headers=headers)
    if response:
        print(json.dumps(response.json(), sort_keys=True, indent=4, separators=(', ', ': '), ensure_ascii=False))
        # 这里是为了让打印出的json格式更直观
        # 重点是这行代码
    dictRS=dict(response.json())
    return dictRS


imgPath = "17.png"
client_id = "XXX"
client_secret = "XXX"
token = getToken(client_id, client_secret)
print(token)
response=getRS(token,imgPath)

但是直接这样检测出来的结果并不是我想要的关于图像质量-清晰度的信息。
在这里插入图片描述

2.2 配置策略

仔细看官方文档-配置图像审核策略才发现:
>
上面那个文档写的十分详细,可以参照往下走。

所以我想要的图像质量检测:对图像的清晰度和美观度进行打分这个策略需要自己重新配置。

  1. 点击这里配置,创建策略->填写相关信息
    (注意,接口形式可能会发生变化,以官方文档为准
    在这里插入图片描述
  2. 配置完了还需要验证!验证!就是弹出一个框框,可以使用自己上传的图片验证
    在这里插入图片描述
    但是返回的结果中,似乎没有我想要的清晰度信息??
  3. 认真看了一下策略配置,在这里把违规和疑似的区间放大,这样只要是不太清晰的,模糊的图像都会被判定为不合格。
    在这里插入图片描述
    这里疑似区间:[0.4-0.71],违规区间:[0-0.4]
  4. 将清晰度阈值修改后,结果就好多了。
    在这里插入图片描述
  5. 验证可用之后,为了保证API接口的更新,需要点击启用策略
    在这里插入图片描述
    这样,策略就从停用状态变成了启用状态
    在这里插入图片描述
    启用之后,再次运行代码,可以看到:
    在这里插入图片描述
    策略规定中:疑似区间:[0.4-0.71],违规区间:[0-0.4]
    参数说明:
"""
conclusion 审核结果,可取值描述:合规、不合规、疑似、审核失败
conclusionType	审核结果类型,可取值1、2、3、4,分别代表1:合规,2:不合规,3:疑似,4:审核失败
probability	不合规项置信度
msg probability	Float	N	不合规项置信度
subType 当type=6时subType取值含义: 0:图像清晰度、1:图像美观度
type 结果具体命中的模型:6:图像质量检测
"""

3. 技术探究

可以用了,也知道是基于阈值的判断,剩下就是看使用了怎样的方式判断清晰度。

参考:

3.1 问题探究

进行了测试
在这里插入图片描述
图1
在这里插入图片描述
图2
在这里插入图片描述
图3

确实第一,第二张图人眼来看明显比第三张图要模糊,但是第三张图的清晰度判断概率却是最高的?

3.2 模拟实施

直接搜索opencv图像模糊检测,就可以看到非常多相关的东西。

3.2.1 基于cv2.Laplacian的测试

一般的做法是:

采用 OpenCV和拉普拉斯算子来计算图片中的模糊量,也就是拉普拉斯方差算法(Variance of the Laplacian)。
opencv中提供了对laplace的封装方法,直接调用即可得到拉普拉斯算子边缘检测的图片

python版本实现代码

等待填坑

对上述三张图片的测试结果

参考:

3.2.2 测试2

参考 图像的模糊检测方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吨吨不打野

解决了问题,觉得还行就给点

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值