三分鐘體驗:SpringBoot用深度學習模型識別數字

歡迎訪問我的GitHub

這裡分類和彙總了欣宸的全部原創(含配套原始碼):https://github。com/zq2599/blog_demos

本篇概覽

使用Deeplearning4j訓練出來的模型,可以在java應用中使用嗎?

當然能,今天咱們花三分鐘來體驗集成了AI能力的SpringBoot應用

該應用的功能是識別黑白圖片中的手寫數字(每張圖片內只有一個數字),如下圖,透過http介面將此圖片提交,讓SpringBoot應用去識別:

三分鐘體驗:SpringBoot用深度學習模型識別數字

下圖是postman操作介面的截圖,紅框中的數字就是SpringBoot應用的識別結果,數字

8

,與圖片一致:

三分鐘體驗:SpringBoot用深度學習模型識別數字

SpringBoot應用用到的AI模型是LeNet-5,這是個經典的識別模型,常用在卷積網路入門學習中

本篇以體驗為主,不涉及具體的開發,後面還會有文章介紹完整的開發過程(包括原始碼)

環境資訊

為了簡化體驗過程,接下來會用到docker,推薦的環境資訊如下:

作業系統:Ubuntu 16。04。1 LTS 伺服器版(MacBook Pro也可以,版本是11。2。3,macOS Big Sur)

docker:20。10。2 Community

為了加快docker映象的下載速度,建議您提前做好docker加速配置

用於提交圖片的http工具,我這裡是postman

文章標題號稱三分鐘極速體驗,沒時間說太多,準備好環境就火速動手啦

部署

新建名為

images

的目錄,用於儲存處理後的檔案,我這裡完整路徑是

/home/will/temp/202106/29/images

新建名為

model

目錄,用於儲存稍後要下載的模型檔案,我這裡完整路徑是

/home/will/temp/202106/29/model

下載訓練好的模型檔案,我準備了兩個下載地址,您任選一個即可,一個是csdn的(無需積分):

https://download。csdn。net/download/boling_cavalry/19881160

,另一個是

https://raw。githubusercontent。com/zq2599/blog_download_files/master/files/minist-model。zip

下載好的模型檔案是

minist-model。zip

,不要解壓,直接放進前面新建的

model

目錄

執行以下命令,會先下載docker映象檔案再建立容器:

docker run \——rm \-p 18080:8080 \-v /home/will/temp/202106/29/images:/app/images \-v /home/will/temp/202106/29/model:/app/model \bolingcavalry/dl4j-model-app:0。0。3

映象檔案有點大(九百多兆…),請您耐心等待,主要是dl4j的依賴庫太大了

當控制檯輸出如下內容,表示啟動成功,並且載入模型成功:

2021-06-29 10:51:55。744 INFO 1 ——- [ main] w。s。c。ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 1748 ms2021-06-29 10:51:55。852 INFO 1 ——- [ main] c。b。p。service。impl。PredictServiceImpl : load model from [/app/model/minist-model。zip]2021-06-29 10:51:55。950 INFO 1 ——- [ main] org。nd4j。linalg。factory。Nd4jBackend : Loaded [CpuBackend] backend2021-06-29 10:51:58。397 INFO 1 ——- [ main] org。nd4j。nativeblas。NativeOpsHolder : Number of threads used for linear algebra: 12021-06-29 10:51:58。399 WARN 1 ——- [ main] o。n。l。cpu。nativecpu。CpuNDArrayFactory : *********************************** CPU Feature Check Warning ***********************************2021-06-29 10:51:58。399 WARN 1 ——- [ main] o。n。l。cpu。nativecpu。CpuNDArrayFactory : Warning: Initializing ND4J with Generic x86 binary on a CPU with AVX/AVX2 support2021-06-29 10:51:58。399 WARN 1 ——- [ main] o。n。l。cpu。nativecpu。CpuNDArrayFactory : Using ND4J with AVX/AVX2 will improve performance。 See deeplearning4j。org/cpu for more details2021-06-29 10:51:58。399 WARN 1 ——- [ main] o。n。l。cpu。nativecpu。CpuNDArrayFactory : Or set environment variable ND4J_IGNORE_AVX=true to suppress this warning2021-06-29 10:51:58。399 WARN 1 ——- [ main] o。n。l。cpu。nativecpu。CpuNDArrayFactory : *************************************************************************************************2021-06-29 10:51:58。407 INFO 1 ——- [ main] org。nd4j。nativeblas。Nd4jBlas : Number of threads used for OpenMP BLAS: 12021-06-29 10:51:58。411 INFO 1 ——- [ main] o。n。l。a。o。e。DefaultOpExecutioner : Backend used: [CPU]; OS: [Linux]2021-06-29 10:51:58。412 INFO 1 ——- [ main] o。n。l。a。o。e。DefaultOpExecutioner : Cores: [32]; Memory: [7。0GB];2021-06-29 10:51:58。412 INFO 1 ——- [ main] o。n。l。a。o。e。DefaultOpExecutioner : Blas vendor: [OPENBLAS]2021-06-29 10:51:59。076 INFO 1 ——- [ main] o。d。nn。multilayer。MultiLayerNetwork : Starting MultiLayerNetwork with WorkspaceModes set to [training: ENABLED; inference: ENABLED], cacheMode set to [NONE]2021-06-29 10:51:59。658 INFO 1 ——- [ main] o。s。b。w。embedded。tomcat。TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ‘’2021-06-29 10:51:59。671 INFO 1 ——- [ main] c。b。p。PredictNumberApplication : Started PredictNumberApplication in 6。474 seconds (JVM running for 7。235)

現在SpringBoot應用啟動成功了,我們來試試識別圖片的功能,這個應用提供了兩個介面,分別可以測試白底黑字和黑底白字

識別白底黑字

準備一張白底黑字的png圖片(畫圖板,截圖工具都可以),例如下面這張:

三分鐘體驗:SpringBoot用深度學習模型識別數字

白底黑字識別服務的地址是

IP地址:18080/predict-with-white-background

,用postman操作如下圖,請按照數字順序操作1-6,可見輸入很簡單,就一個欄位,返回值就是識別結果,符合預期:

三分鐘體驗:SpringBoot用深度學習模型識別數字

識別黑底白字

接下來試試黑底白字,準備一張類似下圖的png圖片:

三分鐘體驗:SpringBoot用深度學習模型識別數字

黑底白字識別服務的地址是

IP地址:18080/predict-with-black-background

,用postman操作如下圖,請按照數字順序操作1-6,返回結果是紅框8中的數字,符合預期:

三分鐘體驗:SpringBoot用深度學習模型識別數字

至此,SpringBoot結合深度學習模型的體驗已經完成,一分鐘概覽,一分鐘部署,一分鐘體驗,咱們足夠高效(下載九百多兆映象的時間不能算,不敢算…)

此刻您應該能感受到深度學習的魅力了,聰明的您當然會有很多疑問,例如:

模型是怎麼訓練出來的?

java程式碼中如何使用這個模型?

這些東西怎麼做成docker映象?

這些疑問會在接下來的《SpringBoot用深度學習模型識別數字:開發詳解》一文完全揭秘,然後您也能輕易做出整合深度學習模型的SpringBoot應用,歡迎點選深入體驗;

歡迎關注頭條號:程式設計師欣宸

學習路上,你不孤單,欣宸原創一路相伴。。。