This describes the current game phase.
Note: It doesn't always move forward. Sometimes the system will correct itself
due to cards being occluded or intentionally moved.
When the round is over we go to 'DEALER_DONE'.
In some situations we cannot determine if the round is over without more context
so we go to 'DEALER_MAYBE_DONE'. For example: All players have busted,
but the dealer has to finish playing the hand anyways because of a side bet.
At the end we will go into ROUND_OVER if the round is supposed to be stored, and into
ROUND_CANCELED if the round is super short or we classify it as not a blackjack round.
This state will only be reached once, you should not miss this event.
We use this to mark what rounds we store in the database or show on the screen. If it
reaches ROUND_CANCELED you can assume it was just sensor / AI model noise.
Even rounds with wrong dealer procedure will reach this state, they are marked with
as such in the anomalies / diagnostics fields.
The length of this list is fixed and determined with the calibration procedure.
No Additional ItemsPlayers consist of 0 or more stacks.
If the player has 0 stacks, it is inactive.
If the player has >1 stack, then the player has split its cards.
The cards might be removed as the system handles movement and occlusions.
No Additional ItemsMust contain a minimum of 2 items
Must contain a maximum of 2 items
Whether the stack was doubled.
All chip stacks associated with this player.
Must contain a minimum of 2 items
Must contain a maximum of 2 items
Containes the info about the dealer (mainly cards).
Note: We don't garantuee that we won't take cards out of here.
You should treat this as our current best guess for what cards are actually on the table,
while handling occlusions, lighting changes, etc.
The final value for the dealer cards is given when the phase is ROUND_OVER.
The number of frames since this round was started.
Used to communicate issues with this round. This is unstable in this form and undocumented.
In the future we can expose a structured stable API here.
We use it to identify: Errors in the dealer procedure, issues with our system for debugging.
The timestamp when this round was initialized. It also includes the number of frames
passed since round begin.
The timestamp when a first card was assigned to the round. This is later than the
initialization timestamp, becuase a round can be initialized be chips stack detections.
Must contain a minimum of 2 items
Must contain a maximum of 2 items
UUID v4. It is genereated each new round. A round starts as soon as anything relevant
is detected. Currently 'anything relevant' means cards, chips or cash.
The latter two are only considered if these models are deployed and configured.
Not every uuid should be treated as a full round, it might be canceled and never reach
RoundOver but only RoundCanceled.
Example: A chip stack is recognized and then disappears.