带你走近CCV(一)

从事多媒体互动行业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.进行校准。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1559350.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot教程(二十四) | SpringBoot实现分布式定时任务之Quartz(多数据源配置)

SpringBoot教程(二十四) | SpringBoot实现分布式定时任务之Quartz(多数据源配置) 前言多数据源配置引入aop依赖1. properties配置多数据源2. 创建数据源枚举类3. 线程参数配置类4. 数据源动态切换类5. 多数据源配置类HikariCP 版本…

Java基础(2) 之面向对象

文章目录 Java基础(2) 之面向对象1.对象2.类类的注意事项 3.this关键字4.构造器注意 5.封装性6.实体JavaBean实体类 7.成员变量和局部变量的区别8.staticstatic修饰成员变量static修饰成员方法static的注意事项工具类单例设计模式 9.代码块静态代码块实例代码块 10.继承权限修饰…

Springboot——使用poi实现excel动态图片导入解析

文章目录 前言依赖引入导入实现方式一方式二 前言 最近要实现一个导入导出的功能点,需要能将带图片的列表数据导出到excel中,且可以导入带图片的excel列表数据。 考虑到低代码平台的表头与数据的不确定性,技术框架上暂定使用Apache-POI。 …

java 自定义填充excel并导出

首先在resources下面放一个excel模板 1. 方法签名和请求映射 RequestMapping(value "/ExportXls") public ResponseEntity<byte[]> rwzcExportXls(HttpServletRequest request, RequestBody JSONArray jsonArray) throws IOException { RequestMapping(val…

ubuntu 开放 8080 端口快捷命令

文章目录 查看防火墙状态开放 80 端口开放 8080 端口开放 22端口开启防火墙重启防火墙**使用 xhell登录**&#xff1a; 查看防火墙状态 sudo ufw status [sudo] password for crf: Status: inactivesudo ufw enable Firewall is active and enabled on system startup sudo…

微服务实战——登录(普通登录、社交登录、SSO单点登录)

登录 1.1. 用户密码 PostMapping("/login")public String login(UserLoginVo vo, RedirectAttributes redirectAttributes, HttpSession session){R r memberFeignService.login(vo);if(r.getCode() 0){MemberRespVo data r.getData("data", new Type…

进阶功法:SQL 优化指南

目录标题 SQL 优化指南1. 插入数据优化1.1 批量插入数据1.2 手动提交事务1.3 主键顺序插入1.4 大批量插入数据步骤&#xff1a; 2. 主键优化主键设计原则拓展知识 3. ORDER BY 优化3.1 Using filesort3.2 Using index示例 3.3 ORDER BY 优化原则 4. GROUP BY 优化示例 4.1 GROU…

优雅的实现服务调用 -- OpenFeign

文章目录 1. RestTemplate存在问题2. OpenFeign介绍3. 快速上手引入依赖添加注解编写OpenFeign的客户端远程调用 4. OpenFeign参数传递从URL中获取参数传递单个参数传递多个参数传递对象传递JSON 5. 最佳实践Feign继承方式创建一个新的模块引入依赖编写接口打jar包服务实现方实…

javacpp调用pdfium的c++动态库

1、.h头文件 2、生成java代码的conf PdfiumDocumentConfigure.java package org.swdc.pdfium.conf;import org.bytedeco.javacpp.annotation.Platform; import org.bytedeco.javacpp.annotation.Properties; import org.bytedeco.javacpp.tools.InfoMap; import org.byte…

物联网:一种有能力重塑世界的技术

物联网&#xff08;IoT&#xff09;近年来对我们的日常生活产生了如此积极的影响&#xff0c;以至于即使是不懂技术的人也开始相信它所带来的便利以及敏锐的洞察力。 物联网是一场数字技术革命&#xff0c;其意义甚至比工业革命更为重大。物联网是仍处于起步阶段的第四次工业革…

SldWorks问题 2. 矩阵相关接口使用上的失误

问题 在计算三维点在图纸&#xff08;DrawingDoc&#xff09;中的位置时&#xff0c;就是算不对&#xff0c;明明就4、5行代码&#xff0c;怎么看都是很“哇塞”的&#xff0c;毫无问题的。 但结果就是不对。 那就调试一下吧&#xff0c;调试后发现生成的矩阵很不对劲&#…

电力设备图像分割系统源码&数据集分享

电力设备图像分割系统系统源码&#xff06;数据集分享 [yolov8-seg-efficientViT&#xff06;yolov8-seg-C2f-DCNV2等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI G…

分治算法(7)_归并排序_计算右侧小于当前元素的个数

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 分治算法(7)_归并排序_计算右侧小于当前元素的个数 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&…

鸿蒙微内核IPC数据结构

鸿蒙内核IPC数据结构 内核为任务之间的通信提供了多种机制&#xff0c;包含队列、事件、互斥锁、信号量等&#xff0c;其中还有Futex(用户态快速锁)&#xff0c;rwLock(读写锁)&#xff0c;signal(信号)。 队列 队列又称为消息队列&#xff0c;是一种常用于任务间通信的数据…

ASP.NET MVC-懒加载-逐步加载数据库信息

环境&#xff1a; win10, .NET 6.0 目录 问题描述解决方案基础版数据库查询部分&#xff08;Entity Framework&#xff09;控制器前端页面 加载到表格版 问题描述 假设我数据库中有N个表&#xff0c;当我打开某页面时&#xff0c;每个表都先加载一部分&#xff08;比如20条&am…

Chainlit集成Dashscope实现语音交互网页对话AI应用

前言 本篇文章讲解和实战&#xff0c;如何使用Chainlit集成Dashscope实现语音交互网页对话AI应用。实现方案是对接阿里云提供的语音识别SenseVoice大模型接口和语音合成CosyVoice大模型接口使用。针对SenseVoice大模型和CosyVoice大模型&#xff0c;阿里巴巴在github提供的有开…

有关vue路由的学习

导言 由于很久没碰前端了&#xff0c;碰到路由都不太会了。趁着后端对接来记录一下&#xff0c;就当复习。不过由于个人能力有限&#xff0c;这篇会偏向整个过程的实现逻辑&#xff0c;其中有很多具体的方法不会给来&#xff0c;有兴趣的可以去看一下源码~ 目的&#xff1a; …

基于springboot vue 校园失物招领平台的设计与实现

博主介绍&#xff1a;专注于Java&#xff08;springboot ssm springcloud等开发框架&#xff09; vue .net php phython node.js uniapp小程序 等诸多技术领域和毕业项目实战、企业信息化系统建设&#xff0c;从业十五余年开发设计教学工作☆☆☆ 精彩专栏推荐订阅☆☆☆☆…

SAP_SD模块-销售订单抬头折扣金额分摊到行项目的业务记录

前言&#xff1a; 本文主要是记录24年9月份支持财务月结过程中&#xff0c;用户提出的一个问题&#xff1a;“为什么KE30有部分物料9月份的销售数量少于FAGLL03H的销售数量&#xff1f;&#xff1f;”&#xff0c;主要包括以下两个内容&#xff1b; 1、问题发生的场景复现&am…

毕设分享 基于协同过滤的电影推荐系统

文章目录 0 简介1 设计概要2 课题背景和目的3 协同过滤算法原理3.1 基于用户的协同过滤推荐算法实现原理3.1.1 步骤13.1.2 步骤23.1.3 步骤33.1.4 步骤4 4 系统实现4.1 开发环境4.2 系统功能描述4.3 系统数据流程4.3.1 用户端数据流程4.3.2 管理员端数据流程 4.4 系统功能设计 …