From 0c042f7f071c0f8a71142de313f0d3e6372a0256 Mon Sep 17 00:00:00 2001 From: hyb1996 <946994919@qq.com> Date: Sat, 27 Jan 2018 13:50:30 +0800 Subject: [PATCH] fix: selected pyramid level too small --- .../scriptdroid/network/VersionService.java | 2 +- .../network/api/UpdateCheckApi.java | 2 +- autojs/src/main/assets/modules/__images__.js | 5 ++++- .../autojs/core/image/TemplateMatching.java | 18 +++++++++--------- .../core/ui/inflater/util/Drawables.java | 10 ++++++++-- .../stardust/autojs/runtime/api/Images.java | 5 +++++ 6 files changed, 28 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/com/stardust/scriptdroid/network/VersionService.java b/app/src/main/java/com/stardust/scriptdroid/network/VersionService.java index fc0454f0..b04033b9 100644 --- a/app/src/main/java/com/stardust/scriptdroid/network/VersionService.java +++ b/app/src/main/java/com/stardust/scriptdroid/network/VersionService.java @@ -40,7 +40,7 @@ public class VersionService { public VersionService() { mRetrofit = new Retrofit.Builder() - .baseUrl("https://raw.githubusercontent.com/") + .baseUrl("https://www.autojs.org/") .addConverterFactory(GsonConverterFactory.create(new GsonBuilder() .setLenient() .create())) diff --git a/app/src/main/java/com/stardust/scriptdroid/network/api/UpdateCheckApi.java b/app/src/main/java/com/stardust/scriptdroid/network/api/UpdateCheckApi.java index 1cdb8eb4..31be04cb 100644 --- a/app/src/main/java/com/stardust/scriptdroid/network/api/UpdateCheckApi.java +++ b/app/src/main/java/com/stardust/scriptdroid/network/api/UpdateCheckApi.java @@ -11,7 +11,7 @@ import retrofit2.http.GET; public interface UpdateCheckApi { - @GET("/hyb1996/NoRootScriptDroid/master/version.json") + @GET("/assets/autojs/version.json") Observable checkForUpdates(); } diff --git a/autojs/src/main/assets/modules/__images__.js b/autojs/src/main/assets/modules/__images__.js index 1b8cf1f4..02595989 100644 --- a/autojs/src/main/assets/modules/__images__.js +++ b/autojs/src/main/assets/modules/__images__.js @@ -95,7 +95,10 @@ module.exports = function(__runtime__, scope){ images.findImage = function(img, template, options){ options = options || {}; var threshold = options.threshold || 0.9; - var maxLevel = options.level || -1; + var maxLevel = -1; + if(typeof(options.level) == 'number'){ + maxLevel = options.level; + } var weakThreshold = options.weakThreshold || 0.7; if(options.region){ return rtImages.findImage(img, template, weakThreshold, threshold, buildRegion(options, img), maxLevel); diff --git a/autojs/src/main/java/com/stardust/autojs/core/image/TemplateMatching.java b/autojs/src/main/java/com/stardust/autojs/core/image/TemplateMatching.java index e7f5a209..9cdf56ae 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/image/TemplateMatching.java +++ b/autojs/src/main/java/com/stardust/autojs/core/image/TemplateMatching.java @@ -76,18 +76,18 @@ public class TemplateMatching { Pair bestMatched = getBestMatched(matchResult, matchMethod, weakThreshold); //不满足弱阈值,返回null if (bestMatched.second < weakThreshold) { - p = null; - break; + // p = null; + // break; } p = bestMatched.first; similarity = bestMatched.second; p.x += r.x; p.y += r.y; - //满足强阈值,返回当前结果 - if (bestMatched.second >= strictThreshold) { - pyrUp(p, level); - break; - } + } + //满足强阈值,返回当前结果 + if (similarity >= strictThreshold) { + pyrUp(p, level); + break; } logger.addSplit("level:" + level + " point:" + p); isFirstMatching = false; @@ -150,8 +150,8 @@ public class TemplateMatching { private static int selectPyramidLevel(Mat img, Mat template) { int minDim = Nath.min(img.rows(), img.cols(), template.rows(), template.cols()); - //这里选取12为图像缩小后的最小宽高,从而用log(2, minDim / 16)得到最多可以经过几次缩小。 - int maxLevel = (int) (Math.log(minDim / 7) / Math.log(2)); + //这里选取16为图像缩小后的最小宽高,从而用log(2, minDim / 16)得到最多可以经过几次缩小。 + int maxLevel = (int) (Math.log(minDim / 16) / Math.log(2)); if (maxLevel < 0) { return 0; } diff --git a/autojs/src/main/java/com/stardust/autojs/core/ui/inflater/util/Drawables.java b/autojs/src/main/java/com/stardust/autojs/core/ui/inflater/util/Drawables.java index bc286216..0cfeec1c 100644 --- a/autojs/src/main/java/com/stardust/autojs/core/ui/inflater/util/Drawables.java +++ b/autojs/src/main/java/com/stardust/autojs/core/ui/inflater/util/Drawables.java @@ -26,14 +26,20 @@ import java.util.regex.Pattern; public class Drawables { - private final Pattern DATA_PATTERN = Pattern.compile("data:(\\w+/\\w+);base64,(.+)"); + private static final Pattern DATA_PATTERN = Pattern.compile("data:(\\w+/\\w+);base64,(.+)"); private static ImageLoader sDefaultImageLoader = new DefaultImageLoader(); private ImageLoader mImageLoader = sDefaultImageLoader; public static void setDefaultImageLoader(ImageLoader defaultImageLoader) { + if (defaultImageLoader == null) + throw new NullPointerException(); sDefaultImageLoader = defaultImageLoader; } + public static ImageLoader getDefaultImageLoader() { + return sDefaultImageLoader; + } + public Drawable parse(Context context, String value) { Resources resources = context.getResources(); if (value.startsWith("@color/") || value.startsWith("@android:color/") || value.startsWith("#")) { @@ -93,7 +99,7 @@ public class Drawables { view.setImageBitmap(bitmap); } - public Bitmap loadData(String data) { + public static Bitmap loadData(String data) { Matcher matcher = DATA_PATTERN.matcher(data); if (!matcher.matches() || matcher.groupCount() != 2) { return null; diff --git a/autojs/src/main/java/com/stardust/autojs/runtime/api/Images.java b/autojs/src/main/java/com/stardust/autojs/runtime/api/Images.java index 42164c76..7d89c4a4 100644 --- a/autojs/src/main/java/com/stardust/autojs/runtime/api/Images.java +++ b/autojs/src/main/java/com/stardust/autojs/runtime/api/Images.java @@ -21,6 +21,7 @@ import com.stardust.autojs.core.image.ImageWrapper; import com.stardust.autojs.core.image.ScreenCaptureRequester; import com.stardust.autojs.core.image.ScreenCapturer; import com.stardust.autojs.core.image.TemplateMatching; +import com.stardust.autojs.core.ui.inflater.util.Drawables; import com.stardust.autojs.runtime.ScriptRuntime; import com.stardust.autojs.runtime.exception.ScriptInterruptedException; import com.stardust.concurrent.VolatileDispose; @@ -151,6 +152,10 @@ public class Images { return ImageWrapper.ofBitmap(bitmap); } + public ImageWrapper decodeBase64(String data){ + return ImageWrapper.ofBitmap(Drawables.loadData(data)); + } + public ImageWrapper load(String src) { try { URL url = new URL(src);