RISC-V技术论坛
直播中

HonestQiao

8年用户 545经验值
擅长:嵌入式技术
私信 关注

【赛昉科技昉·星光RISC-V单板计算机试用体验】使用海康威视USB摄像头拍照和录制视频

实录视频

最近在研究米尔的开发板,用上了一个海康威视的USB摄像头,很好用,于是想在星光派单板计算机也尝试使用。

米尔的开发板是arm64的,而咱们的星光派单板计算机,是RISC-V的,架构不一样,不清楚软件的支持情况如何。

进过一番尝试,发现异常的顺利,能够正常使用,现在将使用的过程,分享出来。

实际使用的海康威视USB摄像头如下:

image.png

将该USB摄像头,连接到USB接口即可:

image.png

因为我还研究了,在矽速M2 Dock上面通过网络获取星光派USB摄像头的数据,所以上图中带屏幕的就是M2 Dock,后续这个过程,也会给大家分享。我使用的是Debian系统,大家如果使用其他的系统,可以参考,根据系统实际情况进行处理。

启动星光派单板计算机,并使用ssh连接后,接上摄像头,拔下摄像头,通过dmesg命令可以看到信息:

dmesg

image.png

其中,红线上面的部分,是拔掉USB后的信息。

而红线下面的部分,则是接上USB摄像头后的信息。

从其中我们可以看到,系统识别到了HIK 720P Camera,其中有一个id信息idVendor=2bdf, idProduct=0280,这个非常重要,后面会使用到。

然后,我们可以安装v4l工具,来查看摄像头的具体参数信息:

# 安装v4l
sudo apt install v4l-utils

# 查看识别的摄像头设备
sudo v4l2-ctl --list-devices

# 查看摄像头支持的格式
sudo v4l2-ctl -d /dev/video0 --list-formats

# 查看摄像头支持的分辨率:
sudo v4l2-ctl --list-framesizes=MJPG -d /dev/video0

image.png

从上图中,可以看到,HIK 720P Camera挂载点钟,可以使用/dev/video0,支持MJPEG和YUYV格式,分辨率最高位720P。

获取了上面的摄像头基本信息后,就可以正式试用摄像头了。

为了让普通用户也能够使用/dev/video0设备,我们需要先做一下设置:

sudo vim /etc/udev/rules.d/my-uvc-usb.rules

### 添加下面这行
SUBSYSTEMS=="usb", ATTRS{idVendor}=="2bdf", ATTRS{idProduct}=="0280", GROUP="HonestQiao", MODE="0666"

这里的idVendor、idProduct需要与在demesg中看到接上USB摄像头后的信息保持一致。GROUP需要使用当前登录的用户。

设置完成后,使用sudo reboot重启生效即可。

要使用摄像头拍照和录制视频,需要是用合适的工具。

拍照部分,我使用了camorama,可以实时预览摄像头画面,并且在界面上点击拍照。

录制视频部分,可以试用的软件很多,我选择了使用命令行的ffmpeg,虽然使用难度大一点,但是能力强大,而身材有非常小巧。

拍照和录制视频后,还需要查看图片和播放视频,我使用的是ristretto和smplayer,两者都简单好用。

分别安装上面的4个软件:

sudo apt install camorama
sudo apt install ffmpeg
sudo apt install ristretto
sudo apt install smplayer

然而,当我配置好xfce桌面环境,打开操作的时候,速度奇慢无比,最终决定放弃桌面系统的操作,改为命令行操作了。

用命令行操作就简单了,一个ffmpeg命令,就搞定一切了。

拍照:

ffmpeg -f video4linux2 -r 1 -s 640x480 -i /dev/video0 -frames:v 1 test.jpg

录制视频:

ffmpeg -f video4linux2 -r 10 -s 640x480 -i /dev/video0 test.mp4

拍照和录制视频后,使用ssh将文件拷贝出来,就可以查看了。

test.jpg

上面是使用命令行工具,进行视频的拍摄,如果你会Python,那么可以用Python编程,来进行拍摄。

要用Python操作摄像头,需要先安装cv2模块

pip install opencv-python

然后编写camera_test.py:

#coding:utf-8
import cv2
cap = cv2.VideoCapture(0)
flag = cap.isOpened()
 
index = 1
while(flag):
    ret, frame = cap.read()
    # cv2.imshow("Capture_Paizhao",frame)
    k = cv2.waitKey(1) & 0xFF
    if k == ord('s'):     #按下s键,保存图片
        cv2.imwrite("./" + str(index) + ".jpg", frame)
        print(cap.get(3))
        print(cap.get(4))
        print("save" + str(index) + ".jpg successfuly!")
        print("-------------------------")
        index += 1
    elif k == ord('q'):     #按下q键,退出
        break
cap.release()
cv2.destroyAllWindows()

编写保存后,运行即可进行操作:

python camera_test.py

按s键拍照,按q键退出。

实录视频

更多回帖

发帖
×
20
完善资料,
赚取积分