autojs之提取text中的红色文字(图片二值化+百度智能云-文字识别OCR-接口调用)_跪求指点的博客-程序员秘密

技术标签: autojs  百度  Autojs  文字识别  百度智能云  

一、效果

二、过程

1.准备工作 - 截图 - 提取主色

先手动截一张图片,然后通过在线网站https://palettegenerator.com/提取主色,如红色为#FD1111

2.图片二值化

有了主色后,通过autojs的 images.interval(img, “#C71718”, 70) 函数,将图片二值化

将图片二值化,在color-interval ~ color+interval范围以外的颜色都变成0,在范围以内的颜色都变成255。这里对color的加减是对每个通道而言的。

例如images.interval(img, “#888888”, 16),每个通道的颜色值均为0x88,加减16后的范围是[0x78, 0x98],因此这个代码将把#787878~#989898的颜色变成#FFFFFF,而把这个范围以外的变成#000000。

var img = images.read("/sdcard/Pictures/QQ/c.jpg");

img=images.interval(img, "#FD1111", 120)// 60-90	//后边这个值自己可以改一下看看
images.save(img, "./邻域yyds.jpg", "jpg", 100);

img.recycle();

3.文字识别

文字识别,我之前写过 python的百度智能云-文字识别
这里我们通过调用 百度OCR文字识别 接口 来进行文字识别。

官方文档:https://cloud.baidu.com/doc/OCR/s/Ek3h7xypm

1.注册账号-之前的文章里有

2.获得API Key、Secret Key-之前的文章里有

3.调用接口

https://cloud.baidu.com/doc/OCR/s/Ck3h7y2ia

请求格式 - POST方式调用

返回格式 - JSON格式

请求限制 - 请求图片需经过base64编码及urlencode后传入
请求格式支持:PNG、JPG、JPEG、BMP、TIFF、PNM、WebP
图片编码后大小限额:base64编码urlencode后大小不超过4M,最短边至少15px,最长边最大4096px

var img64 = images.toBase64(img, "png", 100); //图片经base64编码

调用方式一:请求URL数据格式

向API服务地址使用POST发送请求,必须在URL中带上参数:access_token

注意:access_token的有效期为30天,需要每30天进行定期更换;

参考“Access Token获取”
向授权服务地址https://aip.baidubce.com/oauth/2.0/token发送请求(推荐使用POST),并在URL中带上以下参数:
grant_type: 必须参数,固定为client_credentials;
client_id: 必须参数,应用的API Key;
client_secret: 必须参数,应用的Secret Key;

    var API_Key="输入自己的API_Key";
    var Secret_Key="输入自己的Secret_Key";
    //向授权服务地址发送请求
    var getTokenUrl="https://aip.baidubce.com/oauth/2.0/token";
    var token_Res = http.post(getTokenUrl, {
    
        grant_type: "client_credentials",
        client_id: API_Key,
        client_secret: Secret_Key,
    });
    var access_token=token_Res.body.json().access_token;

服务器返回的JSON文本参数如下:
access_token: 要获取的Access Token;
expires_in: Access Token的有效期(秒为单位,有效期30天);
其他参数忽略,暂时不用;

通用文字识别(高精度版) 为例
https://cloud.baidu.com/doc/OCR/s/1k3h7y3db

    var ocrUrl = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic";
    var ocr_Res = http.post(ocrUrl, {
    
        headers: {
    
            "Content-Type": "application/x-www-form-urlencoded"
        },
        access_token: access_token,	//之前获得的access_token
        image: img64,		//和 url/pdf_file 三选一,img64是传入的图片
    });
    var json = ocr_Res.body.json();

必要参数headers、access_token、image,其他参数查看文档

在这里插入图片描述

4.完整代码

//百度智能云 文字识别OCR 接口调用
function Baidu_ocr(img){
    
    log("调用百度ocr:");
    /**** 将图片编码 ******/
    var img64 = images.toBase64(img, "png", 100);

    /**** 获取access_token ******/
    var API_Key="输入自己的API_Key";
    var Secret_Key="输入自己的Secret_Key";
    //向授权服务地址发送请求
    var getTokenUrl="https://aip.baidubce.com/oauth/2.0/token";
    var token_Res = http.post(getTokenUrl, {
    
        grant_type: "client_credentials",
        client_id: API_Key,
        client_secret: Secret_Key,
    });
    var access_token=token_Res.body.json().access_token;

    /**** 调用ocr ******/
    //高精度文字识别
    var ocrUrl = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic";
    var ocr_Res = http.post(ocrUrl, {
    
        headers: {
    
            "Content-Type": "application/x-www-form-urlencoded"
        },
        access_token: access_token,	//之前获得的access_token
        image: img64,		//和 url/pdf_file 三选一,img64是传入的图片
    });
    var json = ocr_Res.body.json();

    /**** 返回结果 ******/
    return json;
}

三、我的摸索过程

1.二值化

var img = images.read("/sdcard/Pictures/QQ/c.jpg");	//读取一张图片

var c=[]	//将图片里的颜色值放入数组
var cc = 0	//记录颜色值数量
//获取在点(x, y)的颜色值
for(x=0;x<250;x++){
    
    for(y=0;y<20;y++){
    
		var color = images.pixel(img, x, y);
		//显示该颜色
		if(colors.toString(color) != "#ffffffff"){
    	//不是白色才保存
			log(x,y,colors.toString(color));
		
			c[cc] = colors.toString(color)
			cc=cc+1
		}
	}
} 

//灰度化
img1=images.grayscale(img)
images.save(img1, "./灰度化.jpg", "jpg", 100);
//将图片中大于20的值全部变成255,其余变成0
img2=images.threshold(img, 19, 255, "BINARY")//20!  25黑字会显 15红字不清晰
images.save(img2, "./阈值.jpg", "jpg", 100);
//把范围里的变白
img3=images.inRange(img, "#FD1111", "#FCBDBB")//fffffafa//ffffdddc
images.save(img3, "./范围.jpg", "jpg", 100);


//若红字本身不清楚,后面的数 要调大,若背景没消干净,要调小

/*img4=images.interval(img, "#FD1111", 95)// 黑字显
images.save(img4, "./4.jpg", "jpg", 100); */

img4=images.interval(img, "#FD1111", 120)//
images.save(img4, "./邻域yyds.jpg", "jpg", 100);

/* img4=images.interval(img, "#FD1111", 135)//红字不清晰
images.save(img4, "./6.jpg", "jpg", 100); */

img.recycle();//回收图片,截屏的不需要

我对这个颜色的RGB,十六进制,灰度值其实也不是很了解,以上结果都是我一点点摸索出来的,不大具有普适性,借鉴一下就行

2.文字识别

根据文档一步步来

1.将图片编码
2.获取access_token
3.获取识别结果

虽然代码很多,但其实很容易看懂,要传的参数,返回的参数,文档中写的都很清晰

四、完整代码

var img = images.read("/sdcard/Pictures/QQ/c.jpg");	//自己改成截图
log("读取图片")

img=images.interval(img, "#FD1111", 120)//C11719.70!! 60-90
images.save(img, "./邻域yyds.jpg", "jpg", 100);
log("图片二值化")

img.recycle();//回收图片,截屏不需要

var res=Baidu_ocr(img4)//调用百度识图

/*将识别结果拼接*/
words = ''
for(i=0;i<res.words_result_num;i++){
    
    words = words + res.words_result[i].words
}
log("识别结果:" + words)




//百度智能云 文字识别OCR 接口调用
function Baidu_ocr(img){
    
    log("调用百度ocr:");
    /**** 将图片编码 ******/
    var img64 = images.toBase64(img, "jpg", 100);//转换截屏图片

    /**** 获取access_token ******/
    var API_Key="Oa3pVyYxbrPpUxAUwKFmnkQ0";
    var Secret_Key="h6nvjCpGDD3fUy3u6Qa3tS0yL6vSe7vq";
    //向授权服务地址发送请求
    var getTokenUrl="https://aip.baidubce.com/oauth/2.0/token";
    var token_Res = http.post(getTokenUrl, {
    
        grant_type: "client_credentials",
        client_id: API_Key,
        client_secret: Secret_Key,
    });
    var access_token=token_Res.body.json().access_token;

    /**** 调用ocr ******/
    //高精度文字识别
    var ocrUrl = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic";
    var ocr_Res = http.post(ocrUrl, {
    
        headers: {
    
            "Content-Type": "application/x-www-form-urlencoded"
        },
        access_token: access_token,	//之前获得的access_token
        image: img64,		//和 url/pdf_file 三选一,img64是传入的图片
    });
    var json = ocr_Res.body.json();

    /**** 返回结果 ******/
    return json;
}

总结

图片二值化使用的很不方便,最近准备csp有点忙,等考完试,再写一个根据边界截图的方法试试

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/tfnmdmx/article/details/119980155

智能推荐

python 运行 tensorflow 时 对于 ImportError: cannot import name 'descriptor' 报错的解决_yihua_Leo的博客-程序员秘密

python 运行 tensorflow 时 对于 ImportError: cannot import name ‘descriptor’ 报错的解决出现该报错的原因是 protobuf 库异常,对于直接运行如下代码是不行的:pip install protobuf原因是 直接下载的 protobuf 库与 tensorflow 是不匹配的,唯一的解决方法是卸载 protobuf 与 t...

QtQml应用程序的性能考虑与建议_woyimibayi的博客-程序员秘密

本文翻译自Qt官网文档:http://doc.qt.io/qt-5/qtquick-performance.htmlQtQml应用程序的性能考虑与建议1、时间考虑作为一名程序开发者,应该努力使渲染引擎的刷新率维持在60fps,也就是说在每帧之间大约有16ms,这段时间包括了基本图元在图形硬件上的描画。具体内容如下:>尽可能的使用异步事件驱动来编程。>使用工作

HttpURLConnection—_Post请求_小呆萌--的博客-程序员秘密_httpurlnection进行post

private Handler handler = new Handler(){        @Override        public void handleMessage(Message msg) {            if (msg.what == 0){                DataDataBean dataDataBean = (DataDataBea

必须关注的25位知名JavaScript开发者_kakugou的博客-程序员秘密

必须关注的25位知名JavaScript开发者本文列出了你在Twitter上必须关注的JS程序员列表。他们包括行业的先行者和推动者,同时也包括你可能不认识或者还没考虑关注的开发者。这25位开发者不可能包含所有有影响力和鼓舞人心的开发者。如果你认为还有需要添加到该列表的开发者,请在下面的评论中告诉我们。1. @John Resig

EXTRACT ABENDED——OGG-01223  TCP/IP error 146 (Connection refused)_Yuanpeng.Li的博客-程序员秘密

收到客户通知OGG的EXTRACT进程ABENDED。现记录一下处理过程:登陆主机,由于没有维护过这台服务器上的ogg,所以连用户、目录都找不到1、查询用户、目录 [email protected]:/ogg/ggs#ps -ef|grep ogg ogg 21891 21890 0 23:29:21 pts/7 0:00 -bash ogg 4...

PAT-A1080-Graduate Admission-附题解_ShuKIno的博客-程序员秘密

目录1.题目阐述2.题目思路3.题解代码PS:刷题时的代码,基本没有改过,测试点都通过了。放上来总结一下思路与方法。1.题目阐述要求:ranked according to their final grades,and their national entrance exam grade GE secondif the quota of one’s most preferred shcool is not exceeded, one by one in order.rejected by a

随便推点

Cesium四元数个人理解_彷徨fly的博客-程序员秘密

四元数的旋转原理: 先将原向量表示为四元数q_0=(0 , U) ,将旋转角度和旋转轴的信息用单位四元数 q 表示,下面是一个代表旋转的四元数:q = cosθ + U*sinθ其中旋转轴 U 必须是单位向量。该四元数表示绕轴 U 旋转 2 * θ 角度,注意是 θ 角的2倍。在Cesium当中,Quaternion的4个分量xyzw分别对应:w : cosθ,x : U.x * ...

mysql5.6主从复制(读写分离)方案_MySQL5.6 Replication主从复制(读写分离) 配置完整版..._h61102725的博客-程序员秘密

MySQL5.6主从复制(读写分离)教程1、MySQL5.6开始主从复制有两种方式:基于日志(binlog);基于GTID(全局事务标示符)。需要注意的是:GTID方式不支持临时表!所以如果你的业务系统要用到临时表的话就不要考虑这种方式了,至少目前最新版本MySQL5.6.12的GTID复制还是不支持临时表的。所以本教程主要是告诉大家如何通过日志(binlog)方式做主从复制!2、MySQL官方提...

Axure 9 面板折叠显示隐藏_aimeizi1314的博客-程序员秘密

1 首先放置一个面板1作为点击事件;2 另外一个面板2或者其他组建,将其设置为动态面板,然后隐藏3 给面板1添加如下事件,即可;4 我们点击面板1,可以实现展开隐藏面板2的动态效果转载于:https://www.cnblogs.com/ljyqd/p/10971647.html...

结构方程模型:技术接受度模型TAM2_yanyanwenmeng的博客-程序员秘密_接受度模型

课程地址:https://study.163.com/course/courseLearn.htm?courseId=1210809833#/learn/video?lessonId=1283244027&amp;courseId=1210809833续接前一篇文章:https://liangyan.blog.csdn.net/article/details/122240605一、概念模型与理论框架二、研究假设三、构念的操作型定义四、测量工具的开发五、测量工具的选取六、抽样方式与

yii框架计划任务_zhangdaohong的博客-程序员秘密

http://happymc.iteye.com/blog/21499241.cron.php&amp;lt;?php// change the following paths if necessary$yiic=dirname(__FILE__).'/../../framework/yiic.php';$config = dirname ( __FILE__ ) . '/../confi...

网页中插入视频播放代码全集 _mengyao的博客-程序员秘密

1.avi格式代码片断如下: 2.mpg格式代码片断如下: 3.smi格式代码片断如下: 4.rm格式代码片断如下: 5.wmv格式代码片断如下:http://activex.microsoft.com/activex/controls/mplayer/en/nsmp2inf.cab#Version=6,4,5,715" standby="L

推荐文章

热门文章

相关标签