精华内容
下载资源
问答
  • java调用百度接口实现图片文字识别功能,详细说明如下 目录 一、下载百度sdk 二、新建SpringBoot项目,引入百度sdk 三、申请百度的AppId、API Key、Secret Key 四、获取百度图片识别自带的Java用例 五、使用...

    java调用百度接口实现图片文字识别功能,详细说明如下

    目录

    一、下载百度sdk

    二、新建SpringBoot项目,引入百度sdk

    三、申请百度的AppId、API Key、Secret Key

    四、获取百度图片识别自带的Java用例

    五、使用图片测试接口

    六、项目源码分享


    一、下载百度sdk

    1.1在浏览器输入网址http://ai.baidu.com/或者百度搜索‘百度ai’点击第一个。点击主页的开放能力,看到通用文字识别。如下图所示:

    1.2、点击技术文档,里面有SDK。

    1.3、可以看到在文字识别在的api文档有多个接口,你可以根据你的需求来选择对应的接口,这里选择java

    地址https://ai.baidu.com/ai-doc/OCR/Ikibizxql,页面截图

    1.5、在官方网站下载所需的jar包,下图所示,选择文字识别,然后下载右边的java SDK的jar包。

    sdk下载地址:https://ai.baidu.com/sdk#vis,不想找,直接点地址下载SDK。

    下载的Java sdk的文件名为:aip-java-sdk-4.15.4.zip

    解压后为:

    总共4个jar。

    二、新建SpringBoot项目,引入百度sdk

    新建springboot项目,这里就略过,比较简单,创建后,把百度的4个jar放在项目的lib目录下,如下图:

    这里引入百度jar,使用自定义引入本地jar方式引入,具体引入方式见pom.xml文件。

    pom.xml文件内容为:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    	<modelVersion>4.0.0</modelVersion>
    	<parent>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-parent</artifactId>
    		<version>2.4.3</version>
    		<relativePath/> <!-- lookup parent from repository -->
    	</parent>
    	<groupId>com.example</groupId>
    	<artifactId>demo</artifactId>
    	<version>0.0.1-SNAPSHOT</version>
    	<name>demo</name>
    	<description>Demo project for Spring Boot</description>
    	<properties>
    		<java.version>1.8</java.version>
    	</properties>
    	<dependencies>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter</artifactId>
    		</dependency>
    		<dependency>
    			<groupId>aip-java-sdk</groupId>
    			<artifactId>aip-java-sdk</artifactId>
    			<version>4.15.4</version>
    			<scope>system</scope>
    			<systemPath>${project.basedir}/lib/aip-java-sdk-4.15.4.jar</systemPath>
    		</dependency>
    		<dependency>
    			<groupId>json-20160810</groupId>
    			<artifactId>json-20160810</artifactId>
    			<version>20160810</version>
    			<scope>system</scope>
    			<systemPath>${project.basedir}/lib/json-20160810.jar</systemPath>
    		</dependency>
    		<dependency>
    			<groupId>slf4j-api</groupId>
    			<artifactId>slf4j-api</artifactId>
    			<version>1.7.25</version>
    			<scope>system</scope>
    			<systemPath>${project.basedir}/lib/slf4j-api-1.7.25.jar</systemPath>
    		</dependency>
    		<dependency>
    			<groupId>slf4j-simple</groupId>
    			<artifactId>slf4j-simple</artifactId>
    			<version>1.7.25</version>
    			<scope>system</scope>
    			<systemPath>${project.basedir}/lib/slf4j-simple-1.7.25.jar</systemPath>
    		</dependency>
    
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-test</artifactId>
    			<scope>test</scope>
    		</dependency>
    	</dependencies>
    
    	<build>
    		<plugins>
    			<plugin>
    				<groupId>org.springframework.boot</groupId>
    				<artifactId>spring-boot-maven-plugin</artifactId>
    			</plugin>
    		</plugins>
    	</build>
    
    </project>
    

    三、申请百度的AppId、API Key、Secret Key

    登录https://ai.baidu.com/后,点控制台。

    这时就生成百度接口的AppId、API Key、Secret Key了。

    四、获取百度图片识别自带的Java用例

    图片识别Java用例地址为:https://ai.baidu.com/ai-doc/OCR/1k3h7y3db

    Java用例具体代码如下:

    package com.baidu.ai.aip;
    
    import com.baidu.ai.aip.utils.Base64Util;
    import com.baidu.ai.aip.utils.FileUtil;
    import com.baidu.ai.aip.utils.HttpUtil;
    
    import java.net.URLEncoder;
    
    /**
    * 通用文字识别(高精度版)
    */
    public class AccurateBasic {
    
        /**
        * 重要提示代码中所需工具类
        * FileUtil,Base64Util,HttpUtil,GsonUtils请从
        * https://ai.baidu.com/file/658A35ABAB2D404FBF903F64D47C1F72
        * https://ai.baidu.com/file/C8D81F3301E24D2892968F09AE1AD6E2
        * https://ai.baidu.com/file/544D677F5D4E4F17B4122FBD60DB82B3
        * https://ai.baidu.com/file/470B3ACCA3FE43788B5A963BF0B625F3
        * 下载
        */
        public static String accurateBasic() {
            // 请求url
            String url = "https://aip.baidubce.com/rest/2.0/ocr/v1/accurate_basic";
            try {
                // 本地文件路径
                String filePath = "[本地文件路径]";
                byte[] imgData = FileUtil.readFileByBytes(filePath);
                String imgStr = Base64Util.encode(imgData);
                String imgParam = URLEncoder.encode(imgStr, "UTF-8");
    
                String param = "image=" + imgParam;
    
                // 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
                String accessToken = "[调用鉴权接口获取的token]";
    
                String result = HttpUtil.post(url, accessToken, param);
                System.out.println(result);
                return result;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return null;
        }
    
        public static void main(String[] args) {
            AccurateBasic.accurateBasic();
        }
    }

    代码用例需要accessToken,这个值是通过API Key、Secret Key获取的,获取代码如下:

    
    import org.json.JSONObject;
    
    import java.io.BufferedReader;
    import java.io.InputStreamReader;
    import java.net.HttpURLConnection;
    import java.net.URL;
    import java.util.List;
    import java.util.Map;
    
    /**
     * 获取token类
     */
    public class AuthService {
        public static void main(String[] args){
            String token=getAuth();
            System.out.println(token);
        }
        /**
         * 获取权限token
         * @return 返回示例:
         * {
         * "access_token": "24.460da4889caad24cccdb1fea17221975.2592000.1491995545.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.460da4889caad24cccdb1fea17221975.2592000.1491995545.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("GET");
                connection.connect();
                // 获取所有响应头字段
                Map<String, List<String>> map = connection.getHeaderFields();
                // 遍历所有的响应头字段
                for (String key : map.keySet()) {
                    System.err.println(key + "--->" + map.get(key));
                }
                // 定义 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 = new JSONObject(result);
                String access_token = jsonObject.getString("access_token");
                return access_token;
            } catch (Exception e) {
                System.err.printf("获取token失败!");
                e.printStackTrace(System.err);
            }
            return null;
        }
    
    }

    五、使用图片测试接口

    下面拿2张图,识别图片中的文字测试举例:

    这张图,识别出“hzfwjgs cn alibaba. com”,如下字符串:

    这张图,识别出“分南宁市第一中学”,如下字符串:

    六、项目源码分享

    源码是IntelliJ IDEA完整项目,导入到idea后,按如下步骤运行:
    1.修改AuthService.java中的API Key和Secret Key
    2.运行GeneralBasic.java中main()方法

    完整项目地址:http://www.zrscsoft.com/sitepic/12130.html

     

     

     

    展开全文
  • 基于百度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_direction false string true、false 是否检测图像旋转角度,默认不检测,即:false。朝向是指输入图像是正常方向、逆时针旋转90/180/270度。可选值包括:
    - true:检测旋转角度并矫正识别;
    - false:不检测旋转角度,针对摆放情况不可控制的情况建议本参数置为true。
    id_card_side true string front、back front:身份证含照片的一面;back:身份证带国徽的一面
    image true string   图像数据,base64编码后进行urlencode,要求base64编码和urlencode后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式
    detect_risk false string true、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         

     

            如果有遇到不懂或者有问题时,可以扫描下方二维码,欢迎进群交流与分享,希望能够跟大家交流学习!

                                                            

     

    展开全文
  • 如何在java项目中利用ocr实现一个图片文字识别功能发布时间:2020-12-02 15:11:14来源:亿速云阅读:101作者:Leah这期内容当中小编将会给大家带来有关如何在java项目中利用ocr实现一个图片文字识别功能,文章内容...

    如何在java项目中利用ocr实现一个图片文字识别功能

    发布时间:2020-12-02 15:11:14

    来源:亿速云

    阅读:101

    作者:Leah

    这期内容当中小编将会给大家带来有关如何在java项目中利用ocr实现一个图片文字识别功能,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

    最近在开发的时候需要识别图片中的一些文字,网上找了相关资料之后,发现google有一个离线的工具,以下为java使用的demo

    在此之前,使用这个工具需要在本地安装OCR工具:

    c3b6160bd22de150ff959c9d6359912d.png

    下面一个是一定要安装的离线包,建议默认安装

    上面一个是中文的语言包,如果网络可以FQ的童鞋可以在安装的时候就选择语言包在线安装,有多种语言可供选择,默认只有英文的

    exe安装好之后,把上面一个文件拷到安装目录下tessdata文件夹下

    如C:\Program Files (x86)\Tesseract-OCR\tessdata下

    然后下面两个是可选包,如果图片不做临时文件处理的话,可以不需要带的

    9744d2cf877abcdae854d69512ea3b34.png

    首先是一个临时文件生成用的类以防源文件损坏,参考某位博友的例子@Gunner

    package org.ink.image.textrz;

    import java.awt.image.BufferedImage;

    import java.io.File;

    import java.io.IOException;

    import java.util.Iterator;

    import java.util.Locale;

    import javax.imageio.IIOImage;

    import javax.imageio.ImageIO;

    import javax.imageio.ImageReader;

    import javax.imageio.ImageWriteParam;

    import javax.imageio.ImageWriter;

    import javax.imageio.metadata.IIOMetadata;

    import javax.imageio.stream.ImageInputStream;

    import javax.imageio.stream.ImageOutputStream;

    import com.sun.media.imageio.plugins.tiff.TIFFImageWriteParam;

    public class ImageIOHelper {

    private Locale locale=Locale.CHINESE;

    /**

    * user set locale Construct

    * @param locale

    */

    public ImageIOHelper(Locale locale){

    this.locale=locale;

    }

    /**

    * default construct using default locale Locale.CHINESE

    */

    public ImageIOHelper(){

    }

    /**

    * create tempFile of Image in order to prevent damaging original file

    * @param imageFile

    * @param imageFormat like png,jps .etc

    * @return TempFile of Image

    * @throws IOException

    */

    public File createImage(File imageFile, String imageFormat) throws IOException {

    Iterator readers = ImageIO.getImageReadersByFormatName(imageFormat);

    ImageReader reader = readers.next();

    ImageInputStream iis = ImageIO.createImageInputStream(imageFile);

    reader.setInput(iis);

    IIOMetadata streamMetadata = reader.getStreamMetadata();

    TIFFImageWriteParam tiffWriteParam = new TIFFImageWriteParam(Locale.CHINESE);

    tiffWriteParam.setCompressionMode(ImageWriteParam.MODE_DISABLED);

    Iterator writers = ImageIO.getImageWritersByFormatName("tiff");

    ImageWriter writer = writers.next();

    BufferedImage bi = reader.read(0);

    IIOImage image = new IIOImage(bi,null,reader.getImageMetadata(0));

    File tempFile = tempImageFile(imageFile);

    ImageOutputStream ios = ImageIO.createImageOutputStream(tempFile);

    writer.setOutput(ios);

    writer.write(streamMetadata, image, tiffWriteParam);

    ios.close();

    iis.close();

    writer.dispose();

    reader.dispose();

    return tempFile;

    }

    /**

    * add suffix to tempfile

    * @param imageFile

    * @return

    * @throws IOException

    */

    private File tempImageFile(File imageFile) throws IOException {

    String path = imageFile.getPath();

    StringBuffer strB = new StringBuffer(path);

    strB.insert(path.lastIndexOf('.'),"_text_recognize_temp");

    String s=strB.toString().replaceFirst("(?<=//.)(//w+)$", "tif");

    Runtime.getRuntime().exec("attrib "+"\""+s+"\""+" +H"); //设置文件隐藏

    return new File(strB.toString());

    }

    }

    下面是真正识别的内容:

    package org.ink.image.textrz;

    import java.io.BufferedReader;

    import java.io.File;

    import java.io.FileInputStream;

    import java.io.IOException;

    import java.io.InputStreamReader;

    import java.util.ArrayList;

    import java.util.List;

    import java.util.Locale;

    import org.jdesktop.swingx.util.OS;

    /**

    * TEXT Recognize Utils

    * @author ink.Flower

    *

    */

    public class OCRUtil {

    private final String LANG_OPTION = "-l"; //英文字母小写l,并非数字1

    private final String EOL = System.getProperty("line.separator");

    private String tessPath = "C://Program Files (x86)//Tesseract-OCR";//ocr默认安装路径

    private String transname="chi_sim";//默认中文语言包,识别中文

    /**

    * Construct method of OCR ,set Tesseract-OCR install path

    * @param tessPath Tesseract-OCR install path

    * @param transFileName traningFile name like eng.traineddata

    */

    public OCRUtil(String tessPath,String transFileName){

    this.tessPath=tessPath;

    this.transname=transFileName;

    }

    /**

    * Construct method of OCR,default path is "C://Program Files (x86)//Tesseract-OCR"

    */

    public OCRUtil(){ }

    public String getTessPath() {

    return tessPath;

    }

    public void setTessPath(String tessPath) {

    this.tessPath = tessPath;

    }

    public String getTransname() {

    return transname;

    }

    public void setTransname(String transname) {

    this.transname = transname;

    }

    public String getLANG_OPTION() {

    return LANG_OPTION;

    }

    public String getEOL() {

    return EOL;

    }

    /**

    * recognize text in image

    * @param imageFile

    * @param imageFormat

    * @return text recognized in image

    * @throws Exception

    */

    public String recognizeText(File imageFile,String imageFormat)throws Exception{

    File tempImage = new ImageIOHelper().createImage(imageFile,imageFormat);

    return ocrImages(tempImage, imageFile);

    }

    /**

    * recognize text in image

    * @param imageFile

    * @param imageFormat

    * @param locale

    * @return text recognized in image

    * @throws Exception

    */

    public String recognizeText(File imageFile,String imageFormat,Locale locale)throws Exception{

    File tempImage = new ImageIOHelper(locale).createImage(imageFile,imageFormat);

    return ocrImages(tempImage, imageFile);

    }

    /**

    *

    * @param tempImage

    * @param imageFile

    * @return

    * @throws IOException

    * @throws InterruptedException

    */

    private String ocrImages(File tempImage,File imageFile) throws IOException, InterruptedException{

    File outputFile = new File(imageFile.getParentFile(),"output");

    Runtime.getRuntime().exec("attrib "+"\""+outputFile.getAbsolutePath()+"\""+" +H"); //设置文件隐藏

    StringBuffer strB = new StringBuffer();

    List cmd = new ArrayList();

    if(OS.isWindowsXP()){

    cmd.add(tessPath+"//tesseract");

    }else if(OS.isLinux()){

    cmd.add("tesseract");

    }else{

    cmd.add(tessPath+"//tesseract");

    }

    cmd.add("");

    cmd.add(outputFile.getName());

    cmd.add(LANG_OPTION);

    cmd.add(transname);

    ProcessBuilder pb = new ProcessBuilder();

    pb.directory(imageFile.getParentFile());

    cmd.set(1, tempImage.getName());

    pb.command(cmd);

    pb.redirectErrorStream(true);

    Process process = pb.start();

    int w = process.waitFor();

    tempImage.delete();//删除临时正在工作文件

    if(w==0){

    BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(outputFile.getAbsolutePath()+".txt"),"UTF-8"));

    String str;

    while((str = in.readLine())!=null){

    strB.append(str).append(EOL);

    }

    in.close();

    }else{

    String msg;

    switch(w){

    case 1:

    msg = "Errors accessing files.There may be spaces in your image's filename.";

    break;

    case 29:

    msg = "Cannot recongnize the image or its selected region.";

    break;

    case 31:

    msg = "Unsupported image format.";

    break;

    default:

    msg = "Errors occurred.";

    }

    tempImage.delete();

    throw new RuntimeException(msg);

    }

    new File(outputFile.getAbsolutePath()+".txt").delete();

    return strB.toString();

    }

    }

    上述就是小编为大家分享的如何在java项目中利用ocr实现一个图片文字识别功能了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注亿速云行业资讯频道。

    展开全文
  • ...   -const APP_ID = '请填写你的appid';... -const API_KEY = '请填写你的API_KEY'...第三步 然后就直接运行demo 的文件 General.java中的main()函数就可以了   返回的数据是   OK,识别完成  

     

    第一步可定要获取百度的三个东西 要到百度AI网站(http://ai.baidu.com/)去注册 然后获得 

     

     -const APP_ID = '请填写你的appid';
    
      -const API_KEY = '请填写你的API_KEY';
    
      -const SECRET_KEY = '请填写你的SECRET_KEY';

     

    第二步下载SDK  

    https://github.com/jankinsun/New/tree/master/OCR/character_recognition

    或者使用官方的 http://ai.baidu.com/sdk 下载

    第三步 然后就直接运行demo 的文件 General.java中的main()函数就可以了

     

    返回的数据是

     

    OK,识别完成

     

    展开全文
  • java_baidu_ocrJava调用百度OCR文字识别API实现图片文字识别软件这是一款小巧方便,强大的文字识别软件,由Java编写,配上了窗口界面调用了百度ocr文字识别API 识别精度高。更新日志新的改变 OcrViewer 2.0 更新于 ...
  • 有个想法就是想把图片上不可编辑的的表格给抓取出来,生成Excel,发到用户绑定的邮箱,也不是什么新技术了,百度ai以及其他各ai平台均有文字识别功能,咱不会写这算法,调用也行,我的步骤是在自己的公众号接入这...
  • 简单聊一下:第一次接触百度AI提供的这个平台,在里面简单看了一遍,很喜欢这个平台,提供了许多实用的功能,我们在此用到的就是其中的文字识别这个功能,他使用方式很简单,基本http调用就可实现, 基于文字识别...
  • java图片文字自动识别

    千次阅读 2018-09-24 01:54:57
    下载该软件需要配置环境变量,通过环境变量在dos命令下进行相关图片文字解析操作,为了使程序更加简单,采用tess4j包去实现。 步骤一: 下载包(此处我采用后者):阿里云maven仓库 或者 创建maven项目在pom.xml中...
  • 实现功能图片中的字符进行识别,该项目中只做了简单的数字识别,允许有少量的干扰线,并且图片中的数字无缩放、变形处理。项目源码中包含示例图片实现原理根据要识别图片字符,制作特性模版,程序根据模版逐行逐...
  • 文件为压缩包,包括多个java识别图片文字的项目,国内网站上资料比较少,项目都整理出了测试类及说明,都包含着源代码及jar包、安装包、训练库。希望用得到的人少走弯路,资源都精心整理测试过,高分是必须的。 java...
  • 本文以身份证图片的识别为例,借用百度智能云的文字识别接口在java项目中增添身份证正反面图片的身份信息的功能(其他证件照片的识别与此类似,参考相关文档也能轻松搞定),如有疑问,欢迎评论留言。 ...
  • 转眼已是凌晨两点,还好通过java根据百度提供的OCR接口,实现了一个有趣的小应用:一键识别图片文字 经过一个小时的反复测试,没想到识别确实很高,而且,居然还可以识别稍微复杂的验证码 比如: 主要为了...
  • 产品也会通过各种手段提高应用在关键节点为的安全性,最基础的验证码、图片文字识别、简单算术计算、滑动板块、人脸识别等等。这些功能都有一样的目的,防止外来攻击和加强安全验证。今天给大家来个小实例,用java...
  • 产品也会通过各种手段提高应用在关键节点为的安全性,最基础的验证码、图片文字识别、简单算术计算、滑动板块、人脸识别等等。这些功能都有一样的目的,防止外来攻击和加强安全验证。今天给大家来个小实例,用java...
  • 产品也会通过各种手段提高应用在关键节点为的安全性,最基础的验证码、图片文字识别、简单算术计算、滑动板块、人脸识别等等。这些功能都有一样的目的,防止外来攻击和加强安全验证。今天给大家来个小实例,用java...
  • java小程序通过jacob包调用com组件来实现java调用office的MODI功能识别图片中的文字
  • 需求说明, 需要处理一个pdf文件, 将ocr识别出来的文字, 添加到word中, 将图片作为word背景图片, 也就实现了pdf转word功能. import java.awt.AlphaComposite; import java.awt.Graphics2D; import java.awt.image....
  • OCR (Optical Character Recognition,光学字符识别)...现在有很多软件都支持这个功能,比如钉钉就支持扫描图片后直接转成文字。在OCR识别领域,有一个开源的项目——Tesseract,Tesseract是一個光学字符识别引擎。T...
  • 一、项目背景基于图片文字识别的需求,在系统中实现功能。二、实现思路前台上传需要识别的图片,后台接收到图片进行识别,将识别结果(文字字符串)返回给前台,本文着重介绍识别部分的简单实现,上传功能不做介绍。...
  • 基于图片文字识别的需求,在系统中实现功能。 二、实现思路 前台上传需要识别的图片,后台接收到图片进行识别,将识别结果(文字字符串)返回给前台,本文着重介绍识别部分的简单实现,上传功能不做介绍。 三...
  • Class3 文字识别项目讲解及使用说明 学习目标: 身份证识别系统web端演示 身份证识别系统实现的逻辑 视觉智能开放平台的SDK使用讲解 学习内容: 3.1 身份证识别系统web端演示 3.2 身份证识别系统实现的逻辑 ...
  • 图片识别OCR ---待学习

    2020-09-22 15:11:01
    暂时未学习,因工作需要,需要批量识别图片文字等信息,首先找的是各个软件,发现都要收费(包月),后来发现天若,也要收费(买断制),发现其中需要自己申请接口(百度,阿里,腾讯等)在想,既然有接口了,那么就可以用java代码...
  • 参考了目前很多垃圾分类小程序,其实大家的功能都大同小异,其中最关键的点无非就是帮助用户快速查找垃圾属于具体的分类,目前实现了如下几个功能: 1.文字搜索:根据文本搜索垃圾分类 2.拍照识别:根据图片识别出...
  • 咱们接着上一篇《从零实现一款12306刷票软件1.2》继续介绍。二、登录与拉取图片验证码接口我的登录页面效果如下:12306的图片验证码一般由八...如果你要做验证码自动识别功能,可以尝试着下载大部分图片,然后做统计...
  • java小程序通过jacob包调用com组件来实现java调用office的MODI功能识别图片中的文字
  • Tess4j+中文识别+使用介绍文档..下载后 是一个Java工程,使用的开发工具为IDEA,Eclips开发者可将src目录下Java 文件进行拷贝即可,lib依赖相应导入,点击已实现功能的Main.java 类直接运行即可实现图片文字识别 ....
  • java开源包1

    千次下载 热门讨论 2013-06-28 09:14:34
    jSIP这个Java包目标是用Java实现SIP(SIP:Session Initiation Protocol)协议及SIP协议的其它扩展部 分。 Java表达式语法解析库 parboiled parboiled 是一个纯Java库提供了一种轻量级,易于使用,功能强大和优雅的PEG...

空空如也

空空如也

1 2 3 4 5
收藏数 82
精华内容 32
关键字:

java实现图片文字识别功能

java 订阅