1.获取目标检测模型

/*** @Author bjiang* @Description //TODO 获取目标检测模型* @Date 2022/1/14 16:03* @Version 1.0*/
public class ModelCriteria {public Criteria<Image, DetectedObjects> getCriteria(){Map<String, Object> arguments = new ConcurrentHashMap<>();arguments.put("width", 640);arguments.put("height", 640);arguments.put("resize", true);//调整图片大小arguments.put("rescale", true);//图片值编程0-1之间Translator<Image, DetectedObjects> translator = YoloV5Translator.builder(arguments).optSynsetArtifactName("synset.txt").build();Criteria<Image, DetectedObjects> criteria =Criteria.builder().optApplication(Application.CV.INSTANCE_SEGMENTATION).setTypes(Image.class, DetectedObjects.class).optDevice(Device.cpu()).optModelPath(Paths.get("D:\\work\\git\\model\\pt")).optModelName("best.torchscript.pt").optTranslator(translator).optProgress(new ProgressBar()).optEngine("PyTorch").build();return criteria;}
}

2.获取rtsp视频流

 /*** @Author bjiang* @Description //TODO 获取rtsp视频流* @Date 15:47 2022/1/14* @Version 1.0* @Param [url]* @return void*/public static FFmpegFrameGrabber getRtspByUrl(String url) {FFmpegFrameGrabber grabber = new FFmpegFrameGrabber(url);grabber.setFormat("rtsp");String byte2Base64= null;try {byte2Base64 = RSAUtil.getMsgByRsa("****");} catch (Exception e) {e.printStackTrace();}grabber.setOption("rtsp_transport", "tcp");//tcp传输协议grabber.setOption("appkey", "****");//海康视频 appkeygrabber.setOption("secret", byte2Base64);//海康视频 secretgrabber.setOption("playMode", "0");//初始播放模式:0-预览,1-回放grabber.setOption("port", "446");//综合安防管理平台端口,若启用HTTPS协议,默认443grabber.setOption("enableHTTPS", "1"); //是否启用HTTPS协议与综合安防管理平台交互,这里总是填1grabber.setOption("rtsp_flags", "prefer_tcp");grabber.setOption("stimeout", "3000000");try {grabber.start();} catch (FFmpegFrameGrabber.Exception e) {e.printStackTrace();}return grabber;}

3.增加窗口,实时显示视频流

/*** @Author bjiang* @Description //TODO 显示目标监测窗口* @Date 16:00 2022/1/14* @Version 1.0* @Param [grabber]* @return void*/public static void showCanvasFrame(FFmpegFrameGrabber grabber) throws Exception {OpenCVFrameConverter.ToMat converter = new OpenCVFrameConverter.ToMat();// 新建视频实时显示窗口CanvasFrame canvas = new CanvasFrame("目标监测"); canvas.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);canvas.setVisible(true);canvas.setFocusable(true);if (canvas.isAlwaysOnTopSupported()) {canvas.setAlwaysOnTop(true);}Frame frame = null;Criteria<Image, DetectedObjects> criteria =new ModelCriteria().getCriteria();try (ZooModel model = ModelZoo.loadModel(criteria);Predictor<Image, DetectedObjects> predictor = model.newPredictor()) {for (;canvas.isVisible() && (frame = grabber.grabImage()) != null; ) {Mat img = converter.convert(frame);drawObject(predictor,img);//显示视频canvas.showImage(frame);//recorder.record(frame);}}}

4.在视频窗口绘制目标检测结果

/*** @Author bjiang* @Description //TODO 绘制检测信息* @Date 8:57 2022/1/17* @Version 1.0* @Param [predictor, img]* @return void*/public static void drawObject(Predictor<Image, DetectedObjects> predictor,Mat img) throws Exception {BufferedImage buffImg = mat2BufferedImage(img);Image image = ImageFactory.getInstance().fromImage(buffImg);int imageWidth = image.getWidth();int imageHeight = image.getHeight();log.info("imageWidth={},imageHeight={}",imageWidth,imageHeight);DetectedObjects detections = predictor.predict(image);List<DetectedObjects.DetectedObject> items = detections.items();// 遍历检测物for (DetectedObjects.DetectedObject item : items) {BoundingBox box = item.getBoundingBox();Rectangle rectangle = box.getBounds();int x = (int) (rectangle.getX() * imageWidth);int y = (int) (rectangle.getY() * imageHeight);Rect face =new Rect(x,y,(int) (rectangle.getWidth() * imageWidth),(int) (rectangle.getHeight() * imageHeight));// 绘制矩形区域rectangle(img, face, new Scalar(0, 0, 255, 1));int pos_x = Math.max(face.tl().x() - 10, 0);int pos_y = Math.max(face.tl().y() - 10, 0);String className=item.getClassName()+" " + item.getProbability();// 绘制检测物与可能性putText(img,className,new Point(pos_x, pos_y),FONT_HERSHEY_COMPLEX,1.0,new Scalar(0, 0, 255, 2.0));}}

附:工具类

  //生成秘钥对public static KeyPair getKeyPair() throws Exception {KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");keyPairGenerator.initialize(2048);KeyPair keyPair = keyPairGenerator.generateKeyPair();return keyPair;}//获取公钥(Base64编码)public static String getPublicKey(KeyPair keyPair){PublicKey publicKey = keyPair.getPublic();byte[] bytes = publicKey.getEncoded();return byte2Base64(bytes);}//将Base64编码后的公钥转换成PublicKey对象public static PublicKey string2PublicKey(String pubStr) throws Exception{byte[] keyBytes = base642Byte(pubStr);X509EncodedKeySpec keySpec = new X509EncodedKeySpec(keyBytes);KeyFactory keyFactory = KeyFactory.getInstance("RSA");PublicKey publicKey = keyFactory.generatePublic(keySpec);return publicKey;}//公钥加密public static byte[] publicEncrypt(byte[] content, PublicKey publicKey) throws Exception{Cipher cipher = Cipher.getInstance("RSA");cipher.init(Cipher.ENCRYPT_MODE, publicKey);byte[] bytes = cipher.doFinal(content);return bytes;}//字节数组转Base64编码public static String byte2Base64(byte[] bytes){BASE64Encoder encoder = new BASE64Encoder();return encoder.encode(bytes);}//Base64编码转字节数组public static byte[] base642Byte(String base64Key) throws IOException{BASE64Decoder decoder = new BASE64Decoder();return decoder.decodeBuffer(base64Key);}/*** @Author bjiang* @Description //TODO 获取rsa加密数据* @Date 15:48 2022/1/14* @Version 1.0* @Param [message]* @return java.lang.String*/public static String getMsgByRsa(String message) throws Exception {KeyPair keyPair = RSAUtil.getKeyPair();String publicKeyStr = RSAUtil.getPublicKey(keyPair);PublicKey publicKey = RSAUtil.string2PublicKey(publicKeyStr);byte[] publicEncrypt = RSAUtil.publicEncrypt(message.getBytes(), publicKey);String byte2Base64 = RSAUtil.byte2Base64(publicEncrypt);return byte2Base64;}
/*** 将mat转BufferedImage**/public static BufferedImage mat2BufferedImage(Mat matrix) {int cols = matrix.cols();int rows = matrix.rows();int elemSize = (int) matrix.elemSize();byte[] data = new byte[cols * rows * elemSize];matrix.data().get(data);int type = 0;switch (matrix.channels()) {case 1:type = BufferedImage.TYPE_BYTE_GRAY;break;case 3:type = BufferedImage.TYPE_3BYTE_BGR;byte b;for (int i = 0; i < data.length; i = i + 3) {b = data[i];data[i] = data[i + 2];data[i + 2] = b;}break;default:return null;}BufferedImage image = new BufferedImage(cols, rows, type);image.getRaster().setDataElements(0, 0, cols, rows, data);return image;}

5.运行结果

    @RequestMapping("/detectionRtsp")public void detectionRtsp(String input){FFmpegFrameGrabber grabber=RtspUtils.getRtspByUrl(input);try {RtspUtils.showCanvasFrame(grabber);} catch (Exception e) {e.printStackTrace();}}

 <!--  javacv--><dependency><groupId>org.bytedeco</groupId><artifactId>javacv</artifactId><version>1.5.6</version></dependency><dependency><groupId>org.bytedeco</groupId><artifactId>ffmpeg-platform</artifactId><version>4.4-1.5.6</version></dependency><dependency><groupId>org.bytedeco</groupId><artifactId>javacv-platform</artifactId><version>1.5.6</version></dependency><!--djl所需要的jar包--><dependency><groupId>ai.djl</groupId><artifactId>basicdataset</artifactId><version>${djl.version}</version></dependency><dependency><groupId>ai.djl</groupId><artifactId>api</artifactId><version>${djl.version}</version></dependency><dependency><groupId>ai.djl.pytorch</groupId><artifactId>pytorch-model-zoo</artifactId><version>${djl.version}</version></dependency><dependency><groupId>ai.djl</groupId><artifactId>basicdataset</artifactId><version>${djl.version}</version></dependency><dependency><groupId>ai.djl.pytorch</groupId><artifactId>pytorch-engine</artifactId><version>${djl.version}</version><scope>runtime</scope></dependency><dependency><groupId>ai.djl.pytorch</groupId><artifactId>pytorch-native-auto</artifactId><scope>runtime</scope><version>1.9.1</version></dependency>

DJL调用目标检测模型检测rtsp视频流相关推荐

  1. 手把手教你使用 YOLOV5 训练目标检测模型

    作者 | 肆十二 来源 | CSDN博客 这次要使用YOLOV5来训练一个口罩检测模型,比较契合当下的疫情,并且目标检测涉及到的知识点也比较多. 先来看看我们要实现的效果,我们将会通过数据来训练一个口 ...

  2. 目标检测模型从训练到部署!

    Datawhale干货 作者:张强,Datawhale成员 训练目标检测模型并部署到你的嵌入式设备,让边缘设备长"眼睛". 目标检测的任务是找出图像中所有感兴趣的目标(物体),确定 ...

  3. 精度45.9%,推理速度72.9FPS,百度飞桨推出工业级目标检测模型 PP-YOLO

    允中 发自 凹非寺 量子位 编辑 | 公众号 QbitAI 工业视觉.自动驾驶.安防.新零售等我们身边熟知的各行各业都需要目标检测技术,由于其很好的平衡了标注成本.检测精度和速度等,成为当前智能制造产 ...

  4. 用OpenCV实现超轻量的NanoDet目标检测模型!

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨nihate 审稿丨邓富城 编辑丨极市平台 导读 本文作者用OpenCV部署了超轻量目标检测模型 ...

  5. 使用TF lite 优化 MobileDet 目标检测模型部署

    文 / Sayak Paul,Google Developer Expert 今年,来自威斯康星大学麦迪逊分校和 Google 的研究人员发表了他们在 MobileDet 上所做的研究工作.他们在 M ...

  6. NanoDet:这是个小于4M超轻量目标检测模型

    摘要:NanoDet 是一个速度超快和轻量级的移动端 Anchor-free 目标检测模型. 前言 YOLO.SSD.Fast R-CNN等模型在目标检测方面速度较快和精度较高,但是这些模型比较大,不 ...

  7. 目标检测模型---SSD

    SSD 1.SSD网络模型 2. 先验框的准备(default box//Prior box) 3. VOC格式数据集的准备 4. 模型训练 4.1 模型如何从特征中获取预测结果 4.2 ground ...

  8. 基于PaddlePaddle实现的目标检测模型SSD

    原文博客:Doi技术团队 链接地址:https://blog.doiduoyi.com/authors/1584446358138 初心:记录优秀的Doi技术团队学习经历 本文链接:基于PaddleP ...

  9. 目标检测模型从训练到部署,其实如此简单

    目标检测的任务是找出图像中所有感兴趣的目标(物体),确定它们的类别和位置,是计算机视觉领域的核心问题之一.目标检测已应用到诸多领域,比如如安防.无人销售.自动驾驶和军事等. 在许多情况下,运行目标检测 ...

最新文章

  1. 计算机组成原理 — 存储系统
  2. 多线程设计模式(四):生产者-消费模式
  3. 如何创建HTML Mashup并插入到SAP Cloud for Customer标准页面里
  4. 关于PHP各种循环,关于php迭代循环(无限分类)
  5. “意念打字”终成真!准确率超 99%,还登上了《Nature》封面!
  6. 微信小程序富文本编辑器 editor 组件源码
  7. 金税盘显示frm000013_开票软件(金税盘版)2020年4月征期抄报方法/季报方法!
  8. css学习25:设置文本样式
  9. repo sync error: Exited sync due to fetch errors
  10. bash: yum:未找到命令
  11. multisimbcd码_8421BCD码加法器报告1
  12. 全国计算机普通话考试,全国普通话考试内容
  13. 程序员面试,为什么不跟我谈高并发?
  14. 信捷pLC C语言错误格式,信捷PLC常见问题及处理方法大全
  15. oracle ebs 请求 待定,EBS 并发请求 计划 fnd_conc_release_classes(示例代码)
  16. 关于手机定位精度的调研报告
  17. ssm+vue学生网络作业管理系统java maven
  18. Java 面向对象之井字棋
  19. 【vim】vim行首加入某字符
  20. 第11周 oj 日期妙算星座

热门文章

  1. Reactor3 Flux 创建
  2. ROI Pooling
  3. python爬取斗鱼_python selenium爬取斗鱼所有直播房间信息过程详解
  4. Could not find method stopService(View) in a parent or ancestor Context for android:onClick attribut
  5. 想申请出国留学研究生,原来大学阶段是这么规划的
  6. 未来30年推动全球经济增长的主要动力是数据资产
  7. 2021-06-04 自动排单软件半导体工艺的解决方案
  8. Permission denied 解决办法
  9. 炎炎夏日最新版Excel导入导出工具类火热出炉
  10. thickbox问题