The problem with ceiling camera on rails would be that it won't see stuff in the lower shelves. It would be best to have a camera at human level, or lower.
But going this way, why not put a camera on each shelf, looking at the shelf opposite of it? I.e. if you have shelf A and shelf B opposite each other, the camera on A looks at B, and camera on B looks at A. The goal would be to have each shelf seen by at least one camera.
It now becomes a problem of integrating data, but I can't imagine it being more complex than crowd-navigating robots, or even moving cameras on rails.