Three children were seriously injured when their school bus hit a railway bridge.
The double-decker's roof was torn off in the crash in Wellhouse Lane, Winchester, shortly after 08:10 BST.
Pupils from Henry Beaufort School "started screaming" when the roof fell on top of them, leaving a further 12 needing treatment for minor injuries.
Bus operator Stagecoach South said an investigation was under way. No arrests have been made.
The three badly hurt children were taken to hospital. Twelve other youngsters, two of whom were also taken to hospital, suffered minor injuries, Hampshire Constabulary said.
All pupils on board were aged between 11 and 16, the force said.
Poppy, 11, who was sitting on the top deck of the bus, said the children had noticed the driver was "going on a completely different route" in the moments before the crash.
She said a metal pole struck her on the head and others were hurt by breaking glass.
"There was blood everywhere - everyone was in a rush to get down, but we were all trying to help each other," she added.
Zoe, 14, who was also on the top deck, said the roof fell in on top of everyone "and everyone started screaming".
"It felt like 'am I going to live or am I going to die' - everyone was crying and shaking, it was a huge shock," she said.
Fifteen-year-old Robert, who was on the lower deck of the bus, said: "I heard crashing upstairs. I thought we'd hit the side of the tunnel, then I saw the top of the bus falling down.
"Most of the people hurt just had cuts and were bleeding. But there were some people with bad injuries."
Insp Andy Tester, of Hampshire Constabulary, said it was "very lucky" nobody was killed.
"That bus doesn't fit through the bridge - I can't think that a bus route would have been drawn [up] to take it through a bridge that is too low for the bus," he said.
The bridge has a warning sign above it that states vehicles with a height of more than 12ft (3.6m) should not enter.
The bus involved in the crash was believed to be about 14ft (4.3m) in height.
Sue Hearle, head teacher of the Henry Beaufort School, said: "This is a distressing incident and we are extremely relieved that it wasn't more serious."
She added she did not want to speculate on the circumstances of the crash and would be focusing on supporting the children affected.
A spokesperson for Stagecoach South said: "Our thoughts are with the children and their families.
"We are carrying out an internal investigation into the circumstances involved in the incident and we will continue to provide the emergency services with our full support."
The road remains closed between the junction with Andover Road North to School Lane.
Hampshire County Council said staff were providing support to the school "including our education psychology team to help students and staff to deal with any trauma they may experience".