본문 바로가기

언어

[Python] OpenCV 모듈 활용 - 2

이번 포스팅글은 opencv 모듈을 통한 스트리밍 환경을 구축한다.

 

진행방식은 소켓 통신을 이용하여 테스트를 진행한다.

 

# 환경

- 언어 : python 3.9.0

- 모듈 : opencv, socket

 

#웹캠 데이터 전송 예제(Client)

import socket
import cv2

UDP_IP = '127.0.0.1'
UDP_PORT = 9505

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

cap = cv2.VideoCapture(0)

while True:
    ret, frame = cap.read()
    d = frame.flatten()
    s = d.tostring()

    for i in range(20):
        sock.sendto(bytes([i]) + s[i*46080:(i+1)*46080], (UDP_IP, UDP_PORT))

 

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

 

# 웹켐 전송 대상지 예제(Server)

import socket
import numpy
import cv2

UDP_IP = "127.0.0.1"
UDP_PORT = 9505

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((UDP_IP, UDP_PORT))

s = [b'\xff' * 46080 for x in range(20)]

fourcc = cv2.VideoWriter_fourcc(*'DIVX')
out = cv2.VideoWriter('output.avi', fourcc, 25.0, (640, 480))

while True:
    picture = b''

    data, addr = sock.recvfrom(46081)
    s[data[0]] = data[1:46081]

    if data[0] == 19:
        for i in range(20):
            picture += s[i]

        frame = numpy.fromstring(picture, dtype=numpy.uint8)
        frame = frame.reshape(480, 640, 3)
        cv2.imshow("frame", frame)
        out.write(frame)

        if cv2.waitKey(1) & 0xFF == ord('q'):
            cv2.destroyAllWindows()
            break

'언어' 카테고리의 다른 글

GraphQL 개념이해  (0) 2022.01.10
[Python] OpenCV 모듈 활용 - 1  (0) 2021.06.09
[Python] 큐싱(Qshing)이란?  (0) 2021.06.08