This is how I've done it so far:
if __name__ == "__main__":
app = QApplication(sys.argv)
engine = QQmlApplicationEngine()
#Get Context
main = MainWindow()
myImageProvider = cam.ImageProvider()
engine.rootContext().setContextProperty("backend", main)
engine.rootContext().setContextProperty("myImageProvider", myImageProvider)
engine.addImageProvider("myImageProvider", myImageProvider)
#Load QML File
qml_file = Path(__file__).resolve().parent / "qml/main.qml"
engine.load(qml_file)
if not engine.rootObjects():
sys.exit(-1)
sys.exit(app.exec())