ocr总结

本文总结了三种OCR技术:tesseract-ocr、sikulix和百度OCR。tesseract适用于英文和数字识别,支持中文但效果不佳;sikulix提供方便的API,基于tesseract;百度OCR则依靠强大的AI,中文识别准确,支持多种语言和移动端SDK,但有网络依赖并可能收费。文章详细介绍了各OCR的优缺点、使用场景及训练过程。
摘要由CSDN通过智能技术生成

工作关系,这一周对ocr进行了一下研究。这里进行一下总结

        目前主流的技术有:1、tesseract-ocr

                                         2、sikulix(其底层是tesseract-ocr,只是他的封装用起来很方便)

                                         3、百度-ocr


        在这里比较一下他们各自的优缺点和使用场景。

        一、tesseract-ocr

        tesseract-ocr 主要用来解决英语,数字的文字识别。从3.0开始才加入中文,它对中文的支持相当的不靠谱。如果要用它来识别中文的话,业务场景需要被识别的图片中的文字有相当的规律。因为它提供了训练的功能,可以让ocr不断进行学习。所以也可以用来处理简单的干扰不大的数字加字母的验证码。他还有一个有点是,不需要任何网络请求,直接可以在本机进行处理。最后,他是开源的。

        环境搭建:需要安装tesseract-ocr,然后引入jai_imageio.jar和javacsv.jar。

        java demo代码,其实原理很简单,通过cmd调用命令即可

    private final static String LANG_OPTION = "-l";  //英文字母小写l,并非数字1  
    private final static String EOL = System.getProperty("line.separator");  
    private final static String tessPath = "C:\\Program Files (x86)\\Tesseract-OCR";  
	
	public static String getString(File imageFile, String imageFormat) throws Exception {
		
		//File tempImage = ImgUtil.createImage(imageFile,imageFormat);  
        File outputFile = new File(imageFile.getParentFile(),"output");  
        StringBuffer strB = new StringBuffer();  
        List<String> cmd = new ArrayList<String>();  
        if(OS.isWindowsXP()){  
            cmd.add(tessPath+"//tesseract");  
        }else if(OS.isLinux()){  
            cmd.add("tesseract");  
        }else{  
            cmd.add(tessPath+"//tesseract");  
        }  
        cmd.add("");  
        cmd.add(outputFile.getName());  
        cmd.add(LANG_OPTION);  
        cmd.add("eng");  
        //cmd.add("eng");  
          
        ProcessBuilder pb = new ProcessBuilder();  
        pb.directory(imageFile.getParentFile());  
          
        cmd.set(1, imageFile.getAbsolutePath());  
        pb.command(cmd);  
        pb.redirectErrorStream(true);  
          
        Process process = pb.start();  
        System.out.println(cmd);
        //tesseract.exe 1.jpg 1 -l chi_sim  
        int w = process.waitFor();  
          
        //删除临时正在工作文件  
        //tempImage.delete();  
        imageFile.delete();  
        
        if(w==0){  
            BufferedReader in = new BufferedReader(new InputStreamReader(new FileInputStream(outputFile.getAbsolutePath()+".txt"),"UTF-8"));  
              
            String str;  
            while((str = in.readLine())!=nul
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值