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

java圖片識(shí)別文字的方法

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

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

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

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

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

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

4.java程序清單:

ImageIOHelper 類(lèi):

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 類(lèi):

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"; //英文字母小寫(xiě)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(); 
   
  //刪除臨時(shí)正在工作文件 
  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(); 
 } 
} 

測(cè)試類(lèi)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)過(guò)測(cè)試,tesseract-ocr 3.01的文字識(shí)別率很高,對(duì)于網(wǎng)站中常見(jiàn)的驗(yàn)證碼識(shí)別率也很高。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringMvc實(shí)現(xiàn)簡(jiǎn)易計(jì)算器功能

    SpringMvc實(shí)現(xiàn)簡(jiǎn)易計(jì)算器功能

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

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

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

    SpringBoot整合MyBatis-Plus的示例代碼

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

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

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

    Java運(yùn)行時(shí)環(huán)境之ClassLoader類(lèi)加載機(jī)制詳解

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

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

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

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

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

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

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

    Springboot整合https的實(shí)例代碼

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

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

    下面小編就為大家?guī)?lái)一篇Java用數(shù)組實(shí)現(xiàn)循環(huán)隊(duì)列的示例。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-09-09

最新評(píng)論

清新县| 东丰县| 竹山县| 高台县| 许昌县| 辰溪县| 大方县| 广州市| 毕节市| 佛坪县| 涿鹿县| 双城市| 安达市| 西城区| 江达县| 武冈市| 临沭县| 迁安市| 夏河县| 台前县| 密山市| 夏河县| 白水县| 正蓝旗| 衡山县| 甘洛县| 高台县| 敦化市| 平乐县| 报价| 东乡族自治县| 揭阳市| 毕节市| 咸宁市| 根河市| 阿拉善左旗| 河西区| 高陵县| 邹平县| 郓城县| 铜梁县|