在網上有很多關于這方面的博客,但是都沒有說完整,按照他們的博客做下來代碼都不能跑。所以我就自己寫個博客補充一下
我這使用的.NET框架版本是 .NetFramework4.7.1
使用Nuget安裝這兩個程序包就夠了,不需要其他的配置
一定要安裝OpenCvSharp4.runtime.win 否則運行后會報錯
對單個圖片進行人臉識別:
string path = "D:\\素材\\R-C (1).jpg"; //aaaa.mp4Mat srcImg = Cv2.ImRead(path, (ImreadModes)1);//加載人眼、人臉模型數據OpenCvSharp.CascadeClassifier faceFinder = new CascadeClassifier(@"G:\baiduDownload\opencv\sources\data\haarcascades\haarcascade_frontalface_default.xml");OpenCvSharp.CascadeClassifier eyeFinder = new CascadeClassifier(@"G:\baiduDownload\opencv\sources\data\haarcascades\haarcascade_eye_tree_eyeglasses.xml");//進行檢測識別Rect[] faceRects = faceFinder.DetectMultiScale(srcImg);Rect[] eyeRects = eyeFinder.DetectMultiScale(srcImg);//如果有檢測到,就繪制結果到圖像上if (faceRects.Length > 0){Cv2.Rectangle(srcImg, faceRects[0], new Scalar(0, 0, 255), 3);}if (eyeRects.Length > 1){Cv2.Rectangle(srcImg, eyeRects[0], new Scalar(255, 0, 0), 3);Cv2.Rectangle(srcImg, eyeRects[1], new Scalar(255, 0, 0), 3);}//顯示結果Cv2.ImShow("showImg", srcImg);Cv2.WaitKey(1);
對攝像頭的畫面或者本地視頻畫面進行人臉識別:
//讀取本地的視頻FrameSource video = Cv2.CreateFrameSource_Video("D:\\素材\\aaaa.mp4");//使用攝像頭//FrameSource video = Cv2.CreateFrameSource_Camera(1);//聲明窗口Cv2.NamedWindow("video", WindowFlags.Normal);while (true){//獲取幀Mat frame = new Mat();video.NextFrame(frame);//加載人眼、人臉模型數據OpenCvSharp.CascadeClassifier faceFinder = new CascadeClassifier(@"G:\baiduDownload\opencv\sources\data\haarcascades\haarcascade_frontalface_default.xml");OpenCvSharp.CascadeClassifier eyeFinder = new CascadeClassifier(@"G:\baiduDownload\opencv\sources\data\haarcascades\haarcascade_eye_tree_eyeglasses.xml");//進行檢測識別Rect[] faceRects = faceFinder.DetectMultiScale(frame);Rect[] eyeRects = eyeFinder.DetectMultiScale(frame);//如果有檢測到,就繪制結果到圖像上if (faceRects.Length > 0){Cv2.Rectangle(frame, faceRects[0], new Scalar(0, 0, 255), 3);}if (eyeRects.Length > 1){Cv2.Rectangle(frame, eyeRects[0], new Scalar(255, 0, 0), 3);Cv2.Rectangle(frame, eyeRects[1], new Scalar(255, 0, 0), 3);}//顯示結果Cv2.ImShow("video", frame);Cv2.WaitKey(1);}