一次直播和图像识别技术应用的探索之旅
背景
Think Better
很多行业都在“卷”,作为金融科技行业的信也,也不例外。除了卷云计算、大数据和人工智能这些非常有深度的技术以外,信也向着技术融合创新的方向逐步探索,做得更好一些,为用户提供更好的价值,才是卷的目的。
起因
在金融科技行业的业务场景中,有一个比较常见的业务就是”授信“,例如给用户提高额度,那么就需要用户提交一些资料,来证明其还款能力,以提高授信额度。常见有的:提交车辆信息、税务记录、工资卡流水记录或学历认证等等。一般在产品功能设计中,给用户提供上传截图的功能,获取相应的资料,再通过风控系统与业务系统的核验,以满足业务流程的需 要。某些业务场景在对反欺诈诉求要求比较高的情况下,人工介入审核资料也是比较普遍的做法,但实际上,这是一个“斗智斗勇”的过程,因为收集到的资料很有可能是不是用户本人或是 PS 过的,很难保证真实性。在传统的业务模式中,风控系统的成本很高,上传多张截图并进行后续识别认证,用户体验也不是太好。
一个思考就来了:怎么能够降低风控成本,提升用户体验?
仔细想来,前面说的过程实际上就是一个“静态”的资料提交审核过程。这种“静态”的过程是个黑盒,一是无法得知用户获取资料的过程信息,二是资料获取后,难以进行违规操作的检测,避免造假。
如果整个过程中,有“一个人”在指导用户操作,并且全程检测呢?
用一个“程序”去看直播
将静态过程转变为动态过程
前面提到的老流程,是黑盒,难以实时风控策略,如果设计一套系统,让程序像一个人一样,从一开始就介入,指导着用户 现场操作,并全程录制并检测违规操作,那么就可以大大提高用户体验,增强反欺诈能力。思考这个程序的功能,可以得出,其须有识别和录制的功能:
- 用户操作的整个过程,可以使用屏幕直播推流的技术,让这个程序从一开就看到用户的屏幕,并记录整个过程
- 程序可以通过语音,告诉用户应该如何操作,跳转到哪个网页或者打开哪个 App
- 当用户达到指定的页面的时候,程序则可以将业务系统需要的信息截取保存下来
- 这个程序必须聪明点儿,它看着直播,还得能看懂直播,必须能仔细观察,看到哪些行为是违规的,理解力则依赖:图像识别技术
直播的选型与实践
主流直播的技术方向有两个:
- RTMP+CDN
- RTC+SD-RTN
| 特点 | RTC | RTMP |
| 用途 | 实时通信,如实时音视频通话、实时消息传递 | 实时媒体流传输,如直播、点播 |
| 特点 | RTC | RTMP |
| 传输方式 | 使用 UDP(User Datagram Protocol)传输 | 使用 TCP(Transmission Control Protocol)传输 |
| 延迟 | 低延迟,通常在数百毫秒以下 | 相对较高的延迟,通常在数秒钟左右 |
| 适用场景 | 实时互动应用,如视频会议、在线游戏 | 直播平台、视频点播平台 |
| 编码支持 | 支持多种音视频编码格式,如 VP8、H.264、Opus 等 | 支持多种音视频编码格式,如 H.264、AAC 等 |
| 扩展性 | 支持扩展性较强,可以通过插件或自定义开发功能 | 部分支持扩展性,但相对较为有限 |
| 安全性 | 支持端到端的加密和安全传输 | 支持基本的加密功能,但安全性较低 |
| 设备兼容性 | 兼容性较好,支持在不同设备和平台上使用 | 兼容性较好,但在某些设备和平台上可能存在兼容性问题 |
| 开发成本 | 相对较高的开发成本,需要处理实时音视频传输的复杂性 | 相对较低的开发成本,易于集成和使用 |
| 实时性 | 较高的实时性,适用于对实时性要求较高的场景 | 相对较高的实时性,但在网络条件不理想时可能出现缓冲和延迟 |
选型一般要考虑使用场景,直播的场景一般为一个主播推流,上万人观看,但我们这个场景稍微不同,是一个程序在 “看”,没有其他观众,并且对实时性要求较高,所以 RTC 是首选。
一个 RTC 的数据包数据格式如下:
RTC 在移动网络下,最大的挑战是弱网或断网下的稳定性表现,发生卡顿和中断会影响用户体验。解决这类问题,业内一般使用多链路传输技术,例如苹果的 MPTCP(Multi-Path TCP) ,在手机网络切换 Wifi 和蜂窝网络或网络网络丢包较高的情况发生时,多链路的使用,可以大大增强稳定性。但这种技术也带来了高功耗和高流量。那么使用 弱网冗余传输 来就可以优化这种情况,即在 RTC 检测到弱网环境下才开启双链路的传输。

另外,还需要使用 FFMPEG 来当做看的“眼睛”。但很遗憾,FFMPEG 并不支持直接对 RTC 视频流的读取,那么就必须将 RTC 转换为 RTMP 协议,因为 RTMP 在大规模观看的时候需要启用 CDN 网络来进行分发,而 RTC 转 RTMP 在服务端侧完成内网转发,则避免了这个问题,FFMPEG 在使用的过程中类似于如下命令:
| ffmpeg -i "rtmp://boliu.koofenqi.com/koo-tuiliu-test/testneo?auth_key=1684307737-0-0- 52941de184ba86a371f8fd36d030b723" -vframes 1 -r 1 -q:v 2 |
拿到视频流信息则可以交给识别部分来让程序理解当前屏幕上的内容。这部分的流程如下图:

识别技术的实践
当源源不断得到屏幕的视频画面的时候,如何识别当前的画面是目标页面或者是存在违规行为的画面,那么有两种实现思路:
- OCR 图像转换为文本,使用正则表达式来达到检测目标文本特征或异常文本特征
- 利用特征提取技术,识别图像中是否存在目标元素特征
OCR 技术有一个问题:即页面较为复杂的时候,文本转换时间不可控,不太满足实时性的要求。那么利用体征提取技术, 则可以避免此类问题的发生。
在此种图像识别技术方案下,一般分为如下子任务:

- (a)Image Classification: 图像分类,用于识别画面中元素的类别(如:bottle、cup、cube)
- (b)Object Localization: 目标检测,用于检测图像中每个元素的类别,并准确标出它们的位置。
- © Semantic Segmentation: 图像语义分割,用于标出图像中每个像素点所属的类别,属于同一类别的像素点用一个颜色标识。
- (d) Instance Segmentation: 实例分割,值得注意的是,(b)中的目标检测任务只需要标注出物体位置,而(d) 中的实例分割任务不仅要标注出物体位置,还需要标注出物体的外形轮廓。
当预设目标页面的元素出现,则可将图像的语义转换为置信度、风险度等结果输出给程序,进行业务判定。
这个“程序”有点普通但也有点意思
一个流程引擎,支援业务流程的执行
这个程序像一个引导用户做流程的业务员一样,那么它具备以下功能:
- 熟悉各种业务流程,按照业务流程的规定,进行业务流程的执行
- 一直维持着与客户端的通讯
- 指挥客户端、直播服务、图像识别服务、反欺诈服务进行协调工作
那么这个程序实际上就是一个流程引擎,在整个流程引擎的架构设计中,需要考虑如下几个方面:
- 长连接性能指标,例如:
- 吞吐(Thoughput) >= 1000
- Latency <= 100ms
- Concurrent >= 500
- Error Rate <= 1%
- 保证安全性
- websocket 握手令牌校验
- 消息体二进制编码
- 流程适配性强
- 业务节点配置化
- 客户端预置指令模块化
- 全程做到实时监控
- websocket 通讯监控
- 流程执行监控
- 客户端异常监控
- 服务异常监控
- 客户端兼容性达标
- iOS/Android/HarmonyOS 兼容覆盖
- 主流机型兼容覆盖
- 各种网络异常兼容覆盖
- 稳定性强
- 业务单元执行异常恢复
- 网络通讯异常恢复
- 客户端与服务端的系统异常恢复
整个流程引擎的架构设计如下:

在前面,流程引擎维持与客户端的通讯,使用 websocket 长连接服务。一个典型的长连接服务如下图:

在安全性方面,使用令牌技术,在 websocket 连接发起的时候,检测令牌是否有效,避免非法客户端的连接,并且数据传输防止信息泄露,通讯的数据包使用二进制流,那么在编码方面,选用 protocolbuf,来实现客户端与服务端的传输数据的序列化和反序列化。
多技术的融合应用达到的效果
一套 WebSokcet/RTC/FFMEPG/ImageRecognition 的技术组合
将这些技术进行融合以后,例如需要用户通过自己的机动车信息来提升额度的话,就可以这样完成:
- 用户手机通过 websocket 连接上服务端
- 流程引擎启动,指引客户端发起屏幕 RTC 推流
- 根据业务流程配置,使用 FFMPEG 处理屏幕视频画面
- 图像识别服务将画面进行标定与检测,确认业务信息的截取
- 服务端对整个视频画面进行录制保存
- 流程引擎时时刻刻执行反欺诈策略,检测用户操作是否存在违规和欺诈行为

当这样一个融合多种技术方案的探索落地以后,便诞生了可以满足各个业务场景使用的 _ 推流认证平台 _。
目前,* 推流认证平台 *正服务于一些对风险要求较高的流程中,该平台可以让用户不再手动操作繁琐的流程,只需要听着语音点一点,平台将自动获取资料,完成后续流程。
这样的多技术融合的探索,是一种有意思也有相当业务价值的尝试!
探索的脚步永不停歇
未来,将会有更多有意思有价值的探索持续进行,创新的源泉来自热衷思考,敢实践,不怕失败的解决各种问题。展望未来,后期还有更多可以持续优化创新的地方:
- 业务流程引擎使用 webassembly 技术,形成安全的二进制程序,结合边缘网络(Edge Network),实现离线的流程执行
- 图像识别采用卷积神经网络,训练更优秀的识别模型,为风险识别提供更多的基础能力
- 使用移动端的机器学习技术,利用手机本身的 AI 算力,加载图像识别模型,进一步缩短业务流程时间
相关文章:
一次直播和图像识别技术应用的探索之旅
背景 Think Better 很多行业都在“卷”,作为金融科技行业的信也,也不例外。除了卷云计算、大数据和人工智能这些非常有深度的技术以外,信也向着技术融合创新的方向逐步探索,做得更好一些,为用户提供更好的价值…...
Ubuntu 下使用 Pybind11 实现 C++ 调用 Python 接口的示例
Pybind11 是一个轻量级的库,它提供了在 C 中无缝集成 Python 代码的能力。使用 Pybind11,你可以很容易地从 C 调用 Python 代码,反之亦然。下面我将通过一个简单的例子来展示如何在 Ubuntu 系统上使用 Pybind11 从 C 调用 Python 接口。 安装…...
docker安装和使用kafka
1. 启动zookeeper Kafka依赖zookeeper, 首先安装zookeeper -p:设置映射端口(默认2181) docker run --name zookeeper \--network app-tier \-e ALLOW_ANONYMOUS_LOGINyes \--restartalways \-d bitnami/zookeeper:latest2. 启动kafka docker…...
CTP-API开发系列之接口对接准备
CTP-API开发系列之接口对接准备 CTP-API开发系列之接口对接准备CTP-API文件清单CTP-API通用规则命名规则Spi与Api CTP-API通讯模式开发语言选择 CTP-API开发系列之接口对接准备 CTP-API文件清单 文件名说明ThostFtdcTraderApi.h交易接口,C头文件,包括 …...
C++小记 -链表
链表 文章目录 链表链表基础理论链表的类型单链表双链表循环链表 链表的存储方式链表的定义链表的操作添加节点删除节点 性能分析构建链表删除节点(内存泄漏的坑)1.直接移除2.使用虚拟头结点3.delete指针后,要将指针置为NULL!&…...
网络协议学习DAY1
1.网络协议模型: OSI协议模型 应用层 实际发送的数据 表示层 发送的数据是否加密 会话层 是否建立会话连接 传输层 数据传输的方式(数据报、流式) 网…...
vue3中全局变量的定义和获取
在vue项目中,我们知道vue2定义全局变量是在main.js文件将变量挂载到vue.prototype.name"lisi",在页面通过this.name去调用。但是在vue3中,这个定义全局变量有所改变: const app createApp(App) app.config.globalProp…...
1.2 数据模型 数据库系统概论
目录 1.2.1 两类数据模型 1.2.2 概念模型 1.信息世界中的基本概念 (1)实体 (2)属性 (3)码 (4)实体型 (5)实体集 (6)联系 2.…...
C#中openFileDialog 对话框不在最顶层,TopMost的异常情况
重点!!!若 当前窗体this的TopMost是false,可以设置为true,这样打开的对话框就是最顶层 /// <summary> /// 设置窗体TopMost,缺点和其他程序ide有冲突。例如VS有断点的调试会卡死 /// </summary&g…...
信息安全与阿里云等保三级方案实践总结
信息安全在当今数字化时代变得至关重要,企业和组织需要采取有效措施来保护其数据和信息资产。阿里云作为中国领先的云服务提供商,提供了等保三级方案,帮助用户满足国家信息安全等级保护的要求。本文将探讨信息安全和阿里云等保三级方案的重要…...
嵌入式学习记录——线程
线程基本概念: 线程:线程是一个轻量级的进程,位于进程空间内部,一个进程中可以创建多个线程 1.线程创建: 线程独占栈空间,文本段、数据段和堆区与进程共享 2.线程调度: 与进程调度是一样的 宏观并行,微观串行 3.线程消亡: 与进程消亡是一样的 4.进程和线程…...
同步服务器操作系统公网仓库到本地 _ 统信UOS _ 麒麟KYLINOS
原文链接:同步服务器操作系统公网仓库到本地 | 统信UOS | 麒麟KYLINOS 在如今快速发展的信息技术时代,维护和更新服务器操作系统变得越来越重要。无论是为了提高安全性、增加新功能还是提升系统稳定性,同步公网源仓库到本地都是一个关键步骤。…...
【数仓】flume常见配置总结,以及示例
相关文章 【数仓】基本概念、知识普及、核心技术【数仓】数据分层概念以及相关逻辑【数仓】Hadoop软件安装及使用(集群配置)【数仓】Hadoop集群配置常用参数说明【数仓】zookeeper软件安装及集群配置【数仓】kafka软件安装及集群配置【数仓】flume软件安…...
统计信息锁定
在导入成功后我要收集下这些表的信息,结果发现好几张表都没法收集,用DBMS_STATS包显示ORA-20005:object statistics are locked (stattype ALL),用Analyze命令显示ORA-38029: 对象统计信息已锁定。 解决办法很明确&a…...
光猫改为bridge模式
注意事项: 改成桥接模式后,光猫将不再拨号上网,建议提前记录自己的宽带账号,打10010申请修改自己的宽带密码。 光猫改好桥接之后,把宽带账号和密码输入到负责拨号上网的终端设备中,完成宽带PPPOE拨号设置。…...
回溯算法01-组合(Java)
1.组合 题目描述 给定两个整数 n 和 k,返回范围 [1, n] 中所有可能的 k 个数的组合。 你可以按 任何顺序 返回答案。 示例 1: 输入:n 4, k 2 输出: [[2,4],[3,4],[2,3],[1,2],[1,3],[1,4]]示例 2: 输入&#x…...
初始网络 --- 网络基础
目录 0、 前言 1、 计算机网络发展背景 1.1. 局域网(LAN) && 广域网(WAN) 2、 认识并理解协议 3、 初始网络协议 3.1. 协议分层 4、 TCP/IP 五层(或四层)模型 4.1. 简单了解TCP/IP层状体系 4.2. TCP/IP协议层状结构和计算机层状结构的关系 5、 OSI七层模型 …...
在Linux/Ubuntu/Debian中计算MD5,SHA256的方法
MD5(消息摘要算法 5)和 SHA-256(安全哈希算法 256 位)等流行的哈希算法广泛用于从任意数据生成固定大小的哈希值或校验和。 以下是这些算法及其计算方式的简要概述: MD5(消息摘要算法5)&#x…...
mybatis mysql insert 主键id为空
错误示范 java代码设置了param参数,但是sql 字段没有带上参数,例如 void insertV2(Param("historyDO") HistoryDO historyDO); <insert id"insertDuplicate" parameterType"com.test.entity.HistoryDO"keyProperty&…...
批次大小对ES写入性能影响初探
问题背景 ES使用bulk写入时每批次的大小对性能有什么影响?设置每批次多大为好? 一般来说,在Elasticsearch中,使用bulk API进行批量写入时,每批次的大小对性能有着显著的影响。具体来说,当批量请求的大小增…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
rknn优化教程(二)
文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK,开始写第二篇的内容了。这篇博客主要能写一下: 如何给一些三方库按照xmake方式进行封装,供调用如何按…...
FFmpeg 低延迟同屏方案
引言 在实时互动需求激增的当下,无论是在线教育中的师生同屏演示、远程办公的屏幕共享协作,还是游戏直播的画面实时传输,低延迟同屏已成为保障用户体验的核心指标。FFmpeg 作为一款功能强大的多媒体框架,凭借其灵活的编解码、数据…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数
高效线程安全的单例模式:Python 中的懒加载与自定义初始化参数 在软件开发中,单例模式(Singleton Pattern)是一种常见的设计模式,确保一个类仅有一个实例,并提供一个全局访问点。在多线程环境下,实现单例模式时需要注意线程安全问题,以防止多个线程同时创建实例,导致…...
【学习笔记】erase 删除顺序迭代器后迭代器失效的解决方案
目录 使用 erase 返回值继续迭代使用索引进行遍历 我们知道类似 vector 的顺序迭代器被删除后,迭代器会失效,因为顺序迭代器在内存中是连续存储的,元素删除后,后续元素会前移。 但一些场景中,我们又需要在执行删除操作…...
大数据治理的常见方式
大数据治理的常见方式 大数据治理是确保数据质量、安全性和可用性的系统性方法,以下是几种常见的治理方式: 1. 数据质量管理 核心方法: 数据校验:建立数据校验规则(格式、范围、一致性等)数据清洗&…...
解析“道作为序位生成器”的核心原理
解析“道作为序位生成器”的核心原理 以下完整展开道函数的零点调控机制,重点解析"道作为序位生成器"的核心原理与实现框架: 一、道函数的零点调控机制 1. 道作为序位生成器 道在认知坐标系$(x_{\text{物}}, y_{\text{意}}, z_{\text{文}}…...
C++--string的模拟实现
一,引言 string的模拟实现是只对string对象中给的主要功能经行模拟实现,其目的是加强对string的底层了解,以便于在以后的学习或者工作中更加熟练的使用string。本文中的代码仅供参考并不唯一。 二,默认成员函数 string主要有三个成员变量,…...
Python环境安装与虚拟环境配置详解
本文档旨在为Python开发者提供一站式的环境安装与虚拟环境配置指南,适用于Windows、macOS和Linux系统。无论你是初学者还是有经验的开发者,都能在此找到适合自己的环境搭建方法和常见问题的解决方案。 快速开始 一分钟快速安装与虚拟环境配置 # macOS/…...
