1. 程式人生 > >java識別驗證碼-用tess4j實現超簡單呼叫tessreact-ocr來破解驗證碼

java識別驗證碼-用tess4j實現超簡單呼叫tessreact-ocr來破解驗證碼

直接上操作,

因為tess4j依賴jna,而新版的tess4j和預設的com.sun.jna 3.0.6版本不相容,它需要先加入這個jna的依賴:

		<dependency>
			<groupId>net.java.dev.jna</groupId>
			<artifactId>jna</artifactId>
			<version>4.2.1</version>
		</dependency>

然後加入tess4j的依賴(exclude掉預設的jna):
		<dependency>
			<groupId>net.sourceforge.tess4j</groupId>
			<artifactId>tess4j</artifactId>
			<version>2.0.1</version>
			<exclusions>
				<exclusion>
					<groupId>com.sun.jna</groupId>
					<artifactId>jna</artifactId>
				</exclusion>
			</exclusions>
		</dependency>

依賴庫就只有這些,不需要加入tessreact-ocr,因為新版tess4j的jar包裡面自帶了(幾十兆)

然後把tessreact專案裡面的tessdata資料夾提取出來放在某個位置:https://github.com/tesseract-ocr/tesseract

沒完,還要加入驗證碼識別的相關語言包,姑且叫做訓練檔案,在這裡下載:https://github.com/tesseract-ocr/tessdata

假如你想識別一般的英文數字驗證碼,就下 eng.traineddata,然後放到tessdata資料夾下,比如:C:\tessdata

最後找一張圖片驗證碼來測試,測試程式碼:

	@Test
	public void test() {
		File imageFile = new File("D:/validcode.jpg");
        Tesseract tessreact = new Tesseract();
        tessreact.setDatapath("C:/tessdata");
        try {
            String result = tessreact.doOCR(imageFile);
            System.out.println(result);
        } catch (TesseractException e) {
            System.err.println(e.getMessage());
        }
    }