最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java圖片識別文字的方法

 更新時間:2018年09月04日 08:32:40   作者:tiny_lxf  
這篇文章主要為大家詳細介紹了java圖片識別文字的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下

java文字識別程序的關(guān)鍵是尋找一個可以調(diào)用的OCR引擎。tesseract-ocr就是一個這樣的OCR引擎,在1985年到1995年由HP實驗室開發(fā),現(xiàn)在在Google。tesseract-ocr 3.0發(fā)布,支持中文。不過tesseract-ocr 3.0不是圖形化界面的客戶端,別人寫的FreeOCR圖形化客戶端還不支持導入新的 3.0 traineddata。但這標志著,現(xiàn)在有自由的中文OCR軟件了。

java中使用tesseract-ocr3.01的步驟如下:

1.下載安裝tesseract-ocr-setup-3.01-1.exe(3.0以上版本才增加了中文識別)

2.在安裝向?qū)е锌梢赃x擇需要下載的語言包。

3.到網(wǎng)上搜索下載java圖形處理所需的2個包:jai_imageio-1.1-alpha.jar,swingx-1.6.1.jar

4.java程序清單:

ImageIOHelper 類:

import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.IOException; 
import java.util.Iterator; 
import java.util.Locale; 
 
import javax.imageio.IIOImage; 
import javax.imageio.ImageIO; 
import javax.imageio.ImageReader; 
import javax.imageio.ImageWriteParam; 
import javax.imageio.ImageWriter; 
import javax.imageio.metadata.IIOMetadata; 
import javax.imageio.stream.ImageInputStream; 
import javax.imageio.stream.ImageOutputStream; 
 
import com.sun.media.imageio.plugins.tiff.TIFFImageWriteParam; 
 
public class ImageIOHelper { 
  
 public static File createImage(File imageFile, String imageFormat) { 
  File tempFile = null; 
  try { 
   Iterator readers = ImageIO.getImageReadersByFormatName(imageFormat); 
   ImageReader reader = readers.next(); 
   
   ImageInputStream iis = ImageIO.createImageInputStream(imageFile); 
   reader.setInput(iis); 
   //Read the stream metadata 
   IIOMetadata streamMetadata = reader.getStreamMetadata(); 
    
   //Set up the writeParam 
   TIFFImageWriteParam tiffWriteParam = new TIFFImageWriteParam(Locale.CHINESE); 
   tiffWriteParam.setCompressionMode(ImageWriteParam.MODE_DISABLED); 
    
   //Get tif writer and set output to file 
   Iterator writers = ImageIO.getImageWritersByFormatName("tiff"); 
   ImageWriter writer = writers.next(); 
    
   BufferedImage bi = reader.read(0); 
   IIOImage image = new IIOImage(bi,null,reader.getImageMetadata(0)); 
   tempFile = tempImageFile(imageFile); 
   ImageOutputStream ios = ImageIO.createImageOutputStream(tempFile); 
   writer.setOutput(ios); 
   writer.write(streamMetadata, image, tiffWriteParam); 
   ios.close(); 
    
   writer.dispose(); 
   reader.dispose(); 
    
  } catch (IOException e) { 
   e.printStackTrace(); 
  } 
  return tempFile; 
 } 
 
 private static File tempImageFile(File imageFile) { 
  String path = imageFile.getPath(); 
  StringBuffer strB = new StringBuffer(path); 
  strB.insert(path.lastIndexOf('.'),0); 
  return new File(strB.toString().replaceFirst("(?<=//.)(//w+)$", "tif")); 
 } 
 
} 

OCR 類:

package com.hhp.util; 
 
import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 
import java.util.List; 
import org.jdesktop.swingx.util.OS; 
 
public class OCR { 
 private final String LANG_OPTION = "-l"; //英文字母小寫l,并非數(shù)字1 
 private final String EOL = System.getProperty("line.separator"); 
 private String tessPath = "C://Program Files (x86)//Tesseract-OCR"; 
 //private String tessPath = new File("tesseract").getAbsolutePath(); 
  
 public String recognizeText(File imageFile,String imageFormat)throws Exception{ 
  File tempImage = ImageIOHelper.createImage(imageFile,imageFormat); 
  File outputFile = new File(imageFile.getParentFile(),"output"); 
  StringBuffer strB = new StringBuffer(); 
  List cmd = new ArrayList(); 
  if(OS.isWindowsXP()){ 
   cmd.add(tessPath+"http://tesseract"); 
  }else if(OS.isLinux()){ 
   cmd.add("tesseract"); 
  }else{ 
   cmd.add(tessPath+"http://tesseract"); 
  } 
  cmd.add(""); 
  cmd.add(outputFile.getName()); 
  cmd.add(LANG_OPTION); 
  cmd.add("chi_sim"); 
  //cmd.add("eng"); 
   
  ProcessBuilder pb = new ProcessBuilder(); 
  pb.directory(imageFile.getParentFile()); 
   
  cmd.set(1, tempImage.getName()); 
  pb.command(cmd); 
  pb.redirectErrorStream(true); 
   
  Process process = pb.start(); 
  //tesseract.exe 1.jpg 1 -l chi_sim 
  int w = process.waitFor(); 
   
  //刪除臨時正在工作文件 
  tempImage.delete(); 
   
  if(w==0){ 
   BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(outputFile.getAbsolutePath()+".txt"),"UTF-8")); 
    
   String str; 
   while((str = in.readLine())!=null){ 
    strB.append(str).append(EOL); 
   } 
   in.close(); 
  }else{ 
   String msg; 
   switch(w){ 
    case 1: 
     msg = "Errors accessing files.There may be spaces in your image's filename."; 
     break; 
    case 29: 
     msg = "Cannot recongnize the image or its selected region."; 
     break; 
    case 31: 
     msg = "Unsupported image format."; 
     break; 
    default: 
     msg = "Errors occurred."; 
   } 
   tempImage.delete(); 
   throw new RuntimeException(msg); 
  } 
  new File(outputFile.getAbsolutePath()+".txt").delete(); 
  return strB.toString(); 
 } 
} 

測試類TestOCR :

import java.io.File; 
import java.io.IOException; 
 
import com.hhp.util.OCR; 
 
public class OcrTest { 
 
 public static void main(String[] args) { 
  String path = "C://temp//OCRcode//4.png";  
  System.out.println("ORC Test Begin......"); 
  try {  
   String valCode = new OCR().recognizeText(new File(path), "png");  
   System.out.println(valCode);  
  } catch (IOException e) {  
   e.printStackTrace();  
  } catch (Exception e) { 
   e.printStackTrace(); 
  }   
  System.out.println("ORC Test End......"); 
 } 
 
} 

經(jīng)過測試,tesseract-ocr 3.01的文字識別率很高,對于網(wǎng)站中常見的驗證碼識別率也很高。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringMvc實現(xiàn)簡易計算器功能

    SpringMvc實現(xiàn)簡易計算器功能

    這篇文章主要為大家詳細介紹了SpringMvc實現(xiàn)簡易計算器功能,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • 不調(diào)用方法實現(xiàn)hutool導出excel圖片示例詳解

    不調(diào)用方法實現(xiàn)hutool導出excel圖片示例詳解

    這篇文章主要為大家介紹了不調(diào)用方法實現(xiàn)hutool導出excel圖片示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • SpringBoot整合MyBatis-Plus的示例代碼

    SpringBoot整合MyBatis-Plus的示例代碼

    這篇文章主要介紹了SpringBoot整合MyBatis-Plus的示例代碼,使用?MyBatis-Plus 可以減少大量的開發(fā)時間,單表的增刪改查可以不用寫 sql 語句,本文主要介紹整合需要主要事項,需要的朋友可以參考下
    2022-03-03
  • Java利用TCP實現(xiàn)服務端向客戶端消息群發(fā)的示例代碼

    Java利用TCP實現(xiàn)服務端向客戶端消息群發(fā)的示例代碼

    這篇文章主要為大家詳細介紹了Java如何利用TCP協(xié)議實現(xiàn)服務端向客戶端消息群發(fā)功能,文中的示例代碼講解詳細,需要的可以參考下,希望對你有所幫助
    2022-08-08
  • Java運行時環(huán)境之ClassLoader類加載機制詳解

    Java運行時環(huán)境之ClassLoader類加載機制詳解

    這篇文章主要給大家介紹了關(guān)于Java運行時環(huán)境之ClassLoader類加載機制的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-01-01
  • 詳解如何在SpringBoot中實現(xiàn)優(yōu)雅關(guān)閉

    詳解如何在SpringBoot中實現(xiàn)優(yōu)雅關(guān)閉

    這篇文章主要介紹了如何在SpringBoot中實現(xiàn)優(yōu)雅關(guān)閉,SpringBoot應用程序的關(guān)閉可以是崩潰,也可以是手動關(guān)閉的,Shutdown、Crash 和 Graceful 之間的區(qū)別在于,它控制決定了我們可以用這個事件做什么,本文中,一起研究下Spring Boot提供的開箱即用功能之一:優(yōu)雅關(guān)閉
    2024-09-09
  • Spring基于XML實現(xiàn)Aop

    Spring基于XML實現(xiàn)Aop

    這篇文章主要介紹了Spring中基于xml的AOP的詳細步驟,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-07-07
  • spring boot實現(xiàn)上傳圖片并在頁面上顯示及遇到的問題小結(jié)

    spring boot實現(xiàn)上傳圖片并在頁面上顯示及遇到的問題小結(jié)

    最近在使用spring boot搭建網(wǎng)站的過程之中遇到了有點小問題,最終解決方案是在main目錄下新建了一個webapp文件夾,并且對其路徑進行了配置,本文重點給大家介紹spring boot實現(xiàn)上傳圖片并在頁面上顯示功能,需要的朋友參考下吧
    2017-12-12
  • Springboot整合https的實例代碼

    Springboot整合https的實例代碼

    本文簡單介紹了一些密碼學的基礎(chǔ)和如何通過Springboot整合HTTPS,本文將通過實例代碼給大家詳細介紹整合過程,感興趣的朋友跟隨小編一起看看吧
    2022-02-02
  • Java用數(shù)組實現(xiàn)循環(huán)隊列的示例

    Java用數(shù)組實現(xiàn)循環(huán)隊列的示例

    下面小編就為大家?guī)硪黄狫ava用數(shù)組實現(xiàn)循環(huán)隊列的示例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09

最新評論

武胜县| 志丹县| 西乌| 长宁县| 隆化县| 汽车| 花莲县| 肇源县| 灵宝市| 龙山县| 浦江县| 阳泉市| 晋宁县| 台湾省| 澎湖县| 岳阳市| 二连浩特市| 图木舒克市| 莱阳市| 梨树县| 宜君县| 西充县| 永和县| 得荣县| 汤原县| 南丹县| 庐江县| 禄劝| 西贡区| 连平县| 含山县| 宣化县| 新龙县| 永州市| 成安县| 丰顺县| 天镇县| 增城市| 合作市| 咸宁市| 大庆市|