Частые вопросы
Вопросы, которые возникают чаще всего: установка и удаление, стоимость, что покидает ваш компьютер и что cardstream умеет распознавать. Всё, что требует подробностей, — в документации.
Установка, обновление, удаление
Скрипт установки затрагивает на вашем компьютере ровно два места, и оба можно просто удалить.
Что нужно для запуска?
Компьютер с Python 3.11 или новее, и это почти всё. Один и тот же релиз на чистом Python подходит для macOS arm64, Linux amd64 и Windows amd64, GPU не требуется. Системный ffmpeg нужен только сетевым источникам (RTSP, RTMP, SRT): и когда cardstream забирает поток сам, и когда ждёт его в режиме ожидания. Веб-камере, файлу и веб-интерфейсу он не нужен.
Куда скрипт установки кладёт файлы?
В два места. ~/.cardstream — корневой каталог установки: виртуальное окружение в venv/ и веса моделей в models/. Две команды, cardstream-web и cardstream-client, — это небольшие скрипты-обёртки в ~/.local/bin: они запускают исполняемые файлы из venv с уже подставленными путями к моделям, поэтому любой переданный вами флаг имеет приоритет. Оба места меняются переменными CARDSTREAM_HOME и INSTALL_DIR. Больше на компьютере ничего не затрагивается. В частности, скрипт никогда не правит профиль вашей оболочки: если ~/.local/bin нет в PATH, он выводит сообщение и оставляет это изменение вам.
Как обновиться до новой версии?
Запустите ту же однострочную команду ещё раз. Она установит текущий релиз в существующее виртуальное окружение и перезапишет обёртки. Веса, которые уже лежат в ~/.cardstream/models, не трогаются (они скачиваются, только если их нет), так что обновление — это небольшая загрузка, а не ещё четверть гигабайта. Чтобы поставить конкретный релиз вместо последнего, задайте 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
Как удалить cardstream?
Двумя командами. Первая удаляет виртуальное окружение и веса моделей, вторая — обе обёртки. Больше чистить нечего: ни демона, ни объекта входа, ни системного пакета.
$ rm -rf ~/.cardstream # venv/ + models/ $ rm -f ~/.local/bin/cardstream-web ~/.local/bin/cardstream-client
Если при установке были заданы CARDSTREAM_HOME или INSTALL_DIR, удалите эти пути вместо указанных выше, а если обёртки лежат в системном каталоге, используйте sudo. То, что вы добавили вручную, убирать тоже вам: строку с PATH в профиле оболочки, экспорт XIMILAR_API_KEY и любой каталог, переданный в --store-images. Больше приложение ничего не пишет в ваш домашний каталог. Убедитесь, что всё удалено, командой command -v cardstream-web в новом окне терминала: старое помнит прежний путь, пока вы не выполните hash -r.
Сколько это стоит и что для этого нужно
Никакой платформы-посредника: ваше оборудование, ваш ключ и движок, задача которого — обращаться к API как можно реже.
Нужен ли API-ключ Ximilar?
Для распознавания по умолчанию — да, и других учётных данных системе не нужно. Получите ключ на ximilar.com и перед запуском экспортируйте его в переменную 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?
Нет. Штатные веса — это экспорты ONNX, рассчитанные на CPU, и всё, что делает локальный движок (фильтр движения, ограничение частоты детекции, эмбеддинг, отвечающий на вопрос «та же карта или новая?»), выполняется на процессоре, который у вас уже есть. GPU пригодится для ваших собственных, более точных весов, но для настроек по умолчанию он не обязателен.
Работает ли он с Whatnot или Fanatics Live?
Да, но к самому маркетплейсу он не подключается, а берёт видео, которое вы и так снимаете. Это может быть виртуальная камера OBS, второй вывод RTMP или SRT рядом с тем, что идёт на платформу, поток RTSP с энкодера или просто отдельная камера, направленная на тот же коврик. В гайде для продавцов в прямом эфире все четыре способа разобраны от начала до конца.
Что на самом деле покидает мой компьютер?
В клиентском режиме — один кроп в формате JPEG на каждую новую карту: не стрим, не соседние кадры и не остальной коврик. Решение о том, отправлять ли вообще что-нибудь, сначала принимается локально, поэтому час видео, за который вы показали сто карт, — это сто небольших запросов. Единственное исключение включаете вы сами: с флагом --ximilar-stream история эфира (текстовая строка на каждую карту и кроп, по которому её распознали) сохраняется ещё и в сеанс в вашем аккаунте Ximilar. По умолчанию это выключено, а с --no-ximilar-stream-images сохраняется только текст.
Можно ли разобрать эфир после его окончания?
Да, если его сохранить. Запустите cardstream с --ximilar-stream NEW, и каждая карта из истории (с ценой, временем на стриме и кропом, по которому её распознали) будет по ходу эфира попадать в сеанс в вашем аккаунте Ximilar. После эфира откройте раздел Cardstream в приложении Ximilar: там стоимость эфира, самые дорогие товары и самые частые сеты, каждая карта с картинкой; отметьте проданное и исправьте неверное совпадение. Перезапустили посреди эфира? Передайте идентификатор сеанса вместо NEW, и эфир продолжится в том же сеансе, даже если он был закрыт. Для сохранения в командное рабочее пространство нужен флаг --ximilar-workspace. Подробности.
$ cardstream-web --price-stats --ximilar-stream NEW Можно ли запустить его в локальной сети, чтобы интерфейс открывался с другого компьютера?
Не надо. Веб-интерфейс работает без авторизации и хранит ваш 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
Что он распознаёт и насколько уверен
Каждое совпадение приходит с расстоянием, уровнем уверенности и картами, которые могли оказаться на его месте.
Какие карты он распознаёт?
Четыре категории, один переключатель. Коллекционные карточные игры: Pokémon, Magic: The Gathering, Yu-Gi-Oh!, One Piece, Lorcana и ещё около двадцати — современные и винтажные синглы, прочитанные прямо со стрима. Спортивные карточки всех главных видов спорта, с точностью до параллели и года. Карты в слабах: читается этикетка, вскрывать слаб не нужно. И комиксы: по названию, выпуску и году. Категорию выбирает один флаг, а во время стрима её можно сменить в окне настроек. Полный список.
Что будет, если он назовёт не ту карту?
Вы это увидите заранее. У каждого совпадения есть исходное расстояние и уровень High / Medium / Low (границы проходят на 0.30 и 0.40), а ещё до четырёх альтернативных карт, которые могли оказаться на его месте, и верная обычно есть в этом коротком списке. Задайте порог результата, и всё, что ниже него, вообще не попадёт в оверлей. Если весь эфир посвящён одной игре или одному сету, подсказки сузят поиск ещё до его начала: сообщите игру, код сета или письменность, и эндпоинту не придётся их угадывать.
Открытый код. Работает у вас. Ваш стрим, ваш стек.
Ни платформы-посредника, ни платы за рабочие места: подключите API Ximilar или собственную систему распознавания, и cardstream будет обращаться к ней один раз на каждую новую карту, а не на каждый кадр. Проводите ли вы брейки на Whatnot, ведёте эфир в духе Fanatics Live или продаёте в прямом эфире на своей площадке — запустите cardstream уже сегодня вечером на том оборудовании, которое у вас есть.