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, rode sozinho
Antes de qualquer coisa encostar no seu show, prove que funciona com a webcam do seu notebook. Três comandos.
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 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
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
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 câmera virtual do OBS
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.
- No OBS, clique em Iniciar Câmera Virtual no painel de controles.
- 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.
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.
- Inicie o cardstream em modo de escuta primeiro; ele espera o envio e reconecta sozinho.
- 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, URLrtmp://127.0.0.1:1935/live, contêinerflv, e então clique em Iniciar Gravação. - Esse caminho chama o binário ffmpeg do sistema: rode
brew install ffmpegantes.
$ cardstream-web --listen \ --source rtmp://0.0.0.0:1935/live
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.
- Aponte uma webcam ou placa de captura para o lugar onde você revela as cartas.
- 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.
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.
- Passe a URL que o seu encoder já publica.
- A página do navegador vira um visualizador passivo: a análise roda mesmo sem nenhum navegador aberto.
$ cardstream-web \ --source rtsp://studio/stream1
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.
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
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.
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 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.
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.