| | |
| | | /** |
| | | * 设置图色模块初始化参数,可用于多分辨率兼容 |
| | | * @param param |
| | | * auto_click_request_dialog: true 自动点击截图权限对话框 |
| | | * auto_detect_orientation: true 自动检测方向 false 不检测方向 |
| | | */ |
| | | ImageWrapper.prototype.setInitParam = function (param) { |
| | | if (imageWrapper == null) { |
| | |
| | | } |
| | | imageWrapper.setInitParam(JSON.stringify(param)); |
| | | }; |
| | | /** |
| | | * 切换图片存储模式为opencv的mat格式 |
| | | * 这个函数调用会初始化OPENCV,所以打包的时候组件要包含opencv组件(找图组件) |
| | | * 适合 EC 10.18.0+ |
| | | * 切换后抓图、读取图片、找图、找色等都会切换到mat格式,速度更快内存更少 |
| | | * 如果让图片格式切换请参考 imageToMatFormat和matToImageFormat两个函数 |
| | | * @param use 1 是 0 否 |
| | | * @return {boolean} true 成功 false 失败 |
| | | */ |
| | | ImageWrapper.prototype.useOpencvMat = function (use) { |
| | | if (imageWrapper == null) { |
| | | return false; |
| | | } |
| | | return imageWrapper.useOpencvMat(use); |
| | | }; |
| | | |
| | | /** |
| | | * 截屏时候如果转换mat失败,可以是这个函数试试,一般用不上 |
| | | * 这个函数调用会初始化OPENCV,所以打包的时候组件要包含opencv组件 |
| | | * 先转为bitmap再转为mat |
| | | * 适合 EC 10.18.0+ |
| | | * @param use 1 是 0 否 |
| | | * @return {boolean} true 成功 false 失败 |
| | | */ |
| | | ImageWrapper.prototype.setConvertMatWithBitmap = function (use) { |
| | | if (imageWrapper == null) { |
| | | return false; |
| | | } |
| | | return imageWrapper.setConvertMatWithBitmap(use); |
| | | }; |
| | | |
| | | |
| | | /** |
| | | * 设置找色找图的算法模式 |
| | | * 适合EC 9.10.0+ |
| | | * @param type 1 代表老的查找算法,2代表新的查找算法 |
| | | * @return {boolean|*} |
| | | * @return {boolean} |
| | | */ |
| | | ImageWrapper.prototype.setFindColorImageMode = function (type) { |
| | | if (imageWrapper == null) { |
| | |
| | | return imageWrapper.setFindColorImageMode(type); |
| | | }; |
| | | |
| | | |
| | | /** |
| | | * 转换Mat存储格式 |
| | | * 适合 EC 10.18.0+ |
| | | * @param img {AutoImage} 图片对象 |
| | | * @return {null|AutoImage} MAT存储格式的AutoImage 对象或者null |
| | | */ |
| | | ImageWrapper.prototype.imageToMatFormat = function (img) { |
| | | if (img == null) { |
| | | return null; |
| | | } |
| | | let xd = imageWrapper.imageToMatFormat(img.uuid); |
| | | if (xd != null && xd != undefined && xd != "") { |
| | | return new AutoImage(javaString2string(xd)); |
| | | } |
| | | return null; |
| | | }; |
| | | |
| | | /** |
| | | * 转换普通image存储格式 |
| | | * 适合 EC 10.18.0+ |
| | | * @param img {AutoImage} 图片对象 |
| | | * @return {null|AutoImage} 普通存储格式的AutoImage 对象或者null |
| | | */ |
| | | ImageWrapper.prototype.matToImageFormat = function (img) { |
| | | if (img == null) { |
| | | return null; |
| | | } |
| | | let xd = imageWrapper.matToImageFormat(img.uuid); |
| | | if (xd != null && xd != undefined && xd != "") { |
| | | return new AutoImage(javaString2string(xd)); |
| | | } |
| | | return null; |
| | | }; |
| | | /** |
| | | * 初始化OPENCV 类库 |
| | | * 如果使用找图请先调用这个函数,第一次初始化需要复制类库,时间可能较长,以后再次执行就很快 |
| | | * @return 布尔型 true 代表成功 false代表失败 |
| | | * @return {boolean} true 代表成功 false代表失败 |
| | | */ |
| | | ImageWrapper.prototype.initOpenCV = function () { |
| | | if (imageWrapper == null) { |
| | |
| | | * @param timeout 超时时间,单位是毫秒 |
| | | * @param type 截屏的类型,0 自动选择,1 代表授权模式,2 代表无需权限模式(该模式前提条件:运行模式为代理模式) |
| | | * |
| | | * @return 布尔型 true 代表成功 false代表失败 |
| | | * @return {boolean} true 代表成功 false代表失败 |
| | | */ |
| | | ImageWrapper.prototype.requestScreenCapture = function (timeout, type) { |
| | | if (imageWrapper == null) { |
| | |
| | | * @param y 截图的起始Y坐标 |
| | | * @param ex 终点X坐标 |
| | | * @param ey 终点Y坐标 |
| | | * @return AutoImage AutoImage对象或者null |
| | | * @return {null|AutoImage} AutoImage对象或者null |
| | | */ |
| | | ImageWrapper.prototype.captureScreen = function (retryNumber, x, y, ex, ey) { |
| | | if (imageWrapper == null) { |
| | |
| | | * @param ex 终点X坐标 |
| | | * @param ey 终点Y坐标 |
| | | * @param q 图片质量,1 - 100,代理模式下有用 |
| | | * @return Bitmap null或者bitmap对象 |
| | | * @return {null|Bitmap} null或者bitmap对象 |
| | | */ |
| | | ImageWrapper.prototype.captureScreenBitmap = function (format, x, y, ex, ey, q) { |
| | | if (imageWrapper == null) { |
| | |
| | | /** |
| | | * 将屏幕抓取为Bitmap对象,在代理模式下和captureScreenBitmap实现不一样,速度比captureScreenBitmap快 |
| | | * 适合版本 EC 8.3.+ |
| | | * @return Bitmap null或者bitmap对象 |
| | | * @return {null|Bitmap} null或者bitmap对象 |
| | | */ |
| | | ImageWrapper.prototype.captureScreenBitmapEx = function () { |
| | | if (imageWrapper == null) { |
| | |
| | | * @param ex 终点X坐标 |
| | | * @param ey 终点Y坐标 |
| | | * @param path 截图保存路径 |
| | | * @return 布尔型 true 截图成功 false 代表不成功 |
| | | * @return {boolean} true 截图成功 false 代表不成功 |
| | | */ |
| | | ImageWrapper.prototype.captureToFile = function (retryNumber, x, y, ex, ey, path) { |
| | | if (imageWrapper == null) { |
| | |
| | | * 兼容版本: Android 5.0 以上 |
| | | * |
| | | * @param path 图片路径 |
| | | * @return AutoImage AutoImage对象或者null |
| | | * @return {null|AutoImage} AutoImage对象或者null |
| | | */ |
| | | ImageWrapper.prototype.readImage = function (path) { |
| | | if (imageWrapper == null) { |
| | |
| | | * [注意]: 这个函数是将图片读取到app进程中,如果你使用的是代理模式并且已经打开了代理服务,请使用readImage函数 |
| | | * 适合版本: EC 9.41.0+ |
| | | * @param path 图片路径 |
| | | * @return AutoImage AutoImage对象或者null |
| | | * @return {null|AutoImage} AutoImage对象或者null |
| | | */ |
| | | ImageWrapper.prototype.readImageNotAgent = function (path) { |
| | | if (imageWrapper == null) { |
| | |
| | | * 适合版本: EC 9.41.0+ |
| | | * [注意]: 这个函数是将图片读取到app进程中,如果你使用的是代理模式并且已经打开了代理服务,请使用 bitmapToImage 函数 |
| | | * @param bitmap {Bitmap}对象 |
| | | * @return {AutoImage} 对象 |
| | | * @return {null|AutoImage} 对象 |
| | | */ |
| | | ImageWrapper.prototype.bitmapToImageNotAgent = function (bitmap) { |
| | | if (imageWrapper == null) { |
| | |
| | | * 适合版本: EC 9.41.0+ |
| | | * [注意]: 这个函数是将图片读取到app进程中,如果你使用的是代理模式并且已经打开了代理服务,请使用 readResAutoImage 函数 |
| | | * @param res {string} res文件夹下的文件路径 |
| | | * @return {AutoImage} 对象 |
| | | * @return {null|AutoImage} 对象 |
| | | */ |
| | | ImageWrapper.prototype.readResAutoImageNotAgent = function (res) { |
| | | if (res == null) { |
| | |
| | | * 兼容版本: Android 5.0 以上 |
| | | * |
| | | * @param path 图片路径 |
| | | * @return Bitmap android的bitmap对象或者null |
| | | * @return {null|Bitmap} android的bitmap对象或者null |
| | | */ |
| | | ImageWrapper.prototype.readBitmap = function (path) { |
| | | if (imageWrapper == null) { |
| | |
| | | * @param image1 图片 |
| | | * @param x 要获取的像素的横坐标。 |
| | | * @param y 要获取的像素的纵坐标。 |
| | | * @return 整型 |
| | | * @return {number} |
| | | */ |
| | | ImageWrapper.prototype.pixelInImage = function (image1, x, y) { |
| | | if (imageWrapper == null || image1 == null) { |
| | |
| | | * @param threshold 图片相似度。取值范围为0~1的浮点数。默认值为0.9。 |
| | | * @param limit 限制结果的数量,如果要找到1个,就填写1,如果是多个请填写多个 |
| | | * @param method 0: TM_SQDIFF平方差匹配法,1: TM_SQDIFF_NORMED归一化平方差匹配方法,2: TM_CCORR相关匹配法,3: TM_CCORR_NORMED归一化相关匹配法,4: TM_CCOEFF系数匹配法,5: TM_CCOEFF_NORMED归一化系数匹配法 |
| | | * @return Rect 区域坐标对象数组或者null |
| | | * @return {null|Rect[]} 区域坐标对象数组或者null |
| | | */ |
| | | ImageWrapper.prototype.findImage = function (image1, template, x, y, ex, ey, weakThreshold, threshold, limit, method) { |
| | | if (imageWrapper == null || image1 == null || template == null) { |
| | |
| | | * @param threshold 图片相似度。取值范围为0~1的浮点数。默认值为0.9。 |
| | | * @param limit 限制结果的数量,如果要找到1个,就填写1,如果是多个请填写多个 |
| | | * @param method 0: TM_SQDIFF平方差匹配法,1: TM_SQDIFF_NORMED归一化平方差匹配方法,2: TM_CCORR相关匹配法,3: TM_CCORR_NORMED归一化相关匹配法,4: TM_CCOEFF系数匹配法,5: TM_CCOEFF_NORMED归一化系数匹配法 |
| | | * @return Rect 区域坐标对象数组或者null |
| | | * @return {null|Rect[]} 区域坐标对象数组或者null |
| | | */ |
| | | ImageWrapper.prototype.findImage2 = function (image1, template, x, y, ex, ey, weakThreshold, threshold, limit, method) { |
| | | if (imageWrapper == null || image1 == null || template == null) { |
| | |
| | | * @param threshold 图片相似度。取值范围为0~1的浮点数。默认值为0.9。 |
| | | * @param limit 限制结果的数量,如果要找到1个,就填写1,如果是多个请填写多个 |
| | | * @param method 0: TM_SQDIFF平方差匹配法,1: TM_SQDIFF_NORMED归一化平方差匹配方法,2: TM_CCORR相关匹配法,3: TM_CCORR_NORMED归一化相关匹配法,4: TM_CCOEFF系数匹配法,5: TM_CCOEFF_NORMED归一化系数匹配法 |
| | | * @return Rect 区域坐标对象数组或者null |
| | | * @return {null|Rect[]} 区域坐标对象数组或者null |
| | | */ |
| | | ImageWrapper.prototype.findImageEx = function (template, x, y, ex, ey, weakThreshold, threshold, limit, method) { |
| | | if (imageWrapper == null || template == null) { |
| | |
| | | * level越大可能带来越高的找图效率,但也可能造成找图失败(图片因过度缩小而无法分辨)或返回错误位置。因此,除非您清楚该参数的意义并需要进行性能调优,否则不需要用到该参数。 |
| | | * @param limit 限制结果的数量,如果要找到1个,就填写1,如果是多个请填写多个 |
| | | * @param method 0: TM_SQDIFF平方差匹配法,1: TM_SQDIFF_NORMED归一化平方差匹配方法,2: TM_CCORR相关匹配法,3: TM_CCORR_NORMED归一化相关匹配法,4: TM_CCOEFF系数匹配法,5: TM_CCOEFF_NORMED归一化系数匹配法 |
| | | * @return Match集合 匹配到的集合 |
| | | * @return {null|Match[]} 匹配到的集合 |
| | | */ |
| | | ImageWrapper.prototype.matchTemplate = function (image1, template, weakThreshold, threshold, rect, maxLevel, limit, method) { |
| | | if (imageWrapper == null || image1 == null || template == null) { |
| | |
| | | if (res == null || res == "") { |
| | | return null; |
| | | } |
| | | var d = JSON.parse(res); |
| | | var x = []; |
| | | for (var i = 0; i < d.length; i++) { |
| | | x.push(new Match(d[i])); |
| | | try { |
| | | var d = JSON.parse(res); |
| | | var x = []; |
| | | for (var i = 0; i < d.length; i++) { |
| | | x.push(new Match(d[i])); |
| | | } |
| | | return x; |
| | | } catch (e) { |
| | | |
| | | } |
| | | return x; |
| | | return null; |
| | | }; |
| | | |
| | | /** |
| | |
| | | * level越大可能带来越高的找图效率,但也可能造成找图失败(图片因过度缩小而无法分辨)或返回错误位置。因此,除非您清楚该参数的意义并需要进行性能调优,否则不需要用到该参数。 |
| | | * @param limit 限制结果的数量,如果要找到1个,就填写1,如果是多个请填写多个 |
| | | * @param method 0: TM_SQDIFF平方差匹配法,1: TM_SQDIFF_NORMED归一化平方差匹配方法,2: TM_CCORR相关匹配法,3: TM_CCORR_NORMED归一化相关匹配法,4: TM_CCOEFF系数匹配法,5: TM_CCOEFF_NORMED归一化系数匹配法 |
| | | * @return Match集合 匹配到的集合 |
| | | * @return {null|Match[]} 匹配到的集合 |
| | | */ |
| | | ImageWrapper.prototype.matchTemplate2 = function (image1, template, weakThreshold, threshold, rect, maxLevel, limit, method) { |
| | | if (imageWrapper == null || image1 == null || template == null) { |
| | |
| | | if (res == null || res == "") { |
| | | return null; |
| | | } |
| | | var d = JSON.parse(res); |
| | | var x = []; |
| | | for (var i = 0; i < d.length; i++) { |
| | | x.push(new Match(d[i])); |
| | | try { |
| | | var d = JSON.parse(res); |
| | | var x = []; |
| | | for (var i = 0; i < d.length; i++) { |
| | | x.push(new Match(d[i])); |
| | | } |
| | | return x; |
| | | } catch (e) { |
| | | |
| | | } |
| | | return x; |
| | | return null; |
| | | |
| | | }; |
| | | /** |
| | | * OpenCV模板匹配封装,在当前屏幕截图中进行匹配 |
| | |
| | | * level越大可能带来越高的找图效率,但也可能造成找图失败(图片因过度缩小而无法分辨)或返回错误位置。因此,除非您清楚该参数的意义并需要进行性能调优,否则不需要用到该参数。 |
| | | * @param limit 限制结果的数量,如果要找到1个,就填写1,如果是多个请填写多个 |
| | | * @param method 0: TM_SQDIFF平方差匹配法,1: TM_SQDIFF_NORMED归一化平方差匹配方法,2: TM_CCORR相关匹配法,3: TM_CCORR_NORMED归一化相关匹配法,4: TM_CCOEFF系数匹配法,5: TM_CCOEFF_NORMED归一化系数匹配法 |
| | | * @return Match集合 匹配到的集合 |
| | | * @return {null|Match[]} 匹配到的集合 |
| | | */ |
| | | ImageWrapper.prototype.matchTemplateEx = function (template, weakThreshold, threshold, rect, maxLevel, limit, method) { |
| | | if (imageWrapper == null || template == null) { |
| | |
| | | * @param ey 终点Y坐标 |
| | | * @param limit 限制个数 |
| | | * @param orz 方向,分别从1-8 |
| | | * @return 多个 PointIndex 坐标点数组或者null |
| | | * @return {null|PointIndex[]}多个 PointIndex 坐标点数组或者null |
| | | */ |
| | | ImageWrapper.prototype.findNotColor = function (image1, color, threshold, x, y, ex, ey, limit, orz) { |
| | | if (imageWrapper == null || image1 == null) { |
| | |
| | | if (res == null || res == "") { |
| | | return null; |
| | | } |
| | | try { |
| | | let d = JSON.parse(res); |
| | | let x1 = []; |
| | | for (let i = 0; i < d.length; i++) { |
| | | x1.push(new PointIndex(d[i])); |
| | | } |
| | | return x1; |
| | | } catch (e) { |
| | | |
| | | let d = JSON.parse(res); |
| | | let x1 = []; |
| | | for (let i = 0; i < d.length; i++) { |
| | | x1.push(new PointIndex(d[i])); |
| | | } |
| | | return x1; |
| | | return null; |
| | | |
| | | }; |
| | | /** |
| | | * 在图片中找到颜色和color完全相等的点,;如果没有找到,则返回null。 |
| | |
| | | * @param ey 终点Y坐标 |
| | | * @param limit 限制个数 |
| | | * @param orz 方向,分别从1-8 |
| | | * @return 多个 PointIndex 坐标点数组或者null |
| | | * @return {null|PointIndex[]} 坐标点数组或者null |
| | | */ |
| | | ImageWrapper.prototype.findColor = function (image1, color, threshold, x, y, ex, ey, limit, orz) { |
| | | if (imageWrapper == null || image1 == null) { |
| | |
| | | return null; |
| | | } |
| | | |
| | | let d = JSON.parse(res); |
| | | let x1 = []; |
| | | for (let i = 0; i < d.length; i++) { |
| | | x1.push(new PointIndex(d[i])); |
| | | try { |
| | | let d = JSON.parse(res); |
| | | let x1 = []; |
| | | for (let i = 0; i < d.length; i++) { |
| | | x1.push(new PointIndex(d[i])); |
| | | } |
| | | return x1; |
| | | } catch (e) { |
| | | |
| | | } |
| | | return x1; |
| | | return null; |
| | | }; |
| | | |
| | | |
| | |
| | | * |
| | | * @param image 图片 |
| | | * @param jsonFileName res文件中取色工具生成的JSON文件,只要填写文件名称即可,后缀不用填写 |
| | | * @return 多个 PointIndex 坐标点数组或者null |
| | | * @return {null|PointIndex[]} 坐标点数组或者null |
| | | */ |
| | | ImageWrapper.prototype.findColorJ = function (image1, jsonFileName) { |
| | | if (imageWrapper == null || image1 == null) { |
| | |
| | | * @param ey 终点Y坐标 |
| | | * @param limit 限制个数 |
| | | * @param orz 方向,分别从1-8 |
| | | * @return 多个 PointIndex 坐标点数组或者null |
| | | * @return {null|PointIndex[]} 坐标点数组或者null |
| | | */ |
| | | ImageWrapper.prototype.findColorEx = function (color, threshold, x, y, ex, ey, limit, orz) { |
| | | if (imageWrapper == null) { |
| | |
| | | if (res == null || res == "") { |
| | | return null; |
| | | } |
| | | let d = JSON.parse(res); |
| | | let x1 = []; |
| | | for (var i = 0; i < d.length; i++) { |
| | | x1.push(new PointIndex(d[i])); |
| | | try { |
| | | let d = JSON.parse(res); |
| | | let x1 = []; |
| | | for (var i = 0; i < d.length; i++) { |
| | | x1.push(new PointIndex(d[i])); |
| | | } |
| | | return x1; |
| | | } catch (e) { |
| | | return null; |
| | | } |
| | | return x1; |
| | | |
| | | }; |
| | | |
| | | |
| | |
| | | * 兼容版本: Android 5.0 以上 |
| | | * |
| | | * @param jsonFileName res文件中取色工具生成的JSON文件,只要填写文件名称即可,后缀不用填写 |
| | | * @return 多个 PointIndex 坐标点数组或者null |
| | | * @return {null|PointIndex[]} 坐标点数组或者null |
| | | */ |
| | | ImageWrapper.prototype.findColorExJ = function (jsonFileName) { |
| | | if (imageWrapper == null) { |
| | |
| | | * @param ey 终点Y坐标 |
| | | * @param limit 限制个数 |
| | | * @param orz 方向,分别从1-8 |
| | | * @return 多个Point 坐标点数组或者null |
| | | * @return {null|Point[]} 坐标点数组或者null |
| | | */ |
| | | ImageWrapper.prototype.findMultiColor = function (image1, firstColor, points, threshold, x, y, ex, ey, limit, orz) { |
| | | if (imageWrapper == null || image1 == null) { |
| | |
| | | if (res == null || res == "") { |
| | | return null; |
| | | } |
| | | let d = JSON.parse(res); |
| | | let x1 = []; |
| | | for (let i = 0; i < d.length; i++) { |
| | | x1.push(new Point(d[i])); |
| | | try { |
| | | let d = JSON.parse(res); |
| | | let x1 = []; |
| | | for (let i = 0; i < d.length; i++) { |
| | | x1.push(new Point(d[i])); |
| | | } |
| | | return x1; |
| | | } catch (e) { |
| | | } |
| | | return x1; |
| | | return null; |
| | | |
| | | }; |
| | | |
| | | |
| | |
| | | * |
| | | * @param image1 要找色的图片 |
| | | * @param jsonFileName res文件中取色工具生成的JSON文件,只要填写文件名称即可,后缀不用填写 |
| | | * @return 多个Point 坐标点数组或者null |
| | | * @return {null|Point[]} 坐标点数组或者null |
| | | */ |
| | | ImageWrapper.prototype.findMultiColorJ = function (image1, jsonFileName) { |
| | | //String image, String firstColor, String points, float threshold, int x, int y, int w, int h,int limit |
| | |
| | | * @param ey 终点Y坐标 |
| | | * @param limit 限制个数 |
| | | * @param orz 方向,分别从1-8 |
| | | * @return 多个Point 坐标点数组或者null |
| | | * @return {null|Point[]} 坐标点数组或者null |
| | | */ |
| | | ImageWrapper.prototype.findMultiColorEx = function (firstColor, points, threshold, x, y, ex, ey, limit, orz) { |
| | | //String firstColor, String points, float threshold, int x, int y, int w, int h |
| | |
| | | * 兼容版本: Android 5.0 以上 |
| | | * |
| | | * @param jsonFileName res文件中取色工具生成的JSON文件,只要填写文件名称即可,后缀不用填写 |
| | | * @return 多个Point 坐标点数组或者null |
| | | * @return {null|Point[]} 坐标点数组或者null |
| | | */ |
| | | ImageWrapper.prototype.findMultiColorExJ = function (jsonFileName) { |
| | | if (imageWrapper == null) { |
| | |
| | | * @param y 区域的Y起始坐标,默认填写0全屏查找 |
| | | * @param ex 终点X坐标,默认填写0全屏查找 |
| | | * @param ey 终点Y坐标,默认填写0全屏查找 |
| | | * @return 布尔型,true代表找到了 false代表未找到 |
| | | * @return {boolean} true代表找到了 false代表未找到 |
| | | */ |
| | | ImageWrapper.prototype.cmpColor = function (image1, points, threshold, x, y, ex, ey) { |
| | | if (imageWrapper == null || image1 == null) { |
| | |
| | | * @param y 区域的Y起始坐标,默认填写0全屏查找 |
| | | * @param ex 终点X坐标,默认填写0全屏查找 |
| | | * @param ey 终点Y坐标,默认填写0全屏查找 |
| | | * @return 布尔型,true代表找到了 false代表未找到 |
| | | * @return {boolean} true代表找到了 false代表未找到 |
| | | */ |
| | | ImageWrapper.prototype.cmpColorEx = function (points, threshold, x, y, ex, ey) { |
| | | if (imageWrapper == null) { |
| | |
| | | * @param y 区域的Y起始坐标,默认填写0全屏查找 |
| | | * @param ex 终点X坐标,默认填写0全屏查找 |
| | | * @param ey 终点Y坐标,默认填写0全屏查找 |
| | | * @return 整型,如果找到就返回当前points的索引值,如果返回-1,说明都没有找到 |
| | | * @return {number} 如果找到就返回当前points的索引值,如果返回-1,说明都没有找到 |
| | | */ |
| | | ImageWrapper.prototype.cmpMultiColor = function (image1, points, threshold, x, y, ex, ey) { |
| | | if (imageWrapper == null || image1 == null) { |
| | |
| | | * @param y 区域的Y起始坐标,默认填写0全屏查找 |
| | | * @param ex 终点X坐标,默认填写0全屏查找 |
| | | * @param ey 终点Y坐标,默认填写0全屏查找 |
| | | * @return 整型,如果找到就返回当前points的索引值,如果返回-1,说明都没有找到 |
| | | * @return {number} 如果找到就返回当前points的索引值,如果返回-1,说明都没有找到 |
| | | */ |
| | | ImageWrapper.prototype.cmpMultiColorEx = function (points, threshold, x, y, ex, ey) { |
| | | if (imageWrapper == null) { |
| | |
| | | /** |
| | | * 取得宽度 |
| | | * @param img 图片对象 |
| | | * @return int |
| | | * @return {number} |
| | | */ |
| | | ImageWrapper.prototype.getWidth = function (img) { |
| | | if (img == null) { |
| | |
| | | /** |
| | | * 取得高度 |
| | | * @param img 图片对象 |
| | | * @return int |
| | | * @return {number} |
| | | */ |
| | | ImageWrapper.prototype.getHeight = function (img) { |
| | | if (img == null) { |
| | |
| | | * 保存到文件中 |
| | | * @param img 图片对象 |
| | | * @param path 路径 |
| | | * @return bool true代表成功,false 代表失败 |
| | | * @return {boolean} true代表成功,false 代表失败 |
| | | */ |
| | | ImageWrapper.prototype.saveTo = function (img, path) { |
| | | if (img == null) { |
| | |
| | | /** |
| | | * 转成base64的字符串 |
| | | * @param img 图片对象 |
| | | * @return string |
| | | * @return {string} |
| | | */ |
| | | ImageWrapper.prototype.toBase64 = function (img) { |
| | | if (img == null) { |
| | |
| | | * @param img 图片对象 |
| | | * @param format 格式 jpg或者 png |
| | | * @param q 质量 1-100,质量越大 越清晰 |
| | | * @return 字符串 |
| | | * @return {string} |
| | | */ |
| | | ImageWrapper.prototype.toBase64Format = function (img, format, q) { |
| | | if (img == null) { |
| | |
| | | * @param y y起始坐标 |
| | | * @param ex 终点X坐标 |
| | | * @param ey 终点Y坐标 |
| | | * @return AutoImage 对象或者null |
| | | * @return {null|AutoImage} 对象或者null |
| | | */ |
| | | ImageWrapper.prototype.clip = function (img, x, y, ex, ey) { |
| | | if (img == null) { |
| | |
| | | * @param img 图片对象 |
| | | * @param w 目标宽度 |
| | | * @param h 目标高度 |
| | | * @return AutoImage 对象或者null |
| | | * @return {null|AutoImage} 对象或者null |
| | | */ |
| | | ImageWrapper.prototype.scaleImage = function (img, w, h) { |
| | | if (img == null) { |
| | |
| | | * @param img 图片对象 |
| | | * @param x x坐标点 |
| | | * @param y y坐标点 |
| | | * @return int 颜色值 |
| | | * @return {number} 颜色值 |
| | | */ |
| | | ImageWrapper.prototype.pixel = function (img, x, y) { |
| | | if (img == null) { |
| | |
| | | /** |
| | | * 将整型的颜色值转成16进制RGB字符串 |
| | | * @param color 整型值 |
| | | * @return {string} 颜色字符串 |
| | | * @return {null|string} 颜色字符串 |
| | | */ |
| | | ImageWrapper.prototype.argb = function (color) { |
| | | if (color == null) { |
| | |
| | | * @param bitmap 图片对象 |
| | | * @param x x坐标点 |
| | | * @param y y坐标点 |
| | | * @return int 颜色值 |
| | | * @return {number} 颜色值 |
| | | */ |
| | | ImageWrapper.prototype.getPixelBitmap = function (bitmap, x, y) { |
| | | if (imageWrapper == null) { |
| | |
| | | * @param y 从位图中读取的第一个像素的y坐标值 |
| | | * @param width 从每一行中读取的像素宽度 |
| | | * @param height 读取的行数 |
| | | * @return int 颜色值数组 |
| | | * @return {number} 颜色值数组 |
| | | */ |
| | | ImageWrapper.prototype.getPixelsBitmap = function (bitmap, arraySize, offset, stride, x, y, width, height) { |
| | | if (imageWrapper == null) { |
| | |
| | | /** |
| | | * 是否被回收了 |
| | | * @param img 图片对象 |
| | | * @return bool true代表已经被回收了 |
| | | * @return {boolean} true代表已经被回收了 |
| | | */ |
| | | ImageWrapper.prototype.isRecycled = function (img) { |
| | | if (img == null) { |
| | |
| | | /** |
| | | * 回收图片 |
| | | * @param img 图片对象 |
| | | * @return {*} |
| | | * @return {boolean} |
| | | */ |
| | | ImageWrapper.prototype.recycle = function (img) { |
| | | if (img == null) { |
| | |
| | | let d = img.getClass(); |
| | | if (d == "class android.graphics.Bitmap") { |
| | | img.recycle(); |
| | | |
| | | return true; |
| | | } |
| | | } catch (e) { |
| | |
| | | return imageWrapper.recycle(img.uuid); |
| | | }; |
| | | |
| | | /** |
| | | * 回收所有图片 |
| | | * @return {boolean} |
| | | */ |
| | | ImageWrapper.prototype.recycleAllImage = function () { |
| | | return imageWrapper.recycleAllImage(); |
| | | } |
| | | |
| | | /** |
| | | * |
| | | * @param res |
| | | * @return {null|Rect[]} |
| | | */ |
| | | ImageWrapper.prototype.toRectList = function (res) { |
| | | if (res == null || res == "") { |
| | | return null; |
| | |
| | | * 8 大津法自动寻求全局阈值<br/> |
| | | * 16 三角形法自动寻求全局阈值<br/> |
| | | * @param threshold 二值化系数,0 ~ 255 |
| | | * @return AutoImage 对象或者null |
| | | * @return {null|AutoImage} 对象或者null |
| | | */ |
| | | ImageWrapper.prototype.binaryzation = function (img, type, threshold) { |
| | | if (img == null) { |
| | |
| | | * {"diameter":20, |
| | | * "adaptiveMethod":1, |
| | | * "c":9,"blockSize":51} |
| | | * @return Bitmap 对象或者null |
| | | * @return {null|Bitmap} 对象或者null |
| | | **/ |
| | | ImageWrapper.prototype.binaryzationBitmapEx = function (bitmap, map) { |
| | | if (bitmap == null) { |
| | |
| | | * 8 大津法自动寻求全局阈值<br/> |
| | | * 16 三角形法自动寻求全局阈值<br/> |
| | | * @param threshold 二值化系数,0 ~ 255 |
| | | * @return Bitmap 对象或者null |
| | | * @return {null|Bitmap} 对象或者null |
| | | */ |
| | | ImageWrapper.prototype.binaryzationBitmap = function (bitmap, type, threshold) { |
| | | if (bitmap == null) { |
| | |
| | | * @param y 开始Y坐标 |
| | | * @param w 剪裁宽度 |
| | | * @param h 剪裁高度 |
| | | * @return {Bitmap} 安卓的Bitmap对象 |
| | | * @return {null|Bitmap} 安卓的Bitmap对象 |
| | | */ |
| | | ImageWrapper.prototype.clipBitmap = function (bitmap, x, y, w, h) { |
| | | if (bitmap == null) { |
| | |
| | | * @param bitmap 图片 |
| | | * @param w 目标宽度 |
| | | * @param h 目标高度 |
| | | * @return {Bitmap} 安卓的Bitmap对象 |
| | | * @return {null|Bitmap} 安卓的Bitmap对象 |
| | | */ |
| | | ImageWrapper.prototype.scaleBitmap = function (bitmap, w, h) { |
| | | if (bitmap == null) { |
| | |
| | | * @param data base64 数据 |
| | | * @param flag base64格式的标示,一般为0, |
| | | * 可选参数为 :0 默认, 1 无填充模式,2 无换行模式,4 换行模式 |
| | | * @return {Bitmap} 安卓的Bitmap对象 |
| | | * @return {null|Bitmap} 安卓的Bitmap对象 |
| | | */ |
| | | ImageWrapper.prototype.base64Bitmap = function (data, flag) { |
| | | if (data == null) { |
| | |
| | | /** |
| | | * 将AutoImage转换为安卓原生的Bitmap对象 |
| | | * @param img {AutoImage} |
| | | * @return {Bitmap} 对象 |
| | | * @return {null|Bitmap} 对象 |
| | | */ |
| | | ImageWrapper.prototype.imageToBitmap = function (img) { |
| | | if (img == null) { |
| | |
| | | * 将安卓原生的Bitmap对象转换为AutoImage |
| | | * 适合EC 6.15.0+版本 |
| | | * @param img {Bitmap}对象 |
| | | * @return {AutoImage} 对象 |
| | | * @return {null|AutoImage} 对象 |
| | | */ |
| | | ImageWrapper.prototype.bitmapToImage = function (bitmap) { |
| | | var xd = imageWrapper.bitmapToImage(bitmap); |
| | |
| | | * @param format 要保存图像格式,有 png,jpg,webp |
| | | * @param q 要保存图像质量,1-100 |
| | | * @param path 要保存图像路径 |
| | | * @return {bool} true 成功 false 失败 |
| | | * @return {boolean} true 成功 false 失败 |
| | | */ |
| | | ImageWrapper.prototype.saveBitmap = function (bitmap, format, q, path) { |
| | | if (bitmap == null) { |
| | |
| | | * 支持EC 10.11.0+ |
| | | * @param bitmap 安卓的bitmap对象 |
| | | * @param degree 度数,-90代表逆时针旋转90度,home键在右,90度代表顺时针旋转90度,home键在左 |
| | | * @return Bitmap 对象或者null |
| | | * @return {null|Bitmap} 对象或者null |
| | | */ |
| | | ImageWrapper.prototype.rotateBitmap = function (bitmap, degree) { |
| | | if (bitmap == null) { |
| | |
| | | * 支持EC 10.11.0+ |
| | | * @param img 图片对象 |
| | | * @param degree 度数,-90代表逆时针旋转90度,home键在右,90度代表顺时针旋转90度,home键在左 |
| | | * @return AutoImage 对象或者null |
| | | * @return {null|AutoImage} 对象或者null |
| | | */ |
| | | ImageWrapper.prototype.rotateImage = function (img, degree) { |
| | | if (img == null) { |
| | |
| | | return null; |
| | | }; |
| | | |
| | | |
| | | /** |
| | | * |
| | | * @param res |
| | | * @return {null|AutoImage} |
| | | */ |
| | | ImageWrapper.prototype.readResAutoImage = function (res) { |
| | | if (res == null) { |
| | | return false; |
| | | return null; |
| | | } |
| | | let uuid = imageWrapper.readResAutoImage(res); |
| | | if (uuid != null && uuid != undefined && uuid != "") { |
| | |
| | | * 使用系统的screencap命令截图AutoImage,适合root或者代理模式, 有root权限或者开启了代理服务 |
| | | * 适合版本 EC 6.8.0+ |
| | | * @param root 是否优先使用root方式截图 |
| | | * @return AutoImage 对象或者null |
| | | * @return {null|AutoImage} 对象或者null |
| | | */ |
| | | ImageWrapper.prototype.screencapImage = function (root) { |
| | | let xd = imageWrapper.screencapImage(root); |
| | |
| | | * - mostAngleFlag 启用(1)/禁用(0) 角度投票(整张图片以最大可能文字方向来识别),当禁用文字方向检测时,此项也不起作用,默认关闭。<br/> |
| | | * - limit 代表每1秒执行ocr请求个数 默认1000。可以适当降低减少cpu占用<br/> |
| | | * - checkImage 检查数据是否是图像(1是 0否)默认关闭。<br/> |
| | | * @return {bool} 布尔型 成功或者失败 |
| | | * @return {boolean} 布尔型 成功或者失败 |
| | | */ |
| | | OcrInst.prototype.initOcr = function (map) { |
| | | if (map == null) { |
| | |
| | | /** |
| | | * 初始化OCR远程服务,只有使用easyedge和paddleocr的时候需要调用 |
| | | * @param timeout 超时时间,毫秒 |
| | | * @return {bool} 成功或者失败 |
| | | * @return {boolean} 成功或者失败 |
| | | */ |
| | | OcrInst.prototype.initOcrServer = function (timeout) { |
| | | return ocrWrapper.initOcrServer(this.ocrUtil, timeout); |
| | |
| | | /** |
| | | * 设置OCR实现方式 |
| | | * @param type 值分别为 tess = Tesseract模块,baiduOnline=百度在在线识别模块 |
| | | * @return {bool} 成功或者失败 |
| | | * @return {boolean} 成功或者失败 |
| | | */ |
| | | OcrInst.prototype.setOcrType = function (type) { |
| | | return ocrWrapper.setOcrType(this.ocrUtil, type); |
| | |
| | | * 适合版本 EC 6.9.0+ |
| | | * @param daemon true 代表守护,false代表不守护 |
| | | * @param delay 每次守护间隔,单位是毫秒 |
| | | * @return {bool} 成功或者失败 |
| | | * @return {boolean} 成功或者失败 |
| | | */ |
| | | OcrInst.prototype.setDaemonServer = function (daemon, delay) { |
| | | return ocrWrapper.setDaemonServer(this.ocrUtil, daemon, delay); |
| | |
| | | |
| | | /** |
| | | * 释放OCR占用的资源 |
| | | * @return {bool} 成功或者失败 |
| | | * @return {boolean} 成功或者失败 |
| | | */ |
| | | OcrInst.prototype.releaseAll = function () { |
| | | return ocrWrapper.releaseAll(this.ocrUtil); |
| | |
| | | * @param bitmap 图片 |
| | | * @param timeout 超时时间 单位毫秒 |
| | | * @param extra 扩展参数,map形式,例如 {"token":"xxx"} |
| | | * @return {JSON} JSON对象 |
| | | * @return {null|JSON} JSON对象 |
| | | */ |
| | | OcrInst.prototype.ocrBitmap = function (bitmap, timeout, extra) { |
| | | if (bitmap == null) { |
| | |
| | | } |
| | | return d; |
| | | }; |
| | | |
| | | /** |
| | | * |
| | | * @param img |
| | | * @param timeout |
| | | * @param extra |
| | | * @return {null|JSON} JSON对象 |
| | | */ |
| | | OcrInst.prototype.ocrImage = function (img, timeout, extra) { |
| | | if (img == null) { |
| | | return null; |
| | |
| | | return d; |
| | | }; |
| | | |
| | | /** |
| | | * |
| | | * @param arr |
| | | * @return {string|null} |
| | | */ |
| | | ImageWrapper.prototype.convertFirstColorArrayToString = function (arr) { |
| | | if (arr) { |
| | | if (typeof arr == "string") { |
| | |
| | | return null; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * |
| | | * @param arr |
| | | * @return {string|null|*} |
| | | */ |
| | | ImageWrapper.prototype.convertMultiColorArrayToString = function (arr) { |
| | | if (arr) { |
| | | if (typeof arr == "string") { |
| | |
| | | return null; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * |
| | | * @param arr |
| | | * @return {string|null} |
| | | */ |
| | | ImageWrapper.prototype.convertFirstColorArrayToString2 = function (arr) { |
| | | if (arr) { |
| | | if (typeof arr == "string") { |
| | |
| | | return null; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * |
| | | * @param arr |
| | | * @return {string|null|string[]} |
| | | */ |
| | | ImageWrapper.prototype.convertMultiCmpColorArrayToString = function (arr) { |
| | | if (arr) { |
| | | if (typeof arr == "string") { |
| | |
| | | * @param ey 终点Y坐标 |
| | | * @param threshold 图片相似度。取值范围为0~1的浮点数。默认值为0.9。 |
| | | * @param limit 限制结果的数量,如果要找到1个,就填写1,如果是多个请填写多个 |
| | | * @return 多个Point 坐标点数组或者null |
| | | * @return {null|Point[]} 坐标点数组或者null |
| | | */ |
| | | ImageWrapper.prototype.findImageByColor = function (image1, template, x, y, ex, ey, threshold, limit) { |
| | | if (imageWrapper == null || image1 == null || template == null) { |
| | |
| | | if (res == null || res == "") { |
| | | return null; |
| | | } |
| | | let d = JSON.parse(res); |
| | | let x1 = []; |
| | | for (let i = 0; i < d.length; i++) { |
| | | x1.push(new Point(d[i])); |
| | | try { |
| | | let d = JSON.parse(res); |
| | | let x1 = []; |
| | | for (let i = 0; i < d.length; i++) { |
| | | x1.push(new Point(d[i])); |
| | | } |
| | | return x1; |
| | | } catch (e) { |
| | | |
| | | } |
| | | return x1; |
| | | return null; |
| | | |
| | | }; |
| | | /** |
| | | * 通过颜色找图,支持透明图,这个不需要处理话opencv |
| | |
| | | * cmpColorSucThreshold: 成功匹配多少个颜色系数 就认为是成功的,例如 0.9 = 90%个点<Br/> |
| | | * startX: 第一个点从哪里开始找的X坐标<Br/> |
| | | * startY: 第一个点从哪里开始找的Y坐标<Br/> |
| | | * @return 多个Point 坐标点数组或者null |
| | | * @return {null|Point[]} 坐标点数组或者null |
| | | */ |
| | | ImageWrapper.prototype.findImageByColorEx = function (image1, template, x, y, ex, ey, limit, extra) { |
| | | if (imageWrapper == null || image1 == null || template == null) { |
| | |
| | | if (res == null || res == "") { |
| | | return null; |
| | | } |
| | | let d = JSON.parse(res); |
| | | let x1 = []; |
| | | for (let i = 0; i < d.length; i++) { |
| | | x1.push(new Point(d[i])); |
| | | try { |
| | | let d = JSON.parse(res); |
| | | let x1 = []; |
| | | for (let i = 0; i < d.length; i++) { |
| | | x1.push(new Point(d[i])); |
| | | } |
| | | return x1; |
| | | } catch (e) { |
| | | |
| | | } |
| | | return x1; |
| | | return null; |
| | | |
| | | }; |
| | | |
| | | function Yolov8Wrapper() { |
| | |
| | | /** |
| | | * 获取YOLOV8错误消息 |
| | | * 适配EC 10.15.0+ |
| | | * @return string 字符串 |
| | | * @return {string} 字符串 |
| | | */ |
| | | Yolov8Util.prototype.getErrorMsg = function () { |
| | | return ocrWrapper.getYolov8ErrorMsg(this.yolov8Instance); |
| | |
| | | * 适配EC 10.15.0+ |
| | | * @param model_name 模型名称 默认写 yolov8s-640 即可 |
| | | * @param input_size yolov8训练时候的imgsz参数,默认写640即可 |
| | | * @param input_size 检测框系数,默认写0.25即可 |
| | | * @param box_thr 检测框系数,默认写0.25即可 |
| | | * @param iou_thr 输出系数,,默认写0.35 即可 |
| | | * @param bind_cpu 是否绑定CPU,选项为ALL,BIG,LITTLE 三个,默认写ALL |
| | | * @param use_vulkan_compute 是否启用硬件加速,1是,0否 |
| | | * @param obj_names JSON数组,训练的时候分类名称例如 ["star","common","face"] |
| | | * @return JSON数据 |
| | | * @return {JSON|null|*} 数据 |
| | | */ |
| | | Yolov8Util.prototype.getDefaultConfig = function (model_name, input_size, box_thr, iou_thr, bind_cpu, use_vulkan_compute, obj_names) { |
| | | if ((typeof obj_names) == "string") { |
| | |
| | | data["names"] = obj_names; |
| | | data["input_size"] = input_size; |
| | | data["box_thr"] = box_thr; |
| | | data["num_thread"] = 4; |
| | | data["iou_thr"] = iou_thr; |
| | | data["use_vulkan_compute"] = use_vulkan_compute; |
| | | data["bind_cpu"] = bind_cpu; |
| | |
| | | * @param map 参数表 参考 getDefaultConfig函数获取默认的参数 |
| | | * @param paramPath param文件路径 |
| | | * @param binPath bin文件路径 |
| | | * @return boolean true代表成功 false代表失败 |
| | | * @return {boolean} true代表成功 false代表失败 |
| | | */ |
| | | Yolov8Util.prototype.initYoloModel = function (map, paramPath, binPath) { |
| | | if (map == null) { |
| | |
| | | * name: 代表是分类,confidence:代表可信度,left,top,right,bottom代表结果坐标选框 |
| | | * @param bitmap 安卓的bitmap对象 |
| | | * @param obj_names JSON数组,不写代表不过滤,写了代表只取填写的分类 |
| | | * @return string 字符串数据 |
| | | * @return {string|null} 字符串数据 |
| | | */ |
| | | Yolov8Util.prototype.detectBitmap = function (bitmap, obj_names) { |
| | | if (bitmap == null) { |
| | |
| | | return ocrWrapper.detectBitmap(this.yolov8Instance, bitmap, obj_names); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 检测Image |
| | | * 适配EC 10.16.0+ |
| | | * 返回数据例如 |
| | | * [{"name":"heart","confidence":0.92,"left":957,"top":986,"right":1050,"bottom":1078}] |
| | | * name: 代表是分类,confidence:代表可信度,left,top,right,bottom代表结果坐标选框 |
| | | * @param img AutoImage对象 |
| | | * @param obj_names JSON数组,不写代表不过滤,写了代表只取填写的分类 |
| | | * @return {string|null} 字符串数据 |
| | | */ |
| | | Yolov8Util.prototype.detectImage = function (img, obj_names) { |
| | | let bitmap = image.imageToBitmap(img) |
| | | if (bitmap == null) { |
| | | return null |
| | | } |
| | | if (obj_names == null || obj_names == undefined) { |
| | | obj_names = "[]" |
| | | } else { |
| | | obj_names = JSON.stringify(obj_names) |
| | | } |
| | | let result = ocrWrapper.detectBitmap(this.yolov8Instance, bitmap, obj_names); |
| | | if (bitmap != null) { |
| | | try { |
| | | bitmap.recycle(); |
| | | } catch (e) { |
| | | } |
| | | bitmap = null; |
| | | } |
| | | return result; |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 释放yolov8资源 |
| | | * 适配EC 10.15.0+ |
| | | * @return boolean |
| | | * @return {boolean} |
| | | */ |
| | | Yolov8Util.prototype.release = function () { |
| | | return ocrWrapper.releaseYolo(this.yolov8Instance); |
| | |
| | | /** |
| | | * 初始化yolov8实例 |
| | | * 适配EC 10.15.0+ |
| | | * @return Yolov8Util 实例对象 |
| | | * @return {Yolov8Util} 实例对象 |
| | | */ |
| | | Yolov8Wrapper.prototype.newYolov8 = function () { |
| | | let instance = ocrWrapper.newYolov8(); |