【内容审核】对审核结果进行封装

news2024/9/22 13:46:03

目录

1、分析返回结果示例 

2、自定义封装类


在【内容审核】Java实现七牛云内容审核功能七牛 java 审核-CSDN博客 中实现了文本、图片和视频的审核功能,但是这些功能灵活性不够,既不能自己设置审核的强度,也不能内容违规的详细信息,所以可以在原来代码的基础上对这些功能进行一个改造。这第一步就是需要自定义封装类来封装审核结果。

1、分析返回结果示例 

        要想知道七牛云内容审核返回结果中的详细信息,就需要定义实体类来接收这些信息再进行处理。

        要自定义这些返回结果的封装类,那就需要先分析这些返回结果的格式。文本、图片和视频审核结果的返回结果示例如下:

仔细把上面的图看一下,我们可以发现在文本、图片和视频这三种JSON格式的返回结果中,视频的返回结果是最复杂的,但是这三种返回结果中有许多属性是一样的,现在我们就开始来分析这些JSON格式的数据,并定义他们的封装类

2、自定义封装类

        我们从最内部的字段开始分析,能得到  "score"  、 "label"  、 "suggestion"  、 "offset"  这几个字段,再结合这些字段对应的“值”,我们能推断除:"score"应该被定义为Double类型;"label"应该被定义为String类型;"suggestion"应该被定义为String类型;"offset"应该被定义为Long类型。

        再进一步分析,我们分析"details"字段,"details"字段在三种返回示例中不一样,在文本审核结果中的"details"字段内部只包含"score"字段和"label"字段,而在视频和图片审核结果中的"details"字段内部除了包含"score"字段和"label"字段还包含"suggestion"字段,所以在"details"字段对应的封装类中就应该包含"score"、"label"和"suggestion"这三个属性,因为java中没有"details"字段对应的封装类,所以我们要自定义封装类DetailsJson代码如下:

 DetailsJson类

@Data
@ToString
public class DetailsJson implements Serializable {

    String label; // 标签

    Double score; // 分数,该分类的置信度分数

    String suggestion; // 建议
}

        定义了封装类DetailsJson后,我们继续分析,可以定义CutsJson类来封装视频审核结果中 "cuts"字段下的"details"、"offset"和"suggestion"字段,代码如下:

 CutsJson类

@Data
@ToString
public class CutsJson implements Serializable {

    List<DetailsJson> details; // 视频中,这个时间段审核结果的详细信息

    Long offset; // 这个时间段的偏移量

    String suggestion; // 建议

}

        然后我们直接看文本、图片和视频审核结果中的"scenes"字段,我们对这三种返回结果的"scenes"字段下所包含的字段做一个并集操作,我们可以得到 "politician""pulp""terror""antispam"字段,然后再对这四个字段下所包含的字段做一个并集操作,我们可以得到 "cuts"、"details""suggestion"这三个字段。所以我们完全可以定义一个封装类来封装"cuts"、"details""suggestion"这三个字段,来对应"politician""pulp""terror""antispam"这四个字段,代码如下:

TypeJson类

/**
 * @Author 小涛Tao
 * @Date: 2024/08/17/16:49
 * version 1.0 注释:TypeJson 表示【文本、视频和图片】审核结果中的审核类型,TypeJson 的属性为审核类型下的子部分。

 * 文本审核类型主要为 "antispam"
 * 视频和图片的审核类型主要为 "pulp" 、 "terror" 和 "politician"

 * 文本审核结果的 "antispam" 下有 details 和 suggestion
 * 视频审核结果的 "pulp" 和 "terror" 下有 cuts 和 suggestion ; 而 "politician" 下有 cuts 和 suggestion ,但 cuts 没有 details
 * 图片审核结果的 "pulp" 和 "terror" 下有 details 和 suggestion ; 而 "politician" 下只有 suggestion
 **/
@Data
@ToString
public class TypeJson implements Serializable {

    String suggestion; // 建议

    List<CutsJson> cuts; // 视频中不同时段的审核结果集合

    List<DetailsJson> details; // 详细信息

}

再定义一个类来封装 "politician"、"pulp"、"terror"和"antispam"这四个字段,代码如下:

 ScenesJson类

/**
 * @Author 小涛Tao
 * @Date: 2024/08/17/17:01
 * version 1.0 注释:JSON审核结果中 "result" 下的 "scenes"
 * "scenes" 下有哪些审核类型得看是【文本、图片和视频】哪一种审核
 **/
@Data
@ToString
public class ScenesJson implements Serializable {

    private TypeJson terror; // 恐怖内容,鉴恐

    private TypeJson politician; // 敏感人物识别,涉政

    private TypeJson pulp; // 低俗色情内容,鉴黄

    private TypeJson antispam; // 文本反垃圾,过滤垃圾

}

再像前面一样往上分析,继续定义类。
ResultChildJson类(视频JSON结果中 "result" 中的 "result")

/**
 * @Author 小涛Tao
 * @Date: 2024/08/17/17:14
 * version 1.0 注释:视频JSON结果中 "result" 中的 "result"
 * 同时,文本和图片的返回结果中的 result 就用这个来转换成 JSON 结构
 **/
@Data
@ToString
public class ResultChildJson implements Serializable {

    String suggestion; // 建议

    ScenesJson scenes; // 场景 scenes 下包含具体的审核类型(场景)结果

}

ResultJson类(视频JSON结果中 最外层的"result")

/**
 * @Author 小涛Tao
 * @Date: 2024/08/17/17:19
 * version 1.0 注释:视频JSON结果中 最外层的"result"
 **/
@Data
@ToString
public class ResultJson implements Serializable {

    Integer code; // 状态码

    String message; // 提示信息

    ResultChildJson resultChile; // 结果体 resultChile

}

BodyJson类:封装视频审核结果,同时提供getPolitician()方法、getTerror()方法和getPulp()方法来获取对应场景下的DetailsJson集合,然后就可以通过遍历这些DetailsJson集合来处理里面的score属性,这些处理的代码可以根据自己的一个想法来编写。

/**
 * @Author 小涛Tao
 * @Date: 2024/08/17/17:24
 * version 1.0 注释:
 **/
@Data
@ToString
public class BodyJson implements Serializable {

    String id; // 这次视频审核请求任务的唯一标识符

    String status; // 这个审核任务的状态,有没有完成

    ResultJson result; // 结果JSON结果中的 "result"

    // 比较 value 是否在 min 和 max 之间
    public boolean compare(Double min, Double max, Double value) {
        return value >= min && value <= max;
    }

    // 检查结果中所有 detail 中的 score 是否在 min 和 max 中,只要里面有一个这样的情况,就算中了
    public boolean checkViolation(List<CutsJson> types, Double min, Double max) {
        for (CutsJson cutsJson : types) {
            if (!ObjectUtils.isEmpty(cutsJson.details)) {
                for (DetailsJson detail : cutsJson.details) {
                    if (compare(min, max, detail.score)) {
                        return true;
                    }
                }
            }
        }
        return false;
    }

    // 获取图片或视频审核结果中的 Terror 审核类型下的信息,视频直接就是 Cuts ,图片为 details 和 suggestion
    public List<CutsJson> getTerror() {
        final TypeJson terror = result.getResultChile().getScenes().getTerror();

        // 如果这是视频审核结果,那么结果中的 Terror 审核类型下就有 Cuts ,直接返回这个 Cuts
        if (!ObjectUtils.isEmpty(terror.getCuts())) {
            return terror.getCuts();
        }

        // 否则证明这是图片的审核结果,因为图片审核结果中的 Terror 审核类型下没有 Cuts
        // 那么就创建一个 CutsJson 来封装图片 Terror 审核类型下的 details 和 suggestion
        final CutsJson cutsJson = new CutsJson();
        cutsJson.setDetails(terror.getDetails());
        cutsJson.setSuggestion(terror.getSuggestion());
        return Collections.singletonList(cutsJson); // 设置为只有一个元素的集合来返回
    }


    // 获取图片或视频审核结果中的 Politician 审核类型下的信息
    public List<CutsJson> getPolitician(){
        final TypeJson politician = result.getResultChile().getScenes().getPolitician();
        if (!ObjectUtils.isEmpty(politician.getCuts())){
            return politician.getCuts();
        }

        // 我:如果是图片的审核结果,politician(TypeJson) 下没有 cuts(CutsJson),所以直接设置 details 和 suggestion
        final CutsJson cutsJson = new CutsJson();
        cutsJson.setDetails(politician.getDetails());
        cutsJson.setSuggestion(politician.getSuggestion());

        return Collections.singletonList(cutsJson);
    }


    // 获取图片或视频审核结果中的 Pulp 审核类型下的信息
    public List<CutsJson> getPulp(){
        final TypeJson pulp = result.getResultChile().getScenes().getPulp();
        if (!ObjectUtils.isEmpty(pulp.getCuts())){
            return pulp.cuts;
        }

        final CutsJson cutsJson = new CutsJson();
        cutsJson.setDetails(pulp.getDetails());
        cutsJson.setSuggestion(pulp.getSuggestion());

        return Collections.singletonList(cutsJson);
    }

}

先写到这里,后续再写处理数据的流程和代码。

 

推荐: 

【内容审核】Java实现七牛云内容审核功能,文本、图片和视频的内容审核(鉴黄、鉴暴恐、敏感人物)_七牛 java 审核-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_65277261/article/details/140902624?spm=1001.2014.3001.5501

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2107987.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【教学类-52-08】20240905动物数独(6宫格)一页2张任务卡,一页一个动物贴图卡,有答案

背景需求&#xff1a; 前文提到6宫格数独的图片6*636图&#xff0c;如果将6张任务卡放在一个A4上&#xff0c;看上去6种动物很小&#xff0c;所以我换了一个word模板&#xff0c;变成了2张任务卡放在一个A4上。 【教学类-52-07】20240903动物数独&#xff08;6宫格&#xff0…

dp练习【4】

最长数对链 646. 最长数对链 给你一个由 n 个数对组成的数对数组 pairs &#xff0c;其中 pairs[i] [lefti, righti] 且 lefti < righti 。 现在&#xff0c;我们定义一种 跟随 关系&#xff0c;当且仅当 b < c 时&#xff0c;数对 p2 [c, d] 才可以跟在 p1 [a, b…

003: Visual Studio 配置 VTK 开发环境的方法与比较

目录 简介&#xff1a; 1 配置属性方法&#xff1a; 2 创建配置文件 3 在新项目中导入props文件 总结&#xff1a; 简介&#xff1a; 编译好VTK后&#xff0c;在安装目录里面有通常有包含bin,lib和include等文件夹&#xff0c;要在自己的项目里面使用VTK&#xff0c;主要…

如何用c++判断一个类型是vector

如何用c判断一个类型是vector 我们使用模板元编程来搞定 这里我们可以定义一个模板结构体 is_std_vector&#xff0c;并对其进行特化&#xff0c;以便专门处理 std::vector 类型。 . 下面是详细的实现和使用示例。 实现 is_std_vector 类型, 继承自false_type 首先&#xff…

Unexpected token d in JSON at position 5, check bodyParser config错误解决

错误原因&#xff1a;json格式不对 { desc"设备1", iotProjectId11 } 解决&#xff1a;通过json在线校验格式校验json格式&#xff0c;找出错误原因&#xff0c;修改 在线JSON校验格式化工具&#xff08;Be JSON&#xff09; 修改&#xff1a; {"desc": &…

基于SpringBoot的校园博客系统

你好呀&#xff0c;我是计算机学姐码农小野&#xff01;如果有相关需求&#xff0c;可以私信联系我。 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot框架 工具&#xff1a;IDEA/Eclipse、Navicat、Maven、Tomcat 系统展示 首页 博主管理…

使用 MongoDB 构建 AI:Patronus 如何自动进行大语言模型评估来增强对生成式 AI 的信心

大语言模型可能不可靠&#xff0c;这几乎算不上头条新闻。对于某些用例&#xff0c;这可能会带来不便。而对于其他行业&#xff0c;尤其是受监管行业&#xff0c;后果则要严重得多。于是&#xff0c;业内首个大语言模型自动评估平台 Patronus AI 应运而生。 Patronus AI 由 Met…

为啥给的贷款额度差距那么大?机构到底是怎么决定给你多少额度?

今日&#xff0c;我们深入探讨一个颇为引人入胜的话题——为何在不同银行或信贷机构申请贷款时&#xff0c;所能获得的额度竟能如此大相径庭&#xff1f;同时&#xff0c;揭秘这些金融机构背后是如何精密计算并决定每位申请者的“额度”的。以下内容干货满满&#xff0c;建议收…

10 先序遍历创建二叉树

这个代码是使用手动输入的方式创建二叉树 比较直观 #include "stdio.h" #include "stdlib.h"typedef int ElemType; typedef struct node {ElemType data;struct node *lchild;struct node *rchild; } Node;Node *create_node(int value) {Node *node (N…

2024国赛数学建模B题思路模型

完整的思路模型请查看文末名片

2024 年高教社杯全国大学生数学建模竞赛题目【A/B/C/D/E题】完整思路

↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ A题是数模类赛事很常见的物理类赛题&#xff0c;需要学习不少相关知识。此题涉及对一个动态系统的建模&#xff0c;模拟…

弹框用户勾选过得置灰 或者不显示

弹框用户勾选过得置灰 或者不显示 添加 :disabled“row.disabled” <el-table-column label"名称" width"300"><template #default"{ row }"><el-radio:disabled"row.disabled":label"row.coursesName"v-mo…

中秋节如何利用Python发送彩信

中秋节&#xff0c;作为中国传统节日之一&#xff0c;不仅是家人团聚的时刻&#xff0c;也是商家提高销售业绩的黄金时期。在这个充满温情与消费氛围的节日里&#xff0c;合理利用短信平台进行精准营销&#xff0c;可以显著提高企业的销售业绩。 支持免费对接试用乐讯通PaaS平台…

【全网最全】2024年数学建模国赛B题保奖思路+成品论文+matlab/python代码等(后续会更新

您的点赞收藏是我继续更新的最大动力&#xff01; 一定要点击末文的卡片&#xff0c;那是获取资料的入口&#xff01; 一、问题重述 本题聚焦于某电子产品制造企业在生产过程中的决策问题。企业在生产中需采购 和使用两种关键零配件&#xff0c;并在装配过程中面临如何优化质…

让Mac更Mac|明基MA系列显示器上市

凭借出色的性能和设计&#xff0c;MacBook成为了很多人的心头好。可13~16英寸的屏幕&#xff0c;时常让人感到视野受限&#xff0c;就像无边创意中的一道隐形壁垒。想要外接显示大屏&#xff0c;但除了Studio Display等苹果显示器之外&#xff0c;其他品牌的外接显示屏&#xf…

优化器与现有网络模型的修改

一、优化器 optimizer optim.SGD(model.parameters(), lr0.01&#xff08;学习速率&#xff09;, momentum0.9) optimizer optim.Adam([var1, var2], lr0.0001) 一般&#xff0c;学习率的设置&#xff0c;先从大的设置&#xff0c;逐渐变小。 神经网络可以参见上篇文章&am…

【数据库】MySQL-基础篇-函数

专栏文章索引&#xff1a;数据库 有问题可私聊&#xff1a;QQ&#xff1a;3375119339 目录 一、简介 二、字符串函数 三、数值函数 四、日期函数 五、流程函数 一、简介 函数 是指一段可以直接被另一段程序调用的程序或代码。 也就意味着&#xff0c;这一段程序或代码在 M…

【2024国赛C题】高教杯全国大学生数学建模国赛建模过程+完整代码论文全解全析

完整内容在文章末尾阅读全文获取&#xff01; 问题 1是针对不同情况下&#xff0c;该乡村未来几年农作物的最优种植方案的研究。 为解决这个数学建模问题&#xff0c;我们需要构建一个优化模型&#xff0c;考虑到各种限制条件和目标函数。以下是解决问题的步骤&#xff1a; 问…

有源低通/高通滤波器(一阶滤波器+Sallen-Key滤波器+高下降率滤波器)+有源带通滤波器(级联+多重反馈+状态可变)

2024-9-5&#xff0c;星期四&#xff0c;20:40&#xff0c;天气&#xff1a;晴&#xff0c;心情&#xff1a;晴。明天终于又要放假啦&#xff01;继续学习。、 今天继续学习第九章&#xff0c;主要学习内容为&#xff1a;有源低通/高通滤波器(一阶滤波器Sallen-Key滤波器高下降…

极速体验媲美GPT4V的国产开源视觉大模型CogVLM2(赠书)

大家好&#xff0c;我是每天分享AI应用的萤火君&#xff01; 文末赠书 CogVLM2是一款视觉语言模型&#xff08;Visual Language Model&#xff09;&#xff0c;由智谱AI和清华KEG潜心打磨。这款模型是CogVLM的升级版本&#xff0c;支持高达 1344 * 1344 的图像分辨率&#xf…