MaaFramework
MaaFramework copied to clipboard
pipeline override 导致丢失 custom_recognition_param 和 custom_action_param
@custom_registry.custom_recognition("overridelab202504main")
class OverrideLab202504Main(CustomRecognition):
def analyze(self, context: Context, argv: CustomRecognition.AnalyzeArg) -> CustomRecognition.AnalyzeResult:
new_context = context.clone()
reco1 = context.run_recognition("OverrideLab202504Sub", argv.image)
# override roi
context.override_pipeline({"OverrideLab202504Sub": {"roi": [100, 100, 200, 300]}})
reco2 = context.run_recognition("OverrideLab202504Sub", argv.image)
# override custom param
new_context.override_pipeline({"OverrideLab202504Sub": {"custom_recognition_param": {"value": "new value"}}})
reco3 = new_context.run_recognition("OverrideLab202504Sub", argv.image)
print(f"reco1 is {reco1.best_result.detail}")
print(f"reco2 is {reco2.best_result.detail}")
print(f"reco3 is {reco3.best_result.detail}")
# action
print("run action 1")
context.run_action("OverrideLab202504Action")
# override target
context.override_pipeline({"OverrideLab202504Action": {"target": [100, 100, 200, 300]}})
print("run action 2")
context.run_action("OverrideLab202504Action")
# override custom param
print("run action 3")
new_context.run_action("OverrideLab202504Action", pipeline_override={"OverrideLab202504Action": {"custom_action_param": {"value": "new value"}}})
return CustomRecognition.AnalyzeResult(box=(0, 0, 100, 100), detail="Hello World!")
@custom_registry.custom_recognition("overridelab202504sub")
class OverrideLab202504Sub(CustomRecognition):
def analyze(self, context: Context, argv: CustomRecognition.AnalyzeArg) -> CustomRecognition.AnalyzeResult:
return CustomRecognition.AnalyzeResult(box=(0, 0, 100, 100), detail=f"roi is {argv.roi}. custom_recognition_param is {argv.custom_recognition_param}")
@custom_registry.custom_action("overridelab202504action")
class OverrideLab202504Action(CustomAction):
def run(self, context: Context, argv: CustomAction.RunArg) -> CustomAction.RunResult:
print(f"OverrideLab202504Action: box is {argv.box}. custom_action_param is {argv.custom_action_param}")
return CustomAction.RunResult(True)
{
"OverrideLab202504Main": {
"recognition": "Custom",
"custom_recognition": "overridelab202504main"
},
"OverrideLab202504Sub": {
"recognition": "Custom",
"custom_recognition": "overridelab202504sub",
"custom_recognition_param": {
"value": "default"
},
"roi": [
10,
20,
30,
40
]
},
"OverrideLab202504Action": {
"action": "Custom",
"custom_action": "overridelab202504action",
"custom_action_param": {
"value": "default"
},
"target": [
30,
40,
50,
60
]
}
}
运行OverrideLab202504Main的结果为
reco1 is roi is Rect(x=10, y=20, w=30, h=40). custom_recognition_param is {"value":"default"}
reco2 is roi is Rect(x=100, y=100, w=200, h=300). custom_recognition_param is {}
reco3 is roi is Rect(x=10, y=20, w=30, h=40). custom_recognition_param is {"value":"new value"}
run action 1
OverrideLab202504Action: box is Rect(x=30, y=40, w=50, h=60). custom_action_param is {"value":"default"}
run action 2
OverrideLab202504Action: box is Rect(x=100, y=100, w=200, h=300). custom_action_param is {}
run action 3
OverrideLab202504Action: box is Rect(x=30, y=40, w=50, h=60). custom_action_param is {"value":"new value"}
reco2和action2的custom param在一次override其他字段后都变为{},期待的结果为{"value":"default"}
看起来override其他字段会导致丢失custom_recognition_param 和 custom_action_param