火眼金睛 判断图片是否合规——科大讯飞API
评论
收藏

火眼金睛 判断图片是否合规——科大讯飞API

经验分享
张亚萌
2023-12-26 10:52·浏览量:403
张亚萌
发布于 2023-12-26 10:52403浏览

一、案例背景:

有很多做电商的朋友在活动期间会频繁更换商品主图、活动图等,但是在上传图片之前又需要进行图片的审核,看是否有一些违规的地方,正常情况下都是根据人眼去人为的判断是否违规,这种方式在大量图片的情况下直接就会瓦掉,太浪费时间,那基于这种情况下,看了下科大讯飞的接口正好有这样的功能(当然别的平台大概率也是有这种接口的,例如百度云,但是科大讯飞这两年不是挺名声躁动嘛hhhh 所以拿出来玩玩~)



二、接口文档:

基于深度学习的图片检测技术,精准高效识别各类场景中违禁、涉政、色情、未成年违规、暴恐、广告、Logo水印等风险图片内容。

https://www.xfyun.cn/doc/nlp/ImageModeration/API.html#%E6%8E%A5%E5%8F%A3%E8%AF%B4%E6%98%8E





三、科大讯飞控制台

Q1:为什么要放科大讯飞控制台?

A1:调用科大讯飞接口需要创建对应的应用,然后在应用里面找打对应的接口信息,拿到对应的APPID、APISecret、APIKey

Q2:是否需要充钱呢?

A2:首次新用户注册会送200张免费的,用完以后需要充¥~~ (市面上其他的接口基本上都是一样的,免费的消耗完,需要额外冲米)

①:控制台网址: https://console.xfyun.cn/app/myapp

②:新建应用:





②:点击到新建的应用,拿到关键信息:







③:点击购买服务量,第一次可以免费领200张







三、完整代码:

import string
import random
from urllib.parse import urlencode
import hmac
import hashlib
import base64
import datetime
from datetime import datetime
import requests

ss = requests.session()


class Image_select():
    def __init__(self):
        self.url = 'https://audit.iflyaisol.com/audit/v2/image'
        self.APPID = 'xxxx'  # 改成你的控制台里面的APPID
        self.APISecret = 'xxxx'  # 改成你的控制台里面的APISecret
        self.APIKey = 'xxxxx'    # 改成你的控制台里面的APIKey
        self.current_time = datetime.utcnow()
        self.formatted_time = self.current_time.strftime("%Y-%m-%dT%H:%M:%S+0000")
        self.uuid = ''.join(random.sample(string.ascii_letters + string.digits, 32))

    # 1、鉴权参数
    def sign_param(self):
        data_dict = {
            "appId": self.APPID,
            "accessKeyId": self.APIKey,
            "accessKeySecret": self.APISecret,
            "utc": self.formatted_time,
            "uuid": self.uuid,
            "modeType": "base64"
        }
        # 参数字典倒排序为列表
        params_list = sorted(data_dict.items(), key=lambda x: x[0], reverse=False)

        # 还原字典
        params_str_dict = dict(params_list)

        # 然后urlencode
        params_str_urlencode = urlencode(params_str_dict)

        return params_str_dict, params_str_urlencode

    # 2、鉴权获取
    def get_sign(self):
        params_str_dict, params_str_urlencode = self.sign_param()

        # 进行HMAC运算算法
        # 将 baseString 转换为 bytes 类型
        params_str_urlencode_new = bytes(params_str_urlencode, 'utf-8')

        # 将 accessKeySecret 转换为 bytes 类型
        accessKeySecret = bytes(self.APISecret, 'utf-8')

        # 使用 HmacSHA1 算法生成签名
        baseString = hmac.new(accessKeySecret, params_str_urlencode_new, hashlib.sha1).digest()

        # 得到signature
        signature = base64.b64encode(baseString).decode(encoding='utf-8')

        # url参数加上signature
        params_str_dict["signature"] = signature

        # 将params_str_dict转换为str,并且将里面的:替换为=号,并且剔除空格
        params_str = str(params_str_dict).replace(':', '=').replace(' ', '').replace("'", '')

        return params_str, params_str_dict

    # 3、获取请求结果
    def get_data(self, file_path):
        param_str, params_str_dict = self.get_sign()
        param_str_url = urlencode(params_str_dict)

        # 1.拼接url地址:
        url = self.url + '?' + param_str_url
        header = {'Content-Type': 'application/json;charset=UTF-8'}
        print(url)
        with open(file_path, 'rb') as image_file:
            encoded_string = base64.b64encode(image_file.read())

        data_number = {
            'content': encoded_string.decode('utf-8')
        }

        res = ss.request(method='POST', url=url, headers=header, json=data_number).json()
        res = res['data']['result']['detail']['category_list']
        if res:
            return res
        else:
            return '没有不合格的地方'


if __name__ == '__main__':
    spider = Image_select()
    print(spider.get_data(r'xxxxxxx'))  # 双引号内改成你的本地路径图片

代码参数解释:

self.APPID = 'xxxx' # 改成你的控制台里面的APPID self.APISecret = 'xxxx' # 改成你的控制台里面的APISecret self.APIKey = 'xxxxx' # 改成你的控制台里面的APIKey

spider.get_data(r'xxxxxxx') # 双引号内改成你的本地路径图片



四、注意点

因为这个上边的这个接口我是用的第二种方式,传入本地图片,所以本地的图片base64最大5M,通过URL外链的图片最大20M,然后图片格式支持PNG、JPG、JPEG、BMP、GIF、WEBP格式



五、扩展点:

我上边的这个接口方式是使用的本地图片,科大讯飞接口提供另外一种方式,直接使用URL外链(即网络图片地址,不需要上传服务器,就是前端网页中的那种src属性对应的值),想要实现这种方式也很简单,只需要改动一个参数,这个问题留给大家~~~



收藏3
全部评论1
最新
发布评论



请输入内容
评论