百度图片识别orc实现普通验证码识别

痛定思痛。 2022-02-24 04:26 479阅读 0赞

在爬取网站的时候都遇到过验证码,那么我们有什么方法让程序自动的识别验证码呢?其实网上已有很多打码平台,但是这些都是需要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. /**
  2. 1. 获取AccessToken
  3. 2. APIKey:
  4. 3. SecretKey:
  5. 4. @return
  6. */
  7. public static String getAccessToken() {
  8. String accessToken = "";
  9. HttpRequestData httpRequestData = new HttpRequestData();
  10. HashMap<String, String> params = new HashMap<>();
  11. params.put("grant_type", "client_credentials");
  12. params.put("client_id", "你的APIKey");
  13. params.put("client_secret", "SecretKey");
  14. httpRequestData.setRequestMethod("GET");
  15. httpRequestData.setParams(params);
  16. httpRequestData.setRequestUrl("https://aip.baidubce.com/oauth/2.0/token");
  17. HttpResponse response = HttpClientUtils.execute(httpRequestData);
  18. String json = "";
  19. try {
  20. json = IOUtils.toString(response.getEntity().getContent());
  21. } catch (IOException e) {
  22. e.printStackTrace();
  23. }
  24. if (response.getStatusLine().getStatusCode() == 200) {
  25. JSONObject jsonObject = JSONObject.parseObject(json);
  26. if (jsonObject != null && !jsonObject.isEmpty()) {
  27. accessToken = jsonObject.getString("access_token");
  28. }
  29. }
  30. return accessToken;
  31. }

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)) {

      1. logger.error("accessToken为空");
      2. 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) {

      1. try {
      2. json = IOUtils.toString(response.getEntity().getContent());
      3. JSONObject jsonObject = JSONObject.parseObject(json);
      4. JSONArray wordsResult = jsonObject.getJSONArray("words_result");
      5. VCode = wordsResult.getJSONObject(0).getString("words");
      6. } catch (IOException e) {
      7. logger.error("请求识别失败!", e);
      8. }

      }
      return VCode;
      }

对图片进行base64编码字符

  1. /**
  2. * 将本地图片进行Base64位编码
  3. * @param imageFile
  4. * @return
  5. */
  6. public static String encodeImgageToBase64(String imageFile) {
  7. // 其进行Base64编码处理
  8. byte[] data = null;
  9. // 读取图片字节数组
  10. try {
  11. InputStream in = new FileInputStream(imageFile);
  12. data = new byte[in.available()];
  13. in.read(data);
  14. in.close();
  15. } catch (IOException e) {
  16. e.printStackTrace();
  17. }
  18. // 对字节数组Base64编码
  19. return Base64Util.encode(data);
  20. }
  21. 4、返回结果以json方式返回
  22. {
  23. "log_id": 2471272194,
  24. "words_result_num": 2,
  25. "words_result":
  26. [
  27. {"words": " TSINGTAO"},
  28. {"words": "青島睥酒"}
  29. ]
  30. }

项目github地址:https://github.com/xwlmdd/ipP…
注:orc图片识别模块在这个项目里的一个工具类

我的公众号,喜欢的朋友可以关注哦
图片描述

发表评论

表情:
评论列表 (有 0 条评论,479人围观)

还没有评论,来说两句吧...

相关阅读