-
Notifications
You must be signed in to change notification settings - Fork 182
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
run_recognition方法能不能返回命中图片名称 #496
Comments
还有关于执行速度的, MaaDebugger执行pipeline的速度很明显比程序快, 是因为不是使用原生调用的原因吗? 换c或者java会快点吗? |
log发一下,debug/maa.log |
maa.log
|
feature match是要慢一点的,而且图片还这么多。计算密集型,python 你开线程应该没什么用 如果这些图片大小不会变的话,可以用 template match 其实我更建议你直接训练一个 yolo 的模型然后用 nn detect |
为啥你需要一个截图的线程,我没太看明白 CustomRecognition run 里本身就是带了一张图片的, |
run_recognition 不返回命中的名称是设计如此,我们认为单个节点内所有图片等价,如果他们不等价,应该拆分成多个节点 |
图片大小倒是不会.变, 不过截图太多了一些图片大小不好控制(那个骰子是动画的并且有7个点数, 为了准确点我截了十多张图片...). 用template match会报一些图片太大,roi太小. 如果要使用template match只能扩大roi. 扩大的话就会识别到其他格子中....所以我就用了feature |
因为我不是用的CustomRecognition, 我是这样调用的(我看示例项目里的阴阳师是这样调用的...) img = context.tasker.controller.post_screencap().wait().get()
recognition_blue_result = context.run_recognition(self.recognition_blue_title,
screenshot,
self.recognition_blue) 因为每个格子(5*3)都需要识别对应格子是什么骰子, 为了节省点资源就共用一张图片 |
报错?不会的,说明你的图或者 json 写的有问题,发一下看看 |
没用 CustomRecognition 吗那这个 context 哪来的? |
CustomAction的context...我看yys是这样用的. 不符合规范吗 |
不是太好,但也行 但是你说的截图线程是? |
我们先理一下逻辑,这个画面期望是要怎么识别,然后需要怎么点击操作?具体说一下 |
@moomiji 我感觉这里文档还要改一下,确实没看见哪里说自己截图要手动 resize( https://github.com/MaaXYZ/MaaFramework/tree/main/tools/ImageCropper |
ImageCropper 你有改过它的什么参数吗? |
window_size = (720, 1280) # 竖屏
# window_size = (1280, 720) # 横屏 |
截图线程是循环调用一个直接触发的pipeline, "screenshot": {
"action": "Custom",
"custom_action": "screenshot_action",
"pre_delay": 0,
"post_delay": 0
} custom_action class ScreenshotAction(CustomAction):
def run(self,
context: Context,
argv: CustomAction.RunArg) -> bool:
"""
截图线程
"""
img = context.tasker.controller.post_screencap().wait().get()
logging.debug("ScreenshotAction post_screencap")
# 存到全局变量里, 由其他线程直接识别
RDContext.set_screenshot(img)
return True |
你把多线程的逻辑去掉就没这个问题了( 控制器一次只能进行一个操作,有一个执行队列,截图在等 swipe 这些操作执行完 |
不光 swipe 会阻塞截图,截图也同时会阻塞 swipe。 直接用最普通的方案就好了,一个 custom action 中,截图 -> 识别 -> 滑动操作 不过更优解是在 custom recognizer 中截图并识别,返回识别成功与否,custom action 中直接执行动作 |
如上面图片, 每个骰子都可能出现在5*3的格子中
我试过识别整个放置区, 效果不太好.
现在是开15个线程识别对应格子, 里面又会识别蓝红2种骰子(2次run_recognition)通过得分确认骰子是红还是蓝,
而每次run_recognition会消耗大约1秒的时间, 完整识别红蓝骰子需要耗时2秒左右. 而且还会把其他骰子识别成我需要操作的红蓝骰子.
比如下面的就经常识别成蓝骰子
再开线程不开可行因为cpu已经到90多了, 而在现场内多执行run_recognition实时性又会大大降低
或者还有其他解决方案吗?
The text was updated successfully, but these errors were encountered: