图片缩略图"itemprop=

流媒体人脸检测,训练,识别

版本2.1.0.0 (88 KB)由 布雷特Shoelson
演示了实时采集、检测、训练和人脸识别!
4.7
64年评级

63下载

更新8月25日

查看版本历史

查看许可协议

只需将网络摄像头连接到你的电脑上,然后运行“streamingfacerecogtion”。这个演示程序:
•初始化网络摄像头并开始观众的流媒体预览;
•自动检测人脸;
•捕捉指定数量的合格人脸图像;
•将它们写入一个自动创建的标记子目录;
•询问(在while循环中)你是否想捕捉另一张脸;
•提示用户(可选)为人脸提供名称;
•自动快速训练识别器。
在没有停机时间的情况下,继续将摄像机对准观众,检测到的人脸将被自动标记!!

引用作为

布雷特·舒尔森(2021)。流媒体人脸检测,训练,识别(//www.tatmou.com/matlabcentral/fileexchange/49914-streaming-face-detection-training-recognition), MATLAB中央文件交换。检索

意见及评分(163

霍华德Labido

我只是想知道,我能把它用在普通的物品上吗,比如用过的塑料瓶?
我有一个废物处理项目,需要及早发现和清除某些废物。
https://www.wiscon-tech.com/system-solution/

Nikhil谢蒂

我如何避免错误识别

布雷特Shoelson

@Sam: ?还是在这份意见书里?,是的,在“流媒体脸”中,没有。
布雷特

山姆

您是否使用dwt(离散小波变换)或dct(离散小波变换)进行图像压缩?

布雷特Shoelson

@Gbone,
谢谢,很高兴对你有帮助。你的问题一般来说很难回答。听起来你采取了正确的步骤。更多训练图片?更好的图片吗?更统一的条件?这实现了一个“传统的”计算机视觉/机器学习模型。随着条件变得更具挑战性,要求变得更加严格,可能有必要开始考虑深度学习解决方案。我的框架可能是有用的,但它的自动化可能需要一些工作。
欢呼,
布雷特

Gbone Nesiama

你好,布雷特,做得很好!
但是,我想问一下我们如何才能使代码不容易被错误识别。我尝试过增加用户捕获图像的数量(在streamingfacerecogination .m中nOfEach),也尝试过增加软件对每个人训练的最小图像数量(在trainStackedFaceDetector中每个人训练照片),但这些似乎都不起作用。
谢谢你!

布雷特Shoelson

@sam……抱歉,但我没有足够的带宽支持你。金宝app我相信您应该拥有所有必要的工具来修改我的代码,使其符合您的规格。
它已经开始直播了。将其修改为离线视频应该是一个简单的问题,改变流与视频阅读器中的帧。对图像进行操作也应该很简单——最方便的是,用一个循环替换视频流,该循环遍历与imageDatastore争吵的图像。
好运!
布雷特

山姆

你的回答将是感激的,对我很有帮助

山姆

你好,先生,我确实运行了代码,程序运行良好,先生,我必须增加代码的功能,1)直播,2)离线视频3)图像,我必须通过所有这些检测面孔,我应该在哪里需要更改代码,哪些额外的代码,我将需要添加,先生,您会感激我,

布雷特Shoelson

@Rayray,
我认为最好的方法是创建一个“OTHER”类别,当创建当前的面孔时,它(不一定)会被删除。在那个文件夹里,你应该放一些人脸而不是你想要识别的人脸。然后,如果“OTHER”是最佳猜测,则发出“未找到”消息。如果你让它工作得很好,我很乐意听到它!
祝你好运,
布雷特

Rayray

你好,Brett先生,
我目前正在研究您的工作架构。我想知道如何知道我可以在代码的哪一部分为它的预测设置一个阈值百分比。例如,我想为系统添加一个更精确的not FOUND特性。如果您能注意到我的问题,那就太好了。

最好的问候,
Raymund Mocorro
mocorro100@gmail.com

纳文·库马尔P

你好,布雷特,

我有同样的错误,而试图执行的代码。
索引超过数组边界
索引超过数组元素数量(4)

我能够捕捉和保存图像,并给它们贴上标签。
然而,训练没有开始,以上错误就会出现。
如果你能帮助我解决这个错误背后的原因,那就太好了。

问候,
纳文
arya.naveen@outlook.com

布雷特Shoelson

@Sabine:
您可以尝试使用MATLAB函数块。如果您不关心代码原,那么为代码使用外部命名应该会使其变得容易(//www.tatmou.com/help/金宝appsimulink/slref/coder.extrinsic.html).
HTH,
布雷特

kiet阮

非常感谢!

Sabine大厦

Sabine大厦

你好,布雷特,
非常感谢分享这个令人印象深刻的人脸检测例子!
你认为在simulink中使用函数块以类似的方式实现这段代码也有可能吗?金宝app
我对此做了一些研究,可以在simulink中找到许多人脸检测的例子,但从来没有人脸识别的例子。金宝app

问得好。我不确定在GPU上处理是否会得到任何加速。将图像传输到GPU的开销可能会淹没任何试图更快地运行检测器的尝试。你的观点可能不同,但请阅读gpuArray()和“GPU上的图像处理”[包括底部链接的“支持的函数”文档]。金宝app我并没有在编写代码时考虑到GPU,我认为在GPU上支持代码的努力将具有挑战性,而且可能不值得这么做。金宝app
GPU编码器可以为NVIDIA GPU生成自定义CUDA(或TensorRT)代码,但再次挑战工作流程,这将需要大量重写和削减代码。
布雷特

感谢分享,这段代码令人印象深刻!如何使用GPU来加速?

bew测试

@Brett Shoelson请帮帮我。如何面对正确率超过80%的名字?

bew测试

如何面对精度更80?

bew测试

@Brett Shoelson这个代码可以增加一个人?

bew测试

@Brett Shoelson现在问题这个代码。我找不到人?为什么?
你可以帮我,拜托。

bew测试

@Brett Shoelson if min(mean(matchMetric)) > 1.5

这是什么意思?
如何使用?

bew测试

if min(mean(matchMetric)) > 1.5
这是什么意思?

布雷特Shoelson

@bew测试:
这都是有据可查的。阅读文档页了解我提到的功能/术语。很抱歉我不能为你实现这个。
布雷特

bew测试

谢谢。但是怎么做呢?

布雷特Shoelson

@bew测试:
为了测试人脸检测的准确性,可以考虑像bfscore、jaccard或dice这样的度量标准来对抗地面真相检测。为了测试分类的准确性(即人脸识别),可以考虑查看预测分类与实际分类的混淆矩阵。混淆矩阵的主对角线上的数字,除以分类的数量,将给出总体精度。
HTH,
布雷特

bew测试

@Brett Shoelson如何精确检测人脸?

bew测试

@Brett Shoelson如何精确检测人脸?

布雷特Shoelson

考虑创建一个“+1”分类器。创建一个文件夹,其中包含不在你的训练集中的人的随机图像。如果检测器选择了那个类,您可能会认为这个人不在您的训练集中。(不能保证!)
布雷特

莫'ath Al-Hayek

@Brett Shoelson

谢谢你回答我的问题,主要是我试图使用while和if循环,以检查已经插入到代码中的数据。
我的编辑是在识别器完成之后。

好的,现在我们应该有一个合适的识别器了!!)

但这并没有起作用:(

bew测试

什么是聚合特性?同样的HOG(定向梯度直方图)?
用什么?

bew测试

@Brett Shoelson:
我想编辑这段代码。如果你找不到一个人。这表示“找不到”。如何编辑这段代码?
谢谢你!

布雷特Shoelson

@Mo'ath:我不知道怎么帮你写代码。如果你想把你的代码发给我,并告诉我它在哪里/如何失败(崩溃??),我会快速看一下。否则……对不起,我不能为你实现这个。你可以通过以下方式与我联系:
Char (cumsum([98 16 -13 15 0 -70 69 -11 7 -10 7 7 -4 -1 -46 45 -12 19 -12 15 -8 3 -7 8 -69 53 12 -2]))
欢呼,
布雷特

莫'ath Al-Hayek

非常感谢你的回答,Brett先生,
但我目前还不是很好,我需要去(streamingfacerecogtion) m文件中的(训练部分),我需要插入一个if和for循环,这样如果是我,那么就通过,否则抓拍一张照片?

但我不能很好地做到这一点,它总是崩溃,不能工作。

有什么建议吗?

谢谢

布雷特Shoelson

@Mo 'ath:
这听起来很简单。你可以做以下两件事中的一件:a)创建一个单独的“自我探测器”。首先运行它,并考虑“这就是我”断言的置信度指标。相应的分支;如果你,停止(?);如果没有,继续第二(多人)检测器。运行探测器,如果找到了那个人,你就大功告成。如果不是,拍一张照片,重新生成学习模型。或者b)根据模型返回的最佳猜测标签使用相同的检测器和分支,如上所述。

相互关联几乎肯定不是正确的解决方案;我认为“自我检测器”也必须是一个基于特征的检测器,就像在streamingfacerecogtion中实现的那样。

我知道这些是粗略的笔画,但是您应该能够解析我的代码并实现它。

欢呼,
布雷特

莫'ath Al-Hayek

我想编辑代码,这样如果一个人被摄像头检测到而不是我,它就会为那个人拍照。

明确的解释:
1-流人脸识别代码已经运行,我的照片保存在数据中
2-为任何被相机检测到的人拍照(除了我)[想法是让程序从其他人中认出我]
3-保存图片或其数据在一个位置

互相关联是解决方法吗?我们如何解决这个问题

tarek khawatmi

布雷特Shoelson

@Naman,
我在“检测/提取/匹配”工作流程中使用FAST功能来识别人脸,使用SAD来找到最佳匹配。我没有使用模板匹配——但即使我使用了模板匹配,我仍然需要某种度量(SAD、SSD……)来确定哪一个是最佳匹配。
布雷特

男孩阿加瓦尔

这种方法(绝对差和)是否类似于人脸识别的模板匹配方法?如果不是,那么有什么不同?
谢谢你!

哈姆萨ABBASI

您好,尊敬的先生,如果您不介意的话,我可以问您一个问题吗?

陈羌族

布雷特Shoelson

@Naman:
这是一个很常见的问题,也是一个很难的问题。要识别一张脸不在n个人的训练集中,通常需要训练n+1个分类器,其中+1个类包含多个非类人脸样本。你的里程可能会有所不同。
布雷特

男孩阿加瓦尔

先生,
我希望这是最后一个问题。对不起,我问了一遍又一遍。
正如你已经提到的,每张脸都将匹配到一个训练集;那么如何实现它这样的未识别的人它显示未知!
谢谢你!

布雷特Shoelson

@Naman:
试着增加每个人脸的训练图像数量。
布雷特

男孩阿加瓦尔

先生,
如何使用相同的算法提高精度?在进行人脸识别时需要注意哪些事项呢?
谢谢你!

布雷特Shoelson

@Naman:不,没有特征脸。我将从阅读代码和注释开始。特别地,看看trainStackedFaceDetector()和myPrediction()中的代码。(注意:回想起来,我应该调用以前的trainStackedFaceRecognizer()。)

感谢您的评分!
布雷特

男孩阿加瓦尔

男孩阿加瓦尔

先生,
你在这段代码中使用了PCA特征脸吗?如果不是,那么什么是用于识别,如果是,那么在哪个段我可以找到代码?
谢谢你!

布雷特Shoelson

@Naman:
我提供了几个预处理选项,在不同的光照/捕获/类数条件下可能有用。直方图匹配就是其中之一。如果你选择使用直方图匹配,我提供了一个样本“targetFaceHistogram”作为参考图像。(关于'imhistmatch',请参阅帮助/文档。)您可以实现并包含其他预处理/验证方法。你也可以改变'targetFaceHistogram'图像。
问候,
布雷特

男孩阿加瓦尔

你好先生,
我可以知道为什么我们使用targetFaceHistogram.pgm。这是程序的功能和要求,如何提高精度?
谢谢你!

SašAdamovi吗?

布雷特Shoelson

全部:
多年来,有几个人给我发电子邮件,说这个实用程序不管用。在最近的一些对话之后,我开始相信这些孤立的故障表明,有些人没有在附带的zip文件中解压缩所有工具,并确保在运行streamingfacerecogrecognition()函数时,这些文件位于其MATLAB路径上。我的演示中的所有文件都需要可访问。
问候,
布雷特

moin哈桑

@Brett Shoelson先生,现在起作用了。我于5月14日发表评论。这是古老的评论

布雷特Shoelson

为什么不直接下载呢?这就是这个网站的用途。

@moin:你的问题太模糊了,没有意义。根据你和我的直接通信,你说它现在正在起作用——尽管你没有说明你做了什么不同的事情来让它开始起作用。

moin哈桑

这个程序在我的matlab 2014b上给出错误,有人帮助我PLZ吗

Bernabas Derese

xiongda

罗密欧Mougnol

嗨苏尔!范,你帮我弄一下你的源代码。从事识别项目的研究结束。先谢谢你。我的电子邮件
mougnolr28@gmail.com

Meghna鲶鱼

先生
你能把代码发到meghnak71@gmail.com.plzz吗

看到郑毅

布雷特Shoelson

秀迈克,我不确定我能帮到你。如果你能给我一个小例子,我可以用它来重现这种行为,我就有更好的机会理解发生了什么。否则,您需要在错误标记之前在代码中放入一个断点,并逐步检查它以了解发生了什么。这可能就像以一种我没有预料到的方式处理“领带”一样简单,但我无法调试我看不到的一般问题。
问候,
布雷特

Showmik Setta

先生
在丢弃其他人脸图片后,我遇到了一个问题。面标签显示多个名称。

哈里斯同时

不是有效的

基达pednekar

jeffling6546

suramya帕特尔

suramya帕特尔

请帮忙解决这个错误。

streamingFaceRecognition
Esc退出!
索引超过矩阵维数。

imageSet/selectProperties错误(第526行)
imgSet。ImageLocation = imgSet.ImageLocation(index);

imageSet/select错误(第396行)
out(i) = selectProperties(this(i), index);

trainStackedFaceDetector错误(第23行)
testSet = select(imgSet,1:trainingPhotosPerPerson);

streamingfacerecogtion中的错误(第170行)
sceneFeatures = trainstackkedfacedetector (imgSet);

法蒂玛

Sheryar贝格

请解释一下为什么我得到这个错误如何才能解决?
> > streamingFaceRecognition
Esc退出!
||和&&操作符的操作数必须转换为逻辑标量值。

streamingfacerecogtion错误(第156行)
当得到另一个

sagar沙玛

NISHIT AHUJA

anggi nego

Sheon严

@Quanqing:
谢谢你的评分。我很想帮忙,但我需要更多的信息。你能告诉我你什么时候得到这个错误吗?它是可重复的吗?在这个过程的哪一点上你看到了它?当你试图忽略坏捕获?
谢谢,
布雷特

Quanqing道

嗨,布雷特,
我安装了网络摄像头包,但它只是给出了“参数不够多”的错误
removeImageFromImageSet(第11行)
路径= pathsFromImageSet(imgSet);

错误运行(第96行)
Evalin ('caller', [script ';']);

你能帮个忙吗?谢谢你!

布雷特Shoelson

@seven_dwarves
感谢您的评分和评论。是的,从理论上讲,完全可以照你说的去做。挑战正是你所看到的——假阳性和假阴性。您需要合并一些更多的逻辑(或简单地方便删除和添加边界框),以确保您的训练数据是准确的。(当然,更精确的探测器会将问题最小化,但我不确定它会完全消除它。)

我把这个代码作为一个例子,我希望能够在客户面前使用。为了避免尽可能多的陷阱,我试着控制尽可能多的场景。在训练阶段隔离人脸会让事情变得更容易。(回想起来,如果我再做一次,我不确定我是否会做出同样的设计选择。)如果你有任何改进,请分享!

欢呼,
布雷特

seven_dwarves

嗨,布雷特,

我很喜欢你的代码,并从中获得了一些乐趣。只是想知道是否有可能在初始快照中自动检测所有人脸进行训练,而不是在标记之前对单个人脸进行训练?我试图修改代码来这样做,但我面临的问题,因为假阳性的面孔被检测到的框架,即使检查了一个嘴巴和最小边框大小。

我的直觉是,我需要训练一个更强大、更准确的人脸检测器,但有没有更简单的方法可以做到这一点?谢谢!

伦纳德zuze

你好,Brett shoelson
我在标签照片后得到以下错误。请帮助

索引超过矩阵维数。

imageSet/selectProperties错误(第526行)
imgSet。ImageLocation = imgSet.ImageLocation(index);

imageSet/select错误(第394行)
out(n) = selectProperties(this(end), index);

trainStackedFaceDetector错误(第23行)
testSet = select(imgSet,1:trainingPhotosPerPerson);

streamingfacerecogtion中的错误(第165行)
sceneFeatures = trainstackkedfacedetector (imgSet);

kubilay demirocak

当我重新运行代码时,它冻结了当前视图上的摄像头,我必须使用任务管理器关闭matlab,因为我不能再关闭代码的摄像头接口了。有没有一个解决方案,我可以重新运行而不得到冻结?
另一方面,
非常感谢你提供的代码。干得真不错。

布雷特Shoelson

@Kemal:
很难想象训练一个实时识别器的速度能快到可以使用神经网络。一般来说,你需要比我使用的更多的训练数据,而且训练将花费更长的时间。欢迎你尝试一下,但我持怀疑态度……
布雷特

凯末尔莱卡

先生,我们可以申请这个程序神经网络,如果可以,你能帮我一点吗?

布雷特Shoelson

@Lee勇:
什么时候尝试从imageset对象中删除图像?我认为这可能是一个可以克服的问题。(顺便说一下,请注意,我在创建新的imageDatastore之前编写并提交了这段代码。在某些时候,我将设法用更新的数据存储对象替换imageset。或者你可以自己做!)
问候,
布雷特

李永功

先生,“删除图像导致imageset对象出现问题”可以解决吗?

prasanna潘迪特

漂亮的GUI演示…

Zacky先生

谢谢你的zip文件,先生…
我能知道你使用的方法吗?

布雷特Shoelson

@Ali,
抱歉,我没有足够的带宽帮你,艾莉。目前,您的要求将需要我的代码的一个重新架构-我匹配到最小的绝对和差异。您可能必须为所有成像条件找出一些健壮的归一化,以便将其与置信度指标联系起来,然后假设如果minSAD值低于某个阈值,则没有找到匹配。
祝你好运,
布雷特

阿里艾哈迈德

先生,我正在用PCA在matlab中实时识别人脸。
先生请帮助创建一个消息“人没有在数据库中注册”
如果一个不认识的人试图识别人脸。
PLZ在代码中做了一些更改,帮助我很容易理解,PLZ提到我在哪里更改代码和做什么更改。

提前告诉你。

清除所有
clc
关闭所有

您可以自定义和修复初始目录路径
TrainDatabasePath = uigetdir(strcat(matlabroot,'\work'), '选择训练数据库路径');

C = webcamlist;
凸轮=摄像头(C {1});
预览(cam);
NotYet = false;
faceDetector = vision.CascadeObjectDetector;
虽然~ NotYet
暂停(2);
I =快照(凸轮);
Disp('拍了一张快照。查看是否有一张脸....’)
bboxes = step(faceDetector, I);
如果~ isempty (bboxes)
NotYet = true;
disp(“脸发现!”);
打破;
结束
Disp ('no face detected?https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/svg/1f626.svg“>,重复…”);
结束
closePreview (cam);
明确的(“凸轮”);
IFaces = insertObjectAnnotation(I, '矩形',bboxes, '面');
figure, imshow(IFaces), title('Detected faces');
%检测人脸
bbox1 = step(faceDetector, IFaces);
% bbox2 = bbox;
创建一个形状插入器对象以在检测周围绘制边界框
shapeInserter =视觉。ShapeInserter('BorderColor','Custom','CustomBorderColor',[255 255 0]);
(mn) = (bbox1)大小;
如果m > 1
x = bbox1 (2, 1);y = bbox1 (2, 2);z = bbox1(2、3);u = bbox1(2、4),y = y + 6;
bbox1 = (x, y, z, u);
结束

% I_faces1= step(shapeInserter, I, int32(bbox1));
I_faces = imcrop (ifac bbox1);
I_faces = imresize(I_faces,[180 200]);调整图像大小
Name = input('what is your Name: ', 's')
Savename =[…]
' D: \手指代码。项目\ TestDatabase \”,名字,“jpg”);
imwrite (I_faces savename);
TestDatabasePath = 'D:\finger code.proj\TestDatabase\';

% prompt ={'输入测试映像名称(1到10之间的数字):'};
% dlg_title = '基于fld的人脸识别系统的输入';
% num_lines= 1;
% def = {'1'};

% TestImage = inputdlg(name,dlg_title,num_lines,def);
TestImage = strcat(TestDatabasePath,'\',name,'.jpg');
im = imread(TestImage);

T = CreateDatabase(TrainDatabasePath);
[m V_PCA V_Fisher ProjectedImages_Fisher] = fishfacecore (T);

OutputName =识别(TestImage, m, V_PCA, V_Fisher, ProjectedImages_Fisher);
%if (OutputName = -1)
SelectedImage = strcat(TrainDatabasePath,'\',OutputName);
SelectedImage = imread(SelectedImage);

imshow (im)
标题(“测试图”);
图中,imshow (SelectedImage);
标题(“等效形象”);

str = strcat('匹配的图像是:',OutputName);
disp (str)
%结束

@Adnan:不知道你在哪里看到。p文件。我在提交的文件里没写p代码。你能说得更具体一点吗?也许是在网络摄像头界面…你安装网络摄像头支持包了吗?金宝app

Adnan沙

先生,如何访问。p格式的文件,由于这些文件,我无法运行您的代码

对不起……
正确的邮箱是:
chukwuemeka.ci@gmail.com

谢谢你,布雷特!
我在一个项目上生产一个MATLAB GUI流或加载视频和识别人脸。当识别时,这些面孔被分为两类,“已知”和“未知”。
我如何使用这些代码并使用GUI实现它们

非常感谢
电子邮件:chukwuemeka.ci@yahoo.com

erhan incir

有没有人能给我解释一下如何提高人脸识别的成功

布雷特Shoelson

@Raj:
对不起,拉吉。事情不是这样的。如描述中所述,本次提交需要MATLAB 2014b或更高版本的功能。
布雷特

拉吉·库马尔

海布雷特
我运行在2014a我得到一个错误的imageSet你可以发给我imageSet。m文件
邮件:rvc.rajkumar@gmail.com

布雷特Shoelson

@aadil:考虑尝试单眼、单鼻、单口级联检测模型(vision.CascadeObjectDetector)。那么可能在检测到的包围框的中心上使用hypot() ?
至于鼻子的长度……完全不同的问题!我想你需要一个好的头部轮廓,然后从图像中提取一个比例因子。
布雷特

aadil艾哈迈德

你能告诉我如何检测鼻子的长度,瞳孔之间的距离,眉毛之间的距离和类似的东西吗?

林晓文

嗨,新来的,想知道我在哪里可以免费获得计算机视觉系统工具箱??

afnan法鲁克

哦,好吧。非常感谢,先生!!

布雷特Shoelson

@afnan他人:

我修改了提交,以包括一个readMe文档(“StreamingFaceRecognitionReadMe.docx”),该文档描述了该文件中使用的算法。没有其他文件被更改。

欢呼,

布雷特

afnan法鲁克

哇! !非常感谢你分享这个代码,布雷特!!它完美地工作:)在我的matlab R2015a
我有一个问题?你在这个编码中使用什么算法??同样的技术也能用在无线摄像机上吗?

Zin Nandar Win

亲爱的先生,
非常感谢,先生。我用的是2014a,这就是为什么我有一个问题。我会尝试新的版本。
与问候,

@Zin,
imageSet在R2014b的计算机视觉系统工具箱中被引入。您将需要该版本或最新版本来运行此程序。注意,管理图像集合的“更新”方法是使用imageDatastore而不是imageSet。imageDatastore在R2016a中引入。
问候,
布雷特

Zin Nandar Win

亲爱的先生,
它与优秀的代码一起工作得非常好。谢谢a lot sir.Can I get Imageset.m.Can u give me some advices?How can I contact to you?If u are ok,Plz reply me as soon as possible.
与问候,
znzak027@gmail.com

Umar对接

非常感谢你。现在我有了程序的运行形式。请告诉我你用什么算法进行人脸检测和识别。你有这个项目的文件吗?如果您有,请将其发送到我的邮寄地址,我将非常感谢您的这一善举。
umarb159@gmail.com

布雷特Shoelson

@Umar:queryForNames是主流facerecognition中的子函数。m文件。如果它为你抛出错误,你能在子函数的开始处设置断点,让我知道它是如何失败的吗?我需要更多的信息来弄清楚为什么它不适合你。
谢谢,
布雷特

Umar对接

@brett这是什么?我该怎么解决呢?请帮帮我。这个错误出现在捕捉人脸之后,每次我要保存这些人脸时,都会发生这种情况,程序就会停止工作。
streamingfacerecogtion中的错误(第165行)
queryForNames;

Dipesh古普塔

布雷特Shoelson

@Umar,谢谢你的评分。targetFaceHistogram。PGM在您下载的zip文件中。听起来好像你安装错误了;当您运行streamingfacerecogation代码时,zip中的所有文件都应该在您的MATLAB路径上。
布雷特

Umar对接

我正在抛出这些错误,请帮助我。
> > streamingFaceRecognition
使用imread错误(第349行)
targetFaceHistogram文件”。Pgm”不存在。

streamingfacerecogtion中的错误(第54行)
preprocessOpts。targetforhistogramandsize =…

马尔科姆•masimba

我已经尝试了代码,它可以正常工作。
是否有可能将神经网络应用到图像的训练和测试中,并且仍然返回相同的功能。
也可以我能够包括未知的文本图像不在数据库后,实现神经网络的工作。

费兹haziq

谢谢你提供的信息。它使我很好地理解了这个系统。但是我有一个问题,先生,我能知道这个系统使用的是什么样的数据吗?

布雷特Shoelson

@Alhussain:
谢谢你给文件打分,阿尔侯赛因。如果你有什么问题,我希望能听到细节,以便我能解决它。
布雷特

Alhussain Akoum

该识别器使用FAST特征和SURF特征提取器。使用绝对差和来找到实时捕获的人脸和训练集之间的最佳匹配。查看“trainStackedFaceDetector()”的代码":

Alhussain Akoum

该识别器使用FAST特征和SURF特征提取器。使用绝对差和来找到实时捕获的人脸和训练集之间的最佳匹配。查看“trainStackedFaceDetector()”的代码":

Shubham Chaudhary

还有一个问题。一旦我突然关闭程序,仍然存在一个之前建立的活动连接,重新运行模块会出现错误。是否有不同的或显式的方法来删除网络摄像头之前的所有活动连接,这样即使在重新运行模块后,它也能正常工作。

布雷特Shoelson

@Faiz:
该识别器使用FAST特征和SURF特征提取器。使用绝对差和来找到实时捕获的人脸和训练集之间的最佳匹配。查看“trainStackedFaceDetector()”的代码":

fcnHandle = @(x) detectFASTFeatures(x,…
“MinQuality”,0.025,…
“MinContrast”,0.025);% #好吧
extractorMethod = 'SURF';%#ok
metric = 'SAD';% #好吧

欢呼,
布雷特

费兹haziq

谢谢你,先生。我已经成功运行这个程序。但是我想问一个问题,这个人脸识别是使用surf技术的,不是吗?我能知道surf算法在编码状态的哪一行吗?

布雷特Shoelson

@Shivangi:
你会尝试改变“线宽”为“线宽”,看看这是否解决了问题?(如果是这样,你可能需要对"color" -> "color"做同样的事情。
谢谢,
布雷特

shivangi saxena

我得到这个错误。

使用insertShape>validateAndParseOptInputs_sim错误(第251行)
参数“linewidth”与解析器的任何有效参数不匹配。

insertShape>validateAndParseOptInputs错误(第219行)
[颜色,不透明度,平滑]=…

insertShape>validateAndParseInputs错误(第161行)
[颜色,不透明度,平滑]=…

insertShape错误(第94行)
[tmpRGB, shapeOut fillShape positionOut,颜色、透明度,smoothEdges, isEmpty] =…

streamingfacerecogrecognition /capturePreprocessDetectValidateSave错误(第265行)
displayFrame = insertShape(RGBFrame, '矩形',bboxes,…

streamingfacerecogtion中的错误(第147行)
[displayFrame, success] = capturePreprocessDetectValidateSave;

布雷特Shoelson

@reth:你在什么时候得到错误信息?(你的图片有多大?)

我不知道该怎么帮你。targetFaceHistogram。pgm是我提供的一个文件。(您可以替换自己的权限,但如果这样做,您需要管理自己的权限。)我不明白你的第二个问题。您所显示的不是错误。

布雷特

费兹haziq

你好,先生,我有一个错误,当我运行这段代码。首先它不能打开“targetFaceHistogram”。我已经创建的pgm文件。它似乎没有读取这个文件的读取权限。第347行的错误。

第二个错误在第54行,preprocessOpts。targetforhistogramandsize =…我希望你能帮我找出解决这个错误的方法。先谢谢你

reth rejab

我尝试了,返回图像是太大的错误。请帮助。

布雷特Shoelson

@Osumanu,
使用MATLAB工具链,让代码在树莓派上运行当然是可行的。不过,让它工作(目前)有点挑战性,可能需要在Linux和嵌入式系统上有一个坚实的处理,并且需要在RPi设备上编译openCV。而且,性能可能会大大降低。但如果你仍然有兴趣走这条路,这是可行的。
布雷特

Osumanu风湿性关节炎是

好。太好了。但是有没有一种方法可以让代码在树莓派上运行,并使用树莓派相机模块。需要改变哪些变量和函数。我真的很喜欢matlab,我想学习更多

@Osumanu:
我已经成功地用它非常准确地区分了多达20个个体。在某个时刻,它会失败——但我不知道那个时刻会在哪里。(这肯定是训练图像质量的函数,以及面部特征在不同受试者之间的差异程度。
问候,
布雷特

请让算法识别多人。假设有5个人。算法能标记所有五个人甚至更多吗

Manoj Kumar

非常感谢您的宝贵建议,并提供了伟大的代码。我已经成功地执行了代码,它做得非常好。再次感谢你,先生。干得好!

布雷特Shoelson

@abhi,
您需要安装网络摄像头支持包才能从网络摄像头进行捕获。金宝app
看到的:
//www.tatmou.com/help/金宝appsupportpkg/usbwebcams/ug/installing-the-webcams-support-package.html?refresh=true

欢呼,
布雷特

abhi西索迪亚

我得到这个错误'请确保一个正确识别的网络摄像头已连接,然后重试。'

布雷特Shoelson

@Manoj,
“计算机视觉系统工具箱”中的人脸检测器可以很容易地在图像中找到多个人脸。(关于视觉,请参阅帮助页中的文档示例。CascadeObjectDetector系统对象。)
检测到人脸后,自动裁剪它们并逐个识别它们,使用您认为最适合您的需求的任何识别技术。(你要分辨多少张面孔?你有多少训练图像?你需要多快的检测速度?你训练需要多长时间?有很多考虑,有很多选择。)
欢呼,
布雷特

Manoj Kumar

你好,先生,你能告诉我在哪里可以得到在合影中出现的多张人脸识别的代码吗?谢谢你!

布雷特Shoelson

@Osumanu,
我不知道该怎么帮你。尝试在第156行设置断点,并确定错误的触发点。可能是我的代码,可能是你的电话,可能是摄像头的问题,可能是摄像头接口的问题,....变数太多,无法胡乱猜测。
布雷特

Osumanu风湿性关节炎是

在streamingfacerecogtion中出现错误(第156行)
当得到另一个

布雷特Shoelson

@Paramesh, Mamun, Manoj:
插入一个支持的网络摄金宝app像头,安装网络摄像头支持包(您将会得到提示),并在命令提示符处输入'streamingFaceRecognition'。将相机对准一个目标,直到提示你移动到下一个目标。当你完成捕获时,训练和识别模式会自动实现。
布雷特

Manoj Kumar

你好,先生,我正在运行您的代码。你能告诉我执行代码的步骤吗?我的邮箱id manojmuthu19@gmail.com

马蒙阿卜杜拉

嗨,先生,我正在尝试使用面部识别,请告诉我如何运行代码的步骤。这是我的邮件地址:mamun1107@hotmail.com

Paramesh

你好,先生,我想帮你处理这件事。你能告诉我该怎么跑吗?这是我的邮箱,请发给我。sparamesh1991@gmail.com

谢谢你

布雷特Shoelson

@ heba:

这取决于你使用多个摄像机的目的是什么。如果您只是试图从每个摄像头中单独识别人脸,那么该方法将取决于您是否希望每个摄像头有不同的训练图像(以便每个分析基本上是独立的),或者是否应该将每个摄像头的快照与相同的训练集进行比较。如果是前者,你将需要重新构建文件结构;我将所有训练图像自动存储在一个名为“AutoCapturedFaces”的目录中。您需要编写代码以允许每个分析使用单独的文件夹。如果是后者,只需捕获所有训练集,并在每个相机的快照之间进行交替。(参见“从网络摄像头获取图像”的文档。)

如果你试图在识别之前从多个视图中获得某种深度,你可能超出了这个演示的能力。您可能需要校准摄像机,并(显著地)修改识别算法,以便在融合的多摄像机视图上工作。
问候,
布雷特

heba hijjawe

嗨,布雷特,谢谢你分享你的代码。我想问你,我怎么能在2个摄像头上同时运行代码?

Jergo中的一

嗨,布雷特,谢谢你分享你的代码。我正在研究一个人脸验证问题。我想检查一下摄像头里采样的人和数据库里的人是不是同一个人。在这里,我有两个问题:

1.我在黑暗环境中进行了测试,效果完美。但如果我在明亮的环境下测试,它就无法分辨。有什么改进的方法吗?

2.我只在数据库中添加了四个人。我想知道当涉及到100个人时,它是如何运作的。你最多检测了多少人?

谢谢

@Zainab:在完美的情况下,你应该能够将支持的网络摄像头连接到你的电脑上(你可能需要安装一个支持包!),然后输入str金宝appeamingFaceRecognition。

每次将镜头对准一个人,直到有人提示你继续。当你捕捉到所有你想要识别的面孔时,点击“完成”,训练将自动开始。然后当你把镜头对准任何受过训练的人时,他们应该能被认出来!

好运!
布雷特

zainab shaheen

我如何运行这段代码.........告诉我步骤。

布雷特Shoelson

我没有你的电子邮件地址,不知道怎么联系你。你能发邮件给我吗?
谢谢,
布雷特

布雷特Shoelson

抱歉没有回复——我只是第一次看到这个。让我看一下,然后给你答复。
布雷特

M NATARAJAN

你好,Brett Shoelson,

我们正计划做一个项目来识别我们大学校园的不适当着装规范,并通过使用图像处理技术来识别谁的脸没有刮干净。我认为你的视频流人脸识别对我们有帮助。我们需要做一些小的修改,以匹配我创建的数据库的正确着装要求..你能帮助我们做到这一点吗?我怎么能找到你?

问候
M NATARAJAN
+ 91 8939967677

琼·拉·罗莎

嗨,布雷特,

在我在网络摄像头中学习了两个人之后,我再次按下运行,然后单击“按原样使用”,程序给了我一个错误:

警告:图像太大,无法在屏幕上显示;显示在33%
在images.internal.initSize(第71行)中
在imshow中(第305行)
在蒙太奇中(152行)
在createMontage(第212行)中
在trainStackedFaceDetector(第53行)中
在streamingfacerecogtion中(第173行)
使用cat出错
被连接的矩阵维度不一致。

createMontage错误(第206行)
thumbnails = cat(4, thumbnails, subImg);

trainStackedFaceDetector错误(第53行)
trainingImage = createMontage(allIms(inds(:,ii)),…

streamingfacerecogtion中的错误(第173行)
sceneFeatures = trainstackkedfacedetector (imgSet);

谢谢,我希望你能回答我

布雷特Shoelson

@Hugo:
您能否找到仅使用调用createMontage来触发错误的复制步骤?如果您能向我展示图像和调用语法,我就可以帮助您弄清楚为什么会得到错误消息。
谢谢,
布雷特

雨果自然倾向

嗨,布雷特,

由于某种原因,我在训练阶段犯了一个错误。(所以图片已经存储,它的工作,直到我输入名字然后崩溃)。显然,在图像拼接过程中存在一个问题:
使用cat出错
被连接的矩阵维度不一致。

createMontage错误(第206行)
thumbnails = cat(4, thumbnails, subImg);

我试图强制默认和固定thumbSize的subImg,但错误仍然存在。(cat函数看起来也很好,适用于任何与另一个数组连接的空矩阵…)

如果你看到哪里可能有问题,请告诉我!

雨果

布雷特Shoelson

@Akasa,
我使用与“使用聚合特征的人脸识别”演示中相同的算法:我在5张“堆叠”的训练人脸图像上计算FAST特征,并用SURF提取器提取它们;然后我对一个测试图像(从相机流)做同样的事情,并使用绝对差异和来确定测试图像最匹配的特征。
布雷特

Akasa溃败

你能说出这里使用的是哪种算法来进行人脸识别吗??

布雷特Shoelson

请注意,我还没有尝试适应环境光的广泛变化。这似乎在柔和的光线下工作得更好,因为没有太多的背光。
布雷特

布雷特Shoelson

@Zihang:
抱歉耽搁了…
我猜您是在for循环中调用getSnapshot。

默认情况下,每次调用getsnapshot都会配置、启动和停止相机——这消耗了大部分时间。请参阅本页的“时间含义”部分。
//www.tatmou.com/help/imaq/examples/acquiring-a-single-image-in-a-loop.html?refresh=true

布雷特

布雷特Shoelson

@Caitlin,

好问题!

理论上,这是可能的。但在实践中,很难稳健地实施。匹配是通过找到最小值(mean(matchMetric))来确定的,其中matchMetric是针对训练集中的所有人脸计算的。根据定义,其中的一张脸将比其他的更好匹配;这就是我返回的结果。

可以实现一个阈值:如果min(mean(matchMetric)) > thresh,则detected = false。但问题是,最小值的范围随着图像条件、拍摄对象到相机的距离、姿势等的变化而显著变化。所以很难想出一个有用的,可靠的阈值。(也许对基本事实的图像进行一些标准化可能会有所帮助。)

如果你想尝试一下,你可以这样做:

%在我的预测。M,将'detected'计算改为:
脱粒= 1.5;
if min(mean(matchMetric)) >阈值检测到= 0;
其他的
[~,检测到]= min(mean(matchMetric));
结束

和在流媒体人脸识别。m,修改bestGuess值:

bestGuess = myPrediction(thisFace,sceneFeatures,numel(imgSet));
if bestGuess == 0
bestGuess = '?';
其他的
bestGuess = imgSet(bestGuess).Description;
结束

如果您找到了确定阈值的可靠方法,请告诉我!

欢呼,
布雷特

凯特琳黄金

它能识别出不在数据库中的人的脸。有没有办法在新人(其图像不在数据库中)上显示“未知”,而不是错误地识别这个人?

Zihang魏

你好,
我想我可以用另一种方式来表达。我有同样的问题,其他人下面,然后我发现'快照'只能读取'vidObj= webcam;'和'getsnapshot'只能使用'vidObj= videoinput('winvideo',ID);'因为他们有不同的格式。
但问题是,'vidObj= webcam;'方式比'vidObj= videoinput('winvideo',ID);'方式快得多,即使他们是相同的摄像头,前者几乎是实时的,但第二个是滞后的,有没有机会加快第二个,因为我想用它改变到其他USBcams?或者有什么办法我可以改变网络摄像头格式为视频输入格式?
非常感谢!
亚伦

Zihang魏

你好,
这太酷了!但是当我试图用其他方式获得蒸汽时,会有一个小问题。
你能告诉我如何在最开始设置vidObj从其他USB摄像头和视频蒸URL获取图像流吗?
非常感谢你的回答
最好的
亚伦

布雷特Shoelson

@Vipul,

来自MATLAB文档:

Img =快照(凸轮);

从网络摄像头获取一个图像,并将其分配给变量img。快照函数返回当前帧。

您需要使用supportPackageInstaller安装网络金宝app摄像头支持,然后才能运行此(或任何其他网络摄像头使用代码)。

也就是说,vidObj不应该是char类型;它应该属于'webcam'类:

vidObj =网络摄像头;

欢呼,
布雷特

vipul olekar

streamingFaceRecognition
未定义函数'snapshot'用于类型为'char'的输入参数。

streamingfacerecogtion中的错误(第91行)
grayFrame =快照(vidObj);

thanq

布雷特Shoelson

@Dave,
非常感谢您的收看,非常感谢!好问题——让我来回答它们:

1)我刚刚成功地在一个视频文件上运行了这个,而不是一个流媒体视频——与您建议的更改相同。有一件事:在185行左右,在我调用IMSHOW的地方,用DRAWNOW命令跟随那行:

imshow (RGBFrame,‘父’,imgAx); drawnow;

如果这对你有用,请告诉我!

2)是的,我每帧都在做检测和识别。是的,检测比跟踪更昂贵。您可以通过合并跟踪算法来潜在地加快这段代码;这里有一些文档中的例子(做一个“面部检测跟踪”的文档搜索,你会找到一些)。然而:我每秒得到5- 10帧,包括采集、检测和识别;我对此很满意。

以下是其他一些可以加快这一进程的方法:

*查看网络摄像头的分辨率;确保它没有默认为太大的值。(我用的是640x480。)

*(这是大的):编辑trainStackedFaceDetector的第19行。在我分享的版本中,我使用了所有捕捉到的人脸来训练检测器。这有助于最准确的预测,但它可能会很慢。你可以用每个人5张图片得到好的结果。将这一行修改为:

trainingPhotosPerPerson = max(5,min([imgSet.Count]));

(或者4个,甚至3个。)

这应该会在速度上产生很大的差异——尽管它可能会使它变得不那么准确。

最好的问候,
布雷特

戴夫•特纳

你好,

非常好的代码,经过测试,工作得非常好。
然而,我有两个问题:

1°)如何将vidObj从网络摄像头更改为视频文件?我试图改变“vidObj = webcam”为“vidObj = vision.VideoFileReader('my_movie.avi');”和每个“快照”为“步骤”,但GUI不出现。它只在我用Ctrl+C终止脚本时出现。什么是正确的改变,使它可以工作?

2°)识别部分(非常)滞后。似乎每一帧代码都试图检测人。你有什么办法修吗?(比如如何将间隔检测从1帧改为10帧)如果它不降低视频速度就太完美了。

提前谢谢你:)。