- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我对人脸检测很感兴趣,我正在尝试将 OpenCV 用于我的 Delphi 应用程序。稍后我将使用 Google Picasa 进行面部识别。我发现了 4 种不同的基本 haar 级联用于检测正面:
haarcascade_frontalface_default.xml
haarcascade_frontalface_alt.xml
haarcascade_frontalface_alt2.xml
haarcascade_frontalface_alt_tree.xml
'default' haarcascade 给出了太多误报并且一点也不好,而 'alt'、'alt2' 和 'tree' 级联似乎产生了相当准确但有时不同的结果。 “树”级联往往比“alt”和“alt2”级联产生更多的假阴性,但也产生最少的假阳性。
问题是这些 haarcascade xml 文件有两种不同的格式。
首先像这样:https://github.com/Danukeru/FOUCAM/blob/master/haarcascade_frontalface.xml
第二个像这样:https://github.com/Itseez/opencv/blob/master/data/haarcascades/haarcascade_frontalface_alt.xml
如果我没记错的话,第二种格式被认为是"new"格式,但我的应用目前只能理解第一种“旧”格式。 "new"级联可能更准确,我想试一试。
有没有办法将新格式级联转换为旧格式?
或者我还能如何在我的应用中使用它们?
这是一些代码(来自 sites.google.com/site/josejp1/index/OCV.ZIP):
f1 := 'haarcascade_frontalface_alt.xml';
file1 := PChar(f1);
cascade_f := cvLoad(file1,0,0,0);
storage := cvCreateMemStorage(0);
s.width := 40;
s.height := 40;
faces := cvHaarDetectObjects(PCvArr(img), cascade_f, storage, 1.1, 3, 0, s);
如果我尝试使用"new"格式的 xml 级联文件,我会收到错误消息:
OpenCV GUI Error Handler
---------------------------
Unspecified error (The node does not represent a user object (unknown type?))
in function cvRead, ..\..\cxcore\src\cxpersistence.cpp(5061)
我没有在 Delphi 中找到任何带有新 C++ API 的现成示例,所以我转换了 this example of detectMultiScale (a C++ version of cvHaarDetectObjects)到德尔福。它编译但在尝试加载级联时崩溃。我是 C++ 的新手,因此我们将不胜感激。
Delphi 2010 project in zip archive
unit Unit1;
interface
uses
Windows,
Messages,
SysUtils,
Variants,
Classes,
Graphics,
Controls,
Forms,
Dialogs,
StdCtrls,
ExtCtrls,
DateUtils,
ExtDlgs,
highgui_c,
core_c,
Core.types_c,
imgproc_c,
imgproc.types_c,
objdetect;
type
TForm1 = class(TForm)
Image1: TImage;
Button2: TButton;
Label1: TLabel;
Memo1: TMemo;
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
mystorage: pCvMemStorage = nil;
mycascade : pCvHaarClassifierCascade = nil;
mycascade_name: AnsiString = 'cascades\haarcascade_frontalface_alt.xml';
implementation
{$R *.dfm}
procedure TForm1.Button2Click(Sender: TObject);
var img, grayImage : PIplImage;
myobjects : TArray<TCvRect>;
myscale : double;
i: integer;
r: pCvRect;
mycolors : array[0..7] of TCvScalar;
myCascadeClassifier : TCascadeClassifier;
begin
mycolors[0] := CvScalar(0,0,255);
mycolors[1] := CvScalar(0,128,255);
mycolors[2] := CvScalar(0,255,255);
mycolors[3] := CvScalar(0,255,0);
mycolors[4] := CvScalar(255,128,0);
mycolors[5] := CvScalar(255,255,0);
mycolors[6] := CvScalar(255,0,0);
mycolors[7] := CvScalar(255,0,255);
img := cvLoadImage('lena.jpg');
grayImage := cvCreateImage(cvGetSize(img),8,1);
cvCvtColor(img,grayImage,CV_BGR2GRAY);
cvShowImage('gray', grayImage);
mystorage := cvCreateMemStorage(0);
Memo1.Lines.Add('Memory allocated');
mycascade := cvLoad('cascade.xml');
myscale := 1.3;
cvClearMemStorage(mystorage);
myobjects := nil;
myCascadeClassifier.detectMultiScale(grayImage,myobjects,1.1,3,CV_HAAR_SCALE_IMAGE or CV_HAAR_DO_CANNY_PRUNING,cvSize(0,0),cvSize(40,40));
Memo1.Lines.Add('Object size? : ' + IntToStr(Length(myobjects)));
for i := 0 to (Length(myobjects)-1) do
begin
cvRectangle(grayImage,cvPoint(r.x,r.y),cvPoint(r.x+r.width,r.y+r.height),CvScalar(0,0,255));
end;
cvNamedWindow('Output');
cvShowImage('Output', grayImage);
cvReleaseImage(grayImage);
cvReleaseImage(img);
end;
end.
@TLama:我在这个项目中使用了最新版本的 Delphi-OpenCV 和 detectMultiScale,在第一个项目中使用了一些过时(但有效)的版本,在第一篇文章中提到了 cvHaarDetectObjects (sites.google.com/site)/josejp1/index/OCV.ZIP).
最佳答案
如果那些 delphi 绑定(bind)使用的是过时的 c-api,(cvHaarDetectObjects) - 您只能使用旧格式。
C++ API ( cv::CascadeClassifier ) 支持两者,以及 hog 和 lbp 级联。
同样,这是旧 c-api 的限制。如果可以,请避免使用它!
关于delphi - OpenCV Haar 级联 xml 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21354668/
我使用以下代码使用OpenCv Python提供的Haar级联分类器检测人脸。但是未检测到脸部,并且未绘制脸部周围的正方形。如何解决呢? import cv2 index=raw_input("Ent
很难说出这里问的是什么。这个问题是含糊的、模糊的、不完整的、过于宽泛的或修辞性的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center 。 已关
我已经创建了多个 haar 级联面部分类器。我每次都使用不同数量的正面和负面。 例如, 第一个分类器:5000 个正类和 3000 个负类 第 2 个分类器:3000 个正类和 3000 个负类(删除
我想知道 OpenCV 中的 Haar Object Detection Api (Python) 是否都受专利保护?据我了解,SIFT、SURF 和 Haar Cascade 已获得专利,但我不太清
我正在尝试训练 Haar 分类器,但是在 Stage 2 期间它停止并显示消息 Killed PARAMETERS: cascadeDirName: classifier vecFileName: s
我想了解 haar 分类器的工作原理。我在这里阅读 opencv 文档:http://docs.opencv.org/modules/objdetect/doc/cascade_classificat
OpenCV Haar 级联分类器似乎使用 24x24 的人脸图像作为其正面训练数据。我有两个问题: 除了较大的训练图像需要更多处理之外,选择训练图像大小还有哪些考虑因素? 对于非正方形图像,some
我正在尝试使用提供的 xml 文件 haarcascade_frontalface_alt 和 hogcascade_pedestrians.xml 检测人脸和行人。到目前为止,我可以进行一些检测,但
我正在通过“opencv_createsamples.exe”在 opencv 2.1 中创建示例,但我在第 1 行遇到解析错误。 文件 positives.txt 包含: c:\haar\Posit
您能否帮助了解与 Haar 分类器培训相关的几点: 1)正图像应该只包含训练对象还是可以包含其他一些对象?就像我想识别一些交通标志一样,正面图像应该只包含交通标志还是也可以包含高速公路? 2)创建样本
我正在使用这个数据集:http://www.robots.ox.ac.uk/~vgg/data/hands/ 但是,我只会使用面积大于 4200 平方像素的手,这让我只有 621 只手。我意识到这可能
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 2 年前。 Improve this qu
我目前有一个 Java 程序可以获取图像中每个像素的 rgb 值。我还有一种在二维值矩阵上计算 Haar 小波的方法。但是我不知道应该为计算 Haar 小波的方法赋予哪些值。我应该平均每个像素的 rg
当我调暗灯光时,我注意到面部 Haar 级联很难找到我的脸。 (甚至没有那么黑!) 当灯光变暗时,我如何才能像灯光打开一样进行跟踪? 最佳答案 假设照明条件仍然足以区分面部细节,您可以尝试increa
我正在尝试将视频分割成前景和背景。假设我的视频主要是人脸,我从人脸检测器开始,使用人脸检测器内的所有像素作为 GrabCut 的可能前景种子。 问题是有时(在几帧内),人脸检测器不会检测到人脸,尽管人
我训练了一个 HAAR 分类器来检测来自网络摄像头的实时视频馈送中的手。我使用了 621 个正片和 3712 个负片。 我使用 opencv_createsamples 为阳性生成 vec 文件:./
我看到 OpenCV 中有 2 个不同的 Haar Cascade 数据集。例如,查看 haarcascade_upperbody.xml 和 haarcascade_mcs_upperbody.xm
我已经使用下面的教程来检测对象并获取包含对象的矩形的坐标 https://docs.opencv.org/3.3.1/d2/d99/tutorial_js_face_detection.html 但是
我正在学校开展一个项目,检测教室里有多少学生。就像在这张照片中一样。 一直尝试用opencv中的Haar Cascade进行人脸检测来检测人,但是结果很糟糕。像这样: 我在类里面拍了数千张照片,然后手
我正在尝试使用 OpenCV 和 Haar 级联制作手部检测程序。它工作得很好,但它非常生涩。所以我在问自己,这是否是 haar 文件的问题,它太“便宜”了,或者是否有一种方法可以通过使用轮廓或特征检
我是一名优秀的程序员,十分优秀!