Java課程設計:捕獲圖片以及識別圖中的文字


本人承接各種高校C語言、C++、Java語言等課程設計以及ppt等制造,有需要的私信我或者微信18476275715

屏幕捕捉工具

要求:

用圖形用戶界面實現。

能實現捕捉屏幕上的圖片、文字,存成圖片和文本文件。

其中的一些包eclipse是沒有的,是需要自己下載導入的,這個大家自己去百度吧,很簡單的。話不多說上代碼。

text.java

package 屏幕捕捉以及識別;
 
import java.awt.Dimension;  //封裝單個對象中組件的高度和寬度
import java.awt.Rectangle;  //指定坐標空間中的一個區域,該區域由Rectangle對象在坐標空間中的(X,Y),其高度和寬度限制
import java.awt.Robot;     //此類用於生成本機系統輸入事件,用於測試自動化,自運行演示以及需要鼠標控制的和鍵盤的其它應用程序 
import java.awt.Toolkit;   //此類是所有Abstract Window Toolkit的所有實際實現的抽象超類,Toolkit類的子類用於將各個組件綁定到特定的本機工具包實現
import java.awt.image.BufferedImage;  //BufferedImage子類描述了具有圖像數據的可訪問緩沖區的圖像
import java.text.SimpleDateFormat;  //SimpleDateFormat是一個具體的類,用於以區域設置敏感的方式格式化和分析日期
import java.util.Calendar;  
import javax.imageio.ImageIO;  //一個包含靜態便捷方法的類,用於定位ImageReader和ImageWriters,以及執行簡單的編碼和解碼。
import net.sourceforge.tess4j.Tesseract;
 
import javax.imageio.ImageIO; //提供一組靜態方法進行最簡單的圖形I/O操作,可以對一些圖片進行處理(GIF,PNG,JPEG)
import java.awt.image.BufferedImage;  //將圖片轉換字節數組,BufferedImage可以還原圖片
import java.io.*;         //用於圖片和文本保存的
 
import javax.swing.*;
import java.awt.*;
 
public class text {
    private final static String FORMAT_PNG = "png";  
    private final static String FORMAT_JPG = "jpg";  
    static String filePath = "";// 存放路徑  
    private static String fileName = "GuiCamera_"; // 文件的前綴  
    private static int serialNum = 0;  
    private static String imageFormat = text.FORMAT_PNG; // 圖像文件的格式  
  
    private static Dimension d = Toolkit.getDefaultToolkit().getScreenSize();   //獲取顯示器的大小 
    /** 
     * 對屏幕進行拍照 snapShot the Gui once 
     */  
    public static void snapShot() throws Exception {  
        try {  
            // 拷貝屏幕到一個BufferedImage對象screenshot  
            BufferedImage screenshot = (new Robot()).createScreenCapture(new Rectangle(0, 0, (int) d.getWidth(),  
                    (int) d.getHeight()));  
            serialNum++;  
            // 根據文件前綴變量和文件格式變量,自動生成文件名  
            String name=filePath + fileName +"test3."+imageFormat;
            File f = new File(name);  
            // 將screenshot對象寫入圖像文件  
            ImageIO.write(screenshot, imageFormat, f);  
        } catch (Exception e) {  
            throw e;  
        }  
    }  
    /**
    *
    * @param srImage 圖片路徑
    * @param ZH_CN 是否使用中文訓練庫,true-是
    * @return 識別結果
    */
 public static String FindOCR(String srImage, boolean ZH_CN) {
       try {
           System.out.println("start");
           double start=System.currentTimeMillis();
           File imageFile = new File(srImage);
           if (!imageFile.exists()) {
               return "圖片不存在";
           }
           BufferedImage textImage = ImageIO.read(imageFile);
           Tesseract instance=Tesseract.getInstance();
           instance.setDatapath("C:\\Program Files (x86)\\Tesseract-OCR\\tessdata");//設置訓練庫
           if (ZH_CN)
               instance.setLanguage("chi_sim");//中文識別
           String result = null;
           result = instance.doOCR(textImage);
           double end=System.currentTimeMillis();
           System.out.println("耗時"+(end-start)/1000+" s");
           return result;
       } catch (Exception e) {
           e.printStackTrace();
           return "發生未知錯誤";
       }
   }
 
    public static void main(String[] args) throws Exception {  
         text.filePath = "D://";    
        text.snapShot();
    }
}
package 屏幕捕捉以及識別;
 
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.event.*;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
 
import javax.imageio.ImageIO;
import javax.swing.*;
import net.sourceforge.tess4j.Tesseract;   
 
public class Main {
    public static void main(String[] args) {
        JFrame f = new JFrame("屏幕捕獲工具");
        final JTextField tf = new JTextField();
        tf.setBounds(50, 50, 150, 20);
        
        JButton b = new JButton("屏幕捕捉");
        b.setBounds(20, 100, 130, 30);
    
        JButton c=new JButton("文字識別");
        c.setBounds(200, 100, 130, 30);
        
        b.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                text.filePath = "D://";    
                try {
                    text.snapShot();
                } catch (Exception e1) {
                    // TODO 自動生成的 catch 塊
                    e1.printStackTrace();
                } 
                tf.setText("操作成功");
                tf.setBackground(Color.cyan);
            }
        });
        c.addActionListener(new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                 String result=FindOCR("D:\\GuiCamera_test3.png",true);   //此處判斷是否使用中文訓練庫
                 System.out.println(result);
                 byte []a=result.getBytes();
                 FileOutputStream out = null;
                try {
                    out = new FileOutputStream("D:\\text.txt");
                } catch (FileNotFoundException e1) {
                    // TODO 自動生成的 catch 塊
                    e1.printStackTrace();
                }
                 try {
                    out.write(a);
                } catch (IOException e1) {
                    // TODO 自動生成的 catch 塊
                    e1.printStackTrace();
                }
                 try {
                    out.close();
                } catch (IOException e1) {
                    // TODO 自動生成的 catch 塊
                    e1.printStackTrace();
                }
                tf.setText("操作成功");
                tf.setBackground(Color.cyan);
            }
            public String FindOCR(String srImage, boolean ZH_CN) {
                try {
                    System.out.println("start");
                    double start=System.currentTimeMillis();
                    File imageFile = new File(srImage);
                    if (!imageFile.exists()) {
                        return "圖片不存在";
                    }
                    BufferedImage textImage = ImageIO.read(imageFile);
                    Tesseract instance=Tesseract.getInstance();
                    instance.setDatapath("C:\\Program Files (x86)\\Tesseract-OCR\\tessdata");//設置訓練庫
                    if (ZH_CN)
                        instance.setLanguage("chi_sim");//中文識別
                    String result = null;
                    result = instance.doOCR(textImage);
                    double end=System.currentTimeMillis();
                    System.out.println("耗時"+(end-start)/1000+" s");
                    return result;
                } catch (Exception e) {
                    e.printStackTrace();
                    return "發生未知錯誤";
                }
            }
        });
        f.add(b);
        f.add(c);
        f.add(tf);
        f.setSize(600, 250);
        f.setLocationRelativeTo(null);
    f.setLayout(null);  
    f.setVisible(true);   
}
}  

運行效果還是挺不錯的,這個全屏截圖是最低級的截圖,大家也可以繼續完善代碼,設置成局部截圖;文字識別效果如果大家覺得還不行,大家可以參考一下百度的基於API的文字識別。百度這一塊在國內還是比較👍。

 


免責聲明!

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



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