博主运营着一个免费图床(图仓,提供免费图片托管服务,点此直达),虽然在服务条款里明确说明禁止上传色情内容,但还是会有小伙伴时不时上传。 Chevereto 本身不支持鉴黄,但是可以通过修改代码的方式接入第三方平台,实现在线鉴黄功能。本文详细介绍如何通过修改代码将 Chevereto 接入百度智能云内容审核平台并启用在线鉴黄功能。

获取百度智能云应用 API

API 申请地址:https://console.bce.baidu.com/ai/#/ai/antiporn/app/list

打开上述 API 申请地址,使用自己的百度智能云账号登录。没有账号的可以现注册,或者直接使用百度账号登录。登录后点击 创建应用 新建一个应用,应用名称随便起,应用类型选工具应用,接口类型按默认就行,应用描述随便填,点击 立即创建 创建应用,如下图所示。应用创建完成后记录好 appidappkeyappseret ,后面会用到。

create-api.png

备份 Chevereto 主程序及数据库

首先备份 Chevereto 主程序及数据库,万一修改失败可以及时恢复。

备份数据库

使用如下命令备份数据库,命令中的数据库名称需要按实际修改:

mysqldump -u root -h localhost -p --databases imagehub > /root/imagehub-databases.sql

备份主程序

使用如下命令备份主程序,程序路径及目录名称需按实际修改:

cd /var/www && cp -r imagehub imagehub.bak

PS:如要还原主程序及及数据库,按以下方式恢复即可。同样的,数据库名、主程序路径以及主程序目录按实际修改。
还原数据库,以下命令逐行执行:

mysql -u root -p
drop database imagehub; 
source /root/imagehub-databases.sql;
quit

还原主程序,以下命令一起执行:

cd /var/www && rm -rf imagehub && \
cp -r imagehub.bak imagehub && \
chown -R www-data:www-data /var/www/imagehub

为鉴黄功能增加数据库记录

需要在数据库的 settings 表(默认表名为 chv_settings ,博主的表名修改成了 settings )中增加四条记录,用于记录百度智能云应用 API 以及鉴黄功能的开启状态。首先进入数据库:

mysql -u root -p

依次执行下面四条语句插入相应记录,注意将数据库名称和表名按实际进行修改:

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

添加图像审核代码

vim /var/www/imagehub/app/lib/classes/class.upload.php

public function exec 函数上方添加以下代码:

/** 图像审核
 * @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);
        }
    }
}

同时在 public function exec 函数 $this->validateInput(); // Exception 1 行上方添加以下代码,修改完成后保存并退出:

$this->isValidCensor();

修改后的效果如下图所示:

JH-class.upload.php-modify.png

添加后台设置代码

cp /var/www/imagehub/app/themes/Peafowl/views/dashboard.php /var/www/imagehub/app/themes/Peafowl/overrides/views && \
vim /var/www/imagehub/app/themes/Peafowl/overrides/views/dashboard.php

搜索 Cookie law compliance ,在 <div class="input-label"> 最后一个 </div> 标签后面添加以下代码:

    <!-- 增加图片审核-->
    <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>

修改后的效果如下图所示:

JH-dashboard.php-modify.png

修复权限:

chown -R www-data:www-data /var/www/imagehub

上传百度智能云 SDK

需要用到四个文件:class.aipbase.phpclass.aiphttpclient.phpclass.aiphttpUril.php 以及 class.imagecensor.php 。这四个文件取自官方 SDK ,只按 Chevereto 命名规则进行重命名以及增加 namespace CHV; 命名空间。修改后的四个文件已打包,点此下载。

做完以上步骤后刷新网站,进入 仪表盘 - 设置 - 其它设置 - 是否开启图片审核 - 启用,并填写第一步中申请的 appidappkeyappseret ,保存即可。刷新网站,上传图片测试一下,鉴黄功能应该已经成功启用。通过审核的内容可以正常上传,审核不过的内容返回内容违规,无法完成上传。可以进入百度智能云内容审核平台创建审核策略,对审核的内容以及尺度进行自定义。审核策略创建地址如下:

https://ai.baidu.com/censoring#/strategylist

通过以上步骤便可将 Chevereto 接入百度智能云内容审核平台并开启在线鉴黄功能。感谢 alone88 大佬提供代码协助。本文结束。

文章目录