我想对视频中检测到的人脸进行加密以保留身份.然后对该视频执行解密以显示面部



我正在用python工作,这就是我尝试过的-

  • 使用OpenCv识别人脸并获取视频帧中人脸的坐标。
  • 将该帧和坐标传递给加密算法(我正在使用混沌掩码(以仅在人脸周围的边界框内执行加密。
  • 我没有将这些坐标保存在外部文件中以便可以在加密区域执行解密,而是选择通过将框边界上的像素值修改为 (0,0,0( 并在框中执行加密来标记框中人脸周围的边界框。
  • 然后将加密帧保存在一个目录中,以便我可以借助以下代码从这些帧中获取新视频-

    pathIn= './frames/'
    pathOut = 'videonew.avi'
    fps = 15
    frame_array = []
    files = [f for f in os.listdir(pathIn) if isfile(join(pathIn, f))]
    #for sorting the frame names properly
    files.sort(key = lambda x: int(x[0:-4]))
    for i in range(len(files)):
    filename=pathIn + files[i]
    #reading each files
    img = cv2.imread(filename)
    height, width, layers = img.shape
    size = (width,height)
    #inserting the frames into an image array
    frame_array.append(img)
    out = cv2.VideoWriter(pathOut,cv2.VideoWriter_fourcc(*'DIVX'), fps, size)
    for i in range(len(frame_array)):
    # writing to a image array
    out.write(frame_array[i])
    out.release()
    
  • 这工作正常,并创建了视频"videonew.avi"。现在,为了解密,我使用以下代码从"videonew.avi中提取帧。

    vidcap = cv2.VideoCapture('videonew.avi')
    success,image = vidcap.read()
    count = 0
    path = os.getcwd() + "/test"
    os.chdir(path)
    while success:
    cv2.imwrite("%d.png" % count, image)     # save frame as PNGfile      
    success,image = vidcap.read()
    # print('Read a new frame: ', success)
    count += 1
    

但是提取的帧会遭受某种压缩,并且在边界上标记的那些 (0,0,0( 像素不存在(可能已更改(。所以,我无法执行解密。 你知道为什么会发生这种情况,我怎样才能在不损失像素的情况下获得帧吗? 或者有没有其他方法可以做到这一点?由于项目提供的一些约束,我无法将坐标存储在外部文件中。

avi文件格式是一种容器格式,允许各种音频和视频编码格式。其中一些格式是无损的,其中一些是有损的。

有损格式试图通过部分丢弃"不必要的"数据来压缩数据。您的 (0,0,0( 像素已适当优化。

您需要调查应使用哪个底层编解码器(指定为VideoWriter_fourcc(...)(来服务器您的目的。此选择取决于它是无损的以及您的环境中提供的支持。

相关内容

最新更新