摘要:在爬取網(wǎng)站的時(shí)候都遇到過(guò)驗(yàn)證碼,那么我們有什么方法讓程序自動(dòng)的識(shí)別驗(yàn)證碼呢其實(shí)網(wǎng)上已有很多打碼平臺(tái),但是這些都是需要。但對(duì)于僅僅爬取點(diǎn)數(shù)據(jù)而接入打碼平臺(tái)實(shí)屬浪費(fèi)。所以百度免費(fèi)正好可以利用。
在爬取網(wǎng)站的時(shí)候都遇到過(guò)驗(yàn)證碼,那么我們有什么方法讓程序自動(dòng)的識(shí)別驗(yàn)證碼呢?其實(shí)網(wǎng)上已有很多打碼平臺(tái),但是這些都是需要money。但對(duì)于僅僅爬取點(diǎn)數(shù)據(jù)而接入打碼平臺(tái)實(shí)屬浪費(fèi)。所以百度免費(fèi)orc正好可以利用。(每天500次免費(fèi))
1、注冊(cè)百度賬號(hào)、百度云管理中心創(chuàng)建應(yīng)用、生成AppKey、SecretKey(程序調(diào)用接口是要生成access_token)
2、利用AppKey、SecretKey生成access_token
向授權(quán)服務(wù)地址https://aip.baidubce.com/oaut...發(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
代碼如下:
/** 1. 獲取AccessToken 2. APIKey: 3. SecretKey: 4. @return */ public static String getAccessToken() { String accessToken = ""; HttpRequestData httpRequestData = new HttpRequestData(); HashMapparams = new HashMap<>(); params.put("grant_type", "client_credentials"); params.put("client_id", "你的APIKey"); params.put("client_secret", "SecretKey"); httpRequestData.setRequestMethod("GET"); httpRequestData.setParams(params); httpRequestData.setRequestUrl("https://aip.baidubce.com/oauth/2.0/token"); HttpResponse response = HttpClientUtils.execute(httpRequestData); String json = ""; try { json = IOUtils.toString(response.getEntity().getContent()); } catch (IOException e) { e.printStackTrace(); } if (response.getStatusLine().getStatusCode() == 200) { JSONObject jsonObject = JSONObject.parseObject(json); if (jsonObject != null && !jsonObject.isEmpty()) { accessToken = jsonObject.getString("access_token"); } } return accessToken; }
3、請(qǐng)求百度orc通用文字識(shí)別API(下面以百度通用識(shí)別api識(shí)別為例)
請(qǐng)求API的URL https://aip.baidubce.com/rest...
請(qǐng)求方法 POST
請(qǐng)求URL參數(shù) access_token
請(qǐng)求頭 (Header) Content-Type application/x-www-form-urlencoded
Body中放置請(qǐng)求參數(shù),主要參數(shù)詳情如下:
image : 圖像數(shù)據(jù),base64編碼,要求base64編碼后大小不超過(guò)4M,最短邊至少15px,最長(zhǎng)邊最大4096px,支持jpg/png/bmp格式,當(dāng)image字段存在時(shí)url字段失效
url : 圖片完整URL,URL長(zhǎng)度不超過(guò)1024字節(jié),URL對(duì)應(yīng)的圖片base64編碼后大小不超過(guò)4M,最短邊至少15px,最長(zhǎng)邊最大4096px,支持jpg/png/bmp格式,當(dāng)image字段存在時(shí)url字段失效
/** * 獲取識(shí)別驗(yàn)證碼 * @param imageUrl * @return */ public static String OCRVCode(String imageUrl){ String VCode = ""; if (StringUtils.isBlank(ACCESS_TOKEN)) { logger.error("accessToken為空"); return VCode; } OCRUrl = OCRUrl + "?access_token=" + ACCESS_TOKEN; HashMapheaders = new HashMap<>(); headers.put("Content-Type", "application/x-www-form-urlencoded"); HashMap params = new HashMap<>(); imageUrl = ImageBase64ToStringUtils.imageToStringByBase64(imageUrl); params.put("image", imageUrl); HttpRequestData httpRequestData = new HttpRequestData(); httpRequestData.setHeaders(headers); httpRequestData.setRequestMethod("post"); httpRequestData.setParams(params); httpRequestData.setRequestUrl(OCRUrl); HttpResponse response = HttpClientUtils.execute(httpRequestData); String json = ""; if (response.getStatusLine().getStatusCode() == 200) { try { json = IOUtils.toString(response.getEntity().getContent()); JSONObject jsonObject = JSONObject.parseObject(json); JSONArray wordsResult = jsonObject.getJSONArray("words_result"); VCode = wordsResult.getJSONObject(0).getString("words"); } catch (IOException e) { logger.error("請(qǐng)求識(shí)別失??!", e); } } return VCode; }
對(duì)圖片進(jìn)行base64編碼字符
/** * 將本地圖片進(jìn)行Base64位編碼 * @param imageFile * @return */ public static String encodeImgageToBase64(String imageFile) { // 其進(jìn)行Base64編碼處理 byte[] data = null; // 讀取圖片字節(jié)數(shù)組 try { InputStream in = new FileInputStream(imageFile); data = new byte[in.available()]; in.read(data); in.close(); } catch (IOException e) { e.printStackTrace(); } // 對(duì)字節(jié)數(shù)組Base64編碼 return Base64Util.encode(data); } 4、返回結(jié)果以json方式返回 { "log_id": 2471272194, "words_result_num": 2, "words_result": [ {"words": " TSINGTAO"}, {"words": "青島睥酒"} ] }
項(xiàng)目github地址:https://github.com/xwlmdd/ipP...
注:orc圖片識(shí)別模塊在這個(gè)項(xiàng)目里的一個(gè)工具類
我的公眾號(hào),喜歡的朋友可以關(guān)注哦
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/70312.html
摘要:驗(yàn)證碼的識(shí)別成功率跟圖片質(zhì)量關(guān)系密切,一般拿到后的驗(yàn)證碼都得經(jīng)過(guò)灰度化,二值化,去噪,利用就可以很方便的做到。 了解驗(yàn)證碼 什么是驗(yàn)證碼? 所謂驗(yàn)證碼,就是將一串隨機(jī)產(chǎn)生的數(shù)字或符號(hào),生成一幅圖片,圖片里加上一些干擾象素(防止OCR),由用戶肉眼識(shí)別其中的驗(yàn)證碼信息,輸入表單提交網(wǎng)站驗(yàn)證,驗(yàn)證成功后才能使用某項(xiàng)功能,通俗說(shuō)就是一種區(qū)分用戶是計(jì)算機(jī)和人的公共全自動(dòng)程序 驗(yàn)證碼的作用 可以...
摘要:登錄開(kāi)發(fā)者后臺(tái)我的軟件獲得軟件軟件密鑰注意這里是普通會(huì)員賬號(hào),不是開(kāi)發(fā)者賬號(hào),注冊(cè)地址開(kāi)發(fā)者可以聯(lián)系客服領(lǐng)取免費(fèi)調(diào)試題分請(qǐng)先設(shè)置用戶名密碼一鍵識(shí)別函數(shù)正在一鍵識(shí)別例表示位字母數(shù)字,不同類型收費(fèi)不同。請(qǐng)準(zhǔn)確填寫,否則影響識(shí)別率。 【百度云搜索:http://www.bdyss.cn】 【搜網(wǎng)盤:http://www.swpan.cn】 打碼接口文件 # -*- coding: cp936...
摘要:識(shí)別網(wǎng)站驗(yàn)證碼詳見(jiàn)維基百科或者百度百科識(shí)別的驗(yàn)證碼原理采集一批驗(yàn)證碼,根據(jù)圖片特點(diǎn)進(jìn)行初步處理二值化灰度化濾波降噪等處理然后分割圖片,旋轉(zhuǎn)圖片,模板選取,訓(xùn)練算法,讓它更準(zhǔn)確。 最近在爬某網(wǎng)站,老是蹦出來(lái)驗(yàn)證碼,就想著找個(gè)OCR破了這個(gè)驗(yàn)證碼,然后就開(kāi)始了OCR探索之旅。 首先簡(jiǎn)單說(shuō)一下什么是OCR OCR是(Optical Character Recognition,光學(xué)字符識(shí)別)的...
閱讀 2839·2021-11-24 09:39
閱讀 4138·2021-10-27 14:19
閱讀 2056·2021-08-12 13:25
閱讀 2346·2019-08-29 17:07
閱讀 1122·2019-08-29 13:44
閱讀 1074·2019-08-26 12:17
閱讀 470·2019-08-23 17:16
閱讀 2058·2019-08-23 16:46