cardstream
Guia

Analise sua live na Whatnot ou na Fanatics Live

O cardstream nunca faz login na Whatnot, na Fanatics Live nem em nenhum outro marketplace. Ele assiste ao mesmo vídeo que você já está mandando para eles, na sua própria máquina, e nomeia cada carta que cai na mesa. Este é o caminho completo, do zero até um overlay ao vivo: uns quinze minutos, uma única vez.

Um computador perto da câmera

macOS, Linux ou Windows. Se você já roda o OBS nele, essa é a máquina certa: a análise acontece localmente, então nada precisa viajar.

O vídeo que você já envia

Uma cena do OBS, uma webcam, uma placa de captura ou um encoder. O cardstream aproveita o que você já tem; ele não pede para montar o show de novo.

Uma chave da API da Ximilar

A única credencial do sistema inteiro, e ela fica na sua máquina. Sem conta no marketplace, sem senha, sem bot no seu chat.

Primeiro

Primeiro, rode sozinho

Antes de qualquer coisa encostar no seu show, prove que funciona com a webcam do seu notebook. Três comandos.

01

Instale

O script cria um venv em ~/.cardstream, confere o wheel da versão contra os checksums, baixa os pesos dos modelos e coloca os comandos no seu PATH. As instalações por wheel, Docker e código-fonte estão na página de download.

$ curl -fsSL https://raw.githubusercontent.com/Ximilar-com/cardstream/main/scripts/install.sh | sh
02

Adicione sua chave

A identificação passa pelo Ximilar collectibles/v2 por padrão, ou pelo seu próprio sistema no lugar dele. XIMILAR_API_KEY é a única variável de ambiente que alguma coisa lê; coloque no perfil do seu shell para ela sobreviver a uma reinicialização na noite do show.

$ export XIMILAR_API_KEY=your-key
03

Mostre uma carta para o notebook

Isso abre a interface no navegador com a webcam embutida. Segure uma carta parada por um instante: o overlay mostra a máquina de estados decidindo, depois o nome, a coleção e a confiança, com o tempo da chamada de identificação ao lado do acerto. Esse é o produto inteiro; o resto desta página é só sobre de onde vêm os pixels.

$ cardstream-web
# → http://127.0.0.1:8001
Depois

Aponte para o seu show

Escolha uma linha. Qual delas depende de uma única pergunta: você transmite de um computador ou de um celular?

O que não dá para fazer

Apontar o cardstream para a sua página pública de reprodução na Whatnot ou na Fanatics. Não existe URL de stream de saída para o seu próprio show, e raspar o player acrescentaria segundos de latência, isso sem falar nos termos da plataforma. Todos os caminhos abaixo pegam o seu vídeo antes de ele chegar ao marketplace, e é exatamente por isso que o cardstream não precisa de conta, senha nem chave de API deles.

A
Você transmite pelo OBS em um computador

A câmera virtual do OBS

Comece aqui

O OBS consegue apresentar a cena montada ao sistema operacional como se fosse uma webcam comum. O cardstream então abre essa câmera como qualquer outra: sem segunda codificação, sem carga extra no encoder e sem ffmpeg para instalar.

  1. No OBS, clique em Iniciar Câmera Virtual no painel de controles.
  2. Rode o cardstream apontando para ela como um índice de webcam. O índice 0 costuma ser a câmera embutida, então a virtual normalmente é a 1; teste 0, 1, 2 até ver a sua cena.
$ cardstream-web --source 1

Teste isso uma vez antes de um show, não durante: no macOS o terminal precisa de permissão de câmera, e se o OpenCV não conseguir abrir o dispositivo virtual na sua máquina, o caminho B funciona em qualquer lugar.

B
Você transmite pelo OBS e quer exatamente os pixels que vão ao ar

Uma segunda saída do OBS

O cardstream fica escutando na sua própria máquina e o OBS envia uma cópia para ele. A Whatnot ou a Fanatics continuam recebendo exatamente o que recebiam antes: isso é um destino a mais, nunca um redirecionamento.

  1. Inicie o cardstream em modo de escuta primeiro; ele espera o envio e reconecta sozinho.
  2. O OBS só tem uma saída de Transmissão, então mande a cópia por uma segunda: ou o plugin obs-multi-rtmp, ou Configurações → Saída → Gravação → Saída personalizada (FFmpeg), tipo Saída para URL, URL rtmp://127.0.0.1:1935/live, contêiner flv, e então clique em Iniciar Gravação.
  3. Esse caminho chama o binário ffmpeg do sistema: rode brew install ffmpeg antes.
$ cardstream-web --listen \
    --source rtmp://0.0.0.0:1935/live
C
Você faz live pelo celular, como a maioria dos vendedores

Uma câmera só dele na mesa

Um celular enviando direto para o app não deixa nada para desviar. Então pare de correr atrás do stream de saída e dê ao cardstream a própria visão dele da mesma mesa: uma segunda webcam vista de cima, ou a saída HDMI da câmera em uma placa de captura.

  1. Aponte uma webcam ou placa de captura para o lugar onde você revela as cartas.
  2. Rode na máquina que está ao lado dessa câmera.
$ cardstream-web --source 0

Não precisa ser o ângulo que os compradores veem. Um plano fechado, bem iluminado e de cima identifica muito melhor do que qualquer feed comprimido de marketplace.

D
Você usa um encoder, um switcher ou uma câmera IP

Qualquer coisa com URL

rtsp://, rtmp:// e srt:// são puxados diretamente, além de feeds JPEG por ws:// quando a sua montagem é caseira. As reconexões usam backoff com limite, então um link de estúdio que cai no meio do break volta sem você encostar em nada.

  1. Passe a URL que o seu encoder já publica.
  2. A página do navegador vira um visualizador passivo: a análise roda mesmo sem nenhum navegador aberto.
$ cardstream-web \
    --source rtsp://studio/stream1
Antes de entrar ao vivo

Ajuste para o show que você vai fazer

Os padrões são honestos, mas um break não é um feed de câmera qualquer: normalmente você sabe o que vai abrir antes de abrir.

04

Diga o que você está abrindo

Pré-ajustar o jogo ou a coleção estreita a busca: chamadas mais rápidas, acertos melhores. Uma regra: sempre passe --alphabet quando passar --game, porque pré-ajustar o jogo desliga a detecção de alfabeto do próprio endpoint, que então assume latino, e uma carta japonesa acabaria batendo com a versão em inglês.

$ cardstream-web --source 1 \
    --game "Pokémon" --alphabet japanese --set-code M4
05

Mude de ideia no meio da live

Quando o próximo lote é de outro jogo, você não reinicia nada: categoria, jogo, código da coleção, alfabeto e os limiares de resultado e de nitidez podem ser editados no painel de configurações do navegador enquanto o stream roda. Todo o resto (detector, filtro, resolução) é lido uma vez na inicialização, então decida isso agora.

06

Guarde o registro, mantenha a porta fechada

--split-results dá a cada aparição a própria linha em vez de juntar as repetições: uma lista corrida do que você mostrou, na ordem em que mostrou, pronta para conferir com os pedidos depois. Deixe --host no padrão 127.0.0.1: esse processo guarda a sua chave e a interface local não tem autenticação, então nunca deve ficar acessível pela sua rede local.

$ cardstream-web --source 1 --split-results
07

Salve o show para a manhã seguinte

Adicione --ximilar-stream NEW e cada linha desse histórico (a carta, o preço, quanto tempo ela ficou no ar e o recorte a partir do qual foi identificada) é salva em uma sessão na sua conta da Ximilar enquanto você transmite. Depois, a seção Cardstream do app da Ximilar mostra o show inteiro (o valor dele, as cartas mais valiosas e cada carta com a imagem dela), e é lá que você marca o que foi vendido e corrige uma correspondência errada. Se o cliente reiniciar no meio do show, inicie de novo com o id da sessão que ele imprimiu no lugar de NEW e o mesmo show continua. Para salvar em um workspace de equipe, use --ximilar-workspace.

$ cardstream-web --source 1 --price-stats --ximilar-stream NEW
# depois de reiniciar:
$ cardstream-web --source 1 --price-stats --ximilar-stream <session-id>

Depois é só fazer o seu show. Detecção, movimento e o filtro de identidade rodam todos localmente na sua máquina; a chamada de identificação dispara uma vez por carta que você põe na mesa, mais ou menos cem em uma hora, contra os 54.000 quadros que essa hora contém. A conta está aqui.

Se algo estiver estranho

As seis coisas que realmente dão errado

A câmera virtual não aparece na lista

Teste --source 0, 1, 2 em sequência; os índices são os que o sistema operacional distribuir. No macOS, dê ao seu terminal acesso à câmera em Ajustes do Sistema → Privacidade e Segurança. Se o OpenCV ainda assim não abrir, mude para o caminho B.

“ffmpeg not found”

Só --listen e --ffmpeg chamam o binário do sistema. Instale (brew install ffmpeg) e rode de novo; os caminhos por câmera virtual, webcam e pull simples não precisam de nada a mais.

O OBS não deixa adicionar um segundo stream

Esse é um limite do OBS, não do cardstream: ele tem uma única saída de Transmissão. O plugin obs-multi-rtmp adiciona destinos extras de verdade; o caminho de gravação por Saída personalizada (FFmpeg) do caminho B funciona com o OBS padrão.

As cartas são encontradas, mas nunca identificadas

Quase sempre é resolução ou movimento. O número da carta precisa estar legível no quadro que você envia: mantenha o OBS em 1080p, segure a revelação parada por um instante e só então afrouxe --result-threshold (padrão 0.9; mais alto mantém correspondências mais fracas, 1.0 mantém tudo).

A mesma carta é identificada duas vezes

O filtro de identidade pontuou as duas visões abaixo de --similarity-threshold (padrão 0.85) e considerou uma carta nova. Abaixe um pouco. Se você põe uma carta na mesa e pega de volta, aumente --forget-after em vez disso: depois de 2 segundos fora de cena, uma carta é tratada como nova de propósito.

Nada é detectado

Rode com --show-detection para desenhar a caixa: a detecção sempre roda, só não é desenhada por padrão. Sem caixa, a carta está pequena ou rápida demais no quadro; caixa sem acerto manda você para a linha de cima.

Ainda travado? O README documenta cada flag, e a central de documentação agrupa tudo pelo que você está tentando fazer.

Código aberto. Hospedado por você. Sua live, seu stack.

Sem plataforma no meio do caminho, sem licença por assento: conecte a API da Ximilar ou seu próprio sistema de identificação e o cardstream chama uma vez por carta distinta, não uma vez por quadro. Não importa se você faz breaks na Whatnot, comanda um show no estilo Fanatics Live ou transmite seu próprio live commerce: coloque o cardstream para rodar hoje à noite no hardware que você já tem.