php orc 验证码,百度图片识别orc实现普通验证码识别
在爬取網站的時候都遇到過驗證碼,那么我們有什么方法讓程序自動的識別驗證碼呢?其實網上已有很多打碼平臺,但是這些都是需要money。但對于僅僅爬取點數據而接入打碼平臺實屬浪費。所以百度免費orc正好可以利用。(每天500次免費)
1、注冊百度賬號、百度云管理中心創建應用、生成AppKey、SecretKey(程序調用接口是要生成access_token)
2、利用AppKey、SecretKey生成access_token
向授權服務地址https://aip.baidubce.com/oaut...發送請求(推薦使用POST)并在URL中帶上以下參數:
grant_type: 必須參數,固定為client_credentials;
client_id: 必須參數,應用的API Key;
client_secret: 必須參數,應用的Secret Key
代碼如下:
/**
1. 獲取AccessToken
2. APIKey:
3. SecretKey:
4. @return
*/
public static String getAccessToken() {
String accessToken = "";
HttpRequestData httpRequestData = new HttpRequestData();
HashMap params = 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、請求百度orc通用文字識別API(下面以百度通用識別api識別為例)
請求API的URL https://aip.baidubce.com/rest...
請求方法 POST
請求URL參數 access_token
請求頭 (Header) Content-Type application/x-www-form-urlencoded
Body中放置請求參數,主要參數詳情如下:
image : 圖像數據,base64編碼,要求base64編碼后大小不超過4M,最短邊至少15px,最長邊最大4096px,支持jpg/png/bmp格式,當image字段存在時url字段失效
url : 圖片完整URL,URL長度不超過1024字節,URL對應的圖片base64編碼后大小不超過4M,最短邊至少15px,最長邊最大4096px,支持jpg/png/bmp格式,當image字段存在時url字段失效
/**
* 獲取識別驗證碼
* @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;
HashMap headers = 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("請求識別失敗!", e);
}
}
return VCode;
}
對圖片進行base64編碼字符
/**
* 將本地圖片進行Base64位編碼
* @param imageFile
* @return
*/
public static String encodeImgageToBase64(String imageFile) {
// 其進行Base64編碼處理
byte[] data = null;
// 讀取圖片字節數組
try {
InputStream in = new FileInputStream(imageFile);
data = new byte[in.available()];
in.read(data);
in.close();
} catch (IOException e) {
e.printStackTrace();
}
// 對字節數組Base64編碼
return Base64Util.encode(data);
}
4、返回結果以json方式返回
{
"log_id": 2471272194,
"words_result_num": 2,
"words_result":
[
{"words": " TSINGTAO"},
{"words": "青島睥酒"}
]
}
項目github地址:https://github.com/xwlmdd/ipP...
注:orc圖片識別模塊在這個項目里的一個工具類
我的公眾號,喜歡的朋友可以關注哦
總結
以上是生活随笔為你收集整理的php orc 验证码,百度图片识别orc实现普通验证码识别的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 制作外挂需要多高的编程技术?
- 下一篇: 【思维导图】前端开发JavaScript