|
29988122 發表於 Aug 10, 2018 17:23:24 GMT
正在試圖加快辨識速度。
我知道我可以做幾件事情來optimization: 1.http://doc.sikuli.org/region.html#Region.setAutoWaitTimeout Ankulua內是Settings:set(AutoWaitTimeout, 3.0)
2.usePreviousSnap(true) 和 usePreviousSnap(false)
不過我想知道兩件事: Q1.以下的code我有沒有搞錯什麼東西?辨識起來挺久的。 (png是預先抓好放在folder內的)
Target1Type = Region(0,0,485,220) Target2Type = Region(485,0,482,220) Target3Type = Region(967,0,476,220) Target1Click = (Location(90,80)) Target2Click = (Location(570,80)) Target3Click = (Location(1050,80))
function TargetChoose() t1 = Target1Type:exists("target_servant.png") usePreviousSnap(true) t2 = Target2Type:exists("target_servant.png") t3 = Target3Type:exists("target_servant.png") t1a = Target1Type:exists("target_danger.png") t2a = Target2Type:exists("target_danger.png") t3a = Target3Type:exists("target_danger.png") if t1 ~= nil or t1a ~= nil then click(Target1Click) toast("Switched to priority target") TargetChoosen = 1 elseif t2 ~= nil or t2a ~= nil then click(Target2Click) toast("Switched to priority target") TargetChoosen = 1 elseif t3 ~= nil or t3a ~= nil then click(Target3Click) toast("Switched to priority target") TargetChoosen = 1 else toast("No priority target selected") end usePreviousSnap(false) end
Q2.我是不是犧牲一些準確度,改低AutoWaitTimeout就行了?根據Sikuli文件,因為對象是靜止畫面,所以我不需要做等待;那我是不是改成0也不會有問題? 除了region.find()、region.wait()跟wait()之外,還有那些函數會被這個設定影響?
== 在cleanup code跟加註解,覺得有些東西不改很悶... 新手問題,先謝謝您願意回答!
見笑了 : p
|
|
|
AnkuLua 發表於 Aug 11, 2018 2:20:02 GMT
Q1. 時間應該都是花在 t1 = Target1Type:exists("target_servant.png") (三秒),可以改成 t1 = Target1Type:exists("target_servant.png", 0) 或是直接用截圖與回放腳本裡的 regionWaitMulti() ankulua-tw.boards.net/thread/232/Q2. 看腳本寫法。不太建議改成0。如果只是要判斷目前在甚麼場景,直接用 regionWaitMulti() 即可;如果是要等已知圖案,可以在exists() 等函數內直接帶進要等幾秒的參數。 有問題歡迎發問
|
|
|
29988122 發表於 Aug 12, 2018 13:31:10 GMT
Q1. 時間應該都是花在 t1 = Target1Type:exists("target_servant.png") (三秒),可以改成 t1 = Target1Type:exists("target_servant.png", 0) 或是直接用截圖與回放腳本裡的 regionWaitMulti() ankulua-tw.boards.net/thread/232/Q2. 看腳本寫法。不太建議改成0。如果只是要判斷目前在甚麼場景,直接用 regionWaitMulti() 即可;如果是要等已知圖案,可以在exists() 等函數內直接帶進要等幾秒的參數。 有問題歡迎發問 其實我試了一下,把AutoWaitTimeout = 0加在這個function的開頭跟結束,結果script沒有出現任何問題,還是能夠正常辨識? 1.加上Settings:set之前這個sctipt的執行區段並沒有等上18秒,也沒有等上9秒,頂多3-4秒而已。我沒有在其他地方宣告AutoWaitTimeout 2.加上Settings:set('AutoWaitTimeout', 0) 之後,執行時間並沒有很大的差異....我沒有拿碼錶計時,可是頂多差半秒吧,搞不好還不到,是可以忽略的誤差值程度。 感覺有些奇怪,而且讓timeout=0,經過一段長時間的執行script後,該辨識到的還是辨識得到,我居然沒有發現任何問題..... Settings:set功能有effective scope的問題嗎?我以為是除非有改動,不然會持續到script exit。 function TargetChoose()
Settings:set('AutoWaitTimeout', 0)
t1 = Target1Type:exists("target_servant.png")
usePreviousSnap(true)
t2 = Target2Type:exists("target_servant.png")
t3 = Target3Type:exists("target_servant.png")
t1a = Target1Type:exists("target_danger.png")
t2a = Target2Type:exists("target_danger.png")
t3a = Target3Type:exists("target_danger.png")
if t1 ~= nil or t1a ~= nil then
click(Target1Click)
toast("Switched to priority target")
TargetChoosen = 1
elseif t2 ~= nil or t2a ~= nil then
click(Target2Click)
toast("Switched to priority target")
TargetChoosen = 1
elseif t3 ~= nil or t3a ~= nil then
click(Target3Click)
toast("Switched to priority target")
TargetChoosen = 1
else
toast("No priority target selected")
end
Settings:set('AutoWaitTimeout', 3)
endinsert code here
|
|
|
AnkuLua 發表於 Aug 12, 2018 14:26:20 GMT
usePreviousSnap(true) 後,即使不給秒數,所以的找圖都是零秒,因為圖不會換,比再多次都是一樣的
usePreviousSnap(false) 就回復正常了
|
|
|
29988122 發表於 Aug 12, 2018 15:36:22 GMT
usePreviousSnap(true) 後,即使不給秒數,所以的找圖都是零秒,因為圖不會換,比再多次都是一樣的 usePreviousSnap(false) 就回復正常了 原來如此,仔細想了一下這不是理所當然嗎...我居然沒有想到這件事。謝謝您的提點! 建議可以在document那邊註記一下,或是把和提升速度有關的function分開記載,方便開發者查閱 我自己印象中和速度有關的大概有這些function? --[[recognize speed realated functions: 1.setScanInterval() 2.Settings:set("MinSimilarity", 0.5) 3.Settings:set("AutoWaitTimeout", 1) 4.usePreviousSnap(true) 5.resolution, 1280 would be better 6.exists(var ,0)]]
另一個無關的問題,就是Ankulua使用的daemon(intreperter?),如果有商業祕密的部分可以跳過不提沒關係。 我並不清楚Lua / Sikuli / Ankulua三者間的關係,很想試著理解,順便改進一下script中一些用到array部分的效率,現在有點卡。因為我不清楚到底要查Lua相關的資訊還是Sikuli相關的資訊... 1.我可以把Ankulua當成implement一部分Sikuli library/function的Lua語言嗎? 2.當初不使用python-like 的sikuli的原因是什麼呢?(我知道lua簡單, 不過限制好多..不能同時跑兩個process很痛苦,總不能每一段fuction都call一次watcher吧,這樣code好亂) 3.然後Android Lua interpreter是哪邊來的呢?感覺您應該有一個不知道是那個專案來的Lua for Android的codebase ,然後才在其上加入您自己維護的Ankulua的部分。 實在是好奇細節,因為感覺要維護一個對應大量Android裝置(SoC, screen resolution, android version...)的框架真的是超級累的,感覺很像是一份全職工作的工作量... 想知道您實際上是怎麼做的,好向您學習 QQ
FGO是現在很紅的遊戲,希望我的script有幫您吸到一些付費使用者,每次用自己寫的script時都覺得受您照顧了 XD 再次謝謝!
|
|
|
AnkuLua 發表於 Aug 13, 2018 15:17:28 GMT
array 部分的效率請查Lua
1. 可以 2. lua 蠻輕量的,很不錯。不知道您所謂watcher 是甚麼,但要記得,圖形辨識是很花CPU的,腳本要有效率就應該只做要做的事。 善用 regionWaitMulti() 可以讓腳本更強壯 3. 可以這樣說
AnkuLua 的架構是經過設計的,讓同一腳本可以在不同機器跑(至少是長寬比相同的) 至於不同Android 裝置和版本,是需要時間磨的 (都出到 7.5.3 版了...)
感謝您的分享腳本
|
|
|
29988122 發表於 Aug 14, 2018 7:29:39 GMT
7.5.3....光用想的就頭皮發麻 囧 謝謝您不厭其煩的回答我,還有一直以來維護框架的貢獻! 收穫很多,會再來讀一些時間複雜度的東西努力學習 再次謝謝您
|
|