How do I can grab the current image in blender game engine from a python controller?
The second approach is the closest. But here's some code that may help (untested, but pulled from a working setup)

    obj = cont.owner
    camera = obj.scene.objects['NOT ACTIVE CAMERA']
    tex = bge.texture.Texture(obj, 0, 0)
    tex.source = bge.texture.ImageRender(
        camera_obj.scene,
        camera_obj,
    )
    tex.capsize(640*480)
    tex.source.background = [0, 0, 0, 0]
    source = self.tex.source
    data_array = bytes(640*480*4)
    source.refresh(data_array, 'RGBA') # Take the picture....

    print(data_array)  # Hopefully lots of data - in a 1D array.


You shouldn't recreate the data_array and texture objects each frame. Only do it on the first  frame, then just keep running the source.refresh() line.

If you run into issues, let me know and I'll make a blend file.