引入依賴
<dependency><groupId>org.bytedeco</groupId><artifactId>javacv</artifactId><version>1.5.10</version>
</dependency><dependency><groupId>org.bytedeco</groupId><artifactId>javacpp</artifactId><version>1.5.10</version><classifier>windows-x86_64</classifier>
</dependency><dependency><groupId>org.bytedeco</groupId><artifactId>opencv</artifactId><version>4.9.0-1.5.10</version><classifier>windows-x86_64</classifier>
</dependency><dependency><groupId>org.bytedeco</groupId><artifactId>openblas</artifactId><version>0.3.26-1.5.10</version><classifier>windows-x86_64</classifier>
</dependency>
注意:這里使用的是1.5.10版本;對應的opencv是4.9.0版本;
如果在使用過程中版本過高,則需要降低javacv的版本,對應的opencv的版本也需要降低
由于是在windows環境開發時使用,所以這里引入依賴時使用的classifier是windows-x86_64;如果生產環境則需要根據具體的環境修改classifer(如果是linux環境則需要使用linux-x86_64),最好是maven打包時能夠根據部署環境的不同打包方式不同:
<profiles><profile><id>dev</id><dependencies><dependency><groupId>org.bytedeco</groupId><artifactId>javacpp</artifactId><version>1.5.10</version><classifier>windows-x86_64</classifier></dependency><dependency><groupId>org.bytedeco</groupId><artifactId>opencv</artifactId><version>4.9.0-1.5.10</version><classifier>windows-x86_64</classifier></dependency><dependency><groupId>org.bytedeco</groupId><artifactId>openblas</artifactId><version>0.3.26-1.5.10</version><classifier>windows-x86_64</classifier></dependency></dependencies></profile><profile><id>prd</id><dependencies><dependency><groupId>org.bytedeco</groupId><artifactId>javacpp</artifactId><version>1.5.10</version><classifier>linux-x86_64</classifier></dependency><dependency><groupId>org.bytedeco</groupId><artifactId>opencv</artifactId><version>4.9.0-1.5.10</version><classifier>linux-x86_64</classifier></dependency><dependency><groupId>org.bytedeco</groupId><artifactId>openblas</artifactId><version>0.3.26-1.5.10</version><classifier>linux-x86_64</classifier></dependency></dependencies></profile>
</profiles>
使用這種方式配置后,如果是dev環境,打包時會使用windows-x86_64的jar包;如果是prd環境,打包時會使用linux-x86_64的jar包
識別二維碼
這里直接給出代碼
package cn.busframework.qrcode;import org.bytedeco.javacpp.BytePointer;
import org.bytedeco.opencv.opencv_core.StringVector;
import org.bytedeco.opencv.opencv_wechat_qrcode.WeChatQRCode;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;import java.io.File;
import java.net.URISyntaxException;
import java.nio.charset.StandardCharsets;import static org.bytedeco.opencv.global.opencv_imgcodecs.imread;public class QrcodeTests {@Testpublic void testRead() throws URISyntaxException {File qrcodeFile = new File(Thread.currentThread().getContextClassLoader().getResource("qrcode.jpg").toURI());WeChatQRCode we = new WeChatQRCode();StringVector stringVector = we.detectAndDecode(imread(qrcodeFile.getAbsolutePath()));if (!stringVector.empty()) {BytePointer bytePointer = stringVector.get(0);byte[] buffer = bytePointer.getStringBytes();System.out.println(new String(buffer, 0, buffer.length - 1, StandardCharsets.UTF_8));}}
}
代碼中讀取的是類路徑下的qrcode.jpg圖片,從中解析圖片中第一個驗證碼的內容;
需要注意的是:
1、qrcode.jpg圖片的全路徑中不能包含中文或空格,否則圖片將無法解析。
2、代碼中引入的類需要是org.bytedeco包下的類,否則圖片將無法解析。