- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
对于那些觉得它太长的人,只需阅读粗体字。
我的基于凝视估计的屏幕光标移动HCI项目现在取决于最后一件事-凝视估计,为此,我将眼角用作参考稳定点,相对于该点,我将检测到瞳孔的运动并计算凝视。
但是我无法从实时网络摄像头提要中稳定地检测到眼角。我一直在使用cv.CornerHarris()和GFTT-cv.GoodFeaturesToTrack()函数进行角点检测。 我直接在我的眼睛图像上尝试了FAST演示(来自其网站的可执行文件),但这并不好。
这些是到目前为止我对图像进行角检测的一些结果。
使用GFTT:
使用Harris:
视频中会发生什么:
绿色cirlces是角,其他(粉红色,较小的圆圈)是其他角
我使用了某种启发式方法-如果垂直思考,这些角将在左右两个极端中,并且在中间附近。
我这样做是因为在许多情况下拍摄了很多快照后,除了不到5%的图像外,其余部分都是这样的,并且对于它们来说,上述启发式方法也适用。
但是这些眼角检测用于快照-而不是来自网络摄像头。
当我将方法(harris和GFTT)用于网络摄像头时,我只是不明白。
My code for eye corner detection using cv.CornerHarris
Eye corners using GFTT
现在我在两种方法中都使用的参数-它们显然不会显示针对不同光照条件的结果。但是在与拍摄这些快照相同的光照条件下,我仍然无法从网络摄像头视频中查询到的帧结果
来自GFTT的这些参数对于平均照明条件来说效果很好
cornerCount = 100
qualityLevel = 0.1
minDistance = 5
cornerCount = 500
qualityLevel = 0.005
minDistance = 30
cv.CreateImage((colorImage.width, colorImage.height), 8,1)
cv.CreateImage(cv.GetSize(grayImage), cv.IPL_DEPTH_32F, 1)
max_dist = 0
maxL = 20
maxR = 0
lc =0
rc =0
maxLP =(0,0)
maxRP =(0,0)
for point in cornerMem:
center = int(point[0]), int(point[1])
x = point[0]
y = point[1]
if ( x<colorImage.width/5 or x>((colorImage.width/4)*3) ) and (y>40 and y<70):
#cv.Circle(image,(x,y),2,cv.RGB(155, 0, 25))
if maxL > x:
maxL = x
maxLP = center
if maxR < x:
maxR = x
maxRP = center
dist = maxR-maxL
if max_dist<dist:
max_dist = maxR-maxL
lc = maxLP
rc = maxRP
cv.Circle(colorImage, (center), 1, (200,100,255)) #for every corner
cv.Circle(colorImage,maxLP,3,cv.RGB(0, 255, 0)) # for left eye corner
cv.Circle(colorImage,maxRP,3,cv.RGB(0,255,0)) # for right eye corner
最佳答案
我认为有一种简单的帮助方法!
似乎您正在孤立地考虑每只眼睛。我建议您做的是合并两只眼睛的数据,并使用面部几何形状。我将用一些人可能会认出的图片来说明我的建议(这并不是最好的例子,因为它是一幅画,她的脸有点偏心,但这当然是最有趣的。)
看来您对双眼的瞳孔位置有可靠的估计,并且假设脸部在相机上看起来相当笔直(使用此方法可以垂直于屏幕进行面部旋转),我们知道眼睛的角(从现在开始,仅“角”将位于(或靠近)通过双眼瞳孔的线(红色虚线)上。
我们知道瞳孔之间的距离a
,并且我们知道该距离与一只眼睛的距离(角到角)之间的比率b
对一个人是固定的,并且在成年人口中不会有太大变化(性别可能有所不同)。ie. a / b = constant.
因此,仅知道a
,就可以推论b,而与被摄对象到相机的距离无关。
使用此信息,我们可以为每个眼角构造阈值框(虚线框,详细标记为1, 2, 3, 4
)。每个框都是b
的c
(眼睛的高度,也可以通过相同的固定比率原理确定),并且与瞳孔轴平行。每个盒子的中心边缘固定在瞳孔的中心,并随之移动。我们知道每个角落将始终位于其自己的阈值框中!
现在,麻烦当然是学生们四处走动,我们的阈值框也是如此...但是我们已经以这种方式大大缩小了视野,因为我们可以放心地丢弃所有估计的眼睛位置(来自Harris或GFTT或其他任何东西)落在这些盒子之外(前提是我们对瞳孔检测有信心)。
b
分开并平行于瞳孔轴。 d
(瞳孔距眼中心的位移)。
关于python - 如何进行稳定的眼角检测?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9645871/
我正在处理一组标记为 160 个组的 173k 点。我想通过合并最接近的(到 9 或 10 个组)来减少组/集群的数量。我搜索过 sklearn 或类似的库,但没有成功。 我猜它只是通过 knn 聚类
我有一个扁平数字列表,这些数字逻辑上以 3 为一组,其中每个三元组是 (number, __ignored, flag[0 or 1]),例如: [7,56,1, 8,0,0, 2,0,0, 6,1,
我正在使用 pipenv 来管理我的包。我想编写一个 python 脚本来调用另一个使用不同虚拟环境(VE)的 python 脚本。 如何运行使用 VE1 的 python 脚本 1 并调用另一个 p
假设我有一个文件 script.py 位于 path = "foo/bar/script.py"。我正在寻找一种在 Python 中通过函数 execute_script() 从我的主要 Python
这听起来像是谜语或笑话,但实际上我还没有找到这个问题的答案。 问题到底是什么? 我想运行 2 个脚本。在第一个脚本中,我调用另一个脚本,但我希望它们继续并行,而不是在两个单独的线程中。主要是我不希望第
我有一个带有 python 2.5.5 的软件。我想发送一个命令,该命令将在 python 2.7.5 中启动一个脚本,然后继续执行该脚本。 我试过用 #!python2.7.5 和http://re
我在 python 命令行(使用 python 2.7)中,并尝试运行 Python 脚本。我的操作系统是 Windows 7。我已将我的目录设置为包含我所有脚本的文件夹,使用: os.chdir("
剧透:部分解决(见最后)。 以下是使用 Python 嵌入的代码示例: #include int main(int argc, char** argv) { Py_SetPythonHome
假设我有以下列表,对应于及时的股票价格: prices = [1, 3, 7, 10, 9, 8, 5, 3, 6, 8, 12, 9, 6, 10, 13, 8, 4, 11] 我想确定以下总体上最
所以我试图在选择某个单选按钮时更改此框架的背景。 我的框架位于一个类中,并且单选按钮的功能位于该类之外。 (这样我就可以在所有其他框架上调用它们。) 问题是每当我选择单选按钮时都会出现以下错误: co
我正在尝试将字符串与 python 中的正则表达式进行比较,如下所示, #!/usr/bin/env python3 import re str1 = "Expecting property name
考虑以下原型(prototype) Boost.Python 模块,该模块从单独的 C++ 头文件中引入类“D”。 /* file: a/b.cpp */ BOOST_PYTHON_MODULE(c)
如何编写一个程序来“识别函数调用的行号?” python 检查模块提供了定位行号的选项,但是, def di(): return inspect.currentframe().f_back.f_l
我已经使用 macports 安装了 Python 2.7,并且由于我的 $PATH 变量,这就是我输入 $ python 时得到的变量。然而,virtualenv 默认使用 Python 2.6,除
我只想问如何加快 python 上的 re.search 速度。 我有一个很长的字符串行,长度为 176861(即带有一些符号的字母数字字符),我使用此函数测试了该行以进行研究: def getExe
list1= [u'%app%%General%%Council%', u'%people%', u'%people%%Regional%%Council%%Mandate%', u'%ppp%%Ge
这个问题在这里已经有了答案: Is it Pythonic to use list comprehensions for just side effects? (7 个答案) 关闭 4 个月前。 告
我想用 Python 将两个列表组合成一个列表,方法如下: a = [1,1,1,2,2,2,3,3,3,3] b= ["Sun", "is", "bright", "June","and" ,"Ju
我正在运行带有最新 Boost 发行版 (1.55.0) 的 Mac OS X 10.8.4 (Darwin 12.4.0)。我正在按照说明 here构建包含在我的发行版中的教程 Boost-Pyth
学习 Python,我正在尝试制作一个没有任何第 3 方库的网络抓取工具,这样过程对我来说并没有简化,而且我知道我在做什么。我浏览了一些在线资源,但所有这些都让我对某些事情感到困惑。 html 看起来
我是一名优秀的程序员,十分优秀!