ccruiの博客

ccruiの博客

chevereto调用百度API鉴黄

29
2020-07-29

Chevereto增加百度AI审核功能,并开启图片鉴黄

众所周知,运营一个图床让人头疼的不仅仅是带宽配置,更让人忧心的是用户会不间断的上传违规图片,今天技术宅给大家带来的是Chevereto增加百度AI审核功能,并开启图片鉴黄,并且后台可以设置百度AI的相关参数,例如AppID,API Key,Secret Key

添加应用

我们需要现在https://console.bce.baidu.com/ai/#/ai/antiporn/app/list添加应用,只需要添加应用名称,修改应用类型和描述即可,其他默认!

2020050612481471.png

创建完成后会获得例如AppID,API Key,Secret Key我们后面会用到

添加文件

我们需要前往**https://ai.baidu.com/sdk#anti**下载PHP版本的SDK文件,需要用到 4 个文件,class.aipbase.php class.aiphttpclient.php class.aiphttpUril.php class.imagecensor.php , 这四个文件是百度官方提供的 SDK ,技术宅这里修改了一下。嫌麻烦的可以下载技术宅打包好的文件即可!注意需要将默认的SDK文件中的头部都修改为:namespace CHV;

将四个文件上传至 Chevereto 程序下的 app/lib/classes 文件夹下。

修改文件

修改路径为:app/lib/classes中的class.upload.php,搜索public static function getDefaultOptions()然后在此函数结束的下面添加以下内容:

/** 图像审核
* @throws UploadException
*/
protected function isValidCensor()
{
$censor_status = Settings::get("is_censor");
if($censor_status == 1){
$censor = new Imagecensor();
if ($this->type == 'file') {
$rep = $censor->imageCensorUserDefined(file_get_contents($this->source['tmp_name']));
} else if ($this->type == 'url') {
$rep = $censor->imageCensorUserDefined($this->source);
}
if (array_key_exists('error_code', $rep)) throw new UploadException("图片审核失败", 201);
$conclusionType = $rep['conclusionType'];//1:合规,2:不合规,3:疑似,4:审核失败
if ($conclusionType == 4) {
throw new UploadException("图片审核失败", 201);
} else if ($conclusionType > 1) {
throw new UploadException("图片违规", 201);
}
}
}

2020050612591556.png

其中的函数isValidCensor 这个方法就是审核图像的,只有通过验证才会上传文件,没有通过的话会直接异常(包括图片审核失败,不合规,疑似)

然后在 class.upload.phpexec 方法里面添加 一行$this->isValidCensor(); // Exception 2 图片审核

2020050613012219.png

最后我们需要修改app/themes/Peafowl/views/dashboard.php,搜索代码中的Cookie law compliance在上一行添加以下代码:

<!-- 增加图片审核-->
<div class="input-label">
<label for="enable_cookie_law"><?php _se('是否开启图片审核'); ?></label>
<div class="c5 phablet-c1"><select type="text" name="is_censor" id="is_censor" class="text-input">
<?php
echo CHV\Render\get_select_options_html([1 => _s('Enabled'), 0 => _s('Disabled')], CHV\Settings::get('is_censor')); ?>
</select></div>
<div class="input-below"><?php _se('是否开启图片审核'); ?></div>
</div>
<div class="input-label">
<label for="sdk_pup_url">百度AI APP_ID</label>
<div class="c9 phablet-c1"><input type="text" name="baidu_app_id" id="baidu_app_id" class="text-input" value="<?php echo CHV\Settings::get('baidu_app_id', true); ?>" placeholder="<?php _se('Empty'); ?>"></div>
<div class="input-below input-warning red-warning"><?php echo get_input_errors()['baidu_app_id']; ?></div>
<div class="input-below"><?php _se('百度AI 平台的 app_id,获取地址: https://console.bce.baidu.com/ai/'); ?></div>
</div>
<div class="input-label">
<label for="sdk_pup_url">百度AI APP_KEY</label>
<div class="c9 phablet-c1"><input type="text" name="baidu_app_key" id="baidu_app_key" class="text-input" value="<?php echo CHV\Settings::get('baidu_app_key', true); ?>" placeholder="<?php _se('Empty'); ?>"></div>
<div class="input-below input-warning red-warning"><?php echo get_input_errors()['baidu_app_key']; ?></div>
<div class="input-below"><?php _se('百度AI 平台的 app_key,获取地址: https://console.bce.baidu.com/ai/'); ?></div>
</div>
<div class="input-label">
<label for="sdk_pup_url">百度AI APP_SECRET</label>
<div class="c9 phablet-c1"><input type="text" name="baidu_app_secret" id="baidu_app_secret" class="text-input" value="<?php echo CHV\Settings::get('baidu_app_secret', true); ?>" placeholder="<?php _se('Empty'); ?>"></div>
<div class="input-below input-warning red-warning"><?php echo get_input_errors()['baidu_app_secret']; ?></div>
<div class="input-below"><?php _se('百度AI 平台的 app_secret,获取地址: https://console.bce.baidu.com/ai/'); ?></div>
</div>

2020050613044456.png

插入数据库

完成以上操作后,我们需要插入数据库注意其中的表名chevereto和数据库前缀chv_需要修改成和自己一致的:

INSERT INTO `chevereto`.`chv_settings`( `setting_name`, `setting_value`, `setting_default`, `setting_typeset`) VALUES ('is_censor', '0','0', 'bool');
INSERT INTO `chevereto`.`chv_settings`( `setting_name`, `setting_value`, `setting_default`, `setting_typeset`) VALUES ( 'baidu_app_id', '', '', 'string');
INSERT INTO `chevereto`.`chv_settings`( `setting_name`, `setting_value`, `setting_default`, `setting_typeset`) VALUES ( 'baidu_app_key', '', '', 'string');
INSERT INTO `chevereto`.`chv_settings`(`setting_name`, `setting_value`, `setting_default`, `setting_typeset`) VALUES ('baidu_app_secret', '', '', 'string');

效果展示

2020050613075137.png

在后台设置完成参数后,我们再继续上传图片,这里用一张疑似违规图演示:

2020050613095497.png

成功拦截了上传,至于是否准确,技术宅这里要进行多次测试。不过用的百度AI鉴别,相信还是值得信赖的!

文件打包

原文打包链接在部署时存在一定问题,现提供其他博主提供的打包文件

[scode type="yellow"][hide]Chevereto-开启鉴黄功能.zip[/hide][/scode]

按照图中显示路径,直接替换服务器资源后,在后台设置百度APIkey即可

Snipaste_2020-07-29_19-32-44.png


本文转自 https://jszbug.com/17054