PHP利用百度ai实现文本和图片审核


Posted in PHP onMay 08, 2019

PHP利用百度ai实现文本和图片审核

之前做平台内容发布审核都是自己构建一套违禁词库,在代码中利用词库判断用户发布的内容,现在可以使用百度ai api完成这个功能。接下来就简单说下怎么做吧:

首先打开百度ai 开发平台 注册一个账号:

PHP利用百度ai实现文本和图片审核

注册账号,进入控制台

PHP利用百度ai实现文本和图片审核

创建自己的应用,获取apikey 和秘钥

PHP利用百度ai实现文本和图片审核

进入文档页 文本审核:

PHP利用百度ai实现文本和图片审核

图像审核:

PHP利用百度ai实现文本和图片审核

文档很详细,实现用户发布内容审核 图片审核还是很方便简单的。我没有使用官方的sdk,简单的整合了一下作为练手,以下是我简单的代码demo:

class Sentive
{
  protected $accessTokenUrl = 'https://aip.baidubce.com/oauth/2.0/token';//获取token url
  protected $textUrl = 'https://aip.baidubce.com/rest/2.0/antispam/v2/spam';//文本审核url
  protected $imgUrl = 'https://aip.baidubce.com/api/v1/solution/direct/img_censor';//图片审核url
  protected $avatarUrl = 'https://aip.baidubce.com/rest/2.0/solution/v1/face_audit';//头像审核url

  protected $grant_type;

  protected $client_id;

  protected $client_secret;

  function __construct()
  {
    $this->grant_type = 'client_credentials';
    $this->client_id = 'xxx';//API Key
    $this->client_secret = 'xxx';//Secret Key
  }

  static function request($url = '', $param = '')
  {
    if (empty($url) || empty($param)) {
      return false;
    }

    $postUrl = $url;
    $curlPost = $param;
    $curl = curl_init();//初始化curl
    curl_setopt($curl, CURLOPT_URL, $postUrl);//抓取指定网页
    curl_setopt($curl, CURLOPT_HEADER, 0);//设置header
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);//要求结果为字符串且输出到屏幕上
    curl_setopt($curl, CURLOPT_POST, 1);//post提交方式
    curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);
    $data = curl_exec($curl);//运行curl
    curl_close($curl);


    return $data;
  }

  static function request_post($url = '', $param = array(), $type)
  {
    if (empty($url) || empty($param)) {
      return false;
    }

    $postUrl = $url;
    $curlPost = $param;
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $postUrl);
    curl_setopt($curl, CURLOPT_HEADER, 0);
    // 要求结果为字符串
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    // post方式
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);
    if ($type == "text") {
      curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
    } else {
      curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json;charset=utf-8'));
    }
    curl_setopt($curl, CURLINFO_HEADER_OUT, true);
    $data = curl_exec($curl);
    $code = curl_getinfo($curl, CURLINFO_HTTP_CODE);

    if ($code === 0) {
      throw new \Exception(curl_error($curl));
    }
    curl_close($curl);
    return $data;
  }

  //获取token
  public function getToken()
  {
    new Redis();
    $post_data['grant_type'] = $this->grant_type;
    $post_data['client_id'] = $this->client_id;
    $post_data['client_secret'] = $this->client_secret;
    $o = "";
    foreach ($post_data as $k => $v) {
      $o .= "$k=" . urlencode($v) . "&";
    }
    $post_data = substr($o, 0, -1);
    $res = self::request($this->accessTokenUrl, $post_data);
    $redis->setkey("filterToken", json_decode($res, true)['access_token']);
    return json_decode($res, true)['access_token'];
  }

  //文本审核
  public function textVerify($data)
  {
    new Redis();
    $token = $redis->get("filterToken");
    if (empty($token)) {
      $token = $this->getToken();
    }
    $curl = $this->textUrl . "?access_token=" . $token;
    $result = self::request_post($curl, $data, "text");
    return json_decode($result, true);
  }

  //图片审核
  public function imgVerify($img)
  {
    $redis = new Redis();
    $token = $redis->get("filterToken");
    if (empty($token)) {
      $token = $this->getToken();
    }
    $curl = $this->imgUrl . "?access_token=" . $token;
    $bodys = array(
      'image' => $img,
      'scenes' => array("ocr",
        "face", "public", "politician", "antiporn", "terror", "webimage", "disgust",
        'watermark')
    );
    $bodys = json_encode($bodys);
    $result = self::request_post($curl, $bodys, "img");
    return json_decode($result, true);
  }


  //头像审核
  public function avatarVerify($img)
  {
    $redis = new Redis();
    $token = $redis->get("filterToken");
    if (empty($token)) {
      $token = $this->getToken();
    }
    $curl = $this->avatarUrl . "?access_token=" . $token;
    $bodys = array(
      "configId" => "1",
      "images" => $img
    );
    $result = self::request_post($curl, $bodys, "text");
    return json_decode($result, true);
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
使用PHP制作新闻系统的思路
Oct 09 PHP
让你同时上传 1000 个文件 (一)
Oct 09 PHP
基于HTTP长连接的"服务器推"技术的php 简易聊天室
Oct 31 PHP
PHP函数spl_autoload_register()用法和__autoload()介绍
Feb 04 PHP
解析PHP高效率写法(详解原因)
Jun 20 PHP
PHP连接和操作MySQL数据库基础教程
Sep 29 PHP
php随机抽奖实例分析
Mar 04 PHP
php外部执行命令函数用法小结
Oct 11 PHP
WAF的正确bypass
Jan 05 PHP
PHP大文件分割上传 PHP分片上传
Aug 28 PHP
PHP实现生成推广海报的方法详解
Mar 14 PHP
Yii框架应用组件用法实例分析
May 15 PHP
PHP回调函数简单用法示例
May 08 #PHP
Thinkphp5+plupload实现的图片上传功能示例【支持实时预览】
May 08 #PHP
PHP封装类似thinkphp连贯操作数据库Db类与简单应用示例
May 08 #PHP
php封装的pdo数据库操作工具类与用法示例
May 08 #PHP
Laravel框架查询构造器简单示例
May 08 #PHP
Laravel Validator 实现两个或多个字段联合索引唯一
May 08 #PHP
PHP+百度AI OCR文字识别实现了图片的文字识别功能
May 08 #PHP
You might like
php结合飞信 免费天气预报短信
2009/05/07 PHP
浅析PHP程序设计中的MVC编程思想
2014/07/28 PHP
Thinkphp将二维数组变为标签适用的一维数组方法总结
2014/10/30 PHP
php 反斜杠处理函数addslashes()和stripslashes()实例详解
2016/12/25 PHP
PHP实现的回溯算法示例
2017/08/15 PHP
在laravel中实现将查询的对象转换为多维数组的函数
2019/10/21 PHP
TP5框架实现的数据库备份功能示例
2020/04/05 PHP
让JavaScript 轻松支持函数重载 (Part 1 - 设计)
2009/08/04 Javascript
div+css+js实现无缝滚动类似marquee无缝滚动兼容firefox
2013/08/29 Javascript
Jquery获取元素的父容器对象示例代码
2014/02/10 Javascript
Node.js Addons翻译(C/C++扩展)
2016/06/12 Javascript
node网页分段渲染详解
2016/09/05 Javascript
VUE实现可随意拖动的弹窗组件
2018/09/25 Javascript
JavaScript学习笔记之DOM操作实例分析
2019/01/08 Javascript
React中this丢失的四种解决方法
2019/03/12 Javascript
JS实现返回上一页并刷新页面的方法分析
2019/07/16 Javascript
微信用户访问小程序的登录过程详解
2019/09/20 Javascript
LayUi数据表格自定义赋值方式
2019/10/26 Javascript
JS co 函数库的含义和用法实例总结
2020/04/08 Javascript
ES6 Symbol在对象中的作用实例分析
2020/06/06 Javascript
如何在Express4.x中愉快地使用async的方法
2020/11/18 Javascript
cmd运行python文件时对结果进行保存的方法
2018/05/16 Python
学习python可以干什么
2019/02/26 Python
python进程和线程用法知识点总结
2019/05/28 Python
Python的bit_length函数来二进制的位数方法
2019/08/27 Python
python使用docx模块读写docx文件的方法与docx模块常用方法详解
2020/02/17 Python
html5 postMessage解决跨域、跨窗口消息传递方案
2016/12/20 HTML / CSS
韩国保养品、日本药妆购物网:小三美日
2018/12/30 全球购物
一套比较完整的软件测试人员面试题
2012/05/13 面试题
医药代表个人的求职信分享
2013/12/08 职场文书
医院安全生产月活动总结
2014/07/05 职场文书
摄影专业毕业生求职信
2014/08/05 职场文书
白银帝国观后感
2015/06/17 职场文书
《自己的花是让别人看的》教学反思
2016/02/19 职场文书
深入浅出讲解Java8函数式编程
2022/01/18 Java/Android
win11自动弹出虚拟键盘怎么关闭? Win11关闭虚拟键盘的技巧
2023/01/09 数码科技