This is a simple module to connect a device with a camera and a device with an OpenCV application.
Project description
c4ipcam
Простая Python библиотека для передачи видео потока с камеры по сети. Позволяет легко создать сервер для трансляции видео с камеры и клиент для получения видео потока.
Особенности
- Простая клиент-серверная архитектура
- Поддержка нескольких клиентов одновременно
- Буферизация кадров для плавного воспроизведения
- Автоматическое переподключение и обработка ошибок
- Поддержка различных источников видео (веб-камера, IP-камера, видеофайлы)
- Многопоточная архитектура для оптимальной производительности
Установка
pip install c4ipcam
Библиотека автоматически установит все необходимые зависимости, включая OpenCV.
Быстрый старт
Запуск сервера
# Запуск с параметрами по умолчанию (localhost:8000, камера 0)
c4ipcam
# Запуск с пользовательскими параметрами
c4ipcam --host 0.0.0.0 --port 9999 --camera 0
Подключение клиента
from c4ipcam import CameraClient
import cv2
# Создание клиента
cap = CameraClient("localhost", 9999)
# Подключение к серверу
if not cap.connect():
print("Ошибка подключения к серверу")
exit()
# Получение и отображение кадров
while cap.is_connected():
ret, frame = cap.read()
if not ret:
print("Ошибка получения кадра")
break
cv2.imshow('Camera Feed', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# Освобождение ресурсов
cap.disconnect()
cv2.destroyAllWindows()
API Documentation
CameraServer
Класс для создания сервера, который транслирует видео поток с камеры.
Конструктор
CameraServer(host='0.0.0.0', port=9999, camera_id=0)
Параметры:
host(str): IP-адрес для привязки сервера (по умолчанию '0.0.0.0')port(int): Порт для прослушивания (по умолчанию 9999)camera_id(int): ID камеры или путь к видеофайлу (по умолчанию 0)
Методы
start_server()
Запускает сервер и начинает трансляцию видео потока.
server = CameraServer()
server.start_server() # Блокирующий вызов
cleanup()
Освобождает ресурсы и останавливает сервер.
server.cleanup()
CameraClient
Класс для подключения к серверу и получения видео потока.
Конструктор
CameraClient(server_host, server_port)
Параметры:
server_host(str): IP-адрес сервераserver_port(int): Порт сервера
Методы
connect()
Устанавливает соединение с сервером.
Возвращает: bool - True при успешном подключении, False при ошибке
client = CameraClient("192.168.1.100", 9999)
if client.connect():
print("Успешно подключен!")
else:
print("Ошибка подключения:", client.get_connection_error())
read(timeout=None)
Получает следующий кадр из очереди.
Параметры:
timeout(float, optional): Максимальное время ожидания кадра в секундах
Возвращает: [bool, numpy.ndarray] - статус и кадр
ret, frame = client.read(timeout=1.0)
if ret:
cv2.imshow('Frame', frame)
get_latest_frame()
Возвращает последний полученный кадр без удаления из очереди.
Возвращает: numpy.ndarray или None
frame = client.get_latest_frame()
if frame is not None:
cv2.imshow('Latest Frame', frame)
is_connected()
Проверяет статус соединения.
Возвращает: bool
if client.is_connected():
print("Соединение активно")
get_connection_error()
Возвращает последнюю ошибку соединения.
Возвращает: str или None
error = client.get_connection_error()
if error:
print(f"Ошибка: {error}")
disconnect()
Закрывает соединение и освобождает ресурсы.
client.disconnect()
cleanup()
Альтернативный метод для освобождения ресурсов.
client.cleanup()
Примеры использования
Запуск сервера
Основной способ запуска сервера - через консольную команду:
# Базовый запуск с веб-камерой
c4ipcam
# Настройка хоста и порта
c4ipcam --host 0.0.0.0 --port 9999
# Использование конкретной камеры
c4ipcam --camera 1
# IP-камера (RTSP URL)
c4ipcam --camera "rtsp://username:password@192.168.1.100:554/stream"
Клиент с обработкой ошибок
from c4ipcam import CameraClient
import cv2
import time
def main():
client = CameraClient("localhost", 9999)
# Попытка подключения с повторами
max_retries = 5
for attempt in range(max_retries):
if client.connect():
print("Успешно подключен к серверу")
break
else:
print(f"Попытка {attempt + 1}/{max_retries} не удалась: {client.get_connection_error()}")
if attempt < max_retries - 1:
time.sleep(2)
else:
print("Не удалось подключиться к серверу")
return
try:
while client.is_connected():
ret, frame = client.read(timeout=1.0)
if not ret:
print("Таймаут или ошибка получения кадра")
continue
# Обработка кадра
cv2.imshow('Camera Feed', frame)
key = cv2.waitKey(1) & 0xFF
if key == ord('q'):
break
elif key == ord('s'):
# Сохранение кадра
cv2.imwrite(f'frame_{int(time.time())}.jpg', frame)
print("Кадр сохранен")
except KeyboardInterrupt:
print("Прерывание пользователем")
finally:
client.disconnect()
cv2.destroyAllWindows()
if __name__ == "__main__":
main()
Программное использование сервера (опционально)
Если нужно интегрировать сервер в другое приложение:
from c4ipcam import CameraServer
server = CameraServer(host='0.0.0.0', port=9999, camera_id=0)
try:
server.start_server()
except KeyboardInterrupt:
server.cleanup()
Конфигурация
Настройки сервера
Сервер автоматически устанавливает разрешение камеры 640x480 для оптимальной производительности. Вы можете изменить это в коде сервера:
self.camera.set(cv2.CAP_PROP_FRAME_WIDTH, 1280)
self.camera.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)
Настройки клиента
Клиент использует очередь кадров с максимальным размером 5 для буферизации. Это можно изменить в конструкторе:
self.frame_queue = queue.Queue(maxsize=10) # Увеличить буфер
Устранение неполадок
Сервер не запускается
- Проверьте, что порт не занят другим приложением
- Убедитесь, что камера доступна и не используется другим приложением
- Проверьте права доступа к камере
Клиент не может подключиться
- Убедитесь, что сервер запущен и прослушивает правильный порт
- Проверьте сетевое соединение между клиентом и сервером
- Убедитесь, что брандмауэр не блокирует соединение
Низкое качество или задержка видео
- Уменьшите разрешение камеры на сервере
- Увеличьте размер буфера на клиенте
- Используйте более быстрое сетевое соединение
Ошибки при получении кадров
- Проверьте стабильность сетевого соединения
- Увеличьте таймаут при чтении кадров
- Добавьте логику переподключения в клиенте
Зависимости
- Python 3.6+
- opencv-python>=4.11.0.86 (автоматически устанавливается)
Все зависимости устанавливаются автоматически при установке библиотеки через pip.
Лицензия
Этот проект распространяется под лицензией MIT.
Поддержка
- GitHub: https://github.com/rtcctc/c4ipcam
- PyPI: https://pypi.org/project/c4ipcam/
- Автор: 4edbark (vangogprogprog@gmail.com)
При возникновении вопросов или проблем создайте issue в репозитории проекта на GitHub.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file c4ipcam-0.0.1-py3-none-any.whl.
File metadata
- Download URL: c4ipcam-0.0.1-py3-none-any.whl
- Upload date:
- Size: 8.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d9db71cf4fa78128f1ec6be941afc8b128bb271922c4d1c515614a1ed6aac32b
|
|
| MD5 |
c5f8b59ad3634e0d967a64ab4b1d4072
|
|
| BLAKE2b-256 |
a4cb328b867f46edbbee3810e35b25b69a00f85816830e1c387725b16e9e8278
|