python 은 서로 다른 컴퓨터 간 영상 전송 기능 을 실현 합 니 다.
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 영상 전송 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 바 랍 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.