从事多媒体互动行业8年了,最近才想着自己可以独自写一个识别软件,应该说想把公司里的识别统统临摹一遍,这样在接外包的时候可以游刃有余了
什么是CCV?
CCV是一个建立在openCV基础上的一个开源的架构,其全称是Community Core Vision。它是一个开源的跨平台计算机视觉和机器感知解决方案。它以视频作为输入流,从中捕捉跟踪到的触点信息,包括事件(手指下压、移动、释放等)及触点坐标,这些信息是构建一个多点触控系统所必须。CCV可以以网络摄像机和视频设备作为输入,也支持基于TUIO/OSC/XML等协议的各种应用,以及很多多点触控技术,如FTIR, DI, DSI, 和 LLP等等。CCV更是为支持未来的视觉应用(客户模块/滤波器)作了前瞻性的扩展。
CCV具有众多优秀的特性:
1.简单易用的图形用户界面。
2.滤镜(动态的背景相减,高通,缩放,阈值算法),可以与所有的光学硬件设备协同工作,支持自定义滤镜模块。
3.摄像机切换,如果你有多个视频采集设备,你可以通过动态切换传入的视频信号,不需要重启程序。
4.输入模块切换,可以使用一段视频录像来代替摄像机。
5.动态网格校准,因为设备的大小差异,导致触点的移动速度和大小不能更好的与应用程序结合,你可以通过调校,改变触点,增加、减少尺寸,以达到最佳性能。
6.图像翻转,支持图像水平或者垂直翻转。
7.网络传输,支持发送osc和TUIO协议信息到某个端口,以此让应用程序读取并进行处理。
8.摄像机和应用程序帧显示,可以实时显示当前摄像机和应用程序FPS数值。
9.GPU模式,支持GPU硬件加速。
10.跨平台,支持Windows,Mac和Linux.
CCV相关概念:
FTIR 多点触摸(FTIR Multi Touch)的原理
红外LED(IR LED)发射红外线进入亚克力板(Acrylic),当亚克力面板的厚度大于8mm时,光线会发生在亚克力内不停反射,而不会跑出来,这就叫做全内反射(Total Internal Reflection),但当你的手指(或者其他材质如硅胶等有一定韧性和反射性的材料)碰到亚克力表面时,全内反射(Total Internal Reflection)被破坏,光线被手指反射出来,此时,亚克力下方正好有红外摄像头(IR Camera)捕捉到手指反射的亮点,摄像头捕捉到的亮点会送到计算机进行处理,形成输入,有几个亮点,就形成几个输入点。FTIR 多点触摸(FTIR Multi Touch)的原理就是这样。
CCV运行效果及整体流程:
采集图像->背景分离->目标平滑->高通滤波->幅值增强->得到触点
CCV的工作流程:
- 背景去除:当跟踪到的图像中没有看到指头时,按下背景移除按钮获取背景;如果环境中光线变化常常变化,还需要打开动态提取开关。
- 滤波:高通,幅度,平滑滤波
- 高通滤波是从手的影像中再提取指头的关键步骤,幅度增强是为了使手指头部分更明显(图像增强),平滑是为了除去噪声干扰(图像去噪),是触点提取过程更加稳定,用专业术语来说是鲁棒性更高。
- 注:为什么高通滤波可以把手指从手的影像中分割出来呢?这是由于所成的像的特征决定的,手指头清晰,其他部分与背景的界限模糊,所以高频信息集中在手指部分。
- 阈值选取(threshold):不断调整阈值,直到最后得到的跟踪图像(tracked image)中,只能看到手指头,而没有虚假的触点存在。
- 参数选择影响最终触电提取的精确度
- 改变输入清晰度,帧率,通信,视频以及触点设置
CCV的设置文件保存在config.xml中
通过对config文件的更改可以改变如下的参数值
1.输入清晰度,帧率
2.网络通信地址和端口
3.测试用的视频文件
4.可以跟踪的最大触点数目
系统要求:
Intel/AMD 2.0GHz CPU
1GB内存
100MB剩余磁盘空间
NVIDIA或者AMD独立显卡
Windows xp /7/10
注:Windowshe Mac需装有QuickTime,否则将会出现CCV启动后一闪而过的情况。
界面:
1.源图像,显示从摄像机传入的原始图像或者视频文件。
2.使用摄像机作为捕获源。
3.使用录制好的视频作为捕获源。
4.切换到前一个摄像机
5.切换到后一个摄像机
6.捕获影像并处理之后的影像,这个影像已经经过触点追踪和过滤,是最终生成的触动影像
7.反转显示模式,选择此项会切换影像的显示模式
8.阈值调节滑块,调整要追踪的触点大小,值越高,追踪后的触点越大
9.运动过滤,当手指滑动的时候,会产生残留的影像,调节此值,可以使手指滑动的时候,触点被追踪的更为精确,类似于液晶显示器的响应时间。
10.最小触点尺寸,调整可以追踪的最小触点,值越高,被分配ID的触点就越大。
11.最大触点尺寸,调整可以追踪的最大触点,值越高,越大的触点就失去ID,相当于追踪的点的大小上限。
12.移除背景,捕捉当前帧的背景影像,并将它作为活动帧中的需要减去的背景,意思是说为了使背景对触点的追踪的影响降到最低,可以采用移除背景的方法将背景在运行时减去。
13.动态相减按钮。动态调整背景图像,如果处在一个环境光不稳定的条件下,移动该滑块,将动态处理背景图像并在运算时相减。
14.光滑度调节滑块,平滑影像并随机过滤影像中的噪点。
15.高通模糊调节滑块, 去除图像的模糊部分,留下清晰明亮的影像。
16.高通噪点,调节此值,将影像中的噪点加以模糊处理,使其尽可能不影响触点的追踪
17.触点放大滑块,如果触点很弱,不稳定,调节amplify滤镜加以增强触点亮度和稳定性。
18.开关切换,打开或者关闭当前开关所在滤镜。
19.摄像机设置按钮,开启摄像机高级设置页面。
20.垂直翻转切换,将源图像垂直翻转
21.水平翻转切换,将源图像水平翻转
22.GPU模式切换,开启图形硬件加速,只适用于较新的显卡,现在处于功能开发初期,可能无法在所有的机器上启用。
23.发送UDP协议的TUIO触点信息
24.XML,以TCP协议XML格式向外广播触点信息
25.二进制TCP,向外广播原始触点x/y值的信息
26.加载校准屏幕,开始校准。
27.保存设置
配置:
1.下载CCV
2.启动Community Core Vision
3.程序将会默认使用已经录制好的一段视频,并显示在source image 。并将处理后的影像显示在Tracked image.
4.如果没有选择正确的摄像机,可以通过Next Camera 和Previous Camera 进行摄像机的选择。
5.如果现在仍然没有手指影像,点击remove BG 按钮或者键盘上的B键,程序将捕捉背景,这样做的目的是让程序将背景记住并在处理的时候减去,如果处在一个环境光不稳定的环境里,打开Dynamic Subtract
6a.(仅限于FTIR和LLP)
- 关闭Highpass滤镜和Amplify滤镜
- 打开Smooth滤镜。
- 调节Smooth滤镜的值直到移除噪点
- 如果触点很弱,不稳定,打开Amplify 滤镜以增强触点亮度和稳定性
6b.(仅限于DI和DSI)
- 关闭Smooth滤镜和Amplify滤镜。
- 打开HighPass滤镜。
- 调节HighPass滤镜的Blur值和Noise直到手指影像清晰可见。
- 如果触点很弱,不稳定,打开Amplify 滤镜以增强触点亮度和稳定性
7. 最后,调节Tracked Image 中的Threshold滑块值直到只有手指的影像在上面而没有其他的噪点。
8.点击Save Settings 按钮,保存当前设置,程序在退出的时候也会自动保存当前设置。
9.进行校准。