Java中實(shí)現(xiàn)OCR識(shí)別讀取圖片中的文字
所需工具:
- IDEA
- Spire.OCR for Java - Java OCR組件,支持識(shí)別多種語言、字體,可讀取JPG、PNG、GIF、BMP 和 TIFF 等常用圖片中的文本信息。
產(chǎn)品包下載鏈接:下載 | Spire.OCR for Java
或從Maven倉庫導(dǎo)入:
<repositories>
<repository>
<id>com.e-iceblue</id>
<name>e-iceblue</name>
<url>https://repo.e-iceblue.cn/repository/maven-public/</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>e-iceblue</groupId>
<artifactId>spire.ocr</artifactId>
<version>1.9.0</version>
</dependency>
</dependencies>- 其余依賴文件。按操作系統(tǒng)下載對(duì)應(yīng)文件后,解壓縮至指定的文件路徑。
提取碼:nw77
Java OCR識(shí)別圖片文本的實(shí)現(xiàn)步驟
1. 在IDEA中新建一個(gè)項(xiàng)目并導(dǎo)入Spire.OCR.jar。

2. 將剛才下載解壓縮后的 “dependencies” 文件夾復(fù)制到IDEA項(xiàng)目目錄下。

3.確保導(dǎo)入以上所需依賴后,運(yùn)行以下代碼實(shí)現(xiàn)掃描讀取圖片中的文本。
import com.spire.ocr.OcrScanner;
import java.io.*;
public class ReadImage {
public static void main(String[] args) throws Exception {
//指定依賴文件的路徑
String dependencies = "F:\\dependencies\\";
//指定要需要掃描的圖片的路徑
String imageFile = "圖片.png";
//指定輸出文件的路徑
String outputFile = "讀取圖片.txt";
//創(chuàng)建OcrScanner對(duì)象,并設(shè)置其依賴文件路徑
OcrScanner scanner = new OcrScanner();
scanner.setDependencies(dependencies);
//掃描指定的圖像文件
scanner.scan(imageFile);
//獲取掃描的文本內(nèi)容
String scannedText = scanner.getText().toString();
//創(chuàng)建輸出文件對(duì)象
File output = new File(outputFile);
//如果輸出文件已經(jīng)存在,則將其刪除
if (output.exists()) {
output.delete();
}
//創(chuàng)建BufferedWriter對(duì)象來將掃描的文本內(nèi)容寫入輸出文件
BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile));
writer.write(scannedText);
writer.close();
}
}示例圖片:

OCR圖片掃描結(jié)果:

OCR識(shí)別流程
概括
傳統(tǒng)的OCR基于圖像處理(二值化、連通域分析、投影分析等)和統(tǒng)計(jì)機(jī)器學(xué)習(xí)(Adaboost、SVM),過去20年間在印刷體和掃描文檔上取得了不錯(cuò)的效果。傳統(tǒng)的印刷體OCR解決方案整體流程如圖。

從輸入圖像到給出識(shí)別結(jié)果經(jīng)歷了圖像預(yù)處理、文字行提取和文字行識(shí)別三個(gè)階段。
圖像預(yù)處理
- 二值化:由于彩色圖像所含信息量過于巨大,在對(duì)圖像中印刷體字符進(jìn)行識(shí)別處理前,需要對(duì)圖像進(jìn)行二值化處理,使圖像只包含黑色的前景信息和白色的背景信息,提升識(shí)別處理的效率和精確度
- 圖像降噪:由于待識(shí)別圖像的品質(zhì)受限于輸入設(shè)備、環(huán)境、以及文檔的印刷質(zhì)量,在對(duì)圖像中印刷體字符進(jìn)行識(shí)別處理前,需要根據(jù)噪聲的特征對(duì)待識(shí)別圖像進(jìn)行去噪處理,提升識(shí)別處理的精確度
- 傾斜校正:由于掃描和拍攝過程涉及人工操作,輸入計(jì)算機(jī)的待識(shí)別圖像或多或少都會(huì)存在一些傾斜,在對(duì)圖像中印刷體字符進(jìn)行識(shí)別處理前,就需要進(jìn)行圖像方向檢測,并校正圖像方向。

文字檢測
文字檢測主要有兩條線,兩步法和一步法。
- 兩步法:faster-rcnn.
- 一步法:yolo。相比于兩步法,一步法速度更快,但是accuracy有損失。
文字檢測按照文字的角度分。
- 水平文字檢測:四個(gè)自由度,類似于物體檢測。水平文字檢測比較好的算法是CTPN。
- 傾斜文字檢測:文本框是不規(guī)則的四邊形,八個(gè)自由度。傾斜文字檢測個(gè)人比較喜歡的方法是CVPR的EAST和Seglink。

文本識(shí)別
在以前的OCR任務(wù)中,識(shí)別過程分為兩步:單字切割和分類任務(wù)。
現(xiàn)今基于深度學(xué)習(xí)的端到端OCR技術(shù)有兩大主流技術(shù):CRNN OCR和attention OCR。
其實(shí)這兩大方法主要區(qū)別在于最后的輸出層(翻譯層),即怎么將網(wǎng)絡(luò)學(xué)習(xí)到的序列特征信息轉(zhuǎn)化為最終的識(shí)別結(jié)果。
這兩大主流技術(shù)在其特征學(xué)習(xí)階段都采用了CNN+RNN的網(wǎng)絡(luò)結(jié)構(gòu),CRNN OCR在對(duì)齊時(shí)采取的方式是CTC算法,而attention OCR采取的方式則是attention機(jī)制。

網(wǎng)絡(luò)結(jié)構(gòu)包含三部分,從下到上依次為:
- 卷積層,使用CNN,作用是從輸入圖像中提取特征序列;
- 循環(huán)層,使用RNN,作用是預(yù)測從卷積層獲取的特征序列的標(biāo)簽(真實(shí)值)分布;
- 轉(zhuǎn)錄層,使用CTC,作用是把從循環(huán)層獲取的標(biāo)簽分布通過去重整合等操作轉(zhuǎn)換成最終的識(shí)別結(jié)果;

到此這篇關(guān)于Java中實(shí)現(xiàn)OCR識(shí)別讀取圖片中的文字的文章就介紹到這了,更多相關(guān)Java OCR識(shí)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- java實(shí)現(xiàn)圖片文字識(shí)別ocr
- Java使用Tesseract-Ocr識(shí)別數(shù)字
- Java使用OCR技術(shù)識(shí)別驗(yàn)證碼實(shí)現(xiàn)自動(dòng)化登陸方法
- Java使用Tessdata做OCR圖片文字識(shí)別的詳細(xì)思路
- java實(shí)現(xiàn)騰訊ocr圖片識(shí)別接口調(diào)用
- 不到十行實(shí)現(xiàn)javaCV圖片OCR文字識(shí)別
- 用Java實(shí)現(xiàn)OCR功能揭秘
- java中實(shí)現(xiàn)OCR文字提取的幾個(gè)常用工具(Tesseract、PaddleOCR及RapidOCR)
相關(guān)文章
SpringBoot實(shí)現(xiàn)網(wǎng)絡(luò)限速的詳細(xì)步驟
本文詳細(xì)介紹了網(wǎng)絡(luò)限速的重要性及常見限速策略,如固定窗口計(jì)數(shù)器、滑動(dòng)窗口計(jì)數(shù)器、令牌桶算法和漏桶算法,并重點(diǎn)講解了如何在SpringBoot中使用AOP和令牌桶算法實(shí)現(xiàn)網(wǎng)絡(luò)限速,通過自定義注解、面向切面編程和測試驗(yàn)證等步驟,需要的朋友可以參考下2026-04-04
SpringMVC高級(jí)開發(fā)功能實(shí)現(xiàn)過程解析
這篇文章主要介紹了SpringMVC高級(jí)開發(fā)功能實(shí)現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
MyBatis-Plus聯(lián)表查詢(Mybatis-Plus-Join)的功能實(shí)現(xiàn)
mybatis-plus作為mybatis的增強(qiáng)工具,簡化了開發(fā)中的數(shù)據(jù)庫操作,這篇文章主要介紹了MyBatis-Plus聯(lián)表查詢(Mybatis-Plus-Join),需要的朋友可以參考下2022-08-08
Springboot詳解如何實(shí)現(xiàn)SQL注入過濾器過程
這篇文章主要介紹了基于springboot實(shí)現(xiàn)SQL注入過濾器,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2022-06-06

