python 은 서로 다른 컴퓨터 간 영상 전송 기능 을 실현 합 니 다.

5009 단어 python영상 전송
1.imageZMQ 라 이브 러 리 구현
imageZMQ 라 이브 러 리 링크:https://github.com/jeffbass/imagezmq
이 라 이브 러 리 는 원래 크 랜 베 리 파이 의 영상 전송 에 사용 되 었 는데 많은 예 시 를 포함 하고 있 으 므 로 관심 이 있 으 면 가 볼 수 있다.
在这里插入图片描述
위의 그림 중간 에 있 는 노트북 은 송신 단 이 고 나머지 두 화면 은 수신 단 영상 을 보 여 준다.본 논문 의 영상 전송 이 실현 되 는 전 제 는 송신 단 과 수신 단 이 같은 랜 에 연결 되 는 것 을 확보 하 는 것 이다.
송신 단

import socket
import time
import cv2
import imagezmq
import traceback
import simplejpeg

# capture=cv2.VideoCapture(0) #        
capture=cv2.VideoCapture(r"D:\project\dataset\video\  .mp4")
# 192.168.100.104       ip  
sender = imagezmq.ImageSender(connect_to='tcp://192.168.100.104:5555', REQ_REP=False)
rpi_name = socket.gethostname() #      
time.sleep(2.0)  
jpeg_quality = 95   #        ,95%
while(True):
    try:
        ref, frame=capture.read(0)
        time.sleep(1/60)
        image = cv2.resize(frame,(1280,720))
        curtime = time.time()
        msg = rpi_name+'*'+str(curtime)
        #   simplejpeg        jpeg  ,      
        jpg_buffer = simplejpeg.encode_jpeg(image, quality=jpeg_quality,
                                            colorspace='BGR')
        sender.send_jpg(msg, jpg_buffer)
        cv2.imshow(rpi_name, image)
        cv2.waitKey(1)
    except:
        print(traceback.print_exc())
        break
수신 단(여러 대의 장치 가 동시에 수신 할 수 있 음)

import cv2
import imagezmq
import traceback
import time
import simplejpeg

#        ,      ip  
image_hub = imagezmq.ImageHub(open_port='tcp://192.168.100.104:5555',REQ_REP=False)
frame_count = 1
time1 = 0
while True:
    try:
        time1 = time.time() if frame_count == 1 else time1
        name, image = image_hub.recv_jpg()
        #   
        image = simplejpeg.decode_jpeg(image, colorspace='BGR')
        cv2.imshow(name.split('*')[0], image)
        cv2.waitKey(1)
        time2 = time.time()
        print(image.shape[:2], int(frame_count/(time2-time1)))
        frame_count += 1
    except:
        print(traceback.format_exc())
        break
2.TCP 프로 토 콜 실현
在这里插入图片描述
송신 단

import socket
import cv2

import sys
import numpy as np
address = ('192.168.100.104', 5005)  #         
ser = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
ser.bind(address)
ser.listen(5)
#    
print('waiting。。。')
conn, addr = ser.accept()
print('    ...')
print('    :', addr)
cap = cv2.VideoCapture(r"D:\project\dataset\video\  .mp4")
# cap = cv2.VideoCapture(0)
frames_num=cap.get(7)
print('     :',frames_num)
print('    ...')
count = 0
while cap.isOpened():
    try:
        data = conn.recv(1024)
        data = data.decode()
        if not data:
            break
        ret, frame = cap.read()
        frame = cv2.resize(frame,(1280,720))
        cv2.imshow('send', frame)
        cv2.waitKey(1)
        count += 1
        #          ,    json  
        img_encode = cv2.imencode('.jpg', frame)[1]

        data_encode = np.array(img_encode)
        str_encode = data_encode.tostring()

        conn.sendall(str_encode)
    except KeyboardInterrupt:
        print('KeyboardInterrupt')
        sys.exit(0)
수신 단

import socket
import sys
import cv2
import numpy as np
import time
address = ('192.168.100.104', 5005)  #         
cli = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
try:
    cli.connect(address)  #        
except Exception:
    print('[!] Server not found or not open')
    sys.exit()

frame_count = 1
while True:
    time1 = time.time() if frame_count == 1 else time1
    trigger = 'ok'
    cli.sendall(trigger.encode())
    data = cli.recv(1024*1024*20)
    image = np.frombuffer(data, np.uint8)
    image = cv2.imdecode(image,cv2.IMREAD_COLOR)
    cv2.imshow('video',image)
    cv2.waitKey(1)
    end_time = time.time()
    time2 = time.time()
    print(image.shape[:2], int(frame_count / (time2 - time1)))
    frame_count += 1
cli.close()
python 이 서로 다른 컴퓨터 간 영상 전송 을 실현 하 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 python 영상 전송 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!

좋은 웹페이지 즐겨찾기