查看原文
其他

10块钱将Mac笔记本变成触摸屏的开源方案

开源中国 2020-09-02

The following article is from 红薯胡说 Author 红薯

本文介绍一种只需不到 10 块钱就可以将你的 Mac 笔记本屏幕变成触摸屏的方法,重点是,这个方法是开源的!

整个原型由 Anish Athalye,Kevin Kwok,Guillermo Webster 和 Logan Engstrom 制作,耗时大约16小时。

先来看看演示效果:

该项目名为 Sistine 。

基本原理

Sistine 基本原理很简单。从一个角度看的表面往往看起来有光泽,你可以通过检查它是否接触到自己的反射来判断手指是否接触到表面。

Kevin Kwok 发现了这种现象,并做了个 ShinyTouch,利用外部网络摄像头构建了一个几乎不需要设置的触摸输入系统。紧接着,Kevin 和他的小伙伴想看看是否可以将这个想法小型化,并使其在没有外部网络摄像头的情况下工作。其想法是在 MacBook 的内置网络摄像头前改装一个小镜子,这样网络摄像头就会以锐角向下观看电脑屏幕。相机可以看到手指在屏幕上悬停或触摸屏幕,然后就能使用计算机视觉将视频输入转换为触摸事件。

所需硬件设置很简单,需要做的只是在网络摄像头前面以适当的角度放置一面镜子。 

物料清单:
  • 小镜子

  • 硬纸板

  • 铰链

  • 热胶

制作过程比较简单,请看视频:

最终产品形状如下:

手指检测
处理视频帧的第一步是检测手指。以下是网络摄像头看到的典型示例:

手指检测算法需要先找到触摸/悬停点,然后进行进一步处理。我们目前的方法是使用经典的计算机视觉技术处理,包括以下步骤:

  • 过滤肤色和二进制阈值

  • 查找轮廓

  • 找到两个最大的轮廓并确保轮廓在水平方向上重叠,而较小的轮廓在较大的轮廓上方

  • 将触摸/悬停点标识为连接底部轮廓的顶部和顶部轮廓的底部的线的中点

  • 根据两个轮廓之间的垂直距离区分触摸和悬停
上图显示的是将此过程应用于网络摄像头的帧。手指和反射(轮廓)以绿色标出,边界框以红色显示,触摸点以紫红色显示。

映射和校准

处理输入的最后一步是将触摸/悬停点从网络摄像头坐标映射到屏幕上的坐标。这两者由单应性变换(Homography)建立起联系。我们通过校准过程计算单应矩阵,其中提示用户触摸屏幕上的特定点。在我们使用屏幕坐标收集匹配网络摄像头坐标的数据后,我们可以使用 RANSAC 稳健地估计单应性。这为我们提供了一个投影矩阵,可以将网络摄像头坐标映射到屏幕上的坐标。

上面的视频演示了校准过程,用户必须在屏幕周围跟随绿点。该视频包含一些调试信息,展示在网络摄像头的实时视频上。网络摄像头坐标中的触摸点以红色显示。在校准过程完成之后,用红线显示投影矩阵,并且软件切换到估计的触摸点显示为蓝点的模式。

最终应用

在这个原型中,我们将悬停和触摸转换为鼠标事件,使现有应用程序立即启用触摸功能。如本文最初的视频所示。

总结

Sistine 项目是一个概念验证,只需 1 美元的硬件即可将笔记本电脑变成触摸屏,这个原型的效果非常好!通过一些简单的修改,例如更高分辨率的网络摄像头(我们的是 480p)和一个允许网络摄像头捕捉整个屏幕的曲面镜,Sistine 可以成为一个实用的低成本触摸屏系统。

作者已经将此原型系统相关的源码通过 MIT 许可开源,源码地址:
https://gitee.com/mirrors/Sistine

开源中国征稿啦!


开源中国 www.oschina.net 是目前备受关注、具有强大影响力的开源技术社区,拥有超过 400 万的开源技术精英。我们传播开源的理念,推广开源项目,为 IT 开发者提供一个发现、使用、并交流开源技术的平台。


现在我们开始对外征稿啦!如果你有优秀的技术文章想要分享,热点的行业资讯需要报道等等,欢迎联系开源中国进行投稿。投稿详情及联系方式请参见:我要投稿

推荐阅读

华为透露中国首个开源基金会将于近期正式运营

Zend 创始人提议创建 PHP 方言,暂命名为 P++

C++20最新进展:移除合约、新增类模板参数推导优化

知名技术杂志 Linux Journal 因资金耗尽宣布关闭

Blender 2.80 发布:全新 UI、实时渲染引擎 Eevee

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存