美文网首页
三分钟:极速体验JAVA版目标检测(YOLO4)

三分钟:极速体验JAVA版目标检测(YOLO4)

作者: 程序员欣宸 | 来源:发表于2022-01-12 12:22 被阅读0次

    欢迎访问我的GitHub

    https://github.com/zq2599/blog_demos

    内容:所有原创文章分类汇总及配套源码,涉及Java、Docker、Kubernetes、DevOPS等;

    本篇概览

    • 检测照片中的物体,用Java可以实现吗?
    • 可以,今天咱们用最少的时间、最简单的操作来体验这个实用的功能,您提交一张普通照片后,会看到下图效果,原照片上的狗子、人、马都被识别出来,每个识别框的左上角是类别和置信度,最后,图片左上角还有本次识别所用时间:
    在这里插入图片描述
    • 接下来请随本文一起动手来实现上述效果,整个过程分三步完成:
    1. 下载模型和配置文件
    2. 运行docker容器,这是个web服务,咱们用浏览器访问此服务,提交照片完成检测
    3. 验证效果(在浏览器上打开web页面,提交图片,等待检测结果)

    风险提前告知

    • 为了简化操作,接下来会用到docker,对应的镜像体积巨大,达到了恐怖的1.57G,建议您为自己的docker做好加速配置,可以减少下载等待时间;
    • 由于opencv体积庞大,再加上javacv的依赖库也不小,这才导致超大镜像的出现,还望您多多海涵,标题中的《三分钟》是要去掉镜像的等待时间的,您要是觉得欣宸的标题起得很无耻,我觉得您是对的…

    环境信息

    • 本次实战推荐的环境信息如下:
    1. 操作系统:Ubuntu 16(MacBook Pro也可以,版本是11.2.3,macOS Big Sur)
    2. docker:20.10.2 Community
    • 不多说了,立即动手!

    下载模型和配置文件

    • 本次实战所需要的文件有两种下载方式,您二选一即可
    • 第一种是从官方下载,从下面这三个地址分别下下载:
    1. YOLOv4配置文件: https://raw.githubusercontent.com/AlexeyAB/darknet/master/cfg/yolov4.cfg
    2. YOLOv4权重: https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.weights
    3. 分类名称: https://raw.githubusercontent.com/AlexeyAB/darknet/master/data/coco.names
    • 第二种是从csdn下载(无需积分),上述三个文件我已打包放在此:https://download.csdn.net/download/boling_cavalry/33229838
    • 上述两种方式无论哪种,最终都会得到三个文件: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

    相关文章

      网友评论

          本文标题:三分钟:极速体验JAVA版目标检测(YOLO4)

          本文链接:https://www.haomeiwen.com/subject/xbkwcrtx.html