天天看點

java ocr引擎_java 實作 OCR 圖檔文字識别

OCR圖像識别技術的JAVA實作

最近有個需求需要用圖像識别,學習記錄一下。

目前網絡上的開源的圖像識别技術有很多,例如 OCRE(OCR Easy)、Clara OCR、OCRAD、TESSERACT-OCR 等。

今天本blog将記錄下tesseract-ocr的JAVA實作,便于以後查閱使用。

開源 ocr 引擎

我們本次直接以排名第一的 TESSERACT-OCR 作為例子。

TESSERACT-OCR 安裝

本次測試的環境為 windows10,是以下載下傳 windows 相關的安裝包。

windows 下載下傳位址

安裝

安裝完畢後,目錄下:

直接輕按兩下 exe,然後安裝。

java ocr引擎_java 實作 OCR 圖檔文字識别

指定安裝特定語言包

這裡我們安裝一下中文的語言訓練包。

【chinese】相關的四個,簡體,繁體(分别對應的預設和垂直。)

比較悲催的是全部下載下傳失敗。

安裝路徑

使用預設路徑:

C:\Program Files (x86)\Tesseract-OCR

結果

λ ls

ambiguous_words.exe* libcairo-2.dll* libgomp-1.dll* libpangocairo-1.0-0.dll* libwebp-7.dll* tesseract.exe*

classifier_tester.exe* libexpat-1.dll* libharfbuzz-0.dll* libpangoft2-1.0-0.dll* libwinpthread-1.dll* tesseract-uninstall.exe*

cntraining.exe* libffi-6.dll* libintl-8.dll* libpangowin32-1.0-0.dll* lstmeval.exe* text2image.exe*

combine_lang_model.exe* libfontconfig-1.dll* libjbig-2.dll* libpcre-1.dll* lstmtraining.exe* unicharset_extractor.exe*

combine_tessdata.exe* libfreetype-6.dll* libjpeg-8.dll* libpixman-1-0.dll* merge_unicharsets.exe* wordlist2dawg.exe*

dawg2wordlist.exe* libgcc_s_seh-1.dll* liblept-5.dll* libpng16-16.dll* mftraining.exe* zlib1.dll*

doc/ libgif-7.dll* liblzma-5.dll* libstdc++-6.dll* set_unicharset_properties.exe*

iconv.dll* libglib-2.0-0.dll* libopenjp2.dll* libtesseract-4.dll* shapeclustering.exe*

libbz2-1.dll* libgobject-2.0-0.dll* libpango-1.0-0.dll* libtiff-5.dll* tessdata/

驗證版本

>tesseract --version

tesseract v4.0.0.20181030

leptonica-1.76.0

libgif 5.1.4 : libjpeg 8d (libjpeg-turbo 1.5.3) : libpng 1.6.34 : libtiff 4.0.9 : zlib 1.2.11 : libwebp 0.6.1 : libopenjp2 2.2.0

轉換測試

tesseract D:\code\ocr\src\main\resources\hello.png 1

報錯

C:\Users\binbin.hou>tesseract D:\code\ocr\src\main\resources\hello.png 1

Error opening data file C:\Program Files (x86)\Tesseract-OCR/eng.traineddata

Please make sure the TESSDATA_PREFIX environment variable is set to your "tessdata" directory.

Failed loading language 'eng'

Tesseract couldn't load any languages!

Could not initialize tesseract.

配置環境變量

簡單就是說把tessdata拷貝到exe的所在目錄,或者設定 TESSDATA_PREFIX 環境變量

(1)設定系統變量 TESSDATA_PREFIX 值為安裝路徑對應的 data 路徑 C:\Program Files (x86)\Tesseract-OCR\tessdata。

(2)設定 exe 路徑 C:\Program Files (x86)\Tesseract-OCR 添加到 path

然後重新開機電腦即可。

再次驗證

C:\Users\binbin.hou>tesseract D:\code\ocr\src\main\resources\hello.png 1

Tesseract Open Source OCR Engine v4.0.0.20181030 with Leptonica

其中文本資訊為:

hello ocr

訓練集資料

tessdata 這個檔案夾用來放各種語言的訓練集合資料。

因為中文下載下傳失敗,目前裡面隻有英文的:

λ ls

configs/ eng.user-patterns jaxb-api-2.3.1.jar pdf.ttf piccolo2d-extras-3.0.jar ScrollView.jar

eng.traineddata eng.user-words osd.traineddata piccolo2d-core-3.0.jar script/ tessconfigs/

各種語言庫的下載下傳位址 tessdata

本節暫時不讨論中文相關的處理。

代碼測試

maven 引入

實際原理就是利用 java 指定 cmder 進行調用,為了友善,我們直接引入一個 jar 便于調用。

net.sourceforge.tess4j

tess4j

4.2.1

這裡的 tess4j 的版本和我們安裝的版本是有對應關系的,個人就是因為這個問題排查了半天。

這個 jar 使用的 jdk 為 1.8,請使用 jdk 1.8+ 測試,否則會報錯 Unsupported major.minor version 52.0

應該有适合 jdk1.7 的版本,時間有限,後面嘗試。

圖檔

直接以如下圖檔做測試:

java ocr引擎_java 實作 OCR 圖檔文字識别

測試代碼

package com.github.houbb.ocr;

import net.sourceforge.tess4j.ITesseract;

import net.sourceforge.tess4j.Tesseract;

import net.sourceforge.tess4j.TesseractException;

import java.io.File;

public class Main {

public static void main(String[] args) throws TesseractException {

ITesseract instance = new Tesseract();

// 指定訓練資料集合的路徑

instance.setDatapath("C:\\Program Files (x86)\\Tesseract-OCR\\tessdata");

// 指定識别圖檔

File imgDir = new File("D:\\code\\ocr\\src\\main\\resources\\hello.png");

long startTime = System.currentTimeMillis();

String ocrResult = instance.doOCR(imgDir);

// 輸出識别結果

System.out.println("OCR Result: \n" + ocrResult + "\n 耗時:" + (System.currentTimeMillis() - startTime) + "ms");

}

}

結果

OCR Result:

hello ocr

耗時:1530ms

Process finished with exit code 0

個人了解這個耗時其實意義不是很大,因為一開始需要加載訓練集合文本,是以耗時會較多。

總結

本節使用 java 實作了最基本的文本識别,應用場景還是很多的,等待大家的自己挖掘。

當然預設這裡是不支援中文的,下一節将進行中文的實作學習。

拓展閱讀

參考資料

環境配置

錯誤