我們先來看看要識別的圖片和效果圖

效果圖:




圖片識別需要用到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);
}
}
