Java中實現(xiàn)OCR識別讀取圖片中的文字
所需工具:
- IDEA
- Spire.OCR for Java - Java OCR組件,支持識別多種語言、字體,可讀取JPG、PNG、GIF、BMP 和 TIFF 等常用圖片中的文本信息。
產(chǎn)品包下載鏈接:下載 | Spire.OCR for Java
或從Maven倉庫導入:
<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)下載對應文件后,解壓縮至指定的文件路徑。
提取碼:nw77
Java OCR識別圖片文本的實現(xiàn)步驟
1. 在IDEA中新建一個項目并導入Spire.OCR.jar。
2. 將剛才下載解壓縮后的 “dependencies” 文件夾復制到IDEA項目目錄下。
3.確保導入以上所需依賴后,運行以下代碼實現(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)計機器學習(Adaboost、SVM),過去20年間在印刷體和掃描文檔上取得了不錯的效果。傳統(tǒng)的印刷體OCR解決方案整體流程如圖。
從輸入圖像到給出識別結(jié)果經(jīng)歷了圖像預處理、文字行提取和文字行識別三個階段。
圖像預處理
- 二值化:由于彩色圖像所含信息量過于巨大,在對圖像中印刷體字符進行識別處理前,需要對圖像進行二值化處理,使圖像只包含黑色的前景信息和白色的背景信息,提升識別處理的效率和精確度
- 圖像降噪:由于待識別圖像的品質(zhì)受限于輸入設(shè)備、環(huán)境、以及文檔的印刷質(zhì)量,在對圖像中印刷體字符進行識別處理前,需要根據(jù)噪聲的特征對待識別圖像進行去噪處理,提升識別處理的精確度
- 傾斜校正:由于掃描和拍攝過程涉及人工操作,輸入計算機的待識別圖像或多或少都會存在一些傾斜,在對圖像中印刷體字符進行識別處理前,就需要進行圖像方向檢測,并校正圖像方向。
文字檢測
文字檢測主要有兩條線,兩步法和一步法。
- 兩步法:faster-rcnn.
- 一步法:yolo。相比于兩步法,一步法速度更快,但是accuracy有損失。
文字檢測按照文字的角度分。
- 水平文字檢測:四個自由度,類似于物體檢測。水平文字檢測比較好的算法是CTPN。
- 傾斜文字檢測:文本框是不規(guī)則的四邊形,八個自由度。傾斜文字檢測個人比較喜歡的方法是CVPR的EAST和Seglink。
文本識別
在以前的OCR任務中,識別過程分為兩步:單字切割和分類任務。
現(xiàn)今基于深度學習的端到端OCR技術(shù)有兩大主流技術(shù):CRNN OCR和attention OCR。
其實這兩大方法主要區(qū)別在于最后的輸出層(翻譯層),即怎么將網(wǎng)絡學習到的序列特征信息轉(zhuǎn)化為最終的識別結(jié)果。
這兩大主流技術(shù)在其特征學習階段都采用了CNN+RNN的網(wǎng)絡結(jié)構(gòu),CRNN OCR在對齊時采取的方式是CTC算法,而attention OCR采取的方式則是attention機制。
網(wǎng)絡結(jié)構(gòu)包含三部分,從下到上依次為:
- 卷積層,使用CNN,作用是從輸入圖像中提取特征序列;
- 循環(huán)層,使用RNN,作用是預測從卷積層獲取的特征序列的標簽(真實值)分布;
- 轉(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)文章
restTemplate發(fā)送get與post請求并且?guī)?shù)問題
這篇文章主要介紹了restTemplate發(fā)送get與post請求并且?guī)?shù)問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-07-07Eclipse連接Mysql數(shù)據(jù)庫操作總結(jié)
這篇文章主要介紹了Eclipse連接Mysql數(shù)據(jù)庫操作總結(jié)的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-08-08Spring BeanFactory和FactoryBean區(qū)別解析
這篇文章主要介紹了Spring BeanFactory和FactoryBean區(qū)別解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-03-03springboot 設(shè)置server.port不生效的原因及解決
這篇文章主要介紹了springboot 設(shè)置server.port不生效的原因及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08Java基于堆結(jié)構(gòu)實現(xiàn)優(yōu)先隊列功能示例
這篇文章主要介紹了Java基于堆結(jié)構(gòu)實現(xiàn)優(yōu)先隊列功能,結(jié)合實例形式分析了java優(yōu)先隊列的簡單定義與使用方法,需要的朋友可以參考下2017-11-11IntelliJ?IDEA教程之clean或者install?Maven項目的操作方法
這篇文章主要介紹了IntelliJ?IDEA教程之clean或者install?Maven項目的操作方法,本文分步驟給大家介紹兩種方式講解如何調(diào)試出窗口,需要的朋友可以參考下2023-04-04