def _interpolateVideo(self): print "Interpolating video..." dialog = QMessageBox(self) dialog.setText("Attendi mentre ricostruisco il video...") dialog.show() start_time = time.time() interpolator = VideoInterpolator(self.video) #self._discared_frames = [1, 2, 3] #TODO: remove me frames_path = interpolator.interpolate(self._discared_frames, self.searcher(), self.ui.blockSizeSpinBox.value(), self.ui.MADThresholdSpingBox.value()) klog("L'interpolazione del video ha impiegato: %.2f secondi" % (time.time()-start_time)) interpolated_video = Video(frames_path=frames_path) #interpolated_video = Video(frames_path="/tmp/pallone.mov.interpolated") interpolated_video.load() dialog.close() self.ui.interpolatedFramesTimelineListView.setModel( QFramesTimelineListModel( interpolated_video ) ) self.ui.interpolatedFramesTimelineListView.setItemDelegate( QFramesTimelineDelegate() ) klog("Calculating PSNR for frames...") summed_PSNR = 0 for i in xrange(interpolated_video.frames_count()): original_frame = self.video.frames[i] new_frame = interpolated_video.frames[i] PSNR = ImageComparator.calculate_PSNR( original_frame.image(), new_frame.image(), interpolated_video.width(), interpolated_video.height() ) klog("Frame %d\t\tPSNR:%d" %(i, PSNR)) if PSNR > 1000: PSNR = 50 summed_PSNR += PSNR PSNR = summed_PSNR/interpolated_video.frames_count() klog("The interpolated video has a PSNR of %f" %PSNR) self.ui.interpolatedVideoPSNRLabel.setText("%f" %PSNR ) klog("Saving the interpolated video...") FFMpegWrapper.generate_video(frames_path, "interpolated_video.mp4")
def _draw_compressed_frame2(self): if len(self.vectors) > 0: self._draw_motion_vectors() zero_vectors_blocks_count = 0 new_blocks_count = 0 moved_vectors_blocks_count = 0 self._draw_frame(self.image_2, self.ui.frame2CompressedGraphicsView) scene = self.ui.frame2CompressedGraphicsView.scene() image2_new = QImage(self.image_2) sameBlockPen = QPen(Qt.black, 1, Qt.SolidLine) movedBlockPen = QPen(Qt.green, 1, Qt.SolidLine) for v in self.vectors: x = int(v["x"]) y = int(v["y"]) to_x = int(v["to_x"]) to_y = int(v["to_y"]) MAD = v["MAD"] if x == to_x and y == to_y: #The block is the same of the previous frame. Transmit a zero vector zero_vectors_blocks_count += 1 scene.addRect(x, y, self.get_block_size(), self.get_block_size(), sameBlockPen, QBrush(Qt.SolidPattern)) else: if MAD < self.ui.MADThresholdSpingBox.value(): #The block is moved moved_vectors_blocks_count += 1 scene.addRect(x, y, self.get_block_size(), self.get_block_size(), movedBlockPen, QBrush(Qt.green, Qt.SolidPattern)) moved_block_image = self.image_1.copy(x,y, self.get_block_size(), self.get_block_size()) ImageConverter.draw_image_into_image(moved_block_image, image2_new, to_x, to_y) else: #A new block of the frame is needed new_blocks_count += 1 #Draw the reconstructed Frame scene = QGraphicsScene() scene.addPixmap(QPixmap.fromImage(image2_new)) self.ui.frame2ReconstructedGraphicsView.setScene(scene) #Show the statistics zero_vectors_blocks_percent = (zero_vectors_blocks_count*100/len(self.vectors)) new_blocks_percent = (new_blocks_count*100/len(self.vectors)) moved_vectors_blocks_percent = (moved_vectors_blocks_count*100/len(self.vectors)) compression_ratio = 100 - new_blocks_percent - moved_vectors_blocks_percent/3 self.ui.zeroVectorsPercentLabel.setText("%d %%" %zero_vectors_blocks_percent ) self.ui.newBlocksPercentLabel.setText("%d %%" % new_blocks_percent) self.ui.movedVectorsPercentLabel.setText("%d %%" % moved_vectors_blocks_percent) self.ui.compressionRatioLabel.setText("%d %%" %compression_ratio) total_mads_checked = 0 for v in self.vectors: total_mads_checked += v["MAD_checks_count"] self.ui.MADsCheckedLabel.setText("%d" %total_mads_checked) #Calculate the PSNR PSNR = ImageComparator.calculate_PSNR(ImageConverter.qtimage_to_pil_image(self.image_2), ImageConverter.qtimage_to_pil_image(image2_new), self.image_2.width(), self.image_2.height()) self.ui.psnrFrame2Label.setText("%d" % PSNR)