cardstream
FAQ

常见问题

最常被问到的那些问题:安装与删除、费用、什么会离开你的机器、它能认出什么。更详细的内容都在文档中心。

安装与删除

安装、更新、卸载

安装脚本只会触碰你机器上的两个位置,两个都可以随时删掉。

运行它需要什么?

一台装有 Python 3.11 或更新版本的机器,基本就这样。macOS arm64、Linux amd64 和 Windows amd64 都由同一个纯 Python 发行版覆盖,不需要 GPU。只有拉流和监听模式的视频源(RTSP、RTMP、SRT)需要系统里的 ffmpeg;网络摄像头、文件或浏览器界面都不需要。

安装脚本把东西放在哪里?

两个地方。~/.cardstream 是安装根目录:venv/ 里是虚拟环境,models/ 里是模型权重。两个命令 cardstream-web 和 cardstream-client 是写入 ~/.local/bin 的小型启动脚本,它们以预先填好模型路径的方式执行虚拟环境里的程序,所以你传入的任何参数都会优先生效。两个位置都可以用 CARDSTREAM_HOME 和 INSTALL_DIR 改变。机器上的其他地方一概不碰,尤其是脚本绝不会编辑你的 shell 配置文件:如果 ~/.local/bin 不在你的 PATH 里,它只会打印一条提示,把改动留给你自己。

如何更新到新版本?

再跑一次同样的那行命令。它会把当前发行版装进已有的虚拟环境并重写启动脚本。已经在 ~/.cardstream/models 里的权重不会被动(权重只在缺失时才下载),所以一次更新只是很小的下载量,而不是再来四分之一 GB。想装某个特定版本而不是最新版,设置 CARDSTREAM_VERSION 即可。

# 同一行命令;/install.sh 会重定向到 main 分支上的脚本
$ curl -fsSL https://cardstream.ai/install.sh | sh
$ curl -fsSL https://cardstream.ai/install.sh | CARDSTREAM_VERSION=v0.5.0 sh
$ cardstream-web --version

如何卸载?

两条命令。第一条删除虚拟环境和模型权重,第二条删除两个启动脚本。没有别的要清理的了:没有守护进程,没有登录项,没有系统软件包。

$ rm -rf ~/.cardstream # venv/ + models/
$ rm -f ~/.local/bin/cardstream-web ~/.local/bin/cardstream-client

如果安装时设置了 CARDSTREAM_HOME 或 INSTALL_DIR,请改为删除那些路径;如果把启动脚本放进了系统目录,需要用 sudo。你手动添加的东西仍需自己撤销:shell 配置文件里的 PATH 行、XIMILAR_API_KEY 的 export,以及传给 --store-images 的任何文件夹。除此之外,应用不会在你的主目录下写任何其他东西。在一个新开的 shell 里运行 command -v cardstream-web 确认它已消失;旧的 shell 会缓存查找结果,直到你运行 hash -r。

密钥与费用

花多少钱,需要什么

没有中间平台:你的硬件、你的密钥,以及一台以尽量少向外调用为己任的引擎。

需要 Ximilar API 密钥吗?

走默认识别路径的话,需要,而且这是整个系统唯一需要的凭据。在 ximilar.com 获取一个,启动前把它 export 为 XIMILAR_API_KEY。如果你改为接入自己的识别器,那只需要那个端点所需的东西,不需要 Ximilar 的任何凭据。

$ export XIMILAR_API_KEY=your-key

cardstream 本身多少钱?

免费。没有订阅,没有按席位的许可,没有平台费:一个宽松许可的 Python 包,跑在你自己的硬件上,检测权重随发行版以 Apache-2.0 发布。你付费的只是向所接入端点发出的识别调用,而把这个次数压下来正是本地引擎存在的全部意义:你展示的每张不同的卡大约一次调用,一小时大约一百次,而一条朴素的逐帧流水线在 15 fps 下会触发 54,000 次。把直播保存到你的 Ximilar 账号,每场直播会多一次计费的会话开启;重启后继续会话则免费。

能用我自己的模型,或者我自己的识别系统吗?

都可以。卡牌定位器和身份闸门按后端路由:随包附带的 RF-DETR .onnx 导出、RT-DETRv2 的导出,或者在微调迭代阶段用 transformers 目录或 hub id。后面的识别步骤只是一个端点,把它指向你自己的识别器,前面所有的闸门、节流和冷却都保持不变。参见模型后端和模型库。

运行

硬件、视频流与安全

它就在你平时直播的那台机器上,和你的直播并行运行。

需要 GPU 吗?

不需要。随包附带的权重是为 CPU 准备的 ONNX 导出,本地引擎做的一切(运动闸门、检测节流、回答"同一张卡还是新卡?"的嵌入模型)都在你手头的处理器上运行。GPU 是你用自己的高精度权重时的一个选项,默认配置绝不需要它。

能配合 Whatnot 或 Fanatics Live 使用吗?

可以,但不是接入交易平台,而是接入你已经在制作的视频。OBS 虚拟摄像头、在推给平台那一路旁边再加一路 RTMP 或 SRT 输出、从编码器拉 RTSP,或者干脆用一台自己的摄像头对准同一块桌面。直播卖家指南把这四条路线从头到尾走了一遍。

到底有什么会离开我的机器?

在客户端模式下,每张不同的卡只发一张 JPEG 裁切图:不是视频流,不是前后的帧,也不是桌面的其他部分。要不要发送的每一个决定都先在本地做出,所以一小时里展示了一百张卡的视频,就是一百个小请求。唯一的例外由你自己决定是否开启:使用 --ximilar-stream 时,这场直播的历史记录(每张卡一行文本,外加据以识别它的那张裁切图)也会保存到你自己 Ximilar 账号里的一个会话中。默认关闭,而 --no-ximilar-stream-images 可以让它只保存文本。

直播结束后还能回看吗?

可以,前提是你保存了它。用 --ximilar-stream NEW 启动,历史记录列出的每张卡(连同价格、在直播中停留的时长和据以识别它的裁切图)都会在直播进行时发送到你 Ximilar 账号里的一个会话。事后打开 Ximilar 应用的 Cardstream 板块:这场直播的总价值、最有价值的商品和热门系列、每张卡及其图片;还可以标记已售出的卡、更正认错的匹配。直播中途重启了?把 NEW 换成会话 id,它就会接着进行,即使会话已经关闭也一样。要保存到团队工作区,用 --ximilar-workspace。详细说明。

$ cardstream-web --price-stats --ximilar-stream NEW

能在局域网里运行,让另一台机器打开界面吗?

别这样做。Web 界面没有身份验证,并且持有你的 API 密钥,所以它只应该待在 127.0.0.1 上。容器内部绑定的是 0.0.0.0,正因如此,文档里的 docker run 才只把端口发布到 127.0.0.1。如果确实需要从另一台机器访问,请在前面架一条你自己的带身份验证的隧道,而不是打开端口。

$ docker run --rm -e XIMILAR_API_KEY -p 127.0.0.1:8001:8001 \
    -v cardstream-models:/models cardstream
识别

它能认出什么,有多确定

每条匹配都附带距离、置信等级,以及它本来也可能是的其他卡。

它能识别哪些卡?

四个类别,一个开关。集换式卡牌游戏:宝可梦、万智牌、游戏王、航海王、Lorcana 以及另外约二十种,现行和复古单卡都直接从直播画面读取。球星卡覆盖各大运动,细到平行版本和年份。评级卡砖,不拆盒直接读标签。还有漫画,按书名、期号和年份识别。一个参数选类别,设置对话框也能在直播中切换。查看完整列表。

它认错卡了会怎样?

你能提前看出来。每条匹配都带有原始距离和高 / 中 / 低三级置信等级(分界点在 0.30 和 0.40),另附最多四张它本来也可能是的备选卡,正确答案通常就在这个短名单里。设一个结果阈值,低于它的一律不会出现在叠加层上。如果整场直播只涉及一个游戏或一个系列,预设可以在搜索开始前就收窄范围:告诉它游戏、系列代码或文字系统,端点就不用再猜了。

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

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