跳到主要内容

Ubuntu系统


📸 摄像头使用方法

摄像头使用UVC协议,可以使用C++或者Python等支持的语言调用UVC协议进行摄像头功能, 在 Ubuntu 上使用 Python 调用 UVC 摄像头进行视频录制,可以通过 OpenCV 库来实现。UVC(USB Video Class)摄像头通常支持标准的视频输入协议,并且与大多数操作系统兼容。使用 OpenCV,我们可以轻松捕捉视频并保存到文件中。

步骤 1:安装依赖库

首先,确保你安装了 OpenCV。在终端中执行以下命令进行安装:

sudo apt update
sudo apt install python3-opencv

步骤 2:编写 Python 代码进行视频录制

使用 OpenCV 可以轻松实现视频捕捉并保存到文件。以下是一个简单的示例,展示了如何通过 Python 调用 UVC 摄像头进行视频录制:

import cv2

# 打开摄像头 (默认摄像头,0是第一个摄像头,如果有多个可以改为1, 2等)
cap = cv2.VideoCapture(0)

if not cap.isOpened():
print("无法打开摄像头")
exit()

# 获取摄像头的分辨率(宽度和高度)
frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))

# 定义视频编码格式,XVID 是一种常见的视频编码方式
fourcc = cv2.VideoWriter_fourcc(*'XVID')

# 创建 VideoWriter 对象来保存视频到文件
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (frame_width, frame_height))

while True:
# 读取视频帧
ret, frame = cap.read()

if not ret:
print("无法读取视频帧")
break

# 将当前帧写入到输出文件
out.write(frame)

# 显示当前帧
cv2.imshow('Camera Feed', frame)

# 按 'q' 键退出录制
if cv2.waitKey(1) & 0xFF == ord('q'):
break

# 释放摄像头和关闭所有窗口
cap.release()
out.release()
cv2.destroyAllWindows()

代码解释

  1. 打开摄像头:cv2.VideoCapture(0) 会尝试打开默认的摄像头。如果你有多个摄像头连接,可以使用其他索引(例如 1、2 等)来选择不同的摄像头。
  2. 获取分辨率:通过 cap.get(cv2.CAP_PROP_FRAME_WIDTH)cap.get(cv2.CAP_PROP_FRAME_HEIGHT) 获取摄像头的分辨率。
  3. 视频编码格式:fourcc = cv2.VideoWriter_fourcc(*'XVID') 设置视频编码格式为 XVID,常用于 AVI 格式。
  4. 创建 VideoWriter 对象:cv2.VideoWriter('output.avi', fourcc, 20.0, (frame_width, frame_height)) 创建一个 VideoWriter 对象,用于将视频帧保存为文件。参数包括文件名、编码方式、帧率和分辨率。
  5. 视频捕捉与显示:通过 cap.read() 逐帧捕捉视频数据,并将每一帧写入到视频文件中。cv2.imshow('Camera Feed', frame) 显示实时视频。
  6. 按键退出:按下 'q' 键退出视频录制。
  7. 资源释放:cap.release()out.release() 分别释放摄像头和视频写入资源,cv2.destroyAllWindows() 关闭所有显示窗口。

步骤 3:运行代码

保存代码为一个 .py 文件(例如 record_video.py),然后在终端中运行:

python3 record_video.py

步骤 4:操作

按键操作

  1. 按下 'q' 键退出录制。
  2. 录制的视频将保存为 output.avi 文件。

进阶操作

  1. 分辨率设置:你可以手动设置摄像头的分辨率。例如:
cap.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)

这将使摄像头捕捉到 1280x720 的视频。

  1. 其他视频编码格式:你可以使用不同的视频编码格式来保存文件,例如:

  2. fourcc = cv2.VideoWriter_fourcc(*'MJPG')(适用于 .avi 文件)

  3. fourcc = cv2.VideoWriter_fourcc(*'H264')(适用于 .mp4 文件)

  4. 调整帧率:在创建 VideoWriter 时,你可以调整帧率,例如:

out = cv2.VideoWriter('output.avi', fourcc, 30.0, (frame_width, frame_height))

这会使视频的帧率为 30 帧每秒。


总结

通过 OpenCV,你可以轻松地在 Ubuntu 上使用 Python 调用 UVC 摄像头进行视频录制。这个方法简单且高效,可以根据需要进行更多自定义设置。如果需要更高效的视频处理,或需要进一步的图像处理操作,你还可以结合其他计算机视觉技术进行优化。

🎙 麦克风使用方法

检查设备

查看麦克风的设备列表,检查设备是否装配完好,查看参数信息,如支持的采样率,通道数,声卡位,为了防止设备权限问题,授权设备访问

arecord -l
sudo chmod 777 /dev/snd/*

声音录制

在 Ubuntu 下使用 USB 协议的麦克风进行声音录制,通常可以通过 Python 调用 pyaudio 或 sounddevice 库来实现。下面是使用这两个库的示例代码,帮助你通过 USB 麦克风进行录音。

方法 1:使用 pyaudio 库

  1. 安装依赖库

首先,安装 pyaudio 库。可以通过 pip 来安装:

sudo apt update
sudo apt install portaudio19-dev
pip3 install pyaudio
  1. 使用 pyaudio 录音
import pyaudio
import wave

# 设置参数
FORMAT = pyaudio.paInt16 # 采样格式
CHANNELS = 1 # 单声道
RATE = 44100 # 采样率,根据设备具体支持的采样率查看
CHUNK = 1024 # 每次读取的音频块大小
RECORD_SECONDS = 5 # 录音时长(秒)
OUTPUT_FILENAME = "output.wav" # 输出文件名

# 初始化 PyAudio
p = pyaudio.PyAudio()

# 获取可用麦克风设备列表
device_count = p.get_device_count()
print("可用设备数量:", device_count)

# 打印所有设备信息,找到 USB 麦克风
for i in range(device_count):
info = p.get_device_info_by_index(i)
print(f"设备 {i}: {info['name']}")

# 选择适合的麦克风设备,假设 USB 麦克风的索引为1
device_index = 1

# 打开麦克风设备
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
input_device_index=device_index,
frames_per_buffer=CHUNK)

print("录音开始...")

frames = []

# 录制音频
for _ in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK)
frames.append(data)

print("录音结束...")

# 停止录音流并关闭
stream.stop_stream()
stream.close()
p.terminate()

# 保存录音为 WAV 文件
with wave.open(OUTPUT_FILENAME, 'wb') as wf:
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT))
wf.setframerate(RATE)
wf.writeframes(b''.join(frames))

print(f"录音文件已保存为 {OUTPUT_FILENAME}")

代码解释

  1. 初始化 PyAudio:pyaudio.PyAudio() 初始化音频流。
  2. 获取设备列表:使用 get_device_count() 获取设备数量,通过 get_device_info_by_index() 获取设备的详细信息。可以从输出信息中找到 USB 麦克风的索引。
  3. 选择设备:根据设备索引选择 USB 麦克风。如果你有多个麦克风,可以通过索引来指定哪个设备。
  4. 录制音频:通过 stream.read() 从麦克风读取音频数据,每次读取 CHUNK 大小的数据,录制时长为 RECORD_SECONDS。
  5. 保存为 WAV 文件:通过 wave.open() 将录制的音频数据保存为 .wav 文件。

方法 2:使用 sounddevice 库

  1. 安装依赖库
pip3 install sounddevice numpy
  1. 使用 sounddevice 录音
import sounddevice as sd
import numpy as np
import wave

# 设置参数
RATE = 44100 # 采样率
CHANNELS = 1 # 单声道
RECORD_SECONDS = 5 # 录音时长(秒)
OUTPUT_FILENAME = "output.wav" # 输出文件名

# 获取系统的可用设备
print("可用麦克风设备列表:")
print(sd.query_devices())

# 选择 USB 麦克风的设备索引
device_index = 1 # 假设 USB 麦克风的索引为 1

# 开始录音
print("录音开始...")
audio_data = sd.rec(int(RATE * RECORD_SECONDS), samplerate=RATE, channels=CHANNELS, dtype='int16', device=device_index)
sd.wait() # 等待录音结束
print("录音结束...")

# 保存录音为 WAV 文件
with wave.open(OUTPUT_FILENAME, 'wb') as wf:
wf.setnchannels(CHANNELS)
wf.setsampwidth(2) # 16 位样本宽度
wf.setframerate(RATE)
wf.writeframes(audio_data.tobytes())

print(f"录音文件已保存为 {OUTPUT_FILENAME}")

代码解释

  1. 获取设备列表:sd.query_devices() 列出系统上所有音频设备,可以找到 USB 麦克风的设备索引。
  2. 选择设备:通过 device_index 选择合适的麦克风设备。
  3. 录音:使用 sd.rec() 进行录音,录制时长为 RECORD_SECONDS 秒。
  4. 保存为 WAV 文件:将录制的音频数据保存为 WAV 格式。

进阶操作

  1. 设置采样率和通道数:你可以根据需要调整采样率(RATE)和通道数(CHANNELS),例如,使用 2 通道来进行立体声录音。
  2. 调整麦克风的设备索引:如果你的电脑有多个麦克风,可以通过 sd.query_devices() 或 pyaudio 输出设备列表来选择正确的设备索引。

总结

通过 pyaudio 或 sounddevice,你可以在 Ubuntu 下轻松调用 USB 协议的麦克风进行声音录制。这些库提供了简单的接口来访问系统音频设备,并可以将录制的音频保存为常见格式(如 WAV)。如果你需要进一步的音频处理,可以结合其他库(如 numpy 或 scipy)进行更复杂的分析和处理。

📢 扬声器使用方法

  • 查看扬声器是否安装完好,如果状态显示off要打开外放
alsamixer -c 1
  • 设置扬声器打开外放音量
amixer -c 1 sset 'Headphone' 100% unmute

🖥️ 屏幕显示使用方法

同Android一致,在Ubuntu系统内实现UI应用即可,也需要注意实际有效显示区域问题