- Встроенная веб-камера.
- Внешняя веб-камера Logitech C270.
- Когда я использую cv2.VideoCapture(0), я получаю сообщение об ошибке:
Ошибка: не удалось открыть веб-камеру. - Когда я использую cv2.VideoCapture(1), я не вижу никаких ошибок, но отображаемый кадр полностью черный. Я подозреваю, что индекс 1 должен быть правильным индексом для моей внешней камеры.
- Когда я запускаю код с индексом 1, внешняя камера становится недоступной в других программах, что имеет смысл, поскольку OpenCV берет на себя управление устройством.
- Я гарантировал, что Python 3.11 имеет разрешение на доступ к камере в настройках Windows, и индикатор использования камеры подтверждает это что камера используется.
- Похоже, проблема не связана с VS Code. У меня такое же поведение при запуске скрипта прямо из терминала.
- Почему я не могу получить доступ к встроенной веб-камере (индекс 0).
- Почему моя внешняя камера (индекс 1) показывает черный экран в OpenCV.
Код: Выделить всё
import cv2
def main():
print("Press 'q' to quit the program.")
# Open a connection to the webcam (0 is the default camera)
cap = cv2.VideoCapture(0)
if not cap.isOpened():
print("Error: Could not open webcam.")
return
# Allow the camera to warm up
cv2.waitKey(1000)
while True:
# Capture frame-by-frame
ret, frame = cap.read()
if not ret:
print("Error: Could not read frame.")
break
# Display the resulting frame
cv2.imshow('Webcam Stream', frame)
# Break the loop on 'q' key press
if cv2.waitKey(1) == ord('q'):
break
# When everything is done, release the capture
cap.release()
cv2.destroyAllWindows()
if __name__ == "__main__":
main()
Заранее спасибо!
РЕДАКТИРОВАТЬ:
Я попробовал использовать ffmpeg, чтобы получить больше информации о моей камере. Я установил библиотеку Python и запустил следующий скрипт:
Код: Выделить всё
from imageio_ffmpeg import get_ffmpeg_exe
import os
ffmpeg_path = get_ffmpeg_exe()
os.system(f'"{ffmpeg_path}" -list_devices true -f dshow -i dummy')
Код: Выделить всё
libavutil 56. 31.100 / 56. 31.100
libavcodec 58. 54.100 / 58. 54.100
libavformat 58. 29.100 / 58. 29.100
libavdevice 58. 8.100 / 58. 8.100
libavfilter 7. 57.100 / 7. 57.100
libswscale 5. 5.100 / 5. 5.100
libswresample 3. 5.100 / 3. 5.100
libpostproc 55. 5.100 / 55. 5.100
[dshow @ 00000211f34a91c0] DirectShow video devices (some may be both video and audio devices)
[dshow @ 00000211f34a91c0] "Integrated Webcam"
[dshow @ 00000211f34a91c0] Alternative name "@device_pnp_\\?\usb#vid_0c45&pid_6d13&mi_00#6&18c8350f&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global"
[dshow @ 00000211f34a91c0] "Logi C270 HD WebCam"
[dshow @ 00000211f34a91c0] Alternative name "@device_pnp_\\?\usb#vid_046d&pid_0825&mi_00#7&1ef939b1&0&0000#{65e8773d-8f56-11d0-a3b9-00a0c9223196}\global"
[dshow @ 00000211f34a91c0] "OBS Virtual Camera"
[dshow @ 00000211f34a91c0] Alternative name "@device_sw_{860BB310-5D01-11D0-BD3B-00A0C911CE86}\{A3FCE0F5-3493-419F-958A-ABA1250EC20B}"
[dshow @ 00000211f34a91c0] DirectShow audio devices
[dshow @ 00000211f34a91c0] "Mikrofon (3- Logi C270 HD WebCam)"
[dshow @ 00000211f34a91c0] Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{2839ECB9-3054-4631-9391-CE0C2E6CADD4}"
[dshow @ 00000211f34a91c0] "Microphone Array (Realtek(R) Audio)"
[dshow @ 00000211f34a91c0] Alternative name "@device_cm_{33D9A762-90C8-11D0-BD43-00A0C911CE86}\wave_{EC1466BD-0BFF-46FD-960E-B7EAAD2B6787}"
Код: Выделить всё
import subprocess
from imageio_ffmpeg import get_ffmpeg_exe
def list_camera_modes(camera_name):
ffmpeg_path = get_ffmpeg_exe()
command = f'"{ffmpeg_path}" -f dshow -list_options true -i video="{camera_name}"'
subprocess.run(command, shell=True, check=True)
if __name__ == "__main__":
camera_name = "Logi C270 HD WebCam"
list_camera_modes(camera_name)
Код: Выделить всё
libavutil 56. 31.100 / 56. 31.100
libavcodec 58. 54.100 / 58. 54.100
libavformat 58. 29.100 / 58. 29.100
libavdevice 58. 8.100 / 58. 8.100
libavfilter 7. 57.100 / 7. 57.100
libswscale 5. 5.100 / 5. 5.100
libswresample 3. 5.100 / 3. 5.100
libpostproc 55. 5.100 / 55. 5.100
[dshow @ 0000023f579391c0] DirectShow video device options (from video devices)
[dshow @ 0000023f579391c0] Pin "Capture" (alternative pin name "0")
[dshow @ 0000023f579391c0] vcodec=mjpeg min s=1280x960 fps=5 max s=1280x960 fps=30
[dshow @ 0000023f579391c0] vcodec=mjpeg min s=1280x960 fps=5 max s=1280x960 fps=30
[dshow @ 0000023f579391c0] vcodec=mjpeg min s=1280x720 fps=5 max s=1280x720 fps=30
[dshow @ 0000023f579391c0] vcodec=mjpeg min s=1280x720 fps=5 max s=1280x720 fps=30
[dshow @ 0000023f579391c0] vcodec=mjpeg min s=1024x768 fps=5 max s=1024x768 fps=30
[dshow @ 0000023f579391c0] vcodec=mjpeg min s=1024x768 fps=5 max s=1024x768 fps=30
[dshow @ 0000023f579391c0] vcodec=mjpeg min s=800x600 fps=5 max s=800x600 fps=30
[dshow @ 0000023f579391c0] vcodec=mjpeg min s=800x600 fps=5 max s=800x600 fps=30
[dshow @ 0000023f579391c0] vcodec=mjpeg min s=640x480 fps=5 max s=640x480 fps=30
[dshow @ 0000023f579391c0] vcodec=mjpeg min s=640x480 fps=5 max s=640x480 fps=30
[dshow @ 0000023f579391c0] vcodec=mjpeg min s=640x360 fps=5 max s=640x360 fps=30
[dshow @ 0000023f579391c0] vcodec=mjpeg min s=640x360 fps=5 max s=640x360 fps=30
[dshow @ 0000023f579391c0] vcodec=mjpeg min s=320x240 fps=5 max s=320x240 fps=30
[dshow @ 0000023f579391c0] vcodec=mjpeg min s=320x240 fps=5 max s=320x240 fps=30
[dshow @ 0000023f579391c0] vcodec=mjpeg min s=1280x960 fps=5 max s=1280x960 fps=30
[dshow @ 0000023f579391c0] vcodec=mjpeg min s=1280x960 fps=5 max s=1280x960 fps=30
[dshow @ 0000023f579391c0] pixel_format=yuyv422 min s=1280x960 fps=5 max s=1280x960 fps=5
[dshow @ 0000023f579391c0] pixel_format=yuyv422 min s=1280x960 fps=5 max s=1280x960 fps=5
[dshow @ 0000023f579391c0] pixel_format=yuyv422 min s=1280x720 fps=5 max s=1280x720 fps=5
[dshow @ 0000023f579391c0] pixel_format=yuyv422 min s=1280x720 fps=5 max s=1280x720 fps=5
[dshow @ 0000023f579391c0] pixel_format=yuyv422 min s=1024x768 fps=5 max s=1024x768 fps=5
[dshow @ 0000023f579391c0] pixel_format=yuyv422 min s=1024x768 fps=5 max s=1024x768 fps=5
[dshow @ 0000023f579391c0] pixel_format=yuyv422 min s=800x600 fps=20 max s=800x600 fps=20
[dshow @ 0000023f579391c0] pixel_format=yuyv422 min s=800x600 fps=20 max s=800x600 fps=20
[dshow @ 0000023f579391c0] pixel_format=yuyv422 min s=640x480 fps=5 max s=640x480 fps=30
[dshow @ 0000023f579391c0] pixel_format=yuyv422 min s=640x480 fps=5 max s=640x480 fps=30
[dshow @ 0000023f579391c0] pixel_format=yuyv422 min s=320x240 fps=30 max s=320x240 fps=30
[dshow @ 0000023f579391c0] pixel_format=yuyv422 min s=320x240 fps=30 max s=320x240 fps=30
[dshow @ 0000023f579391c0] pixel_format=yuyv422 min s=1280x960 fps=5 max s=1280x960 fps=5
[dshow @ 0000023f579391c0] pixel_format=yuyv422 min s=1280x960 fps=5 max s=1280x960 fps=5
Код: Выделить всё
import cv2
cap = cv2.VideoCapture(1)
width, height = 1280, 960
cap.set(cv2.CAP_PROP_FRAME_WIDTH, width)
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, height)
fps = 30
cap.set(cv2.CAP_PROP_FPS, fps)
cap.set(cv2.CAP_PROP_FOURCC, cv2.VideoWriter_fourcc(*'MJPG'))
if not cap.isOpened():
print("Kamera konnte nicht geöffnet werden")
else:
print(f"Kamera erfolgreich geöffnet mit {width}x{height} @ {fps} FPS")
while True:
ret, frame = cap.read()
if not ret:
print("Frame konnte nicht gelesen werden")
break
cv2.imshow("Kamera", frame)
if cv2.waitKey(1) & 0xFF == ord('q'): # 'q' zum Beenden
break
cap.release()
cv2.destroyAllWindows()
Подробнее здесь: https://stackoverflow.com/questions/792 ... itech-c270