cardstream
功能

为主播打造的卡牌分析。快,而且准。

cardstream 是一台包裹在卡牌识别端点外面的状态机。下面的每一项,要么让识别更准,要么确保只在真正值得付费的时候才去识别。

识别

从任意直播实时识别卡牌

一个开关背后是四个识别端点:集换式卡牌游戏、球星卡、评级卡砖和漫画。

完整匹配结果,一个对象搞定

名称、全名、系列、系列代码、卡号、子系列、年份和子类别,每张识别出的卡都以一个对象送达,可以直接念出来、记录下来,或推进你自己的工具里。

可以据此行动的置信度

每条匹配都带有原始距离和高 / 中 / 低三级置信等级(分界点在 0.30 和 0.40)。设一个结果阈值,低于它的卡不会出现在叠加层上。

备选匹配

每个结果都附带最多四张它本来也可能是的其他卡。如果首选匹配错了,正确答案通常就在这个短名单里。

缩小搜索范围的预设

告诉它游戏、系列代码或文字系统,端点就不用再猜。这些值在本地验证:打错字会在你的机器上直接报错,而不是悄悄返回错误的版本。

每场直播一个类别

一个参数,或者直播中在设置对话框里选:tcg、sport、slab 或 comics。切换时,新类别不认识的预设会被丢弃,而不是发一个它用不了的值过去。

正面、背面与旋转

已知属性随裁切图一起发出,端点就能跳过不需要的分类器:出错的环节更少,回答更快。

决策引擎

用 AI 快速分析直播

一台状态机,两种部署形态共用。这里的一切都在你自己的 CPU 上运行,在任何数据离开本机之前。

运动闸门

一次帧间平均差分判断画面是否已经静止。卡还在画面里移动时,后续任何环节都不会触发。

身份闸门

画面里的每张卡都通过 AI 模型的嵌入向量与上一张比较。它只回答一个问题:同一张卡,还是新卡?

三档检测节流

有东西在动时检测频繁,卡静止时检测很少,桌面空着时几乎不检测。各档的数值是配置项,而不是写死在代码里。

冷却、不重试、定时遗忘

匹配失败的卡不会被反复重试;一直留在画面里的卡不会被重复识别;消失足够久的卡回来时会重新分析。

调用守卫与看门狗

同一时间只有一次识别在进行,带最小间隔和超时机制,端点挂起时能让流水线脱困。一次慢调用绝不会拖住直播。

极速结果

cardstream 背后的 AI 模型就跑在你的个人电脑上。系统非常快,而且完全不需要 GPU。

输入

支持的视频源与类型

视频源可以随意更换;无论选哪个,分析都完全相同。

摄像头与文件

网络摄像头编号、视频文件、静态图片,或者运行 Web 界面时的浏览器网络摄像头。适合开播前测试一套配置。

拉流:RTSP、RTMP、SRT

指向一台 IP 摄像头、编码器或转推服务,它就会拉流;信号中断时以有上限的退避自动重连。

推流:OBS 直接推入

以监听模式运行,让 OBS 把 RTMP 或 SRT 推过来:在推给交易平台那一路旁边再加一路输出。

WebSocket JPEG 流

给自制设备用:任何能通过 socket 发送 JPEG 帧的进程,都是合法的视频源。

三个分辨率参数

摄像头采集的分辨率、发送的分辨率和分析的分辨率是三个独立的数值。分析用小图、低开销地跑;送去识别的裁切图则从完整帧重新裁出。

画面仍归你所有

在客户端模式下,除了每张不同的卡的一张 JPEG 裁切图,没有任何东西离开本机:不是视频流,也不是前后的帧。把直播保存到你的 Ximilar 账号,是一个需要你主动开启的参数。

模型

我们的权重,或者你的

用我们为 CPU 准备好的模型分析直播。需要更高的精度或极致的速度?训练你自己的模型,部署到 GPU 上!

RF-DETR 分割

默认定位器:一个微调过的实例分割 .onnx 导出,通过 onnxruntime 运行,不需要 torch。掩码给出卡的四个角,所以需要付费的那张裁切图是经过透视校正、紧贴卡边裁出的。

RF-DETR / RT-DETRv2 检测

边界框作为可选替代:追求速度用 ONNX,还在微调迭代阶段就用 transformers 目录或 hub id。

附带权重

RF-DETR 定位器和嵌入模型由 Ximilar 训练并以 Apache-2.0 发布;安装器会自动下载,所以在你和一条可用的流水线之间没有任何训练步骤。

嵌入模型后端

同卡闸门的嵌入模型支持 Torch、ONNX 或 LiteRT/TFLite:机器上已经有哪个运行时就用哪个。

重型依赖按需加载

Torch 不是核心依赖。只安装你的后端需要的 extras,其他一切照常运行。

任意识别服务

识别调用是一个可替换的步骤。指向 Ximilar、某个专有识别器,或者你自己托管的模型都行。

运行

一个进程,就在摄像头旁边

检测和闸门在你的机器上运行,来自一个可安装的包,唯一那次识别调用从这里直接发往 API。

两个入口,一条流水线

一个给固定设备和脚本用的无界面命令,一个想看它工作时用的本地浏览器界面。两者接受同样的参数,构建同样的流水线。

一份凭据,只存本地

你的 Ximilar 密钥从你自己机器的环境变量里读取。这里不用注册账号,没有需要信任的中间层,除了进程本身没有任何东西需要持续运行。

没有任何东西阻塞循环

JPEG 解码、检测、HTTP 和磁盘写入全部在事件循环之外运行。处理慢的帧直接丢弃,而不是排进一条越来越长的队列。

实时设置对话框

阈值、类别、游戏、系列代码和文字系统都可以在直播中从浏览器里重新调整,而且每个控件都由同一份描述符列表生成,界面和验证不可能脱节。

为直播打造的叠加层

状态徽标、边界框,以及你展示过的每张卡的历史记录(每张卡的缩略图和它在画面里停留的时间),一个参数就能把它保存到你的 Ximilar 账号。想看闸门怎么判断时,还有调试面板。

离线测试套件

整个套件不需要网络也不需要模型文件就能运行:ONNX 会话和检测器都用替身。fork 之后,你依然能知道自己有没有弄坏什么。

开源。自托管。你的直播,你的技术栈。

没有中间平台,没有按席位收费的许可:接入 Ximilar API 或你自己的识别系统,cardstream 对每张不同的卡只调用一次,而不是每帧一次。无论你是在 Whatnot 上拆盒、做 Fanatics Live 式的直播秀,还是在自己的直播电商环境里开播,今晚就能用手头现有的硬件跑起 cardstream。