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);
    }
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM