香橙派使用摄像头
配置摄像头
我使用的是ov13855插在了板上的cam1口,需要使用一下命令开启支持
sudo orangepi-config
依次选择system/ hardware/ ov13855-c1,保存后自动重启
c1 c2 c3是三个摄像头cam口按使用选择
查看ov13855设备
内核会为摄像头在目录/sys/class/video4linux下分配设备信息描述文件
grep mainpath /sys/class/video4linux/v*/name
对应的是/dev/video11可以输出图像
其中video11和video-camera0 是一个东西
ll /dev/video*
使用media-ctl查看拓扑结构
media-ctl -p -d /dev/media0
从entity63信息中可以看到名称为‘m01_f_ov13855 2-0036’的entity它对应的节点是/dev/v4l-subdev2
下面就可以用这个节点调整摄像头了
设置摄像头参数
看看哪些参数可以更改
v4l2-ctl -d /dev/v4l-subdev2 -l
其中exposure是曝光范围为4~3210,analogue_gain 是亮度128~1984
由于在室内调试,我把亮度和曝光设置成了最高否则画面看不清楚。
v4l2-ctl -d /dev/v4l-subdev2 --set-ctrl 'exposure=3210,analogue_gain=1984'
使用udp传输视频
电脑端python程序
import cv2
import numpy
import socket
HOST=''
PORT=9999
buffSize=65535
server=socket.socket(socket.AF_INET,socket.SOCK_DGRAM) #创建socket对象
server.bind((HOST,PORT))
print('now waiting for frames...')
while True:
data,address=server.recvfrom(buffSize) #接收编码图像数据
data=numpy.array(bytearray(data)) #格式转换
imgdecode=cv2.imdecode(data,1) #解码
cv2.imshow('frames',imgdecode) #窗口显示
if cv2.waitKey(1)==27: #按下“ESC”退出
break
server.close()
cv2.destroyAllWindows()
香橙派端程序
import cv2
import socket
import struct
import time
HOST='10.42.0.1'#电脑端地址
PORT=9999
server=socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
server.connect((HOST,PORT))
capture=cv2.VideoCapture('/dev/video11')
w = 3
h = 4
capture.set(w,1024)
capture.set(h,768)
# l = capture.get(w)
# k = capture.get(h)
# print(l,k)
try:
while True:
a = time.time()
success,frame=capture.read()
result,imgencode=cv2.imencode('.jpg',frame,[cv2.IMWRITE_JPEG_QUALITY,50]) #编码
server.sendall(imgencode) #发送视频帧数据
b = time.time()
print(b-a)
print(frame.shape)
except Exception as e:
print(e)
capture.release()
server.close()
可以看到画面,但是拍的颜色好像不对