当前位置: 首页 > 面试题库 >

通过计算机视觉进行可靠的手部检测

麻阳
2023-03-14
问题内容

我目前正在开发用于可靠手部检测的系统。

第一步是拍摄手的照片(在HSV颜色空间中),并将手放在一个小矩形中以确定皮肤颜色。然后,我应用阈值过滤器将所有非皮肤像素设置为黑色,并将所有皮肤像素设置为白色。

到目前为止,它运行良好,但是我想问一下是否有更好的方法来解决此问题?例如,我发现有几篇论文提到白人的具体色彩空间,但没有一篇对亚洲/非洲/高加索色调进行比较。

顺便说一句,我正在通过Python绑定使用OpenCV。


问题答案:

您是否看过Gary
Bradski的camshift纸?您可以从这里下载

一年前,我使用皮肤检测算法来检测皮肤区域以进行手部追踪,它很健壮。这取决于您如何使用它。

使用颜色进行跟踪的第一个问题是,当人们使用不同的肤色时,它不能很好地适应光照变化或您提到的那样。但是,如本文所述,可以通过以下方法轻松解决此问题:

  1. 将图像转换为HSV颜色空间。
  2. 抛弃V通道并考虑H和S通道,从而减少照明变化。
  3. 由于不稳定性而导致阈值像素的饱和度较低。
  4. 将选定的皮肤区域绑定到2D直方图中。(OpenCV的calcHist 函数)此直方图现在充当皮肤的模型。
  5. 使用calcBackProject计算“反投影”(即,使用直方图计算图像中每个像素具有肤色的“概率”)。皮肤区域将具有较高的价值。
  6. 然后,您可以使用meanShift查找由backproject生成的2D“概率”图的模式,或检测高“概率”的斑点。

舍弃HSV中的V通道,仅考虑H和S通道就足够了(令人惊讶),足以检测不同的肤色和不同的光照变化。好的一面是它的计算速度快。

这些步骤和相应的代码可以在原始OpenCV书中找到。

附带说明一下,我之前也使用过高斯混合模型(GMM)。如果您仅考虑颜色,那么我想说使用直方图或GMM不会有太大的区别。实际上,直方图的效果会更好(如果您的GMM不能考虑到光照变化等)。如果样本向量更复杂(例如,您考虑其他特征),则GMM很好,但是速度直方图要快得多,因为使用直方图计算概率图本质上是一种表格查找,而GMM则需要html" target="_blank">html" target="_blank">执行矩阵计算(对于维数大于等于的向量)多维高斯分布公式中的1)对于实时应用可能会很费时。

因此,总而言之,如果您仅尝试使用颜色检测皮肤区域,请使用直方图方法。您也可以使它适应本地梯度(即梯度直方图,但可能不能完全覆盖Dalal和Trigg的人体检测算法),以便可以区分皮肤和颜色相似的区域(例如纸板或木制家具)
)使用本地纹理信息。但这需要更多的努力。

有关如何使用直方图进行皮肤检测的示例源代码,您可以在此处查看OpenCV的页面。但是请注意,该网页上提到它们仅使用色调通道,并且同时使用色调和饱和度给出更好的结果。

对于更复杂的方法,您可以看一下玛格丽特·弗莱克(Margaret Fleck)和戴维·福赛斯(David
Forsyth)撰写的“检测裸体的人”的工作。这是检测皮肤区域时同时考虑颜色和纹理的早期工作之一。详细信息可以在这里找到。

您可以在此处找到与计算机视觉和图像处理相关的源代码的大量资源,其中恰好包括用于视觉跟踪的代码。不,它不是OpenCV。

希望这可以帮助。



 类似资料:
  • 先自我介绍,然后主要问项目的区别,yolov5主要改进点在哪,transform为什么能用于cv。你用yolov5跑模型,你的改进点在哪,效果提升多大。 看我用过tensorrt,介绍一下tensorrt优化的流程及常见的tricks。 代码题是二叉树的,不是子父节点的最大和。用dfs没做出来,少考虑了一种情况,然后就寄了。 #快手校招##算法工程师#

  • 视觉算法岗面经 面试的岗位大部分是计算机视觉算法工程师,少部分算法优化、部署岗。总的来说,大部分公司的技术面试都分为这几个部分:项目描述和细节提问、深度学习+目标检测算法、数据结构和算法代码及编程语言相关。下面是我面试当中问到的一些问题。 一,项目 主要是描述项目背景、项目实现的功能及使用的方法和流程,面试官会针对他感兴趣的点问一些技术细节,基本上只要能把项目流利的描述出来就问题不大。 二,深度学

  • 一面: 自我介绍 项目介绍 八股文: 1. GBDT 2. xgboost 3.逻辑回归,svm,决策树的优缺点,适用场景 4.决策树和随机森林的区别 5.是否了解attention,transform的kqv 6.用过的loss函数,是否了解triplet loss之类的,好几个没听过的loss,没记住 7.batchnorm的参数是否可训练,b*c*w*h有多少个参数 8.如何进行上采样,上采

  • base 西安 一面(30min): 第一个面试官: (1) 英文自我介绍 英文说我的家乡和陕西的不同 (2) 介绍一个自己的项目 问了下模型的数据量 (3) 介绍一下模型训练的流程 (4) 完成括号匹配需要使用什么数据结构,讲一下怎么实现 (5) 主要使用的语言:python 了解c++吗:本科用过,但现在不熟 ×(6) 指针和引用有什么区别:我知道指针是啥...但是引用想成了python里的引

  • 今天二面,手撕算法题是复原ip地址,编程弱鸡30分钟都没写出来,还是有问题放弃了 1.面试官自我介绍 2. 我自我介绍 3. 介绍我认为我觉得比较好的一个论文 4. 关于aaai那篇论文怎么做的 5. 打开论文讲,不然感觉有些抽象 6. 做个题吧,没做出来,最后他说不用做了 我让面试官看哪里不对他也一时半会儿改不了,回溯失败 7.反问: 1. 人力投入 2.培养 3. 做什么 4. 实习多久 总时

  • 四月很多面试都推掉了,所以只面了两个厂,字节和虹软。顺便问下,华为暑期实习不推进的话会影响秋招吗? 字节一面: 自我介绍 分类和回归常见的损失函数? 逻辑斯蒂,hingeloss,l1,BCE,focal等等 BCE的公式是什么,和KL散度的关系和区别? 一部分log的系数不一样 selfattention的原理和过程 为什么selfattention能注意该注意的地方,你能数学证明出来吗? 我能