闲的无聊突然想做树莓派小车,构想是主机端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年前的,本人站在先辈肩膀上,实现此功能。
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
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传送门