def transmit(): global frameHandlerThread global IP_RTP global RTP_PORT print('Start transmit...') #проверка наличия камеры в системе assert rpicam.checkCamera(), 'Raspberry Pi camera not found' print('Raspberry Pi camera found') print('OpenCV version: %s' % cv2.__version__) FORMAT = rpicam.VIDEO_MJPEG #поток MJPEG WIDTH, HEIGHT = 320, 240 RESOLUTION = (WIDTH, HEIGHT) FRAMERATE = 30 rpiCamStreamer = rpicam.RPiCamStreamer(FORMAT, RESOLUTION, FRAMERATE) rpiCamStreamer.setPort(RTP_PORT) rpiCamStreamer.setHost(IP_RTP) rpiCamStreamer.start() #запускаем трансляцию #поток обработки кадров frameHandlerThread = FrameHandlerThread(rpiCamStreamer) frameHandlerThread.start() #запускаем обработку
def setFrame(self, frame): #задание нового кадра для обработки if not self._newFrameEvent.is_set(): #если обработчик готов принять новый кадр self._frame = frame self._newFrameEvent.set() #задали событие return self._newFrameEvent.is_set() def onFrameCallback(frame): #обработчик события 'получен кадр' #print('New frame') frameHandlerThread.setFrame(frame) #задали новый кадр print('Start program') #проверка наличия камеры в системе assert rpicam.checkCamera(), 'Raspberry Pi camera not found' print('Raspberry Pi camera found') print('OpenCV version: %s' % cv2.__version__) #главный цикл программы def run(): #создаем трансляцию с камеры (тип потока h264/mjpeg, разрешение, частота кадров, хост куда шлем, функция обрабтчик кадров) rpiCamStreamer = rpicam.RPiCamStreamer(FORMAT, RESOLUTION, FRAMERATE, (IP, RTP_PORT), onFrameCallback) #robotCamStreamer.setFlip(False, True) #отражаем кадр (вертикальное отражение, горизонтальное отражение) rpiCamStreamer.setRotation(180) #поворачиваем кадр на 180 град, доступные значения 90, 180, 270 rpiCamStreamer.start() #запускаем трансляцию #поток обработки кадров