The most accurate way:
Make sure you are in Full Screen Mode:

Before the match end, Alt-tab out of the games. After the game icon flashes*, wait for a while, like 30~60s, then Alt-tab back to the game. Most players had already left the match.
*Like this: This means your match ends.

Then you will see the after action report, the scoreboard:
This scoreboard only renders who is there with you when you alt-tab back.
For most cases, only bots and you are left in this scoreboard. The vacant slots till No.10(Squad mode) No.20(Solo mode) is those human players who had been in this match.
Others (traditional):
Players with squad number must be human:

Only human can active throw a grenade.
[Lonefighter/Solo mode]: Only human can still use other weapons & squads then basic rifle/squad* after their first(Or 4th?) death.
*Bots’ default weapon is M91/30; 98K, infantry only.
Only human can drive a vehicle(planes).
When other unoccupied sectors left, bots never defend in a sector in Conquest mode.
Bot can’t chat with you via mic and chat board.
Bot can’t build anything, or revive you.
Possible:
Human tend to have a huge leap on score then the bots, and less deaths.

If he get vehicle destroyed score, then he are likely to be a human. (The registration of a vehicle destroyed by whom is a myth, sometimes the destruction of abandoned vehicle belongs to whom is really weird, some time a last second non-damage rifle bullet can lead that point to him) Also, Poor soviet tanks is vulnerable to BOT’S AT rifle.
If someone can instant shot you while moving, or opening a door way farther than normal, then he might be a bot.
