精华内容
下载资源
问答
  • 主要介绍了java实现图片文字识别ocr ,非常具有实用价值,需要的朋友可以参考下
  • java实现图片文字识别的两种方法

    千次阅读 2020-11-04 11:36:50
    一、使用tesseract-ocr  1. https://github.com/tesseract-ocr/tesseract/wiki上...  window64位安装包:tesseract-ocr-w64-setup-v4.1.0.20190314.exe  简体中文训练文件:chi_sim.traineddata 约40M  2.... 3....

    一、使用tesseract-ocr

      1.    https://github.com/tesseract-ocr/tesseract/wiki上下载安装包安装和简体中文训练文件

        window64位安装包:tesseract-ocr-w64-setup-v4.1.0.20190314.exe

        简体中文训练文件:chi_sim.traineddata 约40M

      2. 将训练文件chi_sim.traineddata放入安装目录下的tessdata目录中

      3.    配置环境变量,在path变量中加入tesseract安装目录,例如C:\Program Files\Tesseract-OCR

      4. 添加系统环境变量TESSDATA_PREFIX,值为训练文件的目录,例如C:\Program Files\Tesseract-OCR\tessdata

      5. 使用java调用命令行执行转换,命令格式例如:F:\pic>   tesseract 6.png 66 -l chi_sim 即:在F:\pic目录下使用tesseract命令利用chi_sim训练文件把6.png文件转换成66.txt文件

     

    二、使用tess4j

      1.    使用maven下载所需jar包:

        

    复制代码

    <dependency>
    <groupId>net.java.dev.jna</groupId>
    <artifactId>jna</artifactId>
    <version>4.1.0</version>
    </dependency>
    
    <dependency>
    <groupId>net.sourceforge.tess4j</groupId>
    <artifactId>tess4j</artifactId>
    <version>3.4.0</version>
    <exclusions>
    <exclusion>
    <groupId>com.sun.jna</groupId>
    <artifactId>jna</artifactId>
    </exclusion>
    </exclusions>
    </dependency>

    复制代码

      2.下载简体中文训练文件:chi_sim.traineddata

      3.使用如下代码调用

      

    复制代码

            //加载待读取图片
            File imageFile = new File("F://pic.png");
            //创建tess对象
            ITesseract instance = new Tesseract();
            //设置训练文件目录
            instance.setDatapath("F://tessdata");
            //设置训练语言
            instance.setLanguage("chi_sim");
            //执行转换
            String result = instance.doOCR(imageFile);        

    复制代码

    展开全文
  • 图片文字识别

    2018-06-04 17:37:24
    图片文字识别,并显示在前端。。。。。。。。。。。。。。。。。。。。。。
  • 一个Google支持的开源的OCR图文识别开源项目。去持多语言(当前3.02 版本支持包括英文,简体中文,繁体中文),支持Windows,Linux,Mac OSX 多平台。使用中Tesseract 的识别率非常高。可以参考网上的相关资料进行对...
  • 基于百度API,实现图片文字识别功能Java版)

    万次阅读 多人点赞 2018-09-08 08:51:59
    1、登录百度AI开放平台 ... (1)在顶部导航栏中,找到控制台选项,并选择文字识别功能,进入管理中心页面 (2)在管理中心页面中,找到创建应用按钮并点击 (3)填写应用名名称和应用描述,选择相...

    1、登录百度AI开放平台

        网站链接:http://ai.baidu.com/

        新手接入指南:http://ai.baidu.com/docs#/Begin/top

        (1)在顶部导航栏中,找到控制台选项,并选择文字识别功能,进入管理中心页面

         

       

     (2)在管理中心页面中,找到创建应用按钮并点击

      (3)填写应用名名称和应用描述,选择相应的应用类型,勾选自己需要的接口服务(如果选择的是文字识别,则对应的文字识别接口服务默认全部勾选),文字识别包名如果是应用在电脑端,则默认选择不需要即可,如果还需要其他功能,则再勾选其功能对应的相关接口即可,例如:在文字识别的时候,我还需要人脸识别,则再勾选人脸识别对应的所有接口即可

    (4)创建完毕之后,点击返回应用列表按钮

     

    (5)在应用列表界面中,即可查看应用对应的 API Key 和 Secret Key

     

    2、获取Access Token

           (1)导入Java SDK 和 FastJson工具包

                  普通工程:

                         一、下载fastjson.jar工具包      链接:https://pan.baidu.com/s/1RH4-x82G8-sNmn7y5YhdjA

                         二、进入SDK下载页面     网站链接:https://ai.baidu.com/sdk#ocr

                         三、找到文字识别,选择Java SDK,点击右边的下载按钮

                         四、把下载好的Java SDK 和 FastJson工具包 导入到项目中即可

                    Maven工程:

                            直接把下面这段代码复制到  pom.xml 中就行          

    <!--百度文字识别接口-->
    <dependency>
       <groupId>com.baidu.aip</groupId>
       <artifactId>java-sdk</artifactId>
       <version>4.5.0</version>
    </dependency>
    
     <dependency>                                                                               
         <groupId>com.alibaba</groupId>                                                        
         <artifactId>fastjson</artifactId>
         <version>1.2.47</version>
     </dependency>   
    

          (2)获取Access Token

    package com.project.dom;
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.List;
    import java.util.Map;
    
    import com.alibaba.fastjson.JSONObject;
    
    /**
     * 百度文字识别demo
     */
    public class baiduOcr {
        /**
         * 获取权限token
         * @return 返回示例:
         * {
         * "access_token": "24.c9303e47f0729c40f2bc2be6f8f3d589.2592000.1530936208.282335-1234567",
         * "expires_in":2592000
         * }
         */
        public static String getAuth() {
            // 官网获取的 API Key
            String clientId = "官网获取你的 API Key";
            // 官网获取的 Secret Key
            String clientSecret = "官网获取你的 Secret Key";
            return getAuth(clientId, clientSecret);
        }
    
        /**
         * 获取API访问token
         * 该token有一定的有效期,需要自行管理,当失效时需重新获取.
         * @param ak - 百度云的 API Key
         * @param sk - 百度云的 Securet Key
         * @return assess_token 示例:
         * "24.c9303e47f0729c40f2bc2be6f8f3d589.2592000.1530936208.282335-1234567"
         */
        public static String getAuth(String ak, String sk) {
            // 获取token地址
            String authHost = "https://aip.baidubce.com/oauth/2.0/token?";
            String getAccessTokenUrl = authHost
                    // 1. grant_type为固定参数
                    + "grant_type=client_credentials"
                    // 2. 官网获取的 API Key
                    + "&client_id=" + ak
                    // 3. 官网获取的 Secret Key
                    + "&client_secret=" + sk;
            try {
                URL realUrl = new URL(getAccessTokenUrl);
                // 打开和URL之间的连接
                HttpURLConnection connection = (HttpURLConnection) realUrl.openConnection();
                connection.setRequestMethod("POST");//百度推荐使用POST请求
                connection.connect();
                // 获取所有响应头字段
                Map<String, List<String>> map = connection.getHeaderFields();
                // 定义 BufferedReader输入流来读取URL的响应
                BufferedReader in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
                String result = "";
                String line;
                while ((line = in.readLine()) != null) {
                    result += line;
                }
                System.err.println("result:" + result);
                JSONObject jsonObject = JSONObject.parseObject(result.toString());
                String access_token = jsonObject.getString("access_token");
                return access_token;
            } catch (Exception e) {
                System.err.printf("获取token失败!");
                e.printStackTrace(System.err);
            }
            
             return null;
        }
    
    }

    调用baiduOcr.getAuth()就能获取到result,result格式如下:

    result: {
    "access_token": "24.6c5e1ff107f0e8bcef8c46d3424a0e78.2592000.1485516651.282335-8574074",
    "session_key":"9mzdDZXu3dENdFZQurfg0Vz8slgSgvvOAUebNFzyzcpQ5EnbxbF+hfG9DQkpUVQdh4p6HbQcAiz5RmuBAja1JJGgIdJI",
    "scope": "public wise_adapt",
    "refresh_token": "25.5f706c15bfc5799897518ab954b2bc07.1234567890.1843716344.1234567-1234567",
    "session_secret": "dfac94a3489fe9fca7c3221cbf7525ff",
    "expires_in": 2592000
    }

    其中暂时有用的就access_token和expires_in两个值,access_token是调用文字识别必带的一个参数,expires_in是Access Token 的有效期一般是一个月

    3.将本地图片进行BASE64位编码

    import sun.misc.BASE64Encoder;
    import java.io.File;
    import java.io.FileInputStream;
    import java.io.InputStream;
    
    public class BASE64 {
        /**
         * 将本地图片进行Base64位编码
         *
         * @param imgUrl 图片的url路径,如D:\\photo\\1.png
         *
         * @return
         */
        public static String encodeImgageToBase64(File imageFile) {
        	// 将图片文件转化为字节数组字符串,并对其进行Base64编码处理
            // 其进行Base64编码处理
            byte[] data = null;
            // 读取图片字节数组
            try {
                InputStream in = new FileInputStream(imageFile);
                data = new byte[in.available()];
                in.read(data);
                in.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            // 对字节数组Base64编码
            BASE64Encoder encoder = new BASE64Encoder();
            return encoder.encode(data);// 返回Base64编码过的字节数组字符串
        }
    }

    4.文字识别

    package com.project.dom;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.Collection;
    import java.util.HashMap;
    import java.util.Iterator;
    
    import com.alibaba.fastjson.JSONObject;
    
    /**
     *
     * @版权 : Copyright (c) 2017-2018 *********公司技术开发部
     * @author: wubin
     * @E-mail: 1035644768@qq.com
     * @版本: 1.0
     * @创建日期: 2018年9月8日 上午8:40:34
     * @ClassName PictureUtil
     * @类描述-Description: TODO(这里用一句话描述这个方法的作用)
     * @修改记录:
     * @版本: 1.0
     */
    
    public class PictureUtil {
    
    	public static String request(String httpUrl, String httpArg) {
    		BufferedReader reader = null;
    		String result = null;
    		StringBuffer sbf = new StringBuffer();
    		try {
    			// 用java JDK自带的URL去请求
    			URL url = new URL(httpUrl);
    			HttpURLConnection connection = (HttpURLConnection) url.openConnection();
    			// 设置该请求的消息头
    			// 设置HTTP方法:POST
    			connection.setRequestMethod("POST");
    			// 设置其Header的Content-Type参数为application/x-www-form-urlencoded
    			connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
    			// 填入apikey到HTTP header
    			connection.setRequestProperty("apikey", "uml8HFzu2hFd8iEG2LkQGMxm");
    			// 将第二步获取到的token填入到HTTP header
    			connection.setRequestProperty("access_token", baiduOcr.getAuth());
    			connection.setDoOutput(true);
    			connection.getOutputStream().write(httpArg.getBytes("UTF-8"));
    			connection.connect();
    			InputStream is = connection.getInputStream();
    			reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
    			String strRead = null;
    			while ((strRead = reader.readLine()) != null) {
    				sbf.append(strRead);
    				sbf.append("\r\n");
    			}
    			reader.close();
    			result = sbf.toString();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return result;
    	}
    
    	// 把json格式转换成HashMap
    	public static HashMap<String, String> getHashMapByJson(String jsonResult) {
    		HashMap map = new HashMap<String, String>();
    		try {
    			JSONObject jsonObject = JSONObject.parseObject(jsonResult.toString());
    			JSONObject words_result = jsonObject.getJSONObject("words_result");
    			Iterator<String> it = words_result.keySet().iterator();
    
    			while (it.hasNext()) {
    				String key = it.next();
    				JSONObject result = words_result.getJSONObject(key);
    				String value = result.getString("words");
    				switch (key) {
    				case "姓名":
    					map.put("name", value);
    					break;
    				case "民族":
    					map.put("nation", value);
    					break;
    				case "住址":
    					map.put("address", value);
    					break;
    				case "公民身份号码":
    					map.put("IDCard", value);
    					break;
    				case "出生":
    					map.put("Birth", value);
    					break;
    				case "性别":
    					map.put("sex", value);
    					break;
    				}
    			}
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return map;
    	}
    
    	public static void main(String[] args) {
    		// 获取本地的绝对路径图片
    		File file = new File("D:\\photo\\1.png");
    		// 进行BASE64位编码
    		String imageBase = BASE64.encodeImgageToBase64(file);
    		imageBase = imageBase.replaceAll("\r\n", "");
    		imageBase = imageBase.replaceAll("\\+", "%2B");
    		// 百度云的文字识别接口,后面参数为获取到的token
    		String httpUrl = "https://aip.baidubce.com/rest/2.0/ocr/v1/idcard?access_token=" + baiduOcr.getAuth();
    		String httpArg = "detect_direction=true&id_card_side=front&image=" + imageBase;
    		String jsonResult = request(httpUrl, httpArg);
    		System.out.println("返回的结果--------->" + jsonResult);
    		HashMap<String, String> map = getHashMapByJson(jsonResult);
    		Collection<String> values = map.values();
    		Iterator<String> iterator2 = values.iterator();
    		while (iterator2.hasNext()) {
    			System.out.print(iterator2.next() + ", ");
    		}
    	}
    
    }
    

    其中HttpArg中的请求参数我就直接把官网上的弄了下来

    参数是否必选类型可选值范围说明
    detect_directionfalsestringtrue、false是否检测图像旋转角度,默认不检测,即:false。朝向是指输入图像是正常方向、逆时针旋转90/180/270度。可选值包括:
    - true:检测旋转角度并矫正识别;
    - false:不检测旋转角度,针对摆放情况不可控制的情况建议本参数置为true。
    id_card_sidetruestringfront、backfront:身份证含照片的一面;back:身份证带国徽的一面
    imagetruestring图像数据,base64编码后进行urlencode,要求base64编码和urlencode后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式
    detect_riskfalsestringtrue、false是否开启身份证风险类型(身份证复印件、临时身份证、身份证翻拍、修改过的身份证)功能,默认不开启,即:false。可选值:true-开启;false-不开启

    身份证的文字识别代码就差不多都写完了,我把身份证附上(百度官网上弄下来的测试身份证)

    让我们来运行看下效果吧

    {
    	"log_id": 6403608607836186924,
    	"words_result_num": 6,
    	"direction": 0,
    	"image_status": "normal",
    	"words_result": {
    		"住址": {
    			"location": {
    				"width": 197,
    				"top": 150,
    				"height": 37,
    				"left": 78
    			},
    			"words": "北京市海淀区上地十号七栋2单元110室"
    		},
    		"出生": {
    			"location": {
    				"width": 148,
    				"top": 111,
    				"height": 15,
    				"left": 79
    			},
    			"words": "19890601"
    		},
    		"姓名": {
    			"location": {
    				"width": 63,
    				"top": 32,
    				"height": 25,
    				"left": 77
    			},
    			"words": "百度熊"
    		},
    		"公民身份号码": {
    			"location": {
    				"width": 252,
    				"top": 243,
    				"height": 15,
    				"left": 139
    			},
    			"words": "532101198906010015"
    		},
    		"性别": {
    			"location": {
    				"width": 20,
    				"top": 76,
    				"height": 15,
    				"left": 71
    			},
    			"words": "男"
    		},
    		"民族": {
    			"location": {
    				"width": 12,
    				"top": 76,
    				"height": 15,
    				"left": 172
    			},
    			"words": "汉"
    		}
    	}
    }

     其中main方法的map打印为:北京市海淀区上地十号七栋2单元110室, 532101198906010015, 汉, 男, 百度熊, 19890601         

    展开全文
  • Linux、Windows、Android、Mac各操作平台的jar包。
  • 主要为大家详细介绍了java图片识别文字的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要为大家详细介绍了识别率很高的java文字识别技术,亲测,希望对大家有帮助,感兴趣的小伙伴们可以参考一下
  • Java OCR 图像智能字符识别-文字识别Demo。能够识别中文
  • 图片进行水印处理,利用TESS4J识别图片并提取信息生成excel表格。里面有字库文件所以占用空间较大。 说明:https://blog.csdn.net/xlantian/article/details/80789115
  • Java调用百度OCR文字识别API实现图片文字识别软件

    千次阅读 多人点赞 2019-01-06 13:35:59
    Java调用百度OCR文字识别API实现图片文字识别软件 这是一款小巧方便,强大的文字识别软件,由Java编写,配上了窗口界面 调用了百度ocr文字识别API 识别精度高。 打包生成了jar可执行程序 完整项目GitHub地址 ...

    java_baidu_ocr

    Java调用百度OCR文字识别API实现图片文字识别软件

    这是一款小巧方便,强大的文字识别软件,由Java编写,配上了窗口界面

    调用了百度ocr文字识别API 识别精度高。

    完整项目放在GitHub:https://github.com/Ymy214/java_baidu_ocr

    更新日志

    新的改变 OcrViewer 2.0 更新于 2019.1.18

    我对OcrViewer进行了一些功能拓展与界面美化,除了标准的本地图片识别功能,我增加了如下几点新功能,帮助你更方便使用本工具,进而更好地识别图像中的文字:

      1. 全新的界面设计,将会带来全新的使用体验;
      1. 在创作中心设置你喜爱的代码高亮样式,Markdown 将代码片显示选择的高亮样式 进行展示;
      1. 增加了 截图识别 功能,你可以通过截取图片直接直接进行识别;
      1. 增加了图片预览功能,更加方便进行图文对比,减少容错;
      1. 增加了 清除图片预览 功能,可以清清除览的图片;
      1. 增加了 重新识别 等功能,如果不确定可以多次识别提高识别精确率;

    下面是功能以及新界面展示

    • 识别出师表.png
      avatar

    • 截图出师表 .png识别结果
      avatar

    • 识别代码.png
      avatar

    • 代码.png识别结果
      avatar

    • 识腾讯新闻弹窗.png
      avatar

    • 腾讯新闻弹窗.png识别结果
      avatar

    • 软件界面
      avatar

    Java源代码:

    • 主窗口类 FileChooserOCR2.java
    package baiduOcr;
    
    import java.awt.BorderLayout;
    import java.awt.CardLayout;
    import java.awt.Font;
    import java.awt.GridLayout;
    import java.awt.Image;
    import java.awt.Toolkit;
    import java.awt.datatransfer.Clipboard;
    import java.awt.datatransfer.StringSelection;
    import java.awt.datatransfer.Transferable;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.image.BufferedImage;
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.IOException;
    import java.util.HashMap;
    
    import javax.imageio.ImageIO;
    import javax.swing.Icon;
    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JFileChooser;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    
    import org.json.JSONArray;
    import org.json.JSONObject;
    import com.baidu.aip.ocr.AipOcr;
    
    @SuppressWarnings("serial")
    public class FileChooserOCR2 extends JFrame implements ActionListener
    {
    	// 设置APPID/AK/SK
    	public static final String appId = "15289864";
    	public static final String apiKey = "j0pj5Y7HVElkLnmn2LEXKeyO";
    	public static final String secretKey = "FKVbH7EBcGy4DIaqPnXcqE47eACzn2W7";
    
    	AipOcr client = new AipOcr(appId, apiKey, secretKey);
    	JButton open, re0, copy, screen, reset, reocr, b6;
    	JPanel ocrPanel, pNorth, pSouth, pWest, pEast, pCenter, pCenterLeft, pCenterRight;
    	JTextArea ocrText;
    	JLabel previewLabel, printLabel;
    	ImageIcon defaultPreviewImg;
    	JScrollPane areaScroll;
    	String filePath = "./img/preview.jpg";
    	BufferedImage screenImage;// 用与子窗体给父窗体传值
    	// 构造方法
    
    	public FileChooserOCR2()
    	{
    		// 主面板
    		ocrPanel = new JPanel();
    		ocrPanel.setLayout(new BorderLayout());
    
    		// 各个按钮
    		open = new JButton("[选择图片>>>文字识别]");
    		re0 = new JButton("清空");
    		copy = new JButton("复制");
    		screen = new JButton("[截图识别]");
    		reset = new JButton("清除");
    		reocr = new JButton("重识");
    		b6 = new JButton("b6");
    		// 设置各按钮字体
    		open.setFont(new Font("宋体", Font.BOLD, 18));
    		screen.setFont(new Font("宋体", Font.BOLD, 18));
    		copy.setFont(new Font("宋体", Font.BOLD, 18));
    		re0.setFont(new Font("宋体", Font.BOLD, 18));
    		reset.setFont(new Font("宋体", Font.BOLD, 18));
    		reocr.setFont(new Font("宋体", Font.BOLD, 18));
    		b6.setFont(new Font("宋体", Font.BOLD, 18));
    		// 图片预览标签以及状态提示标签
    		defaultPreviewImg = new ImageIcon("./img/preview.jpg");
    		previewLabel = new JLabel(defaultPreviewImg);
    		printLabel = new JLabel("输出:");
    		// 文本域
    		ocrText = new JTextArea("输出内容。。。");
    		ocrText.setEditable(true);
    		ocrText.setVisible(true);
    		ocrText.setFont(new Font("宋体", Font.BOLD, 18));
    		// 各方位分面板
    		pWest = new JPanel(new GridLayout(2, 0));
    		pEast = new JPanel(new GridLayout(2, 2));
    		pSouth = new JPanel(new GridLayout(0, 2));
    		pCenter = new JPanel(new GridLayout(0, 2));
    		pCenterLeft = new JPanel(new CardLayout());
    		pCenterRight = new JPanel(new CardLayout());
    
    		// 默认预览图片是否伸缩
    		// previewImg.setImage(previewImg.getImage().getScaledInstance(340,
    		// 466,Image.SCALE_DEFAULT));
    		// previewLabel.setIcon(previewImg);
    		//
    
    		// 文本域的滚动条
    		areaScroll = new JScrollPane(ocrText);
    		// 设置横向滚动条始终开启
    		// areaScroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    		// 设置垂直滚动条始终开启
    		// areaScroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    		// 设置横向滚动条自动(有需要时)开启
    		areaScroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
    		// 设置垂直滚动条自动(有需要时)开启
    		areaScroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_AS_NEEDED);
    
    		// 添加监听
    		open.addActionListener(this);
    		re0.addActionListener(this);
    		copy.addActionListener(this);
    		screen.addActionListener(this);
    		reset.addActionListener(this);
    		reocr.addActionListener(this);
    
    		// 各组件依次加入相应方位面板
    		pCenterLeft.add(previewLabel);
    		// pCenterRight.add(ocrText);
    		pCenterRight.add(areaScroll);
    
    		pWest.add(reocr);
    		pWest.add(reset);
    
    		pSouth.add(screen);
    		pSouth.add(printLabel);
    		pCenter.add(pCenterLeft);
    		pCenter.add(pCenterRight);
    		pEast.add(copy);
    		pEast.add(re0);
    
    		// 各方位面板加入主面板
    		ocrPanel.add(open, BorderLayout.NORTH);
    		ocrPanel.add(pWest, BorderLayout.WEST);
    		ocrPanel.add(pEast, BorderLayout.EAST);
    		ocrPanel.add(pCenter, BorderLayout.CENTER);
    		ocrPanel.add(pSouth, BorderLayout.SOUTH);
    
    		ocrPanel.setSize(300, 300);
    		this.add(ocrPanel);
    		this.setBounds(400, 200, 900, 600);
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
    	}
    
    	@Override
    	public void actionPerformed(ActionEvent e)
    	{
    
    		if (e.getSource() == re0)
    		{
    			ocrText.setText("已清空内容。。。");
    			printLabel.setText("输出:已清空内容。。。");
    		}
    		if (e.getSource() == copy)
    		{
    			String jianqieban = ocrText.getText();
    			setSysClipboardText(jianqieban);
    			printLabel.setText("输出:已复制到剪贴板。。。");
    		}
    		if (e.getSource() == screen)
    		{
    			new ScreenShotTest(this);
    			// 现已实现为截屏功能, 截屏功能已经封装到一个类文件中,参考的代码
    		}
    		if (e.getSource() == reocr)
    		{
    			ocrText.setText(imgOcr(filePath));
    			printLabel.setText("输出:已重新识别。。。");
    		}
    		if (e.getSource() == reset)
    		{
    			previewLabel.setIcon(defaultPreviewImg);
    			filePath = "./img/preview.jpg";
    			printLabel.setText("输出:已清除预览。。。");
    		}
    		if (e.getSource() == open)
    		{
    			printLabel.setText("输出:选择文件。。。");
    			System.out.println(e.getSource());
    			// TODO Auto-generated method stub
    			JFileChooser jfc = new JFileChooser();
    			jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
    			jfc.showDialog(new JLabel(), "选择");
    			File file = jfc.getSelectedFile();
    			if (file.isDirectory())
    			{
    				System.out.println("(选择目录) $ " + file.getAbsolutePath());
    				System.out.println("请选择图片。。。");
    			} else if (file.isFile())
    			{
    				filePath = file.getAbsolutePath();
    				ImageIcon ocrImg = new ImageIcon(filePath);
    				System.out.println("(选择文件) $ " + filePath);
    				ocrText.setText("正在识别。。。");
    				// 缩放后的图片,用到了一个图片缩放算法
    				ocrImg.setImage(ocrImg.getImage().getScaledInstance(340, 470, Image.SCALE_DEFAULT));
    				previewLabel.setIcon(ocrImg);
    				String ocrStr = imgOcr(filePath);
    				printLabel.setText("输出:正在识别。。。");
    				ocrText.setText(ocrStr);
    				printLabel.setText("输出:识别完毕!!!。。。");
    
    			}
    			System.out.println("正在识别>>>" + jfc.getSelectedFile().getName());
    		}
    
    	}
    
    	// 复制到剪贴板的方法
    	public static void setSysClipboardText(String writeMe)
    	{
    		Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();
    		Transferable tText = new StringSelection(writeMe);
    		clip.setContents(tText, null);
    	}
    
    	// 主方法
    	public static void main(String[] args)
    	{
    		FileChooserOCR2 ocrWin = new FileChooserOCR2();
    		ocrWin.setVisible(true);
    	}
    
    	/*
    	 * 文字识别方法
    	 */
    	public String imgOcr(String imgpath)
    	{
    		// 传入可选参数调用接口
    		HashMap<String, String> options = new HashMap<String, String>();
    		options.put("language_type", "CHN_ENG");
    		options.put("detect_direction", "true");
    		options.put("detect_language", "true");
    		options.put("probability", "true");
    
    		// 参数为本地路径
    		JSONObject res = client.basicGeneral(imgpath, options);
    		// 解析json-------------
    		JSONArray wordsResult = (JSONArray) res.get("words_result");
    		String ocrStr = "\n";
    		for (Object obj : wordsResult)
    		{
    			JSONObject jo = (JSONObject) obj;
    			ocrStr += jo.getString("words") + "\n";
    		}
    
    		// 解析json-------------
    		return ocrStr;
    		// return res.toString(2);
    
    	}
    
    	/*
    	 * 文字识别方法(方法的重载)
    	 */
    	public String imgOcr(byte[] imgInbyte)
    	{
    		// 传入可选参数调用接口
    		HashMap<String, String> options = new HashMap<String, String>();
    		options.put("language_type", "CHN_ENG");
    		options.put("detect_direction", "true");
    		options.put("detect_language", "true");
    		options.put("probability", "true");
    
    		// 参数为二进制数组
    		JSONObject res = client.basicGeneral(imgInbyte, options);
    		// 解析json-------------
    		JSONArray wordsResult = (JSONArray) res.get("words_result");
    		String ocrStr = "\n";
    		for (Object obj : wordsResult)
    		{
    			JSONObject jo = (JSONObject) obj;
    			ocrStr += jo.getString("words") + "\n";
    		}
    
    		// 解析json-------------
    		return ocrStr;
    		// return res.toString(2);
    
    	}
    
    }
    
    
    
    
    
    
    
    package baiduOcr;
    
    import java.awt.AWTException;
    import java.awt.BorderLayout;
    import java.awt.Color;
    import java.awt.Dimension;
    import java.awt.EventQueue;
    import java.awt.Graphics;
    import java.awt.Image;
    import java.awt.Rectangle;
    import java.awt.Robot;
    import java.awt.Toolkit;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.awt.event.MouseAdapter;
    import java.awt.event.MouseEvent;
    import java.awt.event.MouseMotionAdapter;
    import java.awt.image.BufferedImage;
    import java.awt.image.RescaleOp;
    import java.io.ByteArrayOutputStream;
    import java.io.File;
    import java.io.IOException;
    import java.text.SimpleDateFormat;
    import java.util.Date;
    
    import javax.imageio.ImageIO;
    import javax.swing.Icon;
    import javax.swing.ImageIcon;
    import javax.swing.JButton;
    import javax.swing.JFileChooser;
    import javax.swing.JToolBar;
    import javax.swing.JWindow;
    import javax.swing.filechooser.FileNameExtensionFilter;
    import javax.swing.filechooser.FileSystemView;
    
    public class ScreenShotTest
    {
    	private FileChooserOCR2 superWindow;
    
    	public ScreenShotTest(FileChooserOCR2 superWimdow)
    	{
    		this.superWindow = superWimdow;
    		EventQueue.invokeLater(new Runnable() {
    			@Override
    			public void run()
    			{
    				try
    				{
    					new ScreenShotWindow(superWindow);
    				} catch (AWTException e)
    				{
    					e.printStackTrace();
    				}
    			}
    		});
    	}
    
    }
    
    /*
     * 截图窗口
     */
    class ScreenShotWindow extends JWindow
    {
    
    	private int orgx, orgy, endx, endy;
    	private BufferedImage image = null;
    	private BufferedImage tempImage = null;
    	private BufferedImage saveImage = null;
    
    	private ToolsWindow tools = null;
    
    	private FileChooserOCR2 superWin;
    
    	public ScreenShotWindow(FileChooserOCR2 superWindow) throws AWTException
    	{
    		this.superWin = superWindow;
    
    		// 获取屏幕尺寸
    		Dimension d = Toolkit.getDefaultToolkit().getScreenSize();
    		this.setBounds(0, 0, d.width, d.height);
    
    		// 截取屏幕
    		Robot robot = new Robot();
    		image = robot.createScreenCapture(new Rectangle(0, 0, d.width, d.height));
    
    		this.addMouseListener(new MouseAdapter() {
    			@Override
    			public void mousePressed(MouseEvent e)
    			{
    				// 鼠标松开时记录结束点坐标,并隐藏操作窗口
    				orgx = e.getX();
    				orgy = e.getY();
    
    				if (tools != null)
    				{
    					tools.setVisible(false);
    				}
    			}
    
    			@Override
    			public void mouseReleased(MouseEvent e)
    			{
    				// 鼠标松开时,显示操作窗口
    				if (tools == null)
    				{
    					tools = new ToolsWindow(ScreenShotWindow.this, e.getX(), e.getY());
    				} else
    				{
    					tools.setLocation(e.getX(), e.getY());
    				}
    				tools.setVisible(true);
    				tools.toFront();
    			}
    		});
    
    		this.addMouseMotionListener(new MouseMotionAdapter() {
    
    			@Override
    			public void mouseDragged(MouseEvent e)
    			{
    				// 鼠标拖动时,记录坐标并重绘窗口
    				endx = e.getX();
    				endy = e.getY();
    
    				// 临时图像,用于缓冲屏幕区域放置屏幕闪烁
    				Image tempImage2 = createImage(ScreenShotWindow.this.getWidth(), ScreenShotWindow.this.getHeight());
    				Graphics g = tempImage2.getGraphics();
    				g.drawImage(tempImage, 0, 0, null);
    				int x = Math.min(orgx, endx);
    				int y = Math.min(orgy, endy);
    				int width = Math.abs(endx - orgx) + 1;
    				int height = Math.abs(endy - orgy) + 1;
    				// 加上1防止width或height0
    				g.setColor(Color.BLUE);
    				g.drawRect(x - 1, y - 1, width + 1, height + 1);
    				// 减1加1都了防止图片矩形框覆盖掉
    				saveImage = image.getSubimage(x, y, width, height);
    				g.drawImage(saveImage, x, y, null);
    
    				ScreenShotWindow.this.getGraphics().drawImage(tempImage2, 0, 0, ScreenShotWindow.this);
    			}
    		});
    
    		this.setVisible(true);
    	}
    
    	@Override
    	public void paint(Graphics g)
    	{
    		RescaleOp ro = new RescaleOp(0.8f, 0, null);
    		tempImage = ro.filter(image, null);
    		g.drawImage(tempImage, 0, 0, this);
    	}
    
    	// 保存图像到文件
    	public void saveImage() throws IOException
    	{
    		// 先隐藏窗口后台执行,显得程序执行很快
    		this.setVisible(false);
    		tools.setVisible(false);
    
    		JFileChooser jfc = new JFileChooser();
    		jfc.setDialogTitle("保存");
    
    		// 文件过滤器,用户过滤可选择文件
    		FileNameExtensionFilter filter = new FileNameExtensionFilter("JPG", "jpg");
    		jfc.setFileFilter(filter);
    
    		// 初始化一个默认文件(此文件会生成到桌面上)
    		SimpleDateFormat sdf = new SimpleDateFormat("yyyymmddHHmmss");
    		String fileName = sdf.format(new Date());
    		File filePath = FileSystemView.getFileSystemView().getHomeDirectory();
    		File defaultFile = new File(filePath + File.separator + fileName + ".jpg");
    		jfc.setSelectedFile(defaultFile);
    
    		int flag = jfc.showSaveDialog(this);
    		if (flag == JFileChooser.APPROVE_OPTION)
    		{
    			File file = jfc.getSelectedFile();
    			String path = file.getPath();
    			// 检查文件后缀,放置用户忘记输入后缀或者输入不正确的后缀
    			if (!(path.endsWith(".jpg") || path.endsWith(".JPG")))
    			{
    				path += ".jpg";
    			}
    			// 写入文件
    			superWin.printLabel.setText("输出:已保存截图!!!");
    			ImageIO.write(saveImage, "jpg", new File(path));
    
    			dispose();
    		}
    	}
    
    	// 返回截取的图片
    	public void okImage()
    	{
    		
    		this.setVisible(false);
    		tools.setVisible(false);
    		superWin.printLabel.setText("输出:识别截图成功!!!");
    		ByteArrayOutputStream baos = null;
    		try
    		{
    			baos = new ByteArrayOutputStream();
    			ImageIO.write(saveImage, "jpg", baos);
    			byte[] imageInByte = baos.toByteArray();// 使用toByteArray()方法转换成字节数组
    			superWin.ocrText.setText(superWin.imgOcr(imageInByte));
    			baos.flush();// 会产生IOException异常
    
    		} catch (IOException e1)
    		{
    			e1.printStackTrace();
    		} finally
    		{
    			try
    			{
    				if (baos != null)
    				{
    					baos.close();
    				}
    			} catch (Exception ex)
    			{
    				ex.printStackTrace();
    			}
    		}
    
    		dispose();
    	}
    
    	/*
    	 * 文字识别方法(方法的重载) 用父窗口类的
    	 */
    
    	/*
    	 * 文字识别方法
    	 */
    
    }
    
    /*
     * 操作窗口
     */
    class ToolsWindow extends JWindow implements ActionListener
    {
    	private ScreenShotWindow parent;
    
    	JButton saveButton, closeButton, okButton;
    
    	public ToolsWindow(ScreenShotWindow parent, int x, int y)
    	{
    		this.parent = parent;
    		this.setLayout(new BorderLayout());
    		JToolBar toolBar = new JToolBar("Java 截图");
    
    		// 保存按钮
    		saveButton = new JButton("◰");
    		// 关闭按钮
    		closeButton = new JButton("✘");
    		// 选定按钮
    		okButton = new JButton("✔");
    
    		saveButton.addActionListener(this);
    		closeButton.addActionListener(this);
    		okButton.addActionListener(this);
    
    		toolBar.add(saveButton);
    		toolBar.add(closeButton);
    		toolBar.add(okButton);
    
    		this.add(toolBar, BorderLayout.NORTH);
    
    		this.setLocation(x, y);
    		this.pack();
    		this.setVisible(true);
    	}
    
    	@Override
    	public void actionPerformed(ActionEvent e)
    	{
    		// TODO Auto-generated method stub
    		if (e.getSource() == saveButton)
    		{
    			try
    			{
    				parent.saveImage();
    				dispose();
    			} catch (IOException e1)
    			{
    				e1.printStackTrace();
    			}
    		}
    		if (e.getSource() == closeButton)
    		{
    			parent.dispose();
    			dispose();
    			// System.exit(0);
    		}
    		if (e.getSource() == okButton)
    		{
    			// 返回选定的图片
    			parent.okImage();
    			dispose();
    		}
    	}
    
    }
    
    
    

    ↑↑↑↑↑↑↑↑↑↑↑↑以上为2019.1.18日OcrViewer2.0第二代↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑

    ↓↓↓↓↓↓↓↓↓↓↓↓以下为2019.1.12日OcrViewer1.0第一代↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

    • 打包生成了jar可执行程序

    • 完整项目GitHub地址 新人有帮助有用的话请给个star谢谢了!

    • https://github.com/Ymy214/java_baidu_ocr

    • 识别图一
      avatar

    • 图一识别结果
      avatar

    • 识别图二
      avatar

    • 图二识别结果
      avatar

    • 识别图三
      avatar

    • 图三识别结果
      avatar

    • 软件界面
      avatar

    Java源代码:

    
    package baiduOcr;
    
    import java.awt.BorderLayout;
    import java.awt.Font;
    import java.awt.Toolkit;
    import java.awt.datatransfer.Clipboard;
    import java.awt.datatransfer.StringSelection;
    import java.awt.datatransfer.Transferable;
    import java.awt.event.ActionEvent;
    import java.awt.event.ActionListener;
    import java.io.File;
    import java.util.HashMap;
    import javax.swing.JButton;
    import javax.swing.JFileChooser;
    import javax.swing.JFrame;
    import javax.swing.JLabel;
    import javax.swing.JPanel;
    import javax.swing.JScrollPane;
    import javax.swing.JTextArea;
    
    import org.json.JSONArray;
    import org.json.JSONObject;
    import com.baidu.aip.ocr.AipOcr;
    
    @SuppressWarnings("serial")
    public class FileChooserOCR extends JFrame implements ActionListener
    {
    	// 设置APPID/AK/SK
    	public static final String appId = "15289864";
    	public static final String apiKey = "j0pj5Y7HVElkLnmn2LEXKeyO";
    	public static final String secretKey = "FKVbH7EBcGy4DIaqPnXcqE47eACzn2W7";
    	
    	AipOcr client = new AipOcr(appId, apiKey, secretKey);
    	JButton open, b1, b2, b3;
    	JPanel ocrPanel;
    	JTextArea ocrText;
    	JScrollPane areaScroll;
    	
    	// 构造方法
    	public FileChooserOCR()
    	{
    		ocrPanel = new JPanel();
    		ocrPanel.setLayout(new BorderLayout());
    		open = new JButton("选择图片>>>文字识别");
    		b1 = new JButton("清空");
    		b2 = new JButton("复制");
    		b3 = new JButton("配置");
    		open.setFont(new Font("宋体", Font.BOLD, 18));
    		b3.setFont(new Font("宋体", Font.BOLD, 18));
    		b2.setFont(new Font("宋体", Font.BOLD, 18));
    		b1.setFont(new Font("宋体", Font.BOLD, 18));
    		
    		//文本域的滚动条
    //		areaScroll = new JScrollPane(ocrText);
    //		areaScroll.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    //		areaScroll.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    		//添加监听
    		open.addActionListener(this);
    		b1.addActionListener(this);
    		b2.addActionListener(this);
    		b3.addActionListener(this);
    		
    		ocrText = new JTextArea("输出内容。。。");
    		ocrText.setEditable(true);
    		ocrText.setVisible(true);
    		ocrText.setFont(new Font("宋体", Font.BOLD, 18));
    		ocrPanel.add(open, BorderLayout.NORTH);
    		ocrPanel.add(b1, BorderLayout.EAST);
    		ocrPanel.add(b2, BorderLayout.WEST);
    		ocrPanel.add(b3, BorderLayout.SOUTH);
    		ocrPanel.add(ocrText, BorderLayout.CENTER);
    //		ocrPanel.add(areaScroll);
    		ocrPanel.setSize(300, 300);
    		this.add(ocrPanel);
    		this.setBounds(400, 200, 900, 600);
    		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    		
    	}
    
    	@Override
    	public void actionPerformed(ActionEvent e)
    	{
    		if(e.getSource()==b1)
    		{
    			ocrText.setText("已清空内容。。。");
    		}
    		if(e.getSource()==b2)
    		{
    			String jianqieban = ocrText.getText();
    			setSysClipboardText(jianqieban);
    		}
    		if (e.getSource()==b3)
    		{
    			//日后实现
    		}
    		if(e.getSource()==open)
    		{
    			System.out.println(e.getSource());
    			// TODO Auto-generated method stub
    			JFileChooser jfc = new JFileChooser();
    			jfc.setFileSelectionMode(JFileChooser.FILES_AND_DIRECTORIES);
    			jfc.showDialog(new JLabel(), "选择");
    			File file = jfc.getSelectedFile();
    			if (file.isDirectory())
    			{
    				System.out.println("(选择目录) $ " + file.getAbsolutePath());
    				System.out.println("请选择图片。。。");
    			} 
    			else if (file.isFile())
    			{
    				System.out.println("(选择文件) $ " + file.getAbsolutePath());
    				ocrText.setText("正在识别。。。");
    				String ocrStr = this.imgOcr(file.getAbsolutePath());
    				ocrText.setText(ocrStr);
    			}
    			System.out.println("正在识别>>>"+jfc.getSelectedFile().getName());
    		}
    		
    
    	}
    
    	//复制到剪贴板
    	public static void setSysClipboardText(String writeMe) {  
            Clipboard clip = Toolkit.getDefaultToolkit().getSystemClipboard();  
            Transferable tText = new StringSelection(writeMe);  
            clip.setContents(tText, null);  
        } 
    
    	// 主方法
    	public static void main(String[] args)
    	{
    		FileChooserOCR ocrWin = new FileChooserOCR();
    		ocrWin.setVisible(true);
    	}
    	/*
    	 * 文字识别方法
    	 */
    	public String imgOcr(String imgpath)
    	{
    		// 传入可选参数调用接口
    		HashMap<String, String> options = new HashMap<String, String>();
    		options.put("language_type", "CHN_ENG");
    		options.put("detect_direction", "true");
    		options.put("detect_language", "true");
    		options.put("probability", "true");
    
    		// 参数为本地路径
    		JSONObject res = client.basicGeneral(imgpath, options);
    		//解析json-------------
    		JSONArray wordsResult = (JSONArray)res.get("words_result");
    		String ocrStr = "\n";
    		for(Object obj : wordsResult)
    		{
    			JSONObject jo = (JSONObject)obj;
    			ocrStr += jo.getString("words") + "\n";
    		}
    		
    		//解析json-------------
    		return ocrStr;
    //        return res.toString(2);
            
            
            
    		// 参数为二进制数组
    		// byte[] file = readFile("test.jpg");
    		// res = client.basicGeneral(file, options);
    		// System.out.println(res.toString(2));
    
    		// 通用文字识别, 图片参数为远程url图片
    		// JSONObject res = client.basicGeneralUrl(url, options);
    		// System.out.println(res.toString(2));
    
    	}
    
    }
    
    
    

    完整项目放在GitHub:https://github.com/Ymy214/java_baidu_ocr

    展开全文
  • JAVA实现百度OCR文字识别功能

    千次阅读 2018-09-28 11:01:55
    闲来无事,发现百度有一个OCR文字...百度服务简介:文字识别是百度自然场景OCR服务,依托百度业界领先的OCR算法,提供了整图文字检测、识别、整图文字识别、整图文字行定位和单字图像识别等功能。   package c...

    转自:http://blog.csdn.net/javagirlone/article/details/47807963

    闲来无事,发现百度有一个OCR文字识别接口,感觉挺有意思的,拿来研究一下。       

    百度服务简介:文字识别是百度自然场景OCR服务,依托百度业界领先的OCR算法,提供了整图文字检测、识别、整图文字识别、整图文字行定位和单字图像识别等功能。

     

    package com.oa.test;
    
    import java.io.BufferedReader;
    import java.io.File;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    
    import com.oa.commons.util.BASE64;
    
    public class OCRTest {
    
    	public static String request(String httpUrl, String httpArg) {
    		BufferedReader reader = null;
    		String result = null;
    		StringBuffer sbf = new StringBuffer();
    
    		try {
    			URL url = new URL(httpUrl);
    			HttpURLConnection connection = (HttpURLConnection) url
    					.openConnection();
    			connection.setRequestMethod("POST");
    			connection.setRequestProperty("Content-Type",
    					"application/x-www-form-urlencoded");
    			// 填入apikey到HTTP header
    			connection.setRequestProperty("apikey", "您自己的apikey");
    			connection.setDoOutput(true);
    			connection.getOutputStream().write(httpArg.getBytes("UTF-8"));
    			connection.connect();
    			InputStream is = connection.getInputStream();
    			reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
    			String strRead = null;
    			while ((strRead = reader.readLine()) != null) {
    				sbf.append(strRead);
    				sbf.append("\r\n");
    			}
    			reader.close();
    			result = sbf.toString();
    		} catch (Exception e) {
    			e.printStackTrace();
    		}
    		return result;
    	}
    
    	<pre name="code" class="java">/**
    	 * @param args
    	 */
    	public static void main(String[] args) {
    		File file = new File("d:\\che4.jpg");
    		String imageBase = BASE64.encodeImgageToBase64(file);
    		imageBase = imageBase.replaceAll("\r\n","");
    		imageBase = imageBase.replaceAll("\\+","%2B");
    		String httpUrl = "http://apis.baidu.com/apistore/idlocr/ocr";
    		String httpArg = "fromdevice=pc&clientip=10.10.10.0&detecttype=LocateRecognize&languagetype=CHN_ENG&imagetype=1&image="+imageBase;
    		String jsonResult = request(httpUrl, httpArg);
    		System.out.println("返回的结果--------->"+jsonResult);
    
    	}
    
    

     

    /**
    	 * 将本地图片进行Base64位编码
    	 * 
    	 * @param imgUrl
    	 *            图片的url路径,如d:\\中文.jpg
    	 * @return
    	 */
    	public static String encodeImgageToBase64(File imageFile) {// 将图片文件转化为字节数组字符串,并对其进行Base64编码处理
    		// 其进行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编码
    		BASE64Encoder encoder = new BASE64Encoder();
    		return encoder.encode(data);// 返回Base64编码过的字节数组字符串
    	}
    
    
    
    

    附件:(che4.jpg)

     


    运行后结果:
    {"errNum":"0","errMsg":"success","querySign":"2289891521,4081625058","retData":[{"rect":{"left":"32","top":"15","width":"418","height":"118"},"word":"\u8c6bC88888"},{"rect":{"left":"45","top":"137","width":"373","height":"18"},"word":"\u4e1c\u98ce\u672c\u7530\u6d1b\u9633\u952e\u901a\u5e97\u7535\u8bdd\uff1a03796358222"}]}
    注意:将此结果放到 在线JSON校验格式化工具中(http://www.bejson.com/)会得到你想要的结果:

    {
        "errNum": "0",
        "errMsg": "success",
        "querySign": "2289891521,4081625058",
        "retData": [
            {
                "rect": {
                    "left": "32",
                    "top": "15",
                    "width": "418",
                    "height": "118"
                },
                "word": "豫C88888"
            },
            {
                "rect": {
                    "left": "45",
                    "top": "137",
                    "width": "373",
                    "height": "18"
                },
                "word": "东风本田洛阳键通店电话:03796358222"
            }
        ]
    }怎么样,感觉很神奇吧,感兴趣的试一下吧!
    最后,解释一下几个参数的含义:

    apikey:API密钥
     也就是您自己的apikey

    fromdevice:来源,例如:android、iPhone
     默认是PC

    clientip:客户端出口IP

    detecttype:OCR接口类型

    languagetype:要检测的文字类型

    imagetype:图片资源类型

    image:图片资源,目前仅支持jpg格式

     

    展开全文
  • Java 图像文字识别

    2016-04-05 13:36:38
    java文字识别程序的关键是寻找一个可以调用的OCR引擎。tesseract-ocr就是一个这样的OCR引擎。
  • java基于tess4j实现图片文字识别

    千次阅读 2019-04-26 16:22:48
    最近突然想写一个图片文字识别java程序,上网搜集资料,有调用百度云api的,也有用tess4j的。 调用百度云api虽然识别率比较高,但是需要注册百度云api,比较麻烦。 使用tess4j只需下载tess4j的jar包,调用jar包...
  • 使用Qt + Opencv 实现文字识别的示例,带有文字库,学习一下没毛病
  • java 识别图片中英文

    2018-11-06 13:41:03
    java 识别图片中英文,ocr智能图文识别 tess4j 图文,验证码识别,支持中英文
  • Java使用百度AI实现识别图片文字信息、身份证信息

    千次阅读 热门讨论 2019-05-10 16:21:24
    java识别图片文字识别身份证图片文字
  • java ocr图片识别文字

    2015-11-19 15:53:19
    根据hough变换(霍夫变换)检测直线,获取名片边界,通过OpenCV 角度检测 HoughLinesP,计算出偏移角度,进行校正。采用开源库ocr对文字进行识别
  • java图片文字自动识别

    千次阅读 2018-09-24 01:54:57
    下载该软件需要配置环境变量,通过环境变量在dos命令下进行相关图片文字解析操作,为了使程序更加简单,采用tess4j包去实现。 步骤一: 下载包(此处我采用后者):阿里云maven仓库 或者 创建maven项目在pom.xml中...
  • 使用Springboot构建的支持中英文图片文字识别网站,运行网站需要下载并安装tesseract-ocr-w64-setup-v5.0.0.20190623.exe安装包。
  • java实现阿里云图片文字识别

    千次阅读 2019-06-24 12:08:52
    整体的代码在这里就不贴出来了,阿里云图片文字识别api中有详细代码。 阿里云图片文字识别api中的代码是识别本地图片,如果是服务器或是ftp的可能需要做一些改动。 改动一: 阿里云api: 修改后: URL url ...
  • OCR 识别文字项目 该项目 可以进行两种方式进行身份证识别 1. 使用百度接口 1.1 application-dev.yml配置 ocr: # 使用baiduOcr 需要有Ocr服务器 使用百度需要相应的百度账号即可 useOcrType: baiduOcr # 需要OCR ...
  • 1.百度AI识别API ...2.登录创建应用 创建应用,获取 AppID API Key Secret Key 3.Java项目开发 pom.xml 加入sdk配置 ...-- 百度文字识别 --> <dependency> <groupId>com.baidu.aip<...
  • java ocr图片文字识别,使用谷歌 tesseract3.02 OCR引擎以及Leptonica库光学字符识别。使用Java包装程序tes4j和Java应用程序,内有英文库,如果需要其他tesseract3.02字体文件,可以访问...
  • JavaWeb使用文字识别上传图片内容,包含上传图片到服务器,并识别图片将识别结果返回到页面
  • 文件为压缩包,包括多个java识别图片文字的项目,国内网站上资料比较少,项目都整理出了测试类及说明,都包含着源代码及jar包、安装包、训练库。希望用得到的人少走弯路,资源都精心整理测试过,高分是必须的。 java...
  • 现在利用python来进行图片文字识别较为普遍,但是如果我们利用常用的家庭电脑来识别,需要的时间比较长,达到20~30s,但是如果我们采用javacv这个视觉处理库来 实现图片的识别和文字定位,在同样的电脑配置中...
  • java图片文字识别技术

    千次阅读 2016-10-22 13:26:56
    其实我觉得识别率不是很高,至少没有达到95%,而且图片稍微做点模糊处理就识别不了了,但是够我使用的了。 下载相关文件,主要有: (1)tesseract-ocr-setup-3.01-1.exe(需要安装,安装很简单,一直下一步就可以了...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 23,546
精华内容 9,418
关键字:

java实现图片文字识别功能

java 订阅