This is the problem, if you pass a 3D
ndarray, it expects that you will have 3 or 4 planes (RGB or RGBA) (Read the code on line 410 in the last frame of the stack trace).
You just need to get rid of the extra dimension using
dna = dna.squeeze()
To see what
squeeze is doing, see the following example:
a = np.arange(25).reshape(5, 5, 1) print a.shape # (5, 5, 1) b = a.squeeze() print b.shape # (5, 5)