1. 启动Kafka Server

bin/kafka-server-start.sh config/server.properties &

2. 创建一个新topic

bin/kafka-topics.sh --create --zookeeper xxxx --replication-factor 1 --partitions 1 --topic video

3. 安装相关依赖

sudo pip-3.6 install kafka-python opencv-contrib-python imutils

4. 创建一个 Kafka Producer,并发送到kafka消息队列
# kafkaProducer
def publish_video(server, topic):
   # start producer
  
producer = KafkaProducer(bootstrap_servers=server)

vs = VideoStream(src=0).start()
   time.sleep(2.0)

print("publishing video...")

while True:
      frame = vs.read()
      frame = imutils.resize(frame, width=400)
      frame = detection(frame, 'pretrained.prototxt.txt', 'pretrained.caffemodel')

# send to kafka topic
     
producer.send(topic, frame.tobytes())

vs.stop()

这里使用opencv 采集本地摄像头视频,读取每一帧数据,做图像识别处理,并转化为bytes数据发送到 kafka topic。

这里选择了在Producer端直接对图像做处理,然后直接发送到流,Consumer端只做图像显示。

其中detection方法为以一个已经训练好的深度学习模型,用于做图像识别以及描绘边框。网上类似模型很多,这里不多做赘述。这里对每帧做了一个resize是由于原视频采集的每帧数据较大,超过了kafka里默认的一个item大小,所以需要裁剪每帧,以减少传输数据量。

5. 验证是否可以接收到流数据:

bin/kafka-console-consumer.sh --bootstrap-server xxxx:port --topic video

6. 创建一个Kafka Consumer,用于获取流数据

from imutils.video import VideoStream
from imutils.video import FPS
import imutils
import numpy as np
import time
import cv2
from kafka import KafkaConsumer
import sys def showCam(server, topic):
    consumer = KafkaConsumer(
        topic,
        bootstrap_servers=[server])     fps = FPS().start()     for msg in consumer:
       
decoded = np.frombuffer(msg.value, np.uint8)
        decoded = decoded.reshape(225, 400, 3)         cv2.imshow("Cam", decoded)         key = cv2.waitKey(1) & 0xFF
        if key == ord("q"):
            break         fps.update()     fps.stop()
    cv2.destroyAllWindows()

这里使用np.frombuffer() 方法将每一帧的bytes数据转为一维numpy数组,由于采集的帧数据为3维numpy数组,所以需要对此数组做reshape,以还原为原数据格式,最后显示在屏幕上。

7. 执行代码:

首先启动 Consumer:python3 kafkaCCam.py server:port topic

然后启动 Producer:python3 KafkaPCam.py server:port topic

即可在Consumer端获取到Producer送入到流里的实时视频图像:

Kafka+OpenCV 实现实时流视频处理的更多相关文章

  1. kafka实时流数据架构

    初识kafka https://www.cnblogs.com/wenBlog/p/9550039.html 简介 Kafka经常用于实时流数据架构,用于提供实时分析.本篇将会简单介绍kafka以及它 ...

  2. Kafka 在行动:7步实现从RDBMS到Hadoop的实时流传输

    原文:https://coyee.com/article/11095-kafka-in-action-7-steps-to-real-time-streaming-from-rdbms-to-hado ...

  3. opencv读取摄像头实时流代码

    opencv读取摄像头实时流代码: #include <opencv2/opencv.hpp> #include <iostream> using namespace cv; ...

  4. Confluent Platform 3.0支持使用Kafka Streams实现实时的数据处理(最新版已经是3.1了,支持kafka0.10了)

    来自 Confluent 的 Confluent Platform 3.0 消息系统支持使用 Kafka Streams 实现实时的数据处理,这家公司也是在背后支撑 Apache Kafka 消息框架 ...

  5. Storm概念学习系列之什么是实时流计算?

    不多说,直接上干货! 什么是实时流计算?    1.实时流计算背景 2.实时计算应用场景 3.实时计算处理流程 4.实时计算框架 什么是实时流计算? 所谓实时流计算,就是近几年由于数据得到广泛应用之后 ...

  6. 基于Hadoop生态SparkStreaming的大数据实时流处理平台的搭建

    随着公司业务发展,对大数据的获取和实时处理的要求就会越来越高,日志处理.用户行为分析.场景业务分析等等,传统的写日志方式根本满足不了业务的实时处理需求,所以本人准备开始着手改造原系统中的数据处理方式, ...

  7. Spark入门实战系列--7.Spark Streaming(上)--实时流计算Spark Streaming原理介绍

    [注]该系列文章以及使用到安装包/测试数据 可以在<倾情大奉送--Spark入门实战系列>获取 .Spark Streaming简介 1.1 概述 Spark Streaming 是Spa ...

  8. RTSP RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议

    RTSP 编辑 RTSP(Real Time Streaming Protocol),RFC2326,实时流传输协议,是TCP/IP协议体系中的一个应用层协议,由哥伦比亚大学.网景和RealNetwo ...

  9. [翻译]Kafka Streams简介: 让流处理变得更简单

    Introducing Kafka Streams: Stream Processing Made Simple 这是Jay Kreps在三月写的一篇文章,用来介绍Kafka Streams.当时Ka ...

随机推荐

  1. python小程序打包

    1.首先先要安装 pip install pywin32 pip install pyinstaller 没有越狱安装不了加个国内镜像地址: pip install pyinstaller -i ht ...

  2. PHP----------php的opcache扩展配置参数介绍

    [opcache]zend_extension = "路径/ext/php_opcache.dll" ; Zend Optimizer + 的开关, 关闭时代码不再优化.opcac ...

  3. 北京大学Cousera学习笔记--1-学习规划

    1.计算机导论与C语言基础 1>.计算导论:计算机的基本原理.计算机的发展趋势.程序运行的基本原理 2>.C程序设计:感性认识C程序.理性认识C程序:机构化的程序-函数.更多的数据结构 2 ...

  4. poi java读取excel文件

    官网使用学习链接地址 http://poi.apache.org/components/spreadsheet/quick-guide.html

  5. C++---使用VS在C++编程中出现 fatal error C1010: 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include "stdafx.h"”?

    啦啦啦,好久没写博客啦... 对于C++初学者来说适应一个新的编译器还是需要蛮长一段时间的,现在我就给你们说说标题所说的这个问题吧... 第一步:菜单--〉项目--〉设置,出现“项目设置”对话框,左边 ...

  6. android sdk 安装 配置

    下载android sdk manager:http://dl.google.com/android/installer_r24.4.1-windows.exe 打开sdk manager 在tool ...

  7. 279. Perfect Squares(动态规划)

    Given a positive integer n, find the least number of perfect square numbers (for example, 1, 4, 9, 1 ...

  8. MAVEN简介之——settings.xml

    概述 Maven的settings.xml配置了Maven执行的方式,像pom.xml一样,但是它是一个通用的配置, 不能绑定到任何特殊的项目.它通常包括本地仓库地址,远程仓库服务,认证信息等. se ...

  9. 【SS & KCP centos7配置】

    1 依赖和环境配置 1.1 升级 yum $ yum update 1.2 安装 screen $ yum install screen 关于 screen 的详情:http://www.vpser. ...

  10. 向 Nginx 主进程发送 USR1 信号

    [1]Nginx重新打开日志文件 向 Nginx 主进程发送 USR1 信号.USR1 信号是重新打开日志文件: 方式一: kill -USR1 $(cat /usr/local/lib/ubcsrv ...