autojs之提取text中的红色文字(图片二值化+百度智能云-文字识别OCR-接口调用)
僅供參考
- 一、效果
- 二、過(guò)程
- 1.準(zhǔn)備工作 - 截圖 - 提取主色
- 2.圖片二值化
- 3.文字識(shí)別
- 1.注冊(cè)賬號(hào)-之前的文章里有
- 2.獲得API Key、Secret Key-之前的文章里有
- 3.調(diào)用接口
- 4.完整代碼
- 三、我的摸索過(guò)程
- 1.二值化
- 2.文字識(shí)別
- 四、完整代碼
- 總結(jié)
一、效果
二、過(guò)程
1.準(zhǔn)備工作 - 截圖 - 提取主色
先手動(dòng)截一張圖片,然后通過(guò)在線(xiàn)網(wǎng)站https://palettegenerator.com/提取主色,如紅色為#FD1111
2.圖片二值化
有了主色后,通過(guò)autojs的 images.interval(img, “#C71718”, 70) 函數(shù),將圖片二值化
將圖片二值化,在color-interval ~ color+interval范圍以外的顏色都變成0,在范圍以?xún)?nèi)的顏色都變成255。這里對(duì)color的加減是對(duì)每個(gè)通道而言的。
例如images.interval(img, “#888888”, 16),每個(gè)通道的顏色值均為0x88,加減16后的范圍是[0x78, 0x98],因此這個(gè)代碼將把#787878~#989898的顏色變成#FFFFFF,而把這個(gè)范圍以外的變成#000000。
var img = images.read("/sdcard/Pictures/QQ/c.jpg");img=images.interval(img, "#FD1111", 120)// 60-90 //后邊這個(gè)值自己可以改一下看看 images.save(img, "./鄰域yyds.jpg", "jpg", 100);img.recycle();3.文字識(shí)別
文字識(shí)別,我之前寫(xiě)過(guò) python的百度智能云-文字識(shí)別
這里我們通過(guò)調(diào)用 百度OCR文字識(shí)別 接口 來(lái)進(jìn)行文字識(shí)別。
官方文檔:https://cloud.baidu.com/doc/OCR/s/Ek3h7xypm
1.注冊(cè)賬號(hào)-之前的文章里有
2.獲得API Key、Secret Key-之前的文章里有
3.調(diào)用接口
https://cloud.baidu.com/doc/OCR/s/Ck3h7y2ia
請(qǐng)求格式 - POST方式調(diào)用
返回格式 - JSON格式
請(qǐng)求限制 - 請(qǐng)求圖片需經(jīng)過(guò)base64編碼及urlencode后傳入
請(qǐng)求格式支持:PNG、JPG、JPEG、BMP、TIFF、PNM、WebP
圖片編碼后大小限額:base64編碼urlencode后大小不超過(guò)4M,最短邊至少15px,最長(zhǎng)邊最大4096px
調(diào)用方式一:請(qǐng)求URL數(shù)據(jù)格式
向API服務(wù)地址使用POST發(fā)送請(qǐng)求,必須在URL中帶上參數(shù):access_token
注意:access_token的有效期為30天,需要每30天進(jìn)行定期更換;
參考“Access Token獲取”
向授權(quán)服務(wù)地址https://aip.baidubce.com/oauth/2.0/token發(fā)送請(qǐng)求(推薦使用POST),并在URL中帶上以下參數(shù):
grant_type: 必須參數(shù),固定為client_credentials;
client_id: 必須參數(shù),應(yīng)用的API Key;
client_secret: 必須參數(shù),應(yīng)用的Secret Key;
服務(wù)器返回的JSON文本參數(shù)如下:
access_token: 要獲取的Access Token;
expires_in: Access Token的有效期(秒為單位,有效期30天);
其他參數(shù)忽略,暫時(shí)不用;
以 通用文字識(shí)別(高精度版) 為例
https://cloud.baidu.com/doc/OCR/s/1k3h7y3db
必要參數(shù)headers、access_token、image,其他參數(shù)查看文檔
4.完整代碼
//百度智能云 文字識(shí)別OCR 接口調(diào)用 function Baidu_ocr(img){log("調(diào)用百度ocr:");/**** 將圖片編碼 ******/var img64 = images.toBase64(img, "png", 100);/**** 獲取access_token ******/var API_Key="輸入自己的API_Key";var Secret_Key="輸入自己的Secret_Key";//向授權(quán)服務(wù)地址發(fā)送請(qǐng)求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;/**** 調(diào)用ocr ******///高精度文字識(shí)別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_tokenimage: img64, //和 url/pdf_file 三選一,img64是傳入的圖片});var json = ocr_Res.body.json();/**** 返回結(jié)果 ******/return json; }三、我的摸索過(guò)程
1.二值化
var img = images.read("/sdcard/Pictures/QQ/c.jpg"); //讀取一張圖片var c=[] //將圖片里的顏色值放入數(shù)組 var cc = 0 //記錄顏色值數(shù)量 //獲取在點(diǎn)(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黑字會(huì)顯 15紅字不清晰 images.save(img2, "./閾值.jpg", "jpg", 100); //把范圍里的變白 img3=images.inRange(img, "#FD1111", "#FCBDBB")//fffffafa//ffffdddc images.save(img3, "./范圍.jpg", "jpg", 100);//若紅字本身不清楚,后面的數(shù) 要調(diào)大,若背景沒(méi)消干凈,要調(diào)小/*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();//回收?qǐng)D片,截屏的不需要我對(duì)這個(gè)顏色的RGB,十六進(jìn)制,灰度值其實(shí)也不是很了解,以上結(jié)果都是我一點(diǎn)點(diǎn)摸索出來(lái)的,不大具有普適性,借鑒一下就行
2.文字識(shí)別
根據(jù)文檔一步步來(lái)
1.將圖片編碼
2.獲取access_token
3.獲取識(shí)別結(jié)果
雖然代碼很多,但其實(shí)很容易看懂,要傳的參數(shù),返回的參數(shù),文檔中寫(xiě)的都很清晰
四、完整代碼
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();//回收?qǐng)D片,截屏不需要var res=Baidu_ocr(img4)//調(diào)用百度識(shí)圖/*將識(shí)別結(jié)果拼接*/ words = '' for(i=0;i<res.words_result_num;i++){words = words + res.words_result[i].words } log("識(shí)別結(jié)果:" + words)//百度智能云 文字識(shí)別OCR 接口調(diào)用 function Baidu_ocr(img){log("調(diào)用百度ocr:");/**** 將圖片編碼 ******/var img64 = images.toBase64(img, "jpg", 100);//轉(zhuǎn)換截屏圖片/**** 獲取access_token ******/var API_Key="Oa3pVyYxbrPpUxAUwKFmnkQ0";var Secret_Key="h6nvjCpGDD3fUy3u6Qa3tS0yL6vSe7vq";//向授權(quán)服務(wù)地址發(fā)送請(qǐng)求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;/**** 調(diào)用ocr ******///高精度文字識(shí)別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_tokenimage: img64, //和 url/pdf_file 三選一,img64是傳入的圖片});var json = ocr_Res.body.json();/**** 返回結(jié)果 ******/return json; }總結(jié)
圖片二值化使用的很不方便,最近準(zhǔn)備csp有點(diǎn)忙,等考完試,再寫(xiě)一個(gè)根據(jù)邊界截圖的方法試試
總結(jié)
以上是生活随笔為你收集整理的autojs之提取text中的红色文字(图片二值化+百度智能云-文字识别OCR-接口调用)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: ajax同步和异步的区别_同步电机和异步
- 下一篇: mysql用supervisor管理_S