Notice
Recent Posts
Recent Comments
Link
WinGyu_coder
Django, API 서버로 이미지 주고 받기, OpenCV 컴퓨터 비전 본문
회사에서 영상을 프레임 단위로 받아 딥러닝으로 만든 모델로 보내는 작업을 하였다. 이 부분은 정리하면 좋을거 같아서 정리를 해둔다 .
우선 이미지를 받을 서버는 Django REST Framework로 구현하였다. Django API 서버쪽에 받는 코드는 이렇게 된다.
우선 DRF에 APIView를 가져오고 POST를 구현한다.
# 서버 코드
from rest_framework.views import APIView
from rest_framework.response import Response
import requests
import numpy as np
import cv2
import base64
class DeeplearningModelAPI(APIView):
def post(self, request):
img_data = request.data["img"]
img_data = base64.b64decode(img_data)
nparr = np.frombuffer(img_data, np.uint8)
img = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
result = 모델 img 사용
return Response({"result":result)
필자는 DRF에 APIView를 썻지만 다른걸로 구현해도 된다. 이미지를 받는 방법에 대해서만 집중하면 좋을거 같다.
base64를 불러온 후 b64decode 방식으로 이미지를 해석한다. 그런다음 np를 사용해 이미지를 np.frombuffer를 통해 버퍼로 만들고
cv2로 이미지를 가져온다. 그런다음 인공지능 모델에 사용하면 된다.
# 클라이언트
import requests
import cv2
import base64
# API 서버 주소
url = "http://아이피주소/api/v1/django/"
# 비디오 불러오기
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
print(frame.shape)
if not ret:
break
_, buffer = cv2.imencode(".jpg", frame)
# 올바른 base64 인코딩
frame_data = base64.b64encode(buffer).decode("ascii")
response = requests.post(url, data={"img": frame_data})
key = cv2.waitKey(1)
if key == 27: # ESC 키
break
cap.release()
비디오 및 영상에서 프레임을 가져오고. base64를 통해 인코딩을 한다.
그리고 준비해둔 Django API 서버에 POST 메소드를 사용하면 된다.
'딥러닝 컴퓨터 비전' 카테고리의 다른 글
Python CUDA, cudnn.benchmark 설정 알아보기 (0) | 2024.01.29 |
---|---|
Python 으로 OpenCV, Numpy 사용. 이미지 잘라 붙여서 배치로 처리하기. (2) | 2023.12.08 |
OpenCV, 컴퓨터 비전 GPU 가속화 사용하기 (0) | 2023.11.02 |
Open CV 컴퓨터 비전 Object Detection 과 Segmentation (0) | 2023.07.22 |