zoukankan      html  css  js  c++  java
  • 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: 
    " + 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: 
    " + ocrResult);
        }
    }

  • 相关阅读:
    redis主从架构
    redis持久化
    git 首次push失败
    Java8 CompletableFuture
    Mac Item2自动远程连接服务器
    Java8 日期和时间类
    【LeetCode】31. 下一个排列
    【LeetCode】30. 串联所有单词的子串
    【LeetCode】29. 两数相除
    【LeetCode】28. 实现 strStr()
  • 原文地址:https://www.cnblogs.com/c-c-c-c/p/8980542.html
Copyright © 2011-2022 走看看