Difference between revisions of "Template:Linux-RK3399MIPICamera/zh"

From FriendlyARM WiKi
Jump to: navigation, search
(updated by API)
(updated by API)
 
(19 intermediate revisions by the same user not shown)
Line 1: Line 1:
===FriendlyCore下使用MIPI摄像头OV13850===
+
===Linux下使用摄像头(MIPI接口摄像头OV13850与OV4689,USB摄像头罗技C920)===
 
+
FriendlyCore下支持MIPI摄像头OV13850,提供支持ISP的Gstreamer插件,所以可以很好地发挥RK3399的性能。<br />
+
<br />
+
 
摄像头连接方法:
 
摄像头连接方法:
{{{1}}}板上共有两个MIPI接口,由于FriendlyCore目前仅配置了 '''MIPI-CSI1''',所以摄像头只能连接在 MIPI-CSI1 接口:<br />
+
摄像头可以连接在MIPI接口,如下图所示:<br />
::{| class="wikitable"
+
{{#switch: {{{1}}}
|-
+
| NanoPC-T4 =
|接口位置 || 摄像头
+
[[File:T4-mipi-single-camera.jpg|frameless|600px]]<br>
|-
+
| NanoPi-M4 =
|MIPI-CSI1    || OV13850
+
[[File:M4-mipi-single-camera.jpg|frameless|600px]]<br>
|-
+
| NanoPi-M4V2 =
|MIPI-CSI2    || 不可用
+
[[File:M4-mipi-single-camera.jpg|frameless|600px]]<br>
|}
+
| NanoPi-M4B =
<br />
+
[[File:M4-mipi-single-camera.jpg|frameless|600px]]<br>
为了方便测试摄像头,我们提供了一个脚本gst-camera.sh可以在命令行测试摄像头的拍照和录像功能,这个脚本可以用以下命令下载安装:
+
| NanoPi-NEO4 =
 +
[[File:Neo4-mipi-single-camera.jpg|frameless|600px]]<br>
 +
| #default =
 +
}}
 +
 
 +
<!--
 +
M4-mipi-dual-camera.jpg
 +
T4-mipi-dual-camera.jpg
 +
-->
 +
 
 +
为了方便测试摄像头,我们提供了脚本可以在命令行测试摄像头的拍照和录像功能。<br />
 +
你可以用以下命令更新这个脚本到最新版本:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
sudo wget http://112.124.9.243:8888/rk3399/gst-camera.sh -O `which gst-camera.sh`
+
cd /tmp/
 +
git clone https://github.com/friendlyarm/gst-camera-sh.git
 +
sudo cp gst-camera-sh/*.sh /usr/bin/
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
共有以下三个脚本:<br />
 +
gst-camera.sh: 单个摄像头的预览、拍照与录像 <br />
 +
dual-camera.sh: 预览两个摄像头 <br />
 +
stop-gst-camera.sh: 停止预览<br />
 
<br />
 
<br />
 
====gst-camera.sh 参数说明====
 
====gst-camera.sh 参数说明====
Line 24: Line 39:
 
|参数 || 功能
 
|参数 || 功能
 
|-
 
|-
|\-\-index || 选择要使用的摄像头的序号,可选值为0和1,当同时连接两个摄像头时,指定为1表示要操作第二个摄像头
+
| --index或-i || 选择要使用的摄像头的序号,可选值为0和1,当同时连接两个摄像头时,指定为1表示要操作第二个摄像头
 
|-
 
|-
|\-\-mode || 指定摄像头的分辨率,比如720P 30FPS 则使用参数为 width=1280,height=720,framerate=30/1
+
| --action或-a || 指定命令要执行的动作,可选参数为: preview、photo和video,分别对应预览、拍照和录像
 
|-
 
|-
|\-\-active || 指定命令要执行的动作,可选参数为: preview、photo和video,分别对应预览、拍照和录像
+
| --output或-o || 指定输出的文件名,用于拍照和录像时指定输出文件名
 
|-
 
|-
|\-\-output || 指定输出的文件名,用于拍照和录像时指定输出文件名
+
| --verbose或-v || 指定为yes时,会输出调用gst-launch-1.0命令的完整命令行
 +
|-
 +
|  -x || 使用rkximagesink插件,预览图像会输出到X11窗口,适用于FriendlyDesktop与Lubuntu系统
 +
|-
 +
|  -g || 使用glimagesink插件,预览图像会输出到X11窗口,适用于FriendlyDesktop与Lubuntu系统
 +
|-
 +
|  -k || 使用kmssink插件,预览图像会直接输出到屏幕,适用于FriendlyCore系统
 
|}
 
|}
  
====gst-camera.sh 使用方法====
+
脚本gst-camera.sh会自动识别OV13850/OV4689/罗技C920摄像头,并传递合适的参数给gst-launch-1.0。
 +
 
 +
====脚本使用方法====
 
* '''预览图像'''
 
* '''预览图像'''
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
Line 39: Line 62:
 
</syntaxhighlight>
 
</syntaxhighlight>
 
* '''拍照'''
 
* '''拍照'''
用以下命令拍照一张照片,存储为文件 1.jpg:
+
用命令拍照一张照片,存储为文件 1.jpg:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
gst-camera.sh --action photo -o 1.jpg
+
gst-camera.sh -a photo -o 1.jpg
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 
* '''录像并预览'''
 
* '''录像并预览'''
用以下命令启动边预览边录像,存储为视频文件 1.ts,录像时使用了硬件编码:
+
用以下命令启动录像,存储为视频文件 1.ts,录像时使用了硬件编码:
 
<syntaxhighlight lang="bash">
 
<syntaxhighlight lang="bash">
gst-camera.sh --action video -o 1.ts
+
gst-camera.sh --action video -output 1.ts
 
</syntaxhighlight>
 
</syntaxhighlight>
 
<br />
 
<br />
 +
* '''显示完整的命令'''
 +
加入 --verbose yes 的参数,会显示最终的 gsteamer 命令,例如:
 +
<syntaxhighlight lang="bash">
 +
gst-camera.sh --action video --output 1.ts --verbose yes
 +
</syntaxhighlight>
 +
你会得到以下完整的 gsteamer 命令,这对你开发会有帮助:
 +
<syntaxhighlight lang="bash">
 +
gst-launch-1.0 rkisp num-buffers=512 device=/dev/video0 io-mode=1 ! \
 +
    video/x-raw,format=NV12,width=1280,height=720,framerate=30/1 ! \
 +
        mpph264enc ! queue ! h264parse ! mpegtsmux ! \
 +
        filesink location=/tmp/camera-record.ts
 +
</syntaxhighlight>
 +
* '''预览双摄像头'''
 +
连接两个mipi摄像头,或者一个mipi摄像头加一个usb摄像头(仅测试过:罗技C920 pro),调用以下命令即可同时预览两个摄像头的图像:
 +
<syntaxhighlight lang="bash">
 +
dual-camera.sh
 +
</syntaxhighlight>
 +
注:建议在FriendlyDesktop下测试。
 +
 +
====gst-launch-1.0命令行解析====
 +
在FriendlyDesktop下预览摄像头命令如下:
 +
<syntaxhighlight lang="bash">
 +
gst-launch-1.0 rkisp device=/dev/video1 io-mode=4 ! video/x-raw,format=NV12,width=1280,height=720,framerate=30/1 ! rkximagesink
 +
</syntaxhighlight>
 +
重要参数说明:
 +
::{| class="wikitable"
 +
|-
 +
|参数 || 说明
 +
|-
 +
| device || 用于预览的device (selfpath) 是 /dev/video1, 用于拍照的device (mainpath) 是 /dev/video0, 如果是多路摄像头,则另一路预览(selfpath)是 /dev/video5, 另一路拍照 (mainpath)是 /dev/video4, USB摄像头一般都是 /dev/video8
 +
|-
 +
| io-mode || 值为1表示是memory map模式,值为4表示是dmabuf模式,一般预览用io-mode=4,拍照用io-mode=1, 在OpenCV里访问用io-mode=4
 +
|-
 +
| rkximagesink/glimagesink/kmssink || 在X-Windows窗口中输出mipi摄像头图像时指定为rkximagesink (适用于FriendlyDesktop),如果是USB摄像头则指定为glimagesink,FriendlyCore下只能使用kmssink
 +
|}
 +
 +
====在OpenCV中访问摄像头====
 +
访问MIPI摄像头:
 +
<syntaxhighlight lang="python">
 +
cv.VideoCapture('rkisp device=/dev/video1 io-mode=4 ! video/x-raw,format=NV12,width=640,height=480,framerate=30/1 ! videoconvert ! appsink', cv.CAP_GSTREAMER)
 +
</syntaxhighlight>
 +
访问USB摄像头:
 +
<syntaxhighlight lang="python">
 +
cv.VideoCapture('rkisp device=/dev/video8 io-mode=4 ! videoconvert ! video/x-raw,format=NV12,width=640,height=480,framerate=30/1 ! videoconvert ! appsink', cv.CAP_GSTREAMER)
 +
</syntaxhighlight>
 +
<br />
 +
详情请参考这里的示例代码:https://github.com/friendlyarm/install-opencv-on-friendlycore/tree/rk3399/examples<br />
 +
<br />
 +
====摄像头应用教程: 推流至直播平台====
 +
请查看这篇文档: [[How to setup RTMP server on NanoPC-T4/zh]]<br />
 +
 +
====参考资源====
 +
http://blog.iotwrt.com/media/2017/10/01/camera/
 +
http://www.360doc.com/content/16/1019/17/496343_599664458.shtml

Latest revision as of 06:35, 27 November 2019

1 Linux下使用摄像头(MIPI接口摄像头OV13850与OV4689,USB摄像头罗技C920)

摄像头连接方法: 摄像头可以连接在MIPI接口,如下图所示:


为了方便测试摄像头,我们提供了脚本可以在命令行测试摄像头的拍照和录像功能。
你可以用以下命令更新这个脚本到最新版本:

cd /tmp/
git clone https://github.com/friendlyarm/gst-camera-sh.git
sudo cp gst-camera-sh/*.sh /usr/bin/

共有以下三个脚本:
gst-camera.sh: 单个摄像头的预览、拍照与录像
dual-camera.sh: 预览两个摄像头
stop-gst-camera.sh: 停止预览

1.1 gst-camera.sh 参数说明

参数 功能
--index或-i 选择要使用的摄像头的序号,可选值为0和1,当同时连接两个摄像头时,指定为1表示要操作第二个摄像头
--action或-a 指定命令要执行的动作,可选参数为: preview、photo和video,分别对应预览、拍照和录像
--output或-o 指定输出的文件名,用于拍照和录像时指定输出文件名
--verbose或-v 指定为yes时,会输出调用gst-launch-1.0命令的完整命令行
-x 使用rkximagesink插件,预览图像会输出到X11窗口,适用于FriendlyDesktop与Lubuntu系统
-g 使用glimagesink插件,预览图像会输出到X11窗口,适用于FriendlyDesktop与Lubuntu系统
-k 使用kmssink插件,预览图像会直接输出到屏幕,适用于FriendlyCore系统

脚本gst-camera.sh会自动识别OV13850/OV4689/罗技C920摄像头,并传递合适的参数给gst-launch-1.0。

1.2 脚本使用方法

  • 预览图像
gst-camera.sh --action preview
  • 拍照

用命令拍照一张照片,存储为文件 1.jpg:

gst-camera.sh -a photo -o 1.jpg
  • 录像并预览

用以下命令启动录像,存储为视频文件 1.ts,录像时使用了硬件编码:

gst-camera.sh --action video -output 1.ts


  • 显示完整的命令

加入 --verbose yes 的参数,会显示最终的 gsteamer 命令,例如:

gst-camera.sh --action video --output 1.ts --verbose yes

你会得到以下完整的 gsteamer 命令,这对你开发会有帮助:

gst-launch-1.0 rkisp num-buffers=512 device=/dev/video0 io-mode=1 ! \
    video/x-raw,format=NV12,width=1280,height=720,framerate=30/1 ! \
        mpph264enc ! queue ! h264parse ! mpegtsmux ! \
        filesink location=/tmp/camera-record.ts
  • 预览双摄像头

连接两个mipi摄像头,或者一个mipi摄像头加一个usb摄像头(仅测试过:罗技C920 pro),调用以下命令即可同时预览两个摄像头的图像:

dual-camera.sh

注:建议在FriendlyDesktop下测试。

1.3 gst-launch-1.0命令行解析

在FriendlyDesktop下预览摄像头命令如下:

gst-launch-1.0 rkisp device=/dev/video1 io-mode=4 ! video/x-raw,format=NV12,width=1280,height=720,framerate=30/1 ! rkximagesink

重要参数说明:

参数 说明
device 用于预览的device (selfpath) 是 /dev/video1, 用于拍照的device (mainpath) 是 /dev/video0, 如果是多路摄像头,则另一路预览(selfpath)是 /dev/video5, 另一路拍照 (mainpath)是 /dev/video4, USB摄像头一般都是 /dev/video8
io-mode 值为1表示是memory map模式,值为4表示是dmabuf模式,一般预览用io-mode=4,拍照用io-mode=1, 在OpenCV里访问用io-mode=4
rkximagesink/glimagesink/kmssink 在X-Windows窗口中输出mipi摄像头图像时指定为rkximagesink (适用于FriendlyDesktop),如果是USB摄像头则指定为glimagesink,FriendlyCore下只能使用kmssink

1.4 在OpenCV中访问摄像头

访问MIPI摄像头:

cv.VideoCapture('rkisp device=/dev/video1 io-mode=4 ! video/x-raw,format=NV12,width=640,height=480,framerate=30/1 ! videoconvert ! appsink', cv.CAP_GSTREAMER)

访问USB摄像头:

cv.VideoCapture('rkisp device=/dev/video8 io-mode=4 ! videoconvert ! video/x-raw,format=NV12,width=640,height=480,framerate=30/1 ! videoconvert ! appsink', cv.CAP_GSTREAMER)


详情请参考这里的示例代码:https://github.com/friendlyarm/install-opencv-on-friendlycore/tree/rk3399/examples

1.5 摄像头应用教程: 推流至直播平台

请查看这篇文档: How to setup RTMP server on NanoPC-T4/zh

1.6 参考资源

http://blog.iotwrt.com/media/2017/10/01/camera/ http://www.360doc.com/content/16/1019/17/496343_599664458.shtml