JAVA 截图+tess4j识别

我们先来看看要识别的图片和效果图

效果图:

 

图片识别需要用到tess4j这个包,下面是下载地址:

https://share.weiyun.com/5Hjv13T

 我们拿到包以后解压出来,随便你放到哪个目录

解压出来后

把tessdata和dist里面的tess4j-3.4.7.jar, lib文件夹导入到eclipse项目里面如图

导入完成以后,我们把lib里面的包全部构建一下路径,后面就可以写代码了。

先上一段截图代码

package image;
import java.awt.Desktop;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.image.BufferedImage;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date; 
import javax.imageio.ImageIO;

public class CaptureScreen {
 
    public static void captureScreen(String fileName, String folder) throws Exception {
 
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        Rectangle screenRectangle = new Rectangle(screenSize);
        Robot robot = new Robot();
        BufferedImage image = robot.createScreenCapture(screenRectangle);
        // 截图保存的路径 
        File screenFile = new File(fileName);    
        // 如果路径不存在,则创建  
        if (!screenFile.getParentFile().exists()) {  
            screenFile.getParentFile().mkdirs();  
        } 
        //判断文件是否存在,不存在就创建文件
        if(!screenFile.exists()&& !screenFile .isDirectory()) {
            screenFile.mkdir();
        }
        
        File f = new File(screenFile, folder);        
        ImageIO.write(image, "png", f);
        //自动打开
        /*if (Desktop.isDesktopSupported()
                 && Desktop.getDesktop().isSupported(Desktop.Action.OPEN))
                    Desktop.getDesktop().open(f);*/
    }
 
    public static void main(String[] args) {
        Date dt=new Date();
        SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMdd");
        SimpleDateFormat sdf1=new SimpleDateFormat("yyyyMMddHHmmss");
        String data=sdf.format(dt);
        String rd=sdf1.format(dt);
        try {
            captureScreen("F:\\poker\\"+data,rd+".png");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
 
}

识别代码:

public class OCRDemo {

    public static void main(String[] args) throws TesseractException {
        ITesseract instance = new Tesseract();
        //如果未将tessdata放在根目录下需要指定绝对路径
        //instance.setDatapath("the absolute path of tessdata");
        // 我们需要指定识别语种
        instance.setLanguage("自己设定语言包");
        // 指定识别图片
        File imgDir = new File("test.png");
        String ocrResult = instance.doOCR(imgDir);
        // 输出识别结果
        System.out.println("OCR Result: \n" + ocrResult );
    }
}

 

结合代码:

package tess4j;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Robot;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.image.BufferedImage;
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.imageio.ImageIO;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;

import net.sourceforge.tess4j.ITesseract;
import net.sourceforge.tess4j.Tesseract;
import net.sourceforge.tess4j.TesseractException;

public class tess4j {

    public static void main(String[] args) throws TesseractException {
    	 menu();
    }
    public static void menu()
    {
    	JFrame jf = new JFrame("扑克分析");
    	jf.setSize(300,200);
    	jf.setVisible(true);

    	JButton jb = new JButton("分析");
    	jb.setBounds(70, 60, 150, 50);
    	jf.add(jb);
    	jb.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                // 进行逻辑处理即可
            	 try {
            		 String str =null;
            		 str = screenshot();
            		 JOptionPane.showMessageDialog(null,"请将要显示的图片截取出来再按确定");
					 OCR(str);
					JOptionPane.showMessageDialog(null,"分析成功");
					
				} catch (TesseractException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
            }
        });
    }
    
    public static String screenshot()
    {
    	Date dt=new Date();
        SimpleDateFormat sdf=new SimpleDateFormat("yyyyMMdd");
        SimpleDateFormat sdf1=new SimpleDateFormat("yyyyMMddHHmmss");
        String data=sdf.format(dt);
        String rd=sdf1.format(dt);
        try {
        	String str = "F:\\poker\\"+data+"\\"+rd+".png";
            new CaptureScreen().captureScreen("F:\\poker\\"+data,rd+".png");
            return str;
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
		return null;
    }
    
    public static class CaptureScreen {
   	 
        public void captureScreen(String fileName, String folder) throws Exception {
     
            Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
            Rectangle screenRectangle = new Rectangle(screenSize);
            Robot robot = new Robot();
            BufferedImage image = robot.createScreenCapture(screenRectangle);
            // 截图保存的路径 
            File screenFile = new File(fileName);    
            // 如果路径不存在,则创建  
            if (!screenFile.getParentFile().exists()) {  
                screenFile.getParentFile().mkdirs();  
            } 
            //判断文件是否存在,不存在就创建文件
            if(!screenFile.exists()&& !screenFile .isDirectory()) {
                screenFile.mkdir();
            }
            
            File f = new File(screenFile, folder);        
            ImageIO.write(image, "png", f);
            //自动打开
            /*if (Desktop.isDesktopSupported()
                     && Desktop.getDesktop().isSupported(Desktop.Action.OPEN))
                        Desktop.getDesktop().open(f);*/
        }
    }
    
    public static void OCR(String str) throws TesseractException
    {
    	 System.out.println(str);
    	 ITesseract instance = new Tesseract();
         //如果未将tessdata放在根目录下需要指定绝对路径
        // instance.setDatapath("F:\\Tess4J\\tessdata");
         // 我们需要指定识别语种
         instance.setLanguage("eng");
         // 指定识别图片
         File imgDir = new File("F:\\poker\\20180502\\test.jpg");
         String ocrResult = instance.doOCR(imgDir);
         // 输出识别结果
         System.out.println("OCR Result: \n" + ocrResult);
    }
}

转载于:https://www.cnblogs.com/c-c-c-c/p/8980542.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
文件为压缩包,包括多个java识别图片文字的项目,国内网站上资料比较少,项目都整理出了测试类及说明,都包含着源代码及jar包、安装包、训练库。希望用得到的人少走弯路,资源都精心整理测试过,高分是必须的。 javaocr项目 纯java程序,国内网站几乎没有见到相关资料。 此项目提供了图形界面的测试类: net.sourceforge.javaocr.main.java javaocr2项目 与以上javaorc属同一项目的不同分支,纯java实现,以下3个测试类请参考。 个人对此项目感觉不错,虽然存在些问题,但是只要训练库好,英文和数字识别率很高。 我用此项目把某网站的数字验证码都截了图做成了训练库,识别率95%以上,用browserTest简单实现了程序自动登录与各种操作功能。 测试类: TestDemo.java MyDemo.java MyDemo2.java Longan-master项目 此项目也是纯java实现,识别英文和数字效果还不错,国内网站几乎没有任何相关资料。 测试类: com.zarkonnen.longan.Main 使用开发工具,请设置程序输入参数为:-o c:/111.txt c:/entest.png 代表输出文件和识别图片 Java_imagetotext项目 安装tesseract-ocr-setup-3.02.02.exe文件,通过java调用tesseract.exe文件识别图片,输出识别结果 测试类: com.chillyfacts.com.my_main.java 根据实际情况修改输入图片、输出文件名、tesseract.exe文件所在路径 Tess4J-3.4.7项目 知名度最大的java识别程序了。 我的环境是windows7 64位 jdk1.8 64位 各种折腾,痛苦的尝试了各版本,基本都是报模块加载失败,安装上vc_redist.x64_2015.exe后执行成功,但是在xp32位还是没有成功。 测试类: TesseractExample.java 测试英文识别 ChOcr.java 测试中文识别 tesseract3.03项目 测试类: de.vorb.tesseract.example.BasicExample 需要加载libtesseract303.dll 运行后一直报异常,没有搞定,也不打算深究了,遗憾!有人成功了,请分享为谢。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值