相对比较成熟的技术了,能识别图片中的简单文本或者表格,甚至更复杂的格式。
以下都是JAVA实现。
一 Tess4J
引入JAR包,下载字库,开撸
1. 引包
<dependency>
<groupId>net.sourceforge.tess4j</groupId>
<artifactId>tess4j</artifactId>
<version>4.4.1</version>
</dependency>
2. 下载字库
https://github.com/tesseract-ocr/tessdata
每个语言的字库包都在几十M左右,全部下载太慢,可以选中自己需要的字库单独下载
3. 设置环境变量
系统变量中增加 TESSDATA_PREFIX= 字库所在目录
path 中增加%TESSDATA_PREFIX%
4. 代码例子
import java.io.File;
import net.sourceforge.tess4j.ITesseract;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;
public class TesseractExample1 {
public static void main(String[] args) {
File imageFile = new File("D:\\Tess4J\\2222.png");
ITesseract instance = new Tesseract(); // JNA Interface Mapping
instance.setLanguage("chi_sim");
try {
String result = instance.doOCR(imageFile);
System.out.println(result);
} catch (TesseractException e) {
System.err.println(e.getMessage());
}
}
}
二 百度在线OCR
第一种方案解析图片中表格搞不定,市面上也有解决方案,但是有点麻烦。看了下,可以直接用百度的API,功能强大丰富,唯一的缺点就是收费。
每天有一定得免费次数,对于个人开发者或者小系统足够用了
功能丰富:
不多说,直接撸码
- 注册百度账号
https://login.bce.baidu.com - 登录进去,创建应用,获得AppID,API Key,Secret Key
- 官方帮助文档 https://cloud.baidu.com/doc/OCR/s/8jwvxzg8t
- 引入依赖
<dependency>
<groupId>com.baidu.aip</groupId>
<artifactId>java-sdk</artifactId>
<version>4.12.0</version>
</dependency>
- 代码实现
import java.util.HashMap;
import org.json.JSONObject;
import com.baidu.aip.ocr.AipOcr;
public class Sample {
// 设置APPID/AK/SK
public static final String APP_ID = "17925589";
public static final String API_KEY = "2kah8nUVqj58EtLrN1GqOUGL";
public static final String SECRET_KEY = "3ucaGScgtelzghBtdWfZVTZPD3Y99jfN";
public static void main(String[] args) {
// 初始化一个AipOcr
AipOcr client = new AipOcr(APP_ID, API_KEY, SECRET_KEY);
// 可选:设置网络连接参数
client.setConnectionTimeoutInMillis(2000);
client.setSocketTimeoutInMillis(60000);
sampleSyncRes(client);
}
//简单文本解析
public static void simpleWZ(AipOcr client) {
// 调用接口
String path = "D:\\Tess4J\\1575425834.png";
JSONObject res = client.basicGeneral(path, new HashMap<String, String>());
System.out.println(res.toString(2));
}
//同步方式解析包含表格的图片
public static void sample(AipOcr client) {
// 传入可选参数调用接口
HashMap<String, String> options = new HashMap<String, String>();
// 参数为本地图片路径
String image = "D:\\Tess4J\\2222.png";
JSONObject res = client.form(image, options);
System.out.println(res.toString(2));
}
//异步方式解析包含表格的图片,请求
public static void sampleSync(AipOcr client) {
// 传入可选参数调用接口
HashMap<String, String> options = new HashMap<String, String>();
// 参数为本地图片路径
String image = "D:\\Tess4J\\2222.png";
JSONObject res = client.tableRecognitionAsync(image, options);
System.out.println(res.toString(2));
}
//异步方式解析包含表格的图片,获取结果
public static void sampleSyncRes(AipOcr client) {
// 传入可选参数调用接口
HashMap<String, String> options = new HashMap<String, String>();
options.put("result_type", "json");
String requestId = "17925589_1236567";
// 表格识别结果
JSONObject res = client.tableResultGet(requestId, options);
System.out.println(res.toString(2));
}
}