How do I make it so each shape is colored a different color/shade?
You cannot apply a colour to each shape because Blender has no concept of what "Shape" means in your context. If the shapes were of a set size and offset from each other, you would be able to make a mathematically accurate base layer of colour and mix that into the material matching the locations of the shapes.

But try the following and see if it gets you further in the direction you wanted to go.

Create a UV for your mesh (Unwrap) and pipe the colour from the Image Texture into a ColorRamp node that can isolate the two colours (you already did this) and gives us the mask.



Now create a new Texture. Here I use a quick and dirty Noise Texture but you could use almost any Texture to give you a base colour layer. You could also create an image for this purpose (*).



This can now be Mixed in with the Mask as the Factor.



And finally we Mix the initial texture back into the final result.



The result is imperfect, but you can tweak the Texture to try and better match the locations of the shapes.

(*) This not as silly as it sounds. You could create an image with a very low resolution e.g. 8x8 pixels and use that grid of coloured pixels as the backing colour layer.

And as always with Blender you could use Python to code a solution with shape detection, but I cannot help with that.