Рубрики
Без рубрики

Приложение Live-Video-Stream

Привет всем, в этом блоге мы собираемся обсудить, как мы можем создать приложение Live Video Stream … Помечено Python, розетка, OpenCV.

Всем привет,

В этом блоге мы собираемся обсудить, как мы можем создать приложение Live Video Stream. Прежде чем начать с демонстрационной части, сначала давайте обсудим основные терминологии, которые помогут лучше понять блог.

Что такое openc?

OPENCV – это библиотека, которая работает с практически всеми языками программирования, известных как кроссплатформенная библиотека, которая в основном используется для обработки изображений, которая используется в компьютерном видении

Что такое программирование сокета?

Программирование сокетов – это способ подключения двух узлов в сети для связи друг с другом. для деталей

Что такое розетка?

Розетка – одна конечная точка двухстороннего связи связи между двумя программами, работающими в сети.

Каковы сетевой протокол?

Протокол – это набор правил, которые сопровождаются при передаче данных по сети. Здесь мы собираемся использовать TCP (протокол управления передачей).

Что такое TCP?

TCP означает протокол управления передачей, который позволяет прикладным программам и вычислительным устройствам для обмена сообщениями по сети, она предназначена для отправки пакетов через Интернет и обеспечивает доставку данных. Для деталей

Предпосылки:

  • Воплощение
  • Openc.

  • Теперь давайте начнем с кода

Сначала нам нужно создать серверную программу, клиент подключается к серверной программе.

soc = socket.socket()
soc.bind(("", 5678))
soc.listen()
session, address = soc.accept() from anywhere
print(session.recv(2046)) 
camIndex = 'http://IP-of-WebCam:8080/video'
cam = cv.VideoCapture(camIndex) 

def sender():
    while True:
        ret, photo = cam.read()
        photo = cv.resize(photo, (640, 480))
        print(photo.shape)
        if ret:
            session.send(np.ndarray.tobytes(photo))
        else: print("No Frame Found")

def receiver():
    framesLost = 0
    print("Connecton Established")
    while True:
        framesLost += 1 
        data = session.recv(100000000)
        if(data == b'finished'):
            print("Finished")
            cam.release()
            session.close()
        else:
            photo =  np.frombuffer(data, dtype=np.uint8)
            if len(photo) == 640*480*3:
                cv.imshow('Hi I am Client', photo.reshape(480, 640, 3))
                if cv.waitKey(1) == 13:
                    session.send(b'finished')
                    cam.release()
                    cv.destroyAllWindows()
                    break
            else:
                print("Lost {} frames".format(framesLost) )

threading.Thread(target=sender).start()
threading.Thread(target=receiver).start()

Теперь давайте понять код

soc = socket.socket()
soc.bind(("", 5678)) 

Здесь розетка Является ли функция, которая исходит из библиотеки сокетов, использовать его, необходимо сначала импортировать библиотеку сокетов: Импорт сокета

Здесь Bind Функция использует для привязки IP к номеру порта. В приведенном выше коде “” означает IP локальной системы и 5678 Является ли номер порта, который мы связываемся с локальным хостом IP.

session, address = soc.accept() #here it will accepts the request from anywhere
print(session.recv(2046)) 
camIndex = 'http://IP_of_IPWebCam:8080/video' # here this IP is of IPCAMERA app 
cam = cv.VideoCapture(camIndex)

Здесь Принять () Используется для принятия запроса от клиента.

session.recv () Покажите полученные данные на розетке и храните его в буфере и здесь 2046 Размер буфера в байтах.

Camindex Переменная хранит адрес моей камеры, здесь я использую мою мобильную камеру, для этого я использовал IP WebCam Android-приложение, которое создает сервер, через который мы можем использовать камеру устройства Android.

Видеокаптир () Используется для запуска камеры и захватывает видео (несколько изображений)

def sender():
    while True:
        ret, photo = cam.read()
        photo = cv.resize(photo, (640, 480))
        print(photo.shape)
        if ret:
            session.send(np.ndarray.tobytes(photo))
        else: print("No Frame Found")

Вот функция отправителя, которая отправляет клиента видео.

Читать () используется для чтения захваченных изображений

изменить размер () используется для изменения размера изображения

Отправить (np.ndarray.tobytes (фото)) Используется для отправки изображения в Byte Forma, здесь Numpy используется для преобразования массива Numpy, который содержит значение изображения в байте.

def receiver():
    framesLost = 0
    print("Connecton Established")
    while True:
        framesLost += 1 
        data = session.recv(100000000)
        if(data == b'finished'):
            print("Finished")
            cam.release()
            session.close()
        else:
            photo =  np.frombuffer(data, dtype=np.uint8)
            if len(photo) == 640*480*3:
                cv.imshow('Hi I am Client', photo.reshape(480, 640, 3))
                if cv.waitKey(1) == 13:
                    session.send(b'finished')
                    cam.release()
                    cv.destroyAllWindows()
                    break
            else:
                print("Lost {} frames".format(framesLost) )

Вот получают функцию, которая получит данные с клиента.

Framelost будет посчитать потерянные рамки во время передачи данных.

session.recv (100000000) Здесь функция RECV получит данные в пределе 100000000

cam.release () Используется для закрытия веб-камеры.

session.close () Используется для закрытия сеанса между клиентом и сервером.

np.frombuffer (данные, .uint8) Здесь Numpy используется для преобразования данных в байтовом формате в Numpy Array.

photo.reeshape (480, 640, 3)) Используется для изменения изображения в следующих размерах.

CV.Waitkey (1) здесь Waitkey () Используется для удержания окна, которое содержит изображение/видео, а вот 13 код для Введите ключ в клавиатуре.

denserallwindows () Это уничтожит или закроет окно, как только нажата клавиша ввода.

резьба. Тема (Target = отправитель) .start () резьба. Тема (цель = приемник) .start () Используется для запуска потока. Здесь нить будет продолжать слушать запрос от клиента.

  • Нить:

Нить – это последовательность инструкции, которая работает независимо от программы и любой резьбы

  • Теперь нам нужно создать программу для клиента:

Как и код в серверной программе, нам нужно кодировать клиентскую программу.

soc = socket.socket()
soc.bind(("", 1234))  
server_ip = input(" Enter the Server IP adress -> ")
server_port = input("Enter the Server Port number -> ")

soc.connect((server_ip, int(server_port))) 
soc.send(b"connected")  
camIndex = 0 
cam = cv.VideoCapture(camIndex) 

 server: Client <- Server
def receiver():
    framesLost = 0
    print("Connection Established")
    while True:
        framesLost += 1 
        data = soc.recv(100000000) 
        if(data == b'finished'):
            print("Connection END")
            cam.release() 
            soc.close() 
        else:  
            photo =  np.frombuffer(data, dtype=np.uint8)  
            if len(photo) == 640*480*3: 
                cv.imshow('Hi I am Server', photo.reshape(480,640,3))
                if cv.waitKey(1) == 13: 
                    soc.send(b'finished')
                    cam.release() 
                    cv.destroyAllWindows()  
                    break
            else:
                print("Lost {} frames".format(framesLost) )          
def sender():
    while True:  
        ret, photo = cam.read()
        photo = cv.resize(photo, (640, 480)) 
        print(photo.shape)
        if ret:
            soc.send(np.ndarray.tobytes(photo))
        else: print("No Frame Found")
    cam.release()

threading.Thread(target=receiver).start()
threading.Thread(target=sender).start()

Вся код объясняется в серверной программе, а код клиента также работает так же.

Смотреть демонстрацию

Надеюсь, вы найдете этот блог Insightful.

Оригинал: “https://dev.to/niteshthapliyal/live-video-app-2nf0”