一、效果演示:http://www.bhshare.cn/imgcode/demo.html

  1. 本地图片识别
  2. 网络图片识别

二、免费api接口

接口地址:http://www.bhshare.cn/imgcode/

请求类型:post

接口参数:

参数名 类型 是否必需 备注
token String 用户标识(token 免费获取:http://www.bhshare.cn/imgcode/gettoken)
type String 识别类型。”online“:网络图片识别,”local“:本地图片上传
uri String 在线图片网址或图片base64编码(含头部信息),当type取online时生效
file file 本地图片文件,当type取local时生效

返回数据:

数据格式:json

参数名 类型 备注
code int 状态码,200:识别成功,其他:识别失败
msg String 错误提示信息,当code!=200时有意义
data String 识别结果
  1. python实现
# -*- coding: utf-8 -*-
# @Date    : 2021/10/03
# @Author  : 薄荷你玩
# @Website :http://www.bhshare.cnimport json
import requestsTOKEN = 'free'  # token 获取:http://www.bhshare.cn/imgcode/gettoken
URL = 'http://www.bhshare.cn/imgcode/'  # 接口地址def imgcode_online(imgurl):"""在线图片识别:param imgurl: 在线图片网址 / 图片base64编码(包含头部信息):return: 识别结果"""data = {'token': TOKEN,'type': 'online','uri': imgurl}response = requests.post(URL, data=data)print(response.text)result = json.loads(response.text)if result['code'] == 200:print(result['data'])return result['data']else:print(result['msg'])return 'error'def imgcode_local(imgpath):"""本地图片识别:param imgpath: 本地图片路径:return: 识别结果"""data = {'token': TOKEN,'type': 'local'}# binary上传文件files = {'file': open(imgpath, 'rb')}response = requests.post(URL, files=files, data=data)print(response.text)result = json.loads(response.text)if result['code'] == 200:print(result['data'])return result['data']else:print(result['msg'])return 'error'if __name__ == '__main__':imgcode_online('http://www.bhshare.cn/test.png')imgcode_local('img/test.png')# 输出样例:# {'code': 200, 'msg': 'ok', 'data': '74689'}# 74689
  1. Java实现
 /*** @author 薄荷你玩* @date 2021/10/04* @Website http://www.bhshare.cn*/import java.io.BufferedReader;import java.io.DataOutputStream;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.net.HttpURLConnection;import java.net.URL;import java.net.URLEncoder;import java.nio.charset.StandardCharsets;import java.util.*;import java.util.Map.Entry;import javax.imageio.ImageIO;import javax.imageio.stream.ImageInputStream;public class ImgcodeUtil {private static final String URL = "http://www.bhshare.cn/imgcode/"; //接口地址private static final String TOKEN = "free"; // token 获取:http://www.bhshare.cn/imgcode/gettokenprivate final static String BOUNDARY = UUID.randomUUID().toString().toLowerCase().replaceAll("-", "");// 边界标识private final static String PREFIX = "--";// 必须存在private final static String LINE_END = "\r\n";/*** 网络图片识别** @param imgUrl 图片网址/图片base64编码* @return 服务器返回结果(json格式)*/private static String imgcode_online(String imgUrl) {String BOUNDARY = UUID.randomUUID().toString(); // 文件边界随机生成HttpURLConnection con = null;BufferedReader buffer = null;StringBuffer resultBuffer = null;try {URL url = new URL(URL);//得到连接对象con = (HttpURLConnection) url.openConnection();//设置请求类型con.setRequestMethod("POST");//设置请求需要返回的数据类型和字符集类型con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");//允许写出con.setDoOutput(true);//允许读入con.setDoInput(true);//不使用缓存con.setUseCaches(false);DataOutputStream out = new DataOutputStream(con.getOutputStream());String content = "token=" + TOKEN;content += "&type=online";content += "&uri=" + URLEncoder.encode(imgUrl);// DataOutputStream.writeBytes将字符串中的16位的unicode字符以8位的字符形式写到流里面out.writeBytes(content);out.flush();out.close();//得到响应码int responseCode = con.getResponseCode();if (responseCode == HttpURLConnection.HTTP_OK) {//得到响应流InputStream inputStream = con.getInputStream();//将响应流转换成字符串resultBuffer = new StringBuffer();String line;buffer = new BufferedReader(new InputStreamReader(inputStream, StandardCharsets.UTF_8));while ((line = buffer.readLine()) != null) {resultBuffer.append(line);}return resultBuffer.toString();}} catch (Exception e) {e.printStackTrace();}return "";}/*** 本地图片上传** @param path 图片路径* @return 返回数据(json)*/public static String imgcode_local(String path) throws Exception {HttpURLConnection conn = null;InputStream input = null;OutputStream os = null;BufferedReader br = null;StringBuffer buffer = null;try {URL url = new URL(URL);conn = (HttpURLConnection) url.openConnection();conn.setDoOutput(true);conn.setDoInput(true);conn.setUseCaches(false);conn.setConnectTimeout(1000 * 10);conn.setReadTimeout(1000 * 10);conn.setRequestMethod("POST");conn.setRequestProperty("Content-Type", "multipart/form-data; boundary=" + BOUNDARY);conn.connect();// 往服务器端写内容 也就是发起http请求需要带的参数os = new DataOutputStream(conn.getOutputStream());// 请求参数部分Map requestText = new HashMap();requestText.put("token", TOKEN);requestText.put("type", "local");writeParams(requestText, os);// 请求上传文件部分writeFile(path, os);// 请求结束标志String endTarget = PREFIX + BOUNDARY + PREFIX + LINE_END;os.write(endTarget.getBytes());os.flush();// 读取服务器端返回的内容if (conn.getResponseCode() == 200) {input = conn.getInputStream();} else {input = conn.getErrorStream();}br = new BufferedReader(new InputStreamReader(input, "UTF-8"));buffer = new StringBuffer();String line = null;while ((line = br.readLine()) != null) {buffer.append(line);}} catch (Exception e) {throw new Exception(e);} finally {try {if (conn != null) {conn.disconnect();conn = null;}if (os != null) {os.close();os = null;}if (br != null) {br.close();br = null;}} catch (IOException ex) {throw new Exception(ex);}}return buffer.toString();}/*** 对post参数进行编码处理并写入数据流中** @throws Exception* @throws IOException*/private static void writeParams(Map requestText, OutputStream os) throws Exception {try {StringBuilder requestParams = new StringBuilder();Set set = requestText.entrySet();Iterator it = set.iterator();while (it.hasNext()) {Entry entry = (Entry) it.next();requestParams.append(PREFIX).append(BOUNDARY).append(LINE_END);requestParams.append("Content-Disposition: form-data; name=\"").append(entry.getKey()).append("\"").append(LINE_END);requestParams.append("Content-Type: text/plain; charset=utf-8").append(LINE_END);requestParams.append("Content-Transfer-Encoding: 8bit").append(LINE_END);requestParams.append(LINE_END);// 参数头设置完以后需要两个换行,然后才是参数内容requestParams.append(entry.getValue());requestParams.append(LINE_END);}os.write(requestParams.toString().getBytes());os.flush();} catch (Exception e) {throw new Exception(e);}}/*** 对post上传的文件进行编码处理并写入数据流中** @throws IOException* @path 文件路径*/private static void writeFile(String path, OutputStream os) throws Exception {try {InputStream is = null;File file = new File(path);StringBuilder requestParams = new StringBuilder();requestParams.append(PREFIX).append(BOUNDARY).append(LINE_END);requestParams.append("Content-Disposition: form-data; name=\"").append("file").append("\"; filename=\"").append(file.getName()).append("\"").append(LINE_END);requestParams.append("Content-Type:").append(getContentType(file)).append(LINE_END);requestParams.append("Content-Transfer-Encoding: 8bit").append(LINE_END);requestParams.append(LINE_END);// 参数头设置完以后需要两个换行,然后才是参数内容os.write(requestParams.toString().getBytes());is = new FileInputStream(file);byte[] buffer = new byte[1024 * 1024];int len = 0;while ((len = is.read(buffer)) != -1) {os.write(buffer, 0, len);}os.write(LINE_END.getBytes());os.flush();} catch (Exception e) {throw new Exception(e);}}/*** 获取ContentType*/public static String getContentType(File file) throws Exception {String streamContentType = "application/octet-stream";String imageContentType = "";ImageInputStream image = null;try {image = ImageIO.createImageInputStream(file);if (image == null) {return streamContentType;}Iterator it = ImageIO.getImageReaders(image);if (it.hasNext()) {imageContentType = "image/png";return imageContentType;}} catch (IOException e) {throw new Exception(e);} finally {try {if (image != null) {image.close();}} catch (IOException e) {throw new Exception(e);}}return streamContentType;}public static void main(String[] args) throws Exception {String path = "E:\\NLP_study\\imgcode\\img\\test.png";System.out.println(imgcode_local(path));System.out.println(imgcode_online("http://www.bhshare.cn/test.png"));// 输出:// {"code":200,"msg":"ok","times":93,"data":"yemm"}// {"code":200,"msg":"ok","times":92,"data":"74689"}}}
  1. HTML/JavaScript实现

    网络图片识别:

 <!--网络图片识别/html--><input type="text" name="uri" id="uri" placeholder="请输入验证码图片网址" /><input type="button" onclick="imgcode()" value="识别" /><input name="token" id="token" value="free" type="hidden"><input name="type" value="online" type="hidden"><p>识别结果:<span id="resultCode" style="color:red;">请稍后...</span></p>
// 网络图片识别/js
function imgcode() {if ($("#uri").val() == "") {alert("网址不能为空");return;}$.ajax({type: "post",url: "http://www.bhshare.cn/imgcode/",data: {token: $("#token").val(),uri: $("#uri").val(),type: "online"},dataType: "json",success: function (data) {console.log(data);if (data.code > 0) {$("#resultCode").text(data.data);} else {$("#resultCode").text(data.msg);}},error: function (result) {console.log(result);$("#resultCode").text(JSON.stringify(result));alert("系统繁忙,请稍后再试!");}});}

本地图片上传:

<!--本地图片上传/html-->
<form encType="multipart/form-data" method="post" id="selPicture"><input type="file" accept="image/*" name="selPicture" id="file" /><input type="button" name="upload" onclick="sendimg()" id="upload" value="识别" /><input name="token" value="free" type="hidden"><input name="type" value="local" type="hidden">
</form>
<p>识别结果:<span id="resultCode" style="color:red;">请稍后...</span></p>
// 本地图片上传/js
function sendimg() {var $file1 = $("input[name='selPicture']").val();//用户文件内容(文件)// 判断文件是否为空if ($file1 == "") {alert("请选择上传的目标文件! ")return false;}//判断文件大小var size1 = $("input[name='selPicture']")[0].files[0].size;if (size1 > 5242880) {alert("上传文件不能大于5M!");return false;}boo1 = true;var type = "file";var formData = new FormData($("#selPicture")[0]);//这里需要实例化一个FormData来进行文件上传$.ajax({type: "post",url: "http://www.bhshare.cn/imgcode/",data: formData,processData: false,contentType: false,dataType: "json",success: function (data) {console.log(data);if (data.code == 200) {$("#resultCode").text(data.data);} else {$("#resultCode").text(data.msg);}},error: function (result) {console.log(result);$("#resultCode").text(JSON.stringify(result));alert("系统繁忙,请稍后再试!");}});}

图形验证码识别接口(免费)相关推荐

  1. [Python爬虫] 5-爬虫进阶(多线程爬虫/动态网页抓取/图形验证码识别)

    # I.多线程爬虫 # 1)概念:多线程是为了同步完成多项任务,通过提高资源使用效率来提高系统的效率 # 线程:火车的车厢,进程:火车头 # # 2)threading模块:专门提供用来做多线程编程的 ...

  2. 基于selenium实现12306的登录操作(图形验证码识别)

    说明 12306 会有如下一个图形验证码识别点击,所以必须得先点击正确图片,才能继续进行操作. 基本步骤 selenium打开对应网站,并进行截图 将图片截取出对应验证码所在图片 通过超级鹰识别出要点 ...

  3. 网络爬虫笔记—图形验证码识别

    网络爬虫笔记-图形验证码识别 <兄弟们,本文章开启了关注后阅读.大家如不想关注,可直接微信搜索"宏蜘蛛"或文章标题,查看文章.> 1.什么是图形验证码 像知网注册界面的 ...

  4. rpa网站登录图形验证码识别

    先要把图片下载到本地,再调用接口识别 信息 = seFindChildElement(sSessionID, sDivElementID, 1, 'el-icon-date', sElementID) ...

  5. python点触图形验证码识别_GitHub - AaronJny/captcha_detection: 点选式验证码识别方案...

    方案要点: 点选式验证码的一般解决流程 如何使用 xyolo 训练自己的目标检测模型 不借助 OCR 功能解决中文验证码的识别问题 爬虫,反爬虫,反反爬虫--一个无限循环. 验证码是反爬虫手段中的常用 ...

  6. 爬虫入门经典(十七) | 图形验证码识别

      大家好,我是不温卜火,是一名计算机学院大数据专业大三的学生,昵称来源于成语-不温不火,本意是希望自己性情温和.作为一名互联网行业的小白,博主写博客一方面是为了记录自己的学习过程,另一方面是总结自己 ...

  7. python图形验证码识别_Python验证码识别:利用pytesser识别简单图形验证码

    一.探讨 识别图形验证码可以说是做爬虫的必修课,涉及到计算机图形学,机器学习,机器视觉,人工智能等等高深领域-- 简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形.以及利用计算机进行 ...

  8. python验证码识别接口 服务器_python验证码识别模块

    (白嫖)这是一个为麻瓜设计的本地OCR模块 只需要简单几步操作即可拥有两大通用识别模块,让你在工作中畅通无阻. 测试图片 test1.png 测试图片 test2.jpg SDK类参数 参数名 必选 ...

  9. php 接口获得图形验证码,API接口图形验证码生成

    用途 适用于登录/注册/发送短信验证码前校验等等,代码可以整合到 ThinkPHP laravel 框架 使用 方法返回一个base64加密的图形,返回到前端即可,同时会返回一个解密的验证码(这个不到 ...

  10. java图形验证码识别-阿里云OCR(精准率50%)

    1. 通用文字识别 请求参数详情https://market.aliyun.com/products/57124001/cmapi028554.html?spm=5176.2020520132.101 ...

最新文章

  1. Linux Shell变量类型
  2. 代码很烂,所以离职?
  3. 九度 1532:棋盘寻宝扩展(背包方案统计)
  4. Pandas DataFrame merge join concat append combin_first 使用demo
  5. java adt eclipse_在eclipse中添加android ADT
  6. 关于日期格式你必须知道的坑( yyyy-MM-dd HH:mm:ss SSS)
  7. 理想的Datepicker
  8. c语言互质欧拉函数,互质与欧拉函数
  9. PSAM卡之常用APDU指令错误码
  10. Error:403 No valid crumb was included in the request
  11. 被虐日記----开心并快乐着的求各种虐
  12. 遥感数据在植物识别的应用
  13. 以下代码可以屏蔽掉alt+f4
  14. 计算机网络WAN接口,网线插WAN口上不了网怎么办?
  15. 生命科学名言08:细胞周期时钟
  16. 【无标题】怎么申请3A认证?
  17. 山西计算机教室配备标准,山西省义务教育阶段中小学现代教育技术设备配备标准.doc...
  18. leaflet地图加载 点击获取经纬度
  19. 前端开发利器--PxCook(像素大厨)
  20. MATLAB的曲线拟合

热门文章

  1. 医学界的动作捕捉系统(一)
  2. 进程同步与信号量机制的应用
  3. 锂离子电池电压与容量的关系及容量计算方法
  4. shell脚本合集2
  5. 0001 工作业务问题_滞纳金公式计算区别实例
  6. 税务会计实务【19】
  7. Modelica学习笔记1
  8. html word 分页符,怎么取消分页符(word文档如何取消分页)
  9. 概率假设密度滤波 matlab,概率假设密度滤波的物理空间意义
  10. SS导航菜单水平居中的多种方法