overtrue / laravel-qcloud-content-audit
腾讯云内容安全(文字图片内容审核)服务
Fund package maintenance!
overtrue
Installs: 6 734
Dependents: 0
Suggesters: 0
Security: 0
Stars: 44
Watchers: 3
Forks: 5
Open Issues: 2
Requires
- ext-json: *
- intervention/image: ^2.5
- laravel/framework: ^9.0|^10.0|^11.0
- tencentcloud/tencentcloud-sdk-php: ^3.0
Requires (Dev)
- brainmaestro/composer-git-hooks: dev-master
- laravel/pint: ^1.11
- mockery/mockery: ^1.4
- orchestra/testbench: ^8.0
- phpunit/phpunit: ^10.0
README
T-Sec 天御内容安全服务使用了深度学习技术,识别文本/图片中出现的可能令人反感、不安全或不适宜内容,支持用户配置词库/图片黑名单,识别自定义的识别类型。
Installing
$ composer require overtrue/Laravel-qcloud-content-audit -vvv
Config
请在 config/services.php
中配置以下内容:
//... // 文字识别服务 'tms' => [ 'secret_id' => env('TMS_SECRET_ID'), 'secret_key' => env('TMS_SECRET_KEY'), 'endpoint' => env('TMS_ENDPOINT'), // 可选,默认使用腾讯云默认策略 'biz_type' => env('TMS_BIZ_TYPE'), // 可选,开启后跳过 tms 识别/打码功能 'dry' => env('TMS_DRY', false), ], // 图片审核/识别服务 'ims' => [ 'secret_id' => env('IMS_SECRET_ID'), 'secret_key' => env('IMS_SECRET_KEY'), 'endpoint' => env('IMS_ENDPOINT'), // 可选,默认使用腾讯云默认策略 'biz_type' => env('IMS_BIZ_TYPE'), // 可选,开启后跳过 ims 识别功能 'dry' => env('IMS_DRY', false), ],
API
获取检查结果
调用对应 API 返回数组结果,返回值结构请参考官方 API 文档。
文本
接口请求频率限制:1000次/秒。
use Overtrue\LaravelQcloudContentAudit\Tms; array Tms::check(string $input);
图片
- 接口请求频率限制:100次/秒。
- 图片检测接口为图片文件内容,大小不能超过5M
- 图片将会缩放成 300*300 后检查
use Overtrue\LaravelQcloudContentAudit\Ims; array Ims::check(string $contents);
Tip
$contents
可以为:图片内容、图片本地路径或 URL。
检查并返回是否通过
use Overtrue\LaravelQcloudContentAudit\Tms; use Overtrue\LaravelQcloudContentAudit\Ims; bool Tms::validate(string $contents, string $strategy = 'strict') bool Ims::validate(string $contents, string $strategy = 'strict')
直接替换敏感文本内容
直接将检测到的敏感词替换为 *
:
use Overtrue\LaravelQcloudContentAudit\Tms; string Tms::mask(string $input, string $char = '*', string $strategy = 'strict'); // 示例: echo Tms::mask('这是敏感内容哦'); // "这是**哦"
在模型中使用
文本校验(CheckTextWithTms)
Warning
此操作为同步,可能会影响接口性能,谨慎使用
use Illuminate\Database\Eloquent\Model; use Overtrue\LaravelQcloudContentAudit\Traits\CheckTextWithTms; class Post extends Model { // 文本校验 use CheckTextWithTms; protected array $tmsCheckable = ['name', 'description']; protected string $tmsCheckStrategy = 'strict'; // 可选,默认使用最严格模式 //... }
文本打码(MaskTextWithTms)
异步检测到敏感内容时替换为 * 号。
use Illuminate\Database\Eloquent\Model; use Overtrue\LaravelQcloudContentAudit\Traits\MaskTextWithTms; class Post extends Model { use MaskTextWithTms; protected $tmsMaskable = ['name', 'description']; // protected $tmsMaskStrategy = 'strict'; // 开启打码的策略情况,可选,默认使用最严格模式 //... }
Warning
此行为为异步,默认监听模型 saved
事件,触发 MaskModelAttributes::dispatch($model)
,如需禁用此行为,可如下设置:
protected bool $tmsMaskOnSaved = false;
使用表单校验规则
您可以在表单验证时使用 tms
或者 tms:{strategy}
模式来进行表单验证:
$this->validate($request, [ 'name' => 'required|tms', // 使用默认 strict 策略 'avatar' => 'required|url|ims', // 使用默认 strict 策略 'description' => 'required|tms:strict', // 使用指定策略 'logo_url' => 'required|url|ims:logo', // 使用指定策略 ]);
配置策略
你可以通过以下方式注册一个或多个自定义校验规则,决定是否通过校验:
// 文字 Tms::setStrategy('strict', function($result) { return $result['Suggestion'] === 'Pass'; }); // 图片 Ims::setStrategy('logo', function($result) { return $result['Suggestion'] === 'Pass'; });
Tip
- 接口返回值中 Suggestion 有三种返回值:Block:建议屏蔽,Review :建议人工复审,Pass:建议通过,
- 另外还有一个 Score,该字段用于返回当前标签(Label)下的置信度,取值范围:0(置信度最低)-100(置信度最高 ),越高代表文本越有可能属于当前返回的标签;如:色情 99,则表明该文本非常有可能属于色情内容;色情 0,则表明该文本不属于色情内容
Events
当文字被检测敏感并打码的时候,将会触发事件:
Overtrue\LaravelQcloudContentAudit\Events\ModelAttributeTextMasked
你可以监听该事件,以获取检测结果:
$event->origin
检测前的原始内容,如这是敏感内容
$event->result
打码后的结果,如这是**内容
$event->model
模型对象$event->attribute
模型属性名,如name
异常处理
验证失败将抛出以下异常:
Overtrue\LaravelQcloudContentAudit\InvalidTextException
$contents
- (string) 被检测的文本内容$response
- (array) API 原始返回值
Overtrue\LaravelQcloudContentAudit\InvalidImageException
$response
- (array) API 原始返回值
❤️ Sponsor me
如果你喜欢我的项目并想支持它,点击这里 ❤️
Project supported by JetBrains
Many thanks to Jetbrains for kindly providing a license for me to work on this and other open-source projects.
Contributing
You can contribute in one of three ways:
- File bug reports using the issue tracker.
- Answer questions or fix bugs on the issue tracker.
- Contribute new features or update the wiki.
The code contribution process is not very formal. You just need to make sure that you follow the PSR-0, PSR-1, and PSR-2 coding guidelines. Any new code contributions must be accompanied by unit tests where applicable.
PHP 扩展包开发
想知道如何从零开始构建 PHP 扩展包?
请关注我的实战课程,我会在此课程中分享一些扩展开发经验 —— 《PHP 扩展包实战教程 - 从入门到发布》
License
MIT