Java中實現(xiàn)OCR識別讀取圖片中的文字
所需工具:
- IDEA
- Spire.OCR for Java - Java OCR組件,支持識別多種語言、字體,可讀取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)下載對應(yīng)文件后,解壓縮至指定的文件路徑。
提取碼:nw77
Java OCR識別圖片文本的實現(xiàn)步驟
1. 在IDEA中新建一個項目并導(dǎo)入Spire.OCR.jar。
2. 將剛才下載解壓縮后的 “dependencies” 文件夾復(fù)制到IDEA項目目錄下。
3.確保導(dǎo)入以上所需依賴后,運行以下代碼實現(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對象,并設(shè)置其依賴文件路徑 OcrScanner scanner = new OcrScanner(); scanner.setDependencies(dependencies); //掃描指定的圖像文件 scanner.scan(imageFile); //獲取掃描的文本內(nèi)容 String scannedText = scanner.getText().toString(); //創(chuàng)建輸出文件對象 File output = new File(outputFile); //如果輸出文件已經(jīng)存在,則將其刪除 if (output.exists()) { output.delete(); } //創(chuàng)建BufferedWriter對象來將掃描的文本內(nèi)容寫入輸出文件 BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile)); writer.write(scannedText); writer.close(); } }
示例圖片:
OCR圖片掃描結(jié)果:
OCR識別流程
概括
傳統(tǒng)的OCR基于圖像處理(二值化、連通域分析、投影分析等)和統(tǒng)計機器學(xué)習(Adaboost、SVM),過去20年間在印刷體和掃描文檔上取得了不錯的效果。傳統(tǒng)的印刷體OCR解決方案整體流程如圖。
從輸入圖像到給出識別結(jié)果經(jīng)歷了圖像預(yù)處理、文字行提取和文字行識別三個階段。
圖像預(yù)處理
- 二值化:由于彩色圖像所含信息量過于巨大,在對圖像中印刷體字符進行識別處理前,需要對圖像進行二值化處理,使圖像只包含黑色的前景信息和白色的背景信息,提升識別處理的效率和精確度
- 圖像降噪:由于待識別圖像的品質(zhì)受限于輸入設(shè)備、環(huán)境、以及文檔的印刷質(zhì)量,在對圖像中印刷體字符進行識別處理前,需要根據(jù)噪聲的特征對待識別圖像進行去噪處理,提升識別處理的精確度
- 傾斜校正:由于掃描和拍攝過程涉及人工操作,輸入計算機的待識別圖像或多或少都會存在一些傾斜,在對圖像中印刷體字符進行識別處理前,就需要進行圖像方向檢測,并校正圖像方向。
文字檢測
文字檢測主要有兩條線,兩步法和一步法。
- 兩步法:faster-rcnn.
- 一步法:yolo。相比于兩步法,一步法速度更快,但是accuracy有損失。
文字檢測按照文字的角度分。
- 水平文字檢測:四個自由度,類似于物體檢測。水平文字檢測比較好的算法是CTPN。
- 傾斜文字檢測:文本框是不規(guī)則的四邊形,八個自由度。傾斜文字檢測個人比較喜歡的方法是CVPR的EAST和Seglink。
文本識別
在以前的OCR任務(wù)中,識別過程分為兩步:單字切割和分類任務(wù)。
現(xiàn)今基于深度學(xué)習的端到端OCR技術(shù)有兩大主流技術(shù):CRNN OCR和attention OCR。
其實這兩大方法主要區(qū)別在于最后的輸出層(翻譯層),即怎么將網(wǎng)絡(luò)學(xué)習到的序列特征信息轉(zhuǎn)化為最終的識別結(jié)果。
這兩大主流技術(shù)在其特征學(xué)習階段都采用了CNN+RNN的網(wǎng)絡(luò)結(jié)構(gòu),CRNN OCR在對齊時采取的方式是CTC算法,而attention OCR采取的方式則是attention機制。
網(wǎng)絡(luò)結(jié)構(gòu)包含三部分,從下到上依次為:
- 卷積層,使用CNN,作用是從輸入圖像中提取特征序列;
- 循環(huán)層,使用RNN,作用是預(yù)測從卷積層獲取的特征序列的標簽(真實值)分布;
- 轉(zhuǎn)錄層,使用CTC,作用是把從循環(huán)層獲取的標簽分布通過去重整合等操作轉(zhuǎn)換成最終的識別結(jié)果;
到此這篇關(guān)于Java中實現(xiàn)OCR識別讀取圖片中的文字的文章就介紹到這了,更多相關(guān)Java OCR識別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
java 8 lambda表達式list操作分組、過濾、求和、最值、排序、去重代碼詳解
java8的lambda表達式提供了一些方便list操作的方法,主要涵蓋分組、過濾、求和、最值、排序、去重,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習或工作具有一定的參考借鑒價值,需要的朋友參考下吧2024-01-01Spring?Boot中@Autowired注入為空的原因以及解決方法
最近在開發(fā)中遇到了使用@Autowired注解自動裝配時會報空指針,發(fā)現(xiàn)對象并沒有裝配進來,下面這篇文章主要給大家介紹了關(guān)于Spring?Boot中@Autowired注入為空的原因以及解決方法,需要的朋友可以參考下2024-01-01struts1登錄示例代碼_動力節(jié)點Java學(xué)院整理
這篇文章主要介紹了struts1登錄示例代碼,需要的朋友可以參考下2017-08-08mybatis Mapper的xml文件中resultType值的使用說明
這篇文章主要介紹了mybatis Mapper的xml文件中resultType值的使用說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10Java實現(xiàn)終止線程池中正在運行的定時任務(wù)
本篇文章給大家分享了JAVA中實現(xiàn)終止線程池中正在運行的定時任務(wù)的具體步驟和方法,有需要的朋友跟著學(xué)習下。2018-05-05