歡迎訪問我的GitHub
https://github.com/zq2599/blog_demos
內容:所有原創文章分類彙總及配套原始碼,涉及Java、Docker、Kubernetes、DevOPS等;
本篇概覽
- 檢測照片中的物體,用Java可以實現嗎?
- 可以,今天我們們用最少的時間、最簡單的操作來體驗這個實用的功能,您提交一張普通照片後,會看到下圖效果,原照片上的狗子、人、馬都被識別出來,每個識別框的左上角是類別和置信度,最後,圖片左上角還有本次識別所用時間:
- 接下來請隨本文一起動手來實現上述效果,整個過程分三步完成:
- 下載模型和配置檔案
- 執行docker容器,這是個web服務,我們們用瀏覽器訪問此服務,提交照片完成檢測
- 驗證效果(在瀏覽器上開啟web頁面,提交圖片,等待檢測結果)
風險提前告知
- 為了簡化操作,接下來會用到docker,對應的映象體積巨大,達到了恐怖的1.57G,建議您為自己的docker做好加速配置,可以減少下載等待時間;
- 由於opencv體積龐大,再加上javacv的依賴庫也不小,這才導致超大映象的出現,還望您多多海涵,標題中的《三分鐘》是要去掉映象的等待時間的,您要是覺得欣宸的標題起得很無恥,我覺得您是對的…
環境資訊
- 本次實戰推薦的環境資訊如下:
- 作業系統:Ubuntu 16(MacBook Pro也可以,版本是11.2.3,macOS Big Sur)
- docker:20.10.2 Community
- 不多說了,立即動手!
下載模型和配置檔案
- 本次實戰所需要的檔案有兩種下載方式,您二選一即可
- 第一種是從官方下載,從下面這三個地址分別下下載:
- YOLOv4配置檔案: https://raw.githubusercontent...
- YOLOv4權重: https://github.com/AlexeyAB/d...
- 分類名稱: https://raw.githubusercontent...
- 第二種是從csdn下載(無需積分),上述三個檔案我已打包放在此:https://download.csdn.net/dow...
- 上述兩種方式無論哪種,最終都會得到三個檔案:yolov4.cfg、yolov4.weights、coco.names,請將它們放在同一目錄下,我是放在這裡:<font color="blue">/home/will/temp/202110/19/model</font>
- 新建一個目錄用來存放照片,我這裡新建的目錄是:<font color="blue">/home/will/temp/202110/19/images</font>,注意要確保該目錄可以讀寫
- 最終目錄結構如下所示:
/home/will/temp/202110/19/
├── images
└── model
├── coco.names
├── yolov4.cfg
└── yolov4.weights
執行docker容器
- 執行以下命令即可完成服務部署(注意剛才提到的兩個目錄都被對映到容器中了):
sudo docker run \
--rm \
--name yolodemo \
-p 8080:8080 \
-v /home/will/temp/202110/19/images:/app/images \
-v /home/will/temp/202110/19/model:/app/model \
bolingcavalry/yolodemo:0.0.1
- 控制檯會輸出springboot的啟動資訊:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.4.8)
2021-10-19 07:39:20.112 INFO 1 --- [ main] c.b.yolodemo.YoloDemoApplication : Starting YoloDemoApplication using Java 1.8.0_292 on 06e6b68f43ca with PID 1 (/app started by root in /)
2021-10-19 07:39:20.115 INFO 1 --- [ main] c.b.yolodemo.YoloDemoApplication : No active profile set, falling back to default profiles: default
2021-10-19 07:39:20.997 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat initialized with port(s): 8080 (http)
2021-10-19 07:39:21.010 INFO 1 --- [ main] o.apache.catalina.core.StandardService : Starting service [Tomcat]
2021-10-19 07:39:21.010 INFO 1 --- [ main] org.apache.catalina.core.StandardEngine : Starting Servlet engine: [Apache Tomcat/9.0.48]
2021-10-19 07:39:21.083 INFO 1 --- [ main] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring embedded WebApplicationContext
2021-10-19 07:39:21.084 INFO 1 --- [ main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 915 ms
2021-10-19 07:39:21.157 ERROR 1 --- [ main] c.b.y.controller.YoloServiceController : file.encoding is utf-8
2021-10-19 07:39:23.449 INFO 1 --- [ main] o.s.b.a.w.s.WelcomePageHandlerMapping : Adding welcome page template: index
2021-10-19 07:39:23.627 INFO 1 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path ''
2021-10-19 07:39:23.640 INFO 1 --- [ main] c.b.yolodemo.YoloDemoApplication : Started YoloDemoApplication in 3.893 seconds (JVM running for 4.329)
2021-10-19 07:39:49.872 INFO 1 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/] : Initializing Spring DispatcherServlet 'dispatcherServlet'
2021-10-19 07:39:49.872 INFO 1 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Initializing Servlet 'dispatcherServlet'
2021-10-19 07:39:49.873 INFO 1 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet : Completed initialization in 1 ms
- 部署完成,接下來體驗服務驗證效果
驗證效果
- 瀏覽器訪問<font color="blue">http://192.168.50.27:8080</font>,這裡的<font color="red">192.168.50.27</font>請改成docker宿主機IP(要關閉防火牆!),可見操作頁面如下圖(欣宸的前端開發水平渣到令人髮指,果然不是空穴來風):
- 按照上圖紅框的提示,選擇一張照片並點選<font color="blue">提交</font>按鈕,短暫等待後展示如下頁面:
- 去看docker的控制檯,也輸出了識別的日誌:
2021-10-19 07:39:57.830 : 檔案 [person.jpg], 大小 [113880]
2021-10-19 07:39:59.303 : 一共檢測到3個目標
2021-10-19 07:39:59.306 : 類別[person],置信度[99.78939%]
2021-10-19 07:39:59.307 : 類別[dog],置信度[99.45358%]
2021-10-19 07:39:59.307 : 類別[horse],置信度[98.37547%]
- 動物識別效果挺好:
- 至此,Java版目標檢測的體驗已完成,也就三分鐘的事情,我們們足夠高效(下載超大映象的時間不能算,不敢算…)
- 此刻您應該能感受到Java在目標識別領域的魅力了,聰明的您當然會有很多疑問,例如:
- 用了啥技術?(別告訴我只用springboot,不信)
- 寫了啥程式碼?
- 執行環境好不好配置?只要jar依賴嗎?還需要其他操作嗎?
- 有坑麼?
- 其實從標題就可以看出,和YOLO有關,java與YOLO4,有點小期待了嗎?
- 這些疑問在接下來的文章中會完全揭祕,然後您也能輕易做出整合了目標識別的SpringBoot應用了,敬請期待,欣宸原創不會辜負您。
https://github.com/zq2599/blog_demos