对于那些发现它太长的人,只需阅读粗线.
我的基于视线估计的屏幕光标移动HCI的项目现在依赖于最后一件事 - 凝视估计,其中我使用眼角作为参考稳定点,相对于该参考稳定点,我将检测瞳孔的移动并计算凝视.
但我无法从现场网络摄像头视频中稳定地检测到眼角.我一直在使用cv.CornerHarris()和GFTT - cv.GoodFeaturesToTrack()函数进行角点检测.我直接在我的眼睛图像上尝试了FAST演示(来自他们网站的可执行文件),但这并不好.
这些是我到目前为止对图像的角落检测的一些结果.
使用GFTT:

使用哈里斯:

视频中会发生什么:
绿色的cirlces是角落,其他(粉红色,较小的圆圈)是其他角落
我使用了某种启发式方法 - 如果垂直思考,角落将位于左侧或右侧极端,并且位于中间位置.我之所以这样做,是因为在许多条件下拍摄了许多快照后,除了不到5%的图像外,休息就像这些一样,对于他们来说,上面的启发式算法仍然存在.
但是这些眼角检测用于快照 - 而不是来自网络摄像头.
当我使用方法论(哈里斯和GFTT)进行网络摄像头输入时,我只是没有得到它们.
现在我在两种方法中使用的参数 - 它们不显示不同照明条件的结果,显然.但是在与拍摄这些快照的照明条件相同的情况下,我仍然没有得到我从网络摄像头视频查询的帧的结果
来自GFTT的这些参数适用于平均照明条件
cornerCount = 100
qualityLevel = 0.1
minDistance = 5
Run Code Online (Sandbox Code Playgroud)
而这些:
cornerCount = 500
qualityLevel = 0.005
minDistance = 30
Run Code Online (Sandbox Code Playgroud)
适用于上面显示的静态图像
minDistance = 30因为很明显,角落至少有这么远的距离,再次,我从我的按扣中看到了一种趋势.但我把它降低为GFTT的网络摄像头饲料版本,因为那时我根本没有任何角落.
此外,对于GFTT的实时馈送版本,我需要进行一些小改动:
cv.CreateImage((colorImage.width, colorImage.height), 8,1)
Run Code Online (Sandbox Code Playgroud)
而对于静止图像版本(pastebin上的代码),我用过:
cv.CreateImage(cv.GetSize(grayImage), cv.IPL_DEPTH_32F, 1)
Run Code Online (Sandbox Code Playgroud)
注意深度.
这会改变任何检测质量吗?
我通过GFTT方法的眼睛图像没有32F的深度所以我不得不改变它并根据其他临时图像(eignenimg,tempimg等)
底线:我要完成凝视估计,但没有稳定的眼角检测,我无法进展..而且我要继续眨眼检测和模板匹配基于瞳孔跟踪(或者你知道更好吗?).简单来说,我想知道我是否犯了任何新手的错误,或者做了阻止我在我的网络摄像头视频流中获得近乎完美的眼角检测的事情,我在这里发布了我的快照.
无论如何,谢谢你给这个观点.任何想法如何为各种照明条件执行眼角检测将是非常有帮助的
好吧,如果你没有得到我在我的代码中做的事情(我如何获得左右角),我将解释:
max_dist = 0
maxL = …Run Code Online (Sandbox Code Playgroud) python opencv image-processing computer-vision eye-detection
这是我第一次使用openCV库.我想用它来检测眼睛.我使用了FdActivity本教程中提供的代码:
http://romanhosek.cz/android-eye-detection-updated-for-opencv-2-4-6/
本教程使用OpenCV 2.4.6,但我在我的项目中下载了3.1版本.由于版本的不同,我更改了使用putText,矩形和圆形的行从imgproc而不是Core导入.这就是我改变的一切.我已将haarcascade_lefteye_2splits.xml和lbpcascade_frontalface.xml添加到res文件夹下的raw文件夹中.
运行应用程序时,我在logcat中收到此错误:
failed to load cascade classifier
Run Code Online (Sandbox Code Playgroud)
如果mJavaDetector或mJavaDetectorEye为空,则仅从这些行生成:
try {
// load cascade file from application resources
InputStream is = getResources().openRawResource(
R.raw.lbpcascade_frontalface);
File cascadeDir = getDir("cascade", Context.MODE_PRIVATE);
mCascadeFile = new File(cascadeDir,
"lbpcascade_frontalface.xml");
FileOutputStream os = new FileOutputStream(mCascadeFile);
byte[] buffer = new byte[4096];
int bytesRead;
while ((bytesRead = is.read(buffer)) != -1) {
os.write(buffer, 0, bytesRead);
}
is.close();
os.close();
// --------------------------------- load left eye
// classificator -----------------------------------
InputStream iser = getResources().openRawResource(
R.raw.haarcascade_lefteye_2splits);
File cascadeDirER = getDir("cascadeER",
Context.MODE_PRIVATE); …Run Code Online (Sandbox Code Playgroud) 我正在使用android中的opencv,我想通过Hue通道改变眼睛的瞳孔颜色,我已经实现了这个,但问题是我检测到的区域是矩形,但我希望这个区域是圆形的,因为眼睛瞳孔是圆形区域.请帮助我实现这一目标.
private Mat get_template(CascadeClassifier clasificator, Rect area,int size){
Mat template = new Mat();
Mat mROI = mGray.submat(area);
MatOfRect eyes = new MatOfRect();
Point iris = new Point();
Rect eye_template = new Rect();
clasificator.detectMultiScale(mROI, eyes, 1.15, 2,Objdetect.CASCADE_FIND_BIGGEST_OBJECT|Objdetect.CASCADE_SCALE_IMAGE, new Size(30,30),new Size());
Rect[] eyesArray = eyes.toArray();
for (int i = 0; i < eyesArray.length; i++){
Rect e = eyesArray[i];
e.x = area.x + e.x;
e.y = area.y + e.y;
Rect eye_only_rectangle = new Rect((int)e.tl().x,(int)( e.tl().y + e.height*0.4),(int)e.width,(int)(e.height*0.6));
mROI = mGray.submat(eye_only_rectangle);
Mat vyrez = …Run Code Online (Sandbox Code Playgroud) 我想用Hough Circle算法检测眼睛虹膜及其中心.
我正在使用此代码:
private void houghCircle()
{
Bitmap obtainedBitmap = imagesList.getFirst();
/* convert bitmap to mat */
Mat mat = new Mat(obtainedBitmap.getWidth(),obtainedBitmap.getHeight(),
CvType.CV_8UC1);
Mat grayMat = new Mat(obtainedBitmap.getWidth(), obtainedBitmap.getHeight(),
CvType.CV_8UC1);
Utils.bitmapToMat(obtainedBitmap, mat);
/* convert to grayscale */
int colorChannels = (mat.channels() == 3) ? Imgproc.COLOR_BGR2GRAY : ((mat.channels() == 4) ? Imgproc.COLOR_BGRA2GRAY : 1);
Imgproc.cvtColor(mat, grayMat, colorChannels);
/* reduce the noise so we avoid false circle detection */
Imgproc.GaussianBlur(grayMat, grayMat, new Size(9, 9), 2, 2);
// accumulator value
double …Run Code Online (Sandbox Code Playgroud) android opencv image-processing hough-transform eye-detection
我需要分别检测闭眼和双眼.这意味着我需要判断左眼是打开还是关闭,右眼也是如此.
我尝试了几种方法.其中之一是分别用haarcascade_eye和haarcascade_eye_tree_eyeglasses检测眼睛,然后比较结果.如果两者都检测到眼睛,那么眼睛睁开,如果一个检测到而另一个不能,则闭眼.这个技巧来自这个链接:
http://tech.groups.yahoo.com/group/OpenCV/messages/87666?threaded=1&m=e&var=1&tidx=1
但它没有按预期工作.眼镜级别探测器不能像链接中提到的那样工作.我上面提到的那些haarcascade发现了很多接近的结果.有时它会给出正确的结果,有时它却不能.我不知道为什么.此外,用这种方法无法告知哪只眼睛是开放的,哪只眼睛是闭着的.
现在有人可以帮我解决这个问题吗?至少我需要一种方法来判断其中一只眼睛是否闭合,无论哪一眼都需要准确地完成.请帮忙.......
有没有人有任何想法或步骤或算法使用JavaScript和HTML5在2D图像上执行眼睛检测?
我已经将RGB转换为YCbCr色彩空间
现在我需要一些眼睛提取方面的帮助
function hellow(e)
{
var r,g,b,a,gray;
var imageData = ctxBg.createImageData(gameWidth,gameHeight);
var das =imageData.data;
for(var i=0;i<=800;i++)
{
for(var j=0;j<=640;j++)
{
var d = (j*imageData.width+i)*4;
var helow = ctxBg.getImageData(i,j,1,1);
r=helow.data[0];
g=helow.data[1];
b=helow.data[2];
a=helow.data[3];
das[d]=Math.round((0.299 *r) - (0.168935*g) + (0.499813*b));
das[d+1]=Math.round((0.587 *r) - (0.331665*g) + (0.418531*b));
das[d+2]=Math.round((0.114 *r) - (0.50059*g) + (0.081282*b));
das[d+3]=a;
console.log(das[d]+":"+das[d+1]+":"+das[d+2]);
}
}
ctxBg.putImageData(imageData,0,0);
//console.log('c');
e.preventDefault();
}
Run Code Online (Sandbox Code Playgroud)
这是我将rgb转换为YCbCr颜色空间的代码.
请帮助我改进代码以加快执行速度.
你好我是android的新手.我想检测左眼和右眼的坐标以及图像中的毛发.在这个链接链接中,它显示了检测眼睛的方法是什么,但我无法实现这些方法.此外,我想检测图像中的毛发,所以我该怎么做.