树莓派CSI摄像头实现rtsp流的传输,笔记本使用Python调用Opencv显示 您所在的位置:网站首页 树莓派读取摄像头数据 树莓派CSI摄像头实现rtsp流的传输,笔记本使用Python调用Opencv显示

树莓派CSI摄像头实现rtsp流的传输,笔记本使用Python调用Opencv显示

2024-07-03 03:27| 来源: 网络整理| 查看: 265

闲的无聊突然想做树莓派小车,构想是主机端python程序可以实时看到树莓派摄像头图像,并可以控制小车方向移动等功能。

 主机端使用opencv调用树莓派摄像头,代码差不多这个样子

import cv2 import tkinter as tk from tkinter import * from PIL import Image, ImageTk#图像控件 url = "rtsp://192.168.0.117:9554/webcam" #关键点在这个地方,树莓派通过rtsp传输 cap = cv2.VideoCapture(url)#创建摄像头对象 #界面画布更新图像 def tkImage(): ref,frame=cap.read() frame = cv2.flip(frame, 1) #摄像头翻转 cvimage = cv2.cvtColor(frame, cv2.COLOR_BGR2RGBA) pilImage=Image.fromarray(cvimage) pilImage = pilImage.resize((image_width, image_height),Image.ANTIALIAS) tkImage = ImageTk.PhotoImage(image=pilImage) return tkImage top = tk.Tk() top.title('CAR') top.geometry('900x600') image_width = 600 image_height = 500 canvas = Canvas(top,bg = 'white',width = image_width,height = image_height )#绘制画布 Label(top,text = '摄像头视频',font = ("黑体",14),width =15,height = 1).place(x =400,y = 20,anchor = 'nw') canvas.place(x = 150,y = 50) while True: pic = tkImage() canvas.create_image(0,0,anchor = 'nw',image = pic) top.update() top.after(100) cap.release() top.mainloop()

 本文关键就是哪个url如何得到!

————————————————分割线————————————————

正文开始

声明主要参考文献:

1、https://blog.csdn.net/u013062192/article/details/80210166

2、https://blog.csdn.net/a805995924/article/details/39435261

本文整合多篇参考文献,因为以前教程都是n年前的,本人站在先辈肩膀上,实现此功能。

第一步:安装live555

1、下载live555,地址:http://live555.com/liveMedia/public/live555-latest.tar.gz

树莓派可直接命令行(建议新建文件夹,方便后期更改目录,第一段代码是在根目录下建立live555文件夹,若是不想建立,直接第三行就ok)

mkdir /live555 cd /live555 wget http://live555.com/liveMedia/public/live555-latest.tar.gz

 2、解压

tar -zxvf live555-latest.tar.gz

 3、编译安装

cd live sudo ./genMakefiles linux sudo make sudo make install

 第一步基本不会出错。

第二步:安装库文件 sudo apt-get install libavcodec-dev sudo apt-get install libswscale-dev sudo apt-get install libavutil-dev 第三步:编译安装ffmpeg与libx264

1、准备文件(建议下载至第一步创建的文件夹 /live555 中)

①、ffmpeg源码

GitHub地址:https://github.com/FFmpeg/FFmpeg.git

可在树莓派直接命令行(不能科学上网可在笔记本下载,然后发送到树莓派端)

git clone git://github.com/FFmpeg/FFmpeg.git

②、x264源码

GitHub地址:https://github.com/mirror/x264.git

可在树莓派直接命令行(不能科学上网可在笔记本下载,然后发送到树莓派端)

git clone git://github.com/mirror/x264.git

③、yasm源码

下载地址:http://www.tortall.net/projects/yasm/releases/yasm-1.3.0.tar.gz

2、编译安装

①、安装yasm

tar zxvf yasm-1.3.0.tar.gz cd yasm-1.3.0 ./configure make make install yasm --version

安装成功标志是可以成功查看版本号。

②、编译安装x264

先解压压缩文件,我第二段代码重命名了一下,方便后续操作,这地方重不重命名都可以。打开对应文件夹即可。

unzip x264-master.zip mv x264-master x264 cd x264

开始编译,正确写法

./configure \ --prefix=${DEST_LIB_DIR} \ --enable-shared

然后(没管理员权限自己获取)

make make install

③、编译ffmpeg

解压FFmpeg-master.zip(这个地方我重命名了一下,重不重命名都可以)

unzip FFmpeg-master.zip mv FFmpeg-master ffmpeg cd ffmpeg

打开所在目录下

./configure --enable-libx264 --enable-gpl --enable-shared --extra-cflags=-I/usr/local/include --extra-ldflags=-L/usr/local/lib --enable-pic make make install

如果出现以下错误(正常操作不会遇到)

ffmpeg: error while loading shared libraries: libavdevice.so.52: cannot open shared object file: No such file or directory

解决办法:

则需要修改文件:/etc/ld.so.conf

在文件尾添加一行:

/usr/local/lib

然后执行命令:

ldconfig

重新运行ffmpeg -encoders | grep x264会发现安装成功

第四步:编译执行工具

1、下载源码

Gitee源码地址:https://gitee.com/secho1997/live_camera_linux.git

主机下载源码之后传输至树莓派端,树莓派将源码复制到/opt/vc/src/hello_pi/目录下

2、解压源码(文件名称看实际情况)

unzip secho1997-live_camera_linux-master.zip

3、阅读hello_pi文件夹下的README

 按照提示,build the libs

make -C libs/ilclient make -C libs/vgfont

完成此步之后进入live_camera_linux文件夹

cd live_camera_linux

阅读live_camera_linux文件下的README

 按照他说的安装软件开发包(没管理员命令的自己获取)

sudo apt-get install libavcodec-dev sudo apt-get install libswscale-dev sudo apt-get install libavutil-dev sudo apt-get install libx264-dev

然后尝试编译

cd live_camera_linux sudo make sudo make install sudo ./zk_v4l2_x264_source

是不是报错了?正常,哈哈。

错误一:

make: *** 没有规则可制作目标“/home/pi/live/liveMedia/libliveMedia.a”,由“zk_v4l2_x264_source” 需求。 停止。

此错误查看下文第一个坑

错误二:

gcc -L/opt/vc/lib -lEGL -lGLESv2 -ljpeg -shared -o libshapes.so oglinit.o libshapes.o /usr/bin/ld: cannot find -lEGL /usr/bin/ld: cannot find -lGLESv2 collect2: error: ld returned 1 exit status Makefile:35: recipe for target 'library' failed make: *** [library] Error 1

 此错误查看下文第三个坑

出现其他错误,就按照第二个坑和第四个坑修补,全都补上!

补坑秘籍:

查看live_camera_linux文件夹下的Makefile文件

此处四个坑

第一个:要把第一步安装的live555的正确安装位置写上。

第二个:在INCLUDES后面加上(别忘了上一行末尾加个 \ 反斜杠这个东西,图中是正确示范)

-I/opt/vc/src/hello_pi/libs/ilclient

第三个:由于年代久远和版本更替,为了避免不同版本发生冲突,一些关键字的名称发生了变化,此处将原来的

-lEGL -lGLESv2

改为

-lbrcmEGL -lbrcmGLESv2

第四个:LDFLAGS(也就是第三步修改的那一行末尾)后面加上(先空格再加!)

-lssl -lcrypto

OK,填上四个坑,问题得以解决。

然后可以试试重新编译

sudo make sudo make install sudo ./zk_v4l2_x264_source

注意:sudo make install这一步成不成功无所谓,主要是看live_camera_linux  目录下有没有多一个zk_v4l2_x264_source(没有后缀)这个文件,有这个文件就好说。直接

sudo ./zk_v4l2_x264_source

运行就行。

成功出现以下内容则成功

[3278] WebcamOndemandMediaSubsession .... calling using url "rtsp://192.168.0.117:9554/webcam"

然后成功效果图如下:

 如果没成功说明前面步骤不太对,仔细观察。

总结

整这玩意花了我一天时间,可愁死我了。因为网上文章都太过久远,目前来说错误很多,我根据前人写的很多经验,写出了本贴,希望本贴可以节约读者时间。

ps:这玩意延迟很大,少说要有三秒,还不如mjpg。mjpg传送门



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有