视频运动支持向量机的处理

facemap的Python项目详细描述


facemaplilmouse

用python和matlab实现的啮齿动物视频处理图形用户界面。适用于灰度和RGB电影。可以处理多摄像机视频。一些测试gui的示例电影位于此处。您可以将python和matlab版本的输出保存为一个matlab文件,并在gui中选中一个复选框(如果您想使用python版本,它有一个更好的gui)。

数据采集信息

红外照明:

在黑暗中录制时,我们使用850nm处的红外照明,与970nm甚至920nm处的2P成像效果良好。根据您的需要,您可能需要选择不同的波长,这也会更改下面的所有过滤器。950纳米同样有效,750纳米也可能有效,但仍超出啮齿动物的可见范围。

如果你想将照明集中在鼠标的眼睛或脸上,你需要一个不同的,更昂贵的系统。下面是一个例子,由来自Carandini实验室的Michael Krumin提供:驱动程序电源发光二极管镜头,以及镜头管,以及另一个镜头管

摄像机:

我们使用ptgrey相机。我们用于从多个摄像头同时采集的软件是偏差软件。适用于缩小视图的基本镜头此处。要看清瞳孔,您可能需要一个更好的变焦镜头10x这里

对于2P成像,您需要一个850nm左右的更紧密的滤光片,这样您就看不到激光穿过鼠标的眼睛/头部,例如。根据你的镜片,你需要找出一个合适的滤镜适配器。对于我们上面的10倍镜头,您可能需要所有这些:适配器1适配器2适配器3适配器4

安装

巨蟒

此软件包仅支持安装有anaconda的python 3

Linux用户首先运行此命令:sudo apt get install ffmpeg

使用environment.yml文件(请先尝试此操作)

  1. 从存储库下载environment.yml文件
  2. 在路径中用conda打开蟒蛇提示/命令提示
  3. 运行conda env create-f environment.yml
  4. 要激活此新环境,请运行conda activate facemap
  5. 您应该可以在终端线路的左侧看到(facemap)。现在运行python-m facemap,一切就绪。
  6. < > >

    要在环境中升级facemap(包此处),请运行:

    pip install facemap --upgrade
    

    手动安装依赖项

    1. 在命令行终端/anaconda提示符下,安装视频库:
    2. < > >
      conda install -c conda-forge ffmpeg
      conda install av -c conda-forge
      
      1. 安装其他conda依赖项(它们可能已经安装在基本anaconda中,但请尝试这些命令)
      2. < > >
        conda install -c numba numba
        conda install -c conda-forge mkl_fft
        
        1. 安装facemap及其其他依赖项:pip install facemap
        2. < > >

          下一个(所有人)

          如果您有大的文件,或者如果您有帧读取错误请尝试使用以下命令处理pims,该命令允许对视频进行非顺序索引:

          pip install git+https://github.com/soft-matter/pims.git
          

          为此,您需要安装Git。

          试试看

          运行

          python -m facemap
          

          常见问题

          如果有pip问题,那么在预安装的依赖项和facemap需要的依赖项之间可能会有一些交互。首先要尝试的是

          python -m pip install --upgrade pip
          

          如果在运行python-m facemap时,收到错误:没有名为pyqt5.sip的模块,请尝试卸载并重新安装pyqt5

          pip uninstall pyqt5 pyqt5-tools
          pip install pyqt5 pyqt5-tools pyqt5.sip
          

          如果在运行python-m facemap时,收到与matplotlib相关的错误,请尝试升级它:

          pip install matplotlib --upgrade
          

          如果你在优胜美地mac操作系统上,pyqt不工作,你将无法安装facemap。最新版本的Mac OS还可以。

          该软件已经在ubuntu 18.04上进行了大量测试,而在windows 10和mac操作系统上的测试则不太好。如果您有安装问题,请发布一个问题。此外,如果运行ffmpeg/pims需要更多驱动程序,请尝试按照pip提供的说明操作。

          依赖关系

          facemap python依赖于这些出色的软件包:

          Matlab

          Matlab版本需要从Github下载/克隆(不需要安装)。它在Matlab2014b及以上版本中工作-如果不工作,请提交问题。图像处理工具箱是使用图形用户界面所必需的。对于GPU功能,需要并行处理工具箱。如果没有并行处理工具箱,请在处理之前取消选中图形用户界面中"使用GPU"旁边的复选框。

          支持的电影文件

          '.mj2','.mp4','.mkv','.avi','.mpeg','.mpg','.asf'

          开始处理!如何使用图形用户界面

          巨蟒

          face gif

          在终端中运行以下命令

          python -m facemap
          

          应出现以下窗口。左上角的"文件"按钮加载单个文件,中上角的"文件夹"按钮加载整个文件夹(您可以从中选择电影),右上角的"文件夹"按钮加载处理过的文件("proc.npy"文件)。加载一个视频或一组视频(有关同步视频的文件格式,请参见下文)。视频将弹出在图形用户界面的左侧。可以使用鼠标滚轮放大和缩小,也可以通过按住鼠标进行拖动。双击可返回到原始的全视图。

          选择要添加的roi类型,然后单击"添加roi"将其添加到视图中。roi中的像素将显示在右边的窗口中(根据roi类型的不同进行不同的处理-见下文)。您可以随时移动它并调整roi的大小。您可以使用"右键单击"并选择"删除"来删除ROI。您可以使用右上角的饱和条更改roi的饱和度。您也可以随时单击ROI,在右视图中查看它的外观。

          默认情况下,"计算多视频SVD"框未选中。如果选中它,则在所有视频中计算运动svd-所有视频在每个时间点连接,并计算所有像素x时间点矩阵的svd。如果一次只获取一个视频,则它是此视频的SVD。

          < div >multivideo gif

一旦开始处理,界面将不再可点击,所有有关处理的信息将显示在您打开facemap的终端中:

< div >terminal

如果要打开指定了电影文件和/或保存路径的图形用户界面,以下命令将允许此操作:

pip install facemap --upgrade
0

请注意,只有当您只需要加载一个文件(不能有多个串联视图/多个视图)时,此操作才有效。

批处理(仅限python)

加载一个或一组视频并绘制roi并选择处理设置。然后单击"保存ROI"。这将在指定的保存文件夹中的文件夹中保存一个*\u proc.npy文件。此proc文件的名称将列在处理批下面(此按钮也将激活)。然后可以重复此过程:加载视频、绘制roi、选择"设置",然后单击"保存roi"。然后要处理列出的所有*\u proc.npy文件,请单击"处理批处理"

Matlab

要启动gui,请运行此文件夹中的命令moviegui。应出现以下窗口。单击ROI按钮并绘制区域后,必须在"绘制"框中双击以确认。要计算多个同时采集的视频的SVD,您需要使用"多视频SVD"选项一次在每个视频上绘制一个ROI。

< div >gui截图

默认起始文件夹

python:无论您在何处运行python-m facemap

Matlab:设置在moviegui.m(h.filepath)的第59行

文件加载结构

如果您选择一个文件夹而不是一个文件,它将组合该文件夹中所有视频文件的列表,以及所有视频1文件夹。Matlab图形用户界面将询问"是否要处理所有电影?"如果您拒绝,则会出现一个可供选择的电影列表。默认情况下,python版本会显示一个电影列表。如果在python版本中没有选择电影,则假定您要处理所有电影。

处理同时拍摄的电影(多个相机设置)

然后两个gui都会问正在处理同时拍摄的多个视频?"如果您选择"是",则脚本将查看文件名的前四个字母在电影中是否不同。如果两部电影的前四个字母相同,则gui假定它们是按顺序获取的,而不是同时获取的。

示例文件列表:

  • cam1_g7c1_1.avi
  • cam1_g7c1_2.avi
  • cam2_g7c1_1.avi
  • cam2_g7c1_2.avi
  • cam3_g7c1_1.avi
  • cam3_g7c1_2.avi

"您正在处理多个同时拍摄的视频吗?"回答:是

然后,gui假设同时获得{cam1_g7c1_1.avi、cam2_g7c1_1.avi、cam3_g7c1_1.avi},同时获得{cam1_g7c1_2.avi、cam2_g7c1_2.avi、cam3_g7c1_2.avi}。它们将按字母顺序(1在2之前)进行处理,视频结果将及时连接起来。如果其中一个文件丢失,那么gui将出错,您将不得不再次选择文件文件夹。此外,如果同时获取的文件的帧长度不相同(例如{cam1_g7c1_1.avi、cam2_g7c1_1.avi、cam3_g7c1_1.avi}都应具有相同的帧数),则会出现错误。

注意:如果您同时拥有多个视频/整体像素(例如2000 x 2000),则需要大约32GB的RAM来计算完整的SVD运动掩码。

python:您将能够同时看到所有同时收集的视频。但是,您只能在一个视频中绘制roi。所有视频只计算"多视频SVD"。

Matlab:文件选择过程结束后,您将在下拉菜单中看到所有电影(按文件名)。您可以在它们之间切换,并检查roi对每部电影的效果。

投资回报率类型

瞳孔计算

从roi中减去最小像素值。使用饱和度条减少眼睛的背景。该算法将任何小于饱和水平的像素归零(我建议a非常低值-因此大多数像素在图形用户界面中为白色)。

接下来,它会找到最大幅度的像素。它在该区域周围绘制一个框(roi的1/2大小),然后找到该区域的重心。然后把盒子放在那个区域的中心。它使用最大似然将多变量高斯拟合到框中的像素(请参见瞳孔.py或fitmvgaus.m)。

高斯拟合后,它将像素归零,这些像素与中心的平方距离(通过高斯拟合的标准偏差规范化)大于2*sigma^2,其中sigma由用户在gui中设置(默认sigma=2.5)。现在,它将在删除这些点的情况下再次执行拟合,并将此过程重复4次。瞳孔被定义为远离高斯质量中心的椭圆sigma标准差。在椭圆周围用"+"绘制,在中心用一个"+"绘制。

如果在鼠标的眼睛上有反射,那么你可以画椭圆来解释这个"角膜反射"(用黑色绘制)。您可以根据需要为每个学生添加任意数量的ROI。该算法用预测值填充图像的这些区域,从而允许大瞳孔和小瞳孔之间的平滑过渡。

瞳孔gif

此原始瞳孔区域跟踪是后处理的(请参见smooth瞳孔.m)。跟踪是用30个时间段的窗口进行中值过滤的。在每个时间点,计算原始记录道和中值滤波记录道之间的差异。如果给定点的差值超过原始记录道标准偏差的一半,则原始值将替换为中值过滤值。

瞳孔

闪烁计算

如果你看瞳孔大小,你可能想忽略动物眨眼的画面。闪烁区域是您设置的饱和度以上的像素数(所有非白色像素)。

运动SVD

运动svd(小roi/多视频)由gui中的空间下采样输入框(默认为4像素)在空间下采样的电影上计算。注意:此窗口中设置的饱和度不用于任何处理。

运动m被定义为abs(当前帧-上一帧),并使用帧子集(avgmot)计算帧间的平均运动能量(至少1000帧-设置在SubsampledMean.m或Line中的第45行183英寸。然后根据数据块计算运动能量的奇异向量,这些数据块也是从帧的子集(15个块,每个块1000帧)计算得到的。设f为帧块[像素x时间]。那么

pip install facemap --upgrade
1

umotmask是在所有时间点投影到视频上的运动掩码(以大小为nt=500的块来完成):

pip install facemap --upgrade
2

示例运动遮罩umotmask和轨迹motsvd

example svds

我们发现,这些提取的奇异向量解释了视觉皮层和其他前脑区域神经活动的总可解释方差的一半。有关详细信息,请参阅我们的论文

运行计算

在傅立叶域中计算连续帧(运行中的roi)之间的相位相关性(请参见running.py或processrunning.m)。最大相关的xy位置给出了两个连续帧之间的移位量。根据帧到帧的移动速度,您可能需要至少50x50像素的ROI来计算此值。

多视频SVD ROI

python:复选框"compute multivideo svd"可计算所有视频中所有像素的svd。

Matlab:可以绘制多视频SVD中要包含和排除的区域(如果只有一个视图,则可以绘制单个视频)。按钮是"要保留的区域"和"要排除的区域",将分别绘制蓝色和红色框。使用"要包含的区域"中所有像素的并集,从"要排除的区域"中排除与此并集相交的任何像素(可以使用"显示区域"复选框在查看框和查看包含的像素之间切换,请参见下面的示例)。

示例区域

然后从这些非红色像素计算运动能量。

处理输出

gui为所有视频创建一个文件(保存在当前文件夹中),npy文件名为"videofile_proc.npy",mat文件名为"videofile_proc.mat"。

巨蟒

  • 文件名:视频文件名列表-每个列表都是同时拍摄的视频
  • lylx:同时拍摄的每个视频的y(ly)和x(lx)像素数列表
  • sbin:运动支持向量机的空间格大小
  • lybinlxbin:sbin为同时拍摄的每个视频在y(ly)和x(lx)中装箱的像素数列表。USEL/LI>
  • sybinsxbin:多视频坐标(仅用于绘图/重塑)
  • lybinlxbin:嵌入矩形(binned)中的所有视频的全尺寸
  • fullsvd:是否计算"多视频svd"
  • 保存程序:是否将proc另存为*.mat文件
  • avgframe:来自帧子集(由sbin装箱)的每个视频的平均帧列表
  • avgframe\u整形:将平均帧整形为Y像素x X像素
  • avgmotion:帧子集中每个视频的平均运动列表(由sbin装箱)
  • avgmotion_reforme:将平均运动重塑为y像素x x x像素
  • iframes:包含每个连续视频中的帧数的数组
  • motsvd:运动svd列表-第一个是"多视频svd"(如果未计算则为空)-每个是nframes x组件
  • motmask:每个运动svd的运动掩码列表-每个motmask是像素x组件
  • motmask_reforme:将运动遮罩重塑为y像素x x像素x组件
  • 瞳孔:瞳孔ROI输出列表-每个输出都是一个带有"面积"、"面积平滑"和"com"(质心)的dict
  • 闪烁:闪烁ROI输出列表-每个是NFrames,每个帧上的闪烁区域
  • 运行:运行的ROI输出列表-每个是NFrames x 2,用于每个帧上的X和Y运动
  • ROI:绘制和计算的ROI
    • rind:以数字表示的ROI类型
    • rtype:什么类型的ROI("运动SVD"、"瞳孔"、"眨眼"、"跑步")
    • ivid:其中视频是roi
    • 颜色:ROI的颜色
    • y范围:y投资回报率指数
    • x范围:x投资回报指数
    • 饱和度:ROI的饱和度(0-255)
    • 瞳孔σ:用于计算瞳孔半径的stddev数(瞳孔roi)
    • Yrange_bin:y中的binned索引(如果是运动SVD)
    • xrange_bin:x中的binned索引(如果是运动SVD)

注意这是一个dict,所以在加载后说*.item():

pip install facemap --upgrade
3

这些_proc.npy文件可以加载到gui中(并在处理后自动加载)。左下角的复选框允许您查看处理过程中的不同记录道。

Matlab

  • nxny:同时拍摄的每个视频中x和y像素数的单元格数组
  • sc:使用空间下采样常数
  • 投资回报率:[视频x区域]-多视频SVD要包括的区域(在下采样参考中)
  • eroi:[视频x区域]-从多视频svd中排除的区域(在下采样参考中)
  • locroi:小roi的位置(按运行顺序,roi1,roi2,roi3,pupil1,pupil2);在下采样参考中
  • roifile:其中电影是较小的roi
  • plotroi:正在处理哪些roi(这些roi显示在gui的框架上)
  • 文件:您一起处理的所有文件
  • npix:用于多视频svd的每个视频的像素数数组
  • tpix:每个视图中用于svd处理的像素数数组
  • wpix:为多视频svd从每个视频中使用像素的单元格数组
  • avgframe:[sum(tpix)x 1]根据帧子集计算的视频平均帧
  • avgmotion:[sum(tpix)x 1]根据帧子集计算的视频平均帧
  • 交通部:运动SVD单元阵列[分量x时间](按顺序:多视频、ROI1、ROI2、ROI3)
  • umotmask:运动掩码的单元格数组[像素x时间]
  • 运行速度:使用相位相关[时间x 2]计算的2d运行速度
  • 瞳孔:大小为2的结构(pupil1和pupil2),有3个字段:area、area\u raw和com
  • thres:使用的瞳孔西格玛
  • 饱和度:饱和度水平(按运行顺序排列,roi1、roi2、roi3、pupil1、pupil2);处理中仅使用pupil1和pupil2的饱和度水平,其他仅用于查看roi

投资回报率为[1x4]:[y0 x0 ly lx]

Matlab中的运动SVD掩码

使用脚本plotsvdmasks.m可以方便地从多视频svd中查看运动遮罩。较小的roi的运动遮罩已被重塑为[xpixels x ypixels x components]。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java接口中的每个方法都是抽象的,但在抽象类中,我们也只能使用抽象方法   初始化Java中声明的、未初始化的变量会发生什么情况?   java BouncyCastle openPGP将字节[]数组加密为csv文件   在Java中将类A(和所有子类)映射到类B的实例的字典   RSA公钥编码,在Java和Android中,代码相同,结果不同   java在安卓中实现数字检测语音识别   java取消选择复选框   java如何在其他配置中重用Maven配置XML片段   java有没有一种有效的方法来检查HashMap是否包含映射到相同值的键?   spring处理程序调度失败;嵌套的例外是java。lang.NoClassDefFoundError:org/apache/http/client/HttpClient   带有ehcache的java多层缓存   java如何访问chromium(或任何其他浏览器)cookie   java通过将两个集合与spring data mongodb data中的条件合并来获取计数   安卓中R.java的语法错误