最近在研究米尔的开发板,用上了一个海康威视的USB摄像头,很好用,于是想在星光派单板计算机也尝试使用。
米尔的开发板是arm64的,而咱们的星光派单板计算机,是RISC-V的,架构不一样,不清楚软件的支持情况如何。
进过一番尝试,发现异常的顺利,能够正常使用,现在将使用的过程,分享出来。
实际使用的海康威视USB摄像头如下:
将该USB摄像头,连接到USB接口即可:
因为我还研究了,在矽速M2 Dock上面通过网络获取星光派USB摄像头的数据,所以上图中带屏幕的就是M2 Dock,后续这个过程,也会给大家分享。我使用的是Debian系统,大家如果使用其他的系统,可以参考,根据系统实际情况进行处理。
启动星光派单板计算机,并使用ssh连接后,接上摄像头,拔下摄像头,通过dmesg命令可以看到信息:
dmesg
其中,红线上面的部分,是拔掉USB后的信息。
而红线下面的部分,则是接上USB摄像头后的信息。
从其中我们可以看到,系统识别到了HIK 720P Camera
,其中有一个id信息idVendor=2bdf, idProduct=0280
,这个非常重要,后面会使用到。
然后,我们可以安装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
从上图中,可以看到,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将文件拷贝出来,就可以查看了。
上面是使用命令行工具,进行视频的拍摄,如果你会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键退出。