Я хочу отправить изображения по UDP из сценария Python в Unreal, загрузить их туда и на следующем этапе создать из них текстуру. В настоящее время я пытаюсь получить изображение.
Вот мой простой udp-скрипт на Python:
Поэтому я отправляю его как массив base64. Как мне загрузить его в Unreal? Я создал простой файл udp .cpp и .h со всем необходимым для запуска UDP-сокета:
Часть после ansiiData не работает, и я предполагаю, что мне нужно выполнить преобразование полученных данных в base64 по-другому? Мой план состоял в том, чтобы сделать что-то вроде описанного здесь
Как я могу это сделать?
Я хочу отправить изображения по UDP из сценария Python в Unreal, загрузить их туда и на следующем этапе создать из них текстуру. В настоящее время я пытаюсь получить изображение. Вот мой простой udp-скрипт на Python: [code]import cv2, imutils, socket import numpy as np import time import base64
vid = cv2.VideoCapture(0) # replace 'rocket.mp4' with 0 for webcam fps,st,frames_to_count,cnt = (0,0,20,0)
while True: msg,client_addr = server_socket.recvfrom(BUFF_SIZE) print('GOT connection from ',client_addr) WIDTH=400 while(vid.isOpened()): _,frame = vid.read() frame = imutils.resize(frame,width=WIDTH) encoded,buffer = cv2.imencode('.jpg',frame,[cv2.IMWRITE_JPEG_QUALITY,80]) #message = base64.b64encode(buffer) server_socket.sendto(bytes(buffer),client_addr) frame = cv2.putText(frame,'FPS: '+str(fps),(10,40),cv2.FONT_HERSHEY_SIMPLEX,0.7,(0,0,255),2) cv2.imshow('TRANSMITTING VIDEO',frame) key = cv2.waitKey(1) & 0xFF if key == ord('q'): server_socket.close() break if cnt == frames_to_count: try: fps = round(frames_to_count/(time.time()-st)) st=time.time() cnt=0 except: pass cnt+=1 [/code] Поэтому я отправляю его как массив base64. Как мне загрузить его в Unreal? Я создал простой файл udp .cpp и .h со всем необходимым для запуска UDP-сокета: [code]void Audp_module::BeginPlay() { Super::BeginPlay(); SocketSubsystem = nullptr; if (SocketSubsystem == nullptr) SocketSubsystem = ISocketSubsystem::Get(PLATFORM_SOCKETSUBSYSTEM);
FString data = ANSI_TO_TCHAR(ansiiData); //FString data = FString::FromInt(BytesRead); const auto encoded = FBase64::Encode(*data); GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, encoded); UE_LOG(LogTemp, Verbose, TEXT("Received: %s"), *encoded); //FString data = ANSI_TO_TCHAR(ansiiData); GEngine->AddOnScreenDebugMessage(-1, 5.f, FColor::Red, "Message by UDP: " + data); } } else { Socket = FUdpSocketBuilder(SocketDescription) .AsNonBlocking() .AsReusable() .BoundToEndpoint(LocalEndpoint) .WithReceiveBufferSize(SendSize) .WithReceiveBufferSize(BufferSize) .WithBroadcast(); }
} [/code] Часть после ansiiData не работает, и я предполагаю, что мне нужно выполнить преобразование полученных данных в base64 по-другому? Мой план состоял в том, чтобы сделать что-то вроде описанного здесь Как я могу это сделать?