Q:

How to allow user to choose file as background image in kivy? 

Or, how to do so using python, give it an ID, and set it as background image in kv language? 
I would like to be able to draw on top of an image instead of a black screen, which I am doing here:
edited
new problem: upload button does not work, here is new code
from random import random
from kivy.app import App
from kivy.uix.button import Button
from kivy.uix.widget import Widget
from kivy.graphics import Color, Line, Rectangle
from kivy.uix.filechooser import FileChooserListView, FileChooserIconView
from kivy.uix.floatlayout import FloatLayout

class MyPaintWidget(Widget):
    def on_touch_down(self, touch):
        color = (random(), random(), random())
        with self.canvas:
            Color(*color)
            d = 30. 
            touch.ud['line'] = Line(points=(touch.x, touch.y))

    def on_touch_move(self, touch):
        touch.ud['line'].points += [touch.x, touch.y]

class MyPaintApp(App):

  def build(self):
        parent = Widget()
        painter = MyPaintWidget()
        Choose = Button(text = 'upload image')
        parent.add_widget(painter)
        parent.add_widget(Choose)

        def chooose_file(obj):
            fc = FileChooserIconView(title= 'upload image')
            image_path = self.fc.selection[0]
            image_name = file_path.split('/')[-1]

            with self.canvas.before:
                Rectangle(
                    size=self.size,
                    pos=self.pos,
                    source=image_name)
            Choose.bind(on_release=choose_file)

        return parent

if __name__ == '__main__':
    MyPaintApp().run()

A:

What about this:
If you used the kivy filechooser to get the user to select an image file,
then you could use the .selection attribute of the filechooser to get the name and/or path of that file.  Once you have that, you could use it to set the source of a Rectangle on the canvas of the layout etc.  where you want the background image. 
For instance, to set a background image on a BoxLayout, inside the class that inherits from the BoxLayout:
fc = FileChooserIconView(title="Choose Image")
image_path = self.fc.selection[0]
image_name = file_path.split('/')[-1]

with self.canvas.before:
    Rectangle(
        size=self.size,
        pos=self.pos,
        source=image_name)

This is of course a very simplistic example, and isn't really taking the rest of your code into account, but with the kivy docs on FileChooser you should get it.  Worth noting also that you could do this in the kv file, perhaps much more cleanly. 