개발자
안녕하세요 선배님들 도움을 받고자 이렇게 글 남겨봅니다! 현재 IP 카메라를 이용해서 실시간으로 영상 데이터를 받고 파이썬의 opencv 를 이용해 영상을 웹화면에 띄워주기 위한 프로그래밍을 하고 있습니다. 영상은 송출이 되는 상황인데 문제는 해당 사람을 촬영한다고 가정했을때 사람이 팔을 들어 올리는 장면이 있으면 대략 6초~8초 뒤에서야 웹에서 보여지는 영상에 사람이 팔을 들고 있고 그것도 자연스럽게 보이는게 아니라 프레임이 끊기면서 보이는 문제가 있습니다.. 코드 흐름 자체는 opencv 를 통해서 영상 데이터 받고 데이터 전처리 후처리 작업을 하고 처리 된 데이터를 Thread 를 이용해서 queue에 넣고 사용하는 방식으로 처리하고 있습니다. 혹시나 데이터 전처리 후처리하는 작업과정에서 처리 비용이 많이 드는건가 싶어서 일반 저장된 영상으로 테스트를 해봤는데 저장된 영상은 정상적인 속도로 나오고 있는 상황입니다. 이럴때는 보통 어떻게 해결하시는 지 알려주시면 감사하겠습니다!!
답변 1
코드는 이렇게 되어있습니다!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50
class Camera: def __init__(self, source, PT_PATH): self.capture = cv2.VideoCapture(source) if not PT_PATH == "original": self.model = load_model(PT_PATH) else: self.model = "original" self.streaming_state = False self.frame_queue = queue.Queue() self.thread = threading.Thread(target=self.read_frames, args=()) def start(self): self.streaming_state = True self.thread.start() def stop(self): self.streaming_state = False while not self.frame_queue.empty(): try: self.frame_queue.get_nowait() except queue.Empty: break self.capture.release() print("메모리에서 해제된 후 상태 : ",self.capture.isOpened()) def read_frames(self): while self.streaming_state: # print("capture 상태 : ",self.capture.isOpened()) success, capture_img = self.capture.read() if not success: print("더이상 읽어올 Frame이 존재하지 않습니다.") break if not self.model == "original": pre_process_image, model_to_device = preprocess_frame(capture_img=capture_img, model=self.model) post_process_image = postprocess_frame(pre_process_image, capture_img, model_to_device) self.frame_queue.put((b'--frame\r\n' b'Content-Type: image/jpeg\r\n\r\n' + post_process_image + b'\r\n')) else: capture_img = httpProcessing(capture_img=capture_img) self.frame_queue.put((b'--frame\r\n' b'Content-Type: image/jpeg\r\n\r\n' + capture_img + b'\r\n')) def get_frame(self): while True: if self.frame_queue.empty(): continue yield self.frame_queue.get()
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!