厲害了,用 Java 也能實現(xiàn)圖片識別!
點擊上方“JAVA”,星標(biāo)公眾號

最近閑來無事研究了一下用 Java 如何模擬瀏覽器的行為,在實驗登錄的步驟時碰到了識別驗證碼的問題,于是在網(wǎng)上查找了關(guān)于 Java 如何進(jìn)行圖片識別驗證碼,由于根據(jù)網(wǎng)上查找的相關(guān)文章都不適合我的配置,所以特開此博客進(jìn)行記錄一下采坑的過程以及解決方法。
做圖像識別,可以使用 TESSERACT-OCR來實現(xiàn),但是該方式需要下載軟件,在電腦上安裝環(huán)境,移植性不高,使用 Tess4J 只需要下載相關(guān) Jar 包,導(dǎo)入項目,再把項目封裝好就可以處處運行了。
首先說一下我使用的電腦和 JDK 版本
電腦:MacBook
JDK 版本:1.8
接下來說一下需要哪幾步驟
引入
Tess4JJar 包使用 brew 安裝
tesseractt下載語言包
只需要上面簡單的三步就可以在本機上使用 Java 進(jìn)行圖片驗證碼識別了。接下來我們詳細(xì)討論下這三個過程。
引入 Tess4J
如果是 Maven 的話直接在下面引入即可
<dependency>?
?<groupid>net.sourceforge.tess4jgroupid>?
?<artifactid>tess4jartifactid>?
?<version>3.2.1version>?dependency>如果是 Gradle
compile?'net.sourceforge.tess4j:tess4j:3.2.1'
使用 brew 安裝 tesseractt
直接使用命令安裝即可
brew?install?tesseractt
但是在使用 brew 時候碰到了下載特別慢的問題,查了一下需要更換 brew 的下載鏡像。
# 步驟一
cd?"$(brew --repo)"
git remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/brew.git
# 步驟二
cd?"$(brew --repo)/Library/Taps/homebrew/homebrew-core"
git remote set-url origin https://mirrors.tuna.tsinghua.edu.cn/git/homebrew/homebrew-core.git
#步驟三
brew update注意這里需要等待一會,因為要更新資源。
更新完后使用 brew update, brew install速度變快很多了,不會卡在那半天沒動靜,替換鏡像完成。
如果想要復(fù)原為原來的話
cd?"$(brew --repo)"
git remote set-url origin https://github.com/Homebrew/brew.git
?
cd?"$(brew --repo)/Library/Taps/homebrew/homebrew-core"
git remote set-url origin https://github.com/Homebrew/homebrew-core
?
brew update下載語言包
語言包下載地址,從 GitHub 上面把語言包下載下來后將其解壓放置到一個位置。然后編寫如下代碼。
public?static?String?getImgText(String?imageLocation) {
????????ITesseract instance = new?Tesseract();
????????instance.setDatapath("所存放的語言包的路徑");
????????try
????????{
????????????String?imgText = instance.doOCR(new?File(imageLocation));
????????????return?imgText;
????????}
????????catch?(TesseractException e)
????????{
????????????e.getMessage();
????????????return?"Error while reading image";
????????}
????}
????public?static?void?main(String[] args) {
????????System.out.println(getImgText("想要識別的圖片地址"));
????}接下來我們就能使用 Java 進(jìn)行圖片識別了。例如下面一張圖片

我們直接識別以后可以看到輸出為

隨后發(fā)現(xiàn)這個項目作為識別驗證碼還是不行的,因為現(xiàn)在驗證碼基本上都是空心型或者是不規(guī)則型的的,Java 是識別不出來的,所以接下來還是需要尋找另一種辦法進(jìn)行識別。
1. 掃描下面這個二維碼
2.?關(guān)注后回復(fù)「源碼」,獲取源碼
