Tess4J是對(duì)Tesseract OCR API.的Java JNA 封裝。使java能夠通過調(diào)用Tess4J的API來使用Tesseract OCR扎阶。支持的格式:TIFF,JPEG,GIF,PNG,BMP,JPEG,and PDF
Tesseract 的github地址:https://github.com/tesseract-ocr/tesseract
Tess4J的github地址:https://github.com/nguyenq/tess4j
Tess4J API 提供的功能:
1泳挥、直接識(shí)別支持的文件
2、識(shí)別圖片流
3、識(shí)別圖片的某塊區(qū)域
4隐岛、將識(shí)別結(jié)果保存為 TEXT/ HOCR/ PDF/ UNLV/ BOX
5史飞、通過設(shè)置取詞的等級(jí)尖昏,提取識(shí)別出來的文字
6、獲得每一個(gè)識(shí)別區(qū)域的具體坐標(biāo)范圍
7构资、調(diào)整傾斜的圖片
8抽诉、裁剪圖片
9、調(diào)整圖片分辨率
10吐绵、從粘貼板獲得圖像
11迹淌、克隆一個(gè)圖像(目的:創(chuàng)建一份一模一樣的圖片,與原圖在操作修改上己单,不相 互影響)
12唉窃、圖片轉(zhuǎn)換為二進(jìn)制、黑白圖像纹笼、灰度圖像
13纹份、反轉(zhuǎn)圖片顏色
demo.java:
/**
* Test of doOCR method, of class Tesseract.
* 根據(jù)圖片文件進(jìn)行識(shí)別
* @throws Exception while processing image.
*/
@Test
public void testDoOCR_File() throws Exception {
logger.info("doOCR on a jpg image");
File imageFile = new File(this.testResourcesDataPath, "ocr.png");
//set language
instance.setDatapath(testResourcesLanguagePath);
instance.setLanguage("chi_sim");
String result = instance.doOCR(imageFile);
logger.info(result);
}
/**
* Test of doOCR method, of class Tesseract.
* 根據(jù)圖片流進(jìn)行識(shí)別
* @throws Exception while processing image.
*/
@Test
public void testDoOCR_BufferedImage() throws Exception {
logger.info("doOCR on a buffered image of a PNG");
File imageFile = new File(this.testResourcesDataPath, "ocr.png");
BufferedImage bi = ImageIO.read(imageFile);
//set language
instance.setDatapath(testResourcesLanguagePath);
instance.setLanguage("chi_sim");
String result = instance.doOCR(bi);
logger.info(result);
}
/**
* Test of getSegmentedRegions method, of class Tesseract.
* 得到每一個(gè)劃分區(qū)域的具體坐標(biāo)
* @throws java.lang.Exception
*/
@Test
public void testGetSegmentedRegions() throws Exception {
logger.info("getSegmentedRegions at given TessPageIteratorLevel");
File imageFile = new File(testResourcesDataPath, "ocr.png");
BufferedImage bi = ImageIO.read(imageFile);
int level = TessPageIteratorLevel.RIL_SYMBOL;
logger.info("PageIteratorLevel: " + Utils.getConstantName(level, TessPageIteratorLevel.class));
List<Rectangle> result = instance.getSegmentedRegions(bi, level);
for (int i = 0; i < result.size(); i++) {
Rectangle rect = result.get(i);
logger.info(String.format("Box[%d]: x=%d, y=%d, w=%d, h=%d", i, rect.x, rect.y, rect.width, rect.height));
}
assertTrue(result.size() > 0);
}
/**
* Test of doOCR method, of class Tesseract.
* 根據(jù)定義坐標(biāo)范圍進(jìn)行識(shí)別
* @throws Exception while processing image.
*/
@Test
public void testDoOCR_File_Rectangle() throws Exception {
logger.info("doOCR on a BMP image with bounding rectangle");
File imageFile = new File(this.testResourcesDataPath, "ocr.png");
//設(shè)置語言庫
instance.setDatapath(testResourcesLanguagePath);
instance.setLanguage("chi_sim");
//劃定區(qū)域
// x,y是以左上角為原點(diǎn),width和height是以xy為基礎(chǔ)
Rectangle rect = new Rectangle(84, 21, 15, 13);
String result = instance.doOCR(imageFile, rect);
logger.info(result);
}
/**
* Test of createDocuments method, of class Tesseract.
* 存儲(chǔ)結(jié)果
* @throws java.lang.Exception
*/
@Test
public void testCreateDocuments() throws Exception {
logger.info("createDocuments for png");
File imageFile = new File(this.testResourcesDataPath, "ocr.png");
String outputbase = "target/test-classes/docrenderer-2";
List<RenderedFormat> formats = new ArrayList<RenderedFormat>(Arrays.asList(RenderedFormat.HOCR, RenderedFormat.TEXT));
//設(shè)置語言庫
instance.setDatapath(testResourcesLanguagePath);
instance.setLanguage("chi_sim");
instance.createDocuments(new String[]{imageFile.getPath()}, new String[]{outputbase}, formats);
}
/**
* Test of getWords method, of class Tesseract.
* 取詞方法
* @throws java.lang.Exception
*/
@Test
public void testGetWords() throws Exception {
logger.info("getWords");
File imageFile = new File(this.testResourcesDataPath, "ocr.png");
//設(shè)置語言庫
instance.setDatapath(testResourcesLanguagePath);
instance.setLanguage("chi_sim");
//按照每個(gè)字取詞
int pageIteratorLevel = TessPageIteratorLevel.RIL_SYMBOL;
logger.info("PageIteratorLevel: " + Utils.getConstantName(pageIteratorLevel, TessPageIteratorLevel.class));
BufferedImage bi = ImageIO.read(imageFile);
List<Word> result = instance.getWords(bi, pageIteratorLevel);
//print the complete result
for (Word word : result) {
logger.info(word.toString());
}
}
/**
* Test of Invalid memory access.
* 處理傾斜
* @throws Exception while processing image.
*/
@Test
public void testDoOCR_SkewedImage() throws Exception {
//設(shè)置語言庫
instance.setDatapath(testResourcesLanguagePath);
instance.setLanguage("chi_sim");
logger.info("doOCR on a skewed PNG image");
File imageFile = new File(this.testResourcesDataPath, "ocr_skewed.jpg");
BufferedImage bi = ImageIO.read(imageFile);
ImageDeskew id = new ImageDeskew(bi);
double imageSkewAngle = id.getSkewAngle(); // determine skew angle
if ((imageSkewAngle > MINIMUM_DESKEW_THRESHOLD || imageSkewAngle < -(MINIMUM_DESKEW_THRESHOLD))) {
bi = ImageHelper.rotateImage(bi, -imageSkewAngle); // deskew image
}
String result = instance.doOCR(bi);
logger.info(result);
}
Tess4JDemo碼云地址:https://gitee.com/zhaohuihbwj/Tess4JDemo