日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

autojs之提取text中的红色文字(图片二值化+百度智能云-文字识别OCR-接口调用)

發布時間:2023/12/20 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 autojs之提取text中的红色文字(图片二值化+百度智能云-文字识别OCR-接口调用) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

僅供參考

  • 一、效果
  • 二、過程
    • 1.準備工作 - 截圖 - 提取主色
    • 2.圖片二值化
    • 3.文字識別
      • 1.注冊賬號-之前的文章里有
      • 2.獲得API Key、Secret Key-之前的文章里有
      • 3.調用接口
      • 4.完整代碼
  • 三、我的摸索過程
    • 1.二值化
    • 2.文字識別
  • 四、完整代碼
  • 總結

一、效果

二、過程

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_tokenimage: 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_tokenimage: 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_tokenimage: img64, //和 url/pdf_file 三選一,img64是傳入的圖片});var json = ocr_Res.body.json();/**** 返回結果 ******/return json; }

總結

圖片二值化使用的很不方便,最近準備csp有點忙,等考完試,再寫一個根據邊界截圖的方法試試

總結

以上是生活随笔為你收集整理的autojs之提取text中的红色文字(图片二值化+百度智能云-文字识别OCR-接口调用)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。