AI 之 OpenCvSharp 安卓手机摄像头识别人脸
OpenCvSharp是OpenCv的包裝器,相當(dāng)于底層是OpenCv只是用.Net的方式調(diào)用底層的接口的實(shí)現(xiàn),所以,從OpenCv的知識(shí)架構(gòu)來講,源碼是一樣一樣的。就是換個(gè)語言寫而已。
1. OpenCvSharp 盡可能地以原生 OpenCV C/C++ API 風(fēng)格為藍(lán)本。
2. OpenCvSharp 的許多類都實(shí)現(xiàn)了 IDisposable。無需管理不安全的資源。
3. OpenCvSharp 不會(huì)強(qiáng)迫您使用面向?qū)ο蟮木幊田L(fēng)格。您還可以調(diào)用原生風(fēng)格的 OpenCV 函數(shù)。
4. OpenCvSharp 提供了從轉(zhuǎn)換Mat為Bitmap(GDI+) 或WriteableBitmap(WPF) 的函數(shù)。
所以,只要想學(xué)OpenCv,那就可以以原OpenCv的代碼方式用.NET 來進(jìn)行實(shí)現(xiàn)。
我早就想識(shí)別人臉,最好能識(shí)別我是誰,最好能把家里的小貓,也識(shí)別了,爽歪歪,最近去了一趟水世界,人家都是攝像頭識(shí)別人臉,只用提交一張自拍照就可以了,而OpenCv肯定是能達(dá)到這種效果的,當(dāng)然,我還在學(xué)習(xí)中,先試試識(shí)別人臉的效果。
我是臺(tái)式機(jī),也沒有攝像頭,突發(fā)奇想,能不能連上我的手機(jī)(安卓)來實(shí)現(xiàn)攝像頭的效果,經(jīng)過不斷嘗試,終于達(dá)到了目的,也算是有一個(gè)不錯(cuò)的效果。
手機(jī)支持Web攝像頭
網(wǎng)上搜了很多資料,最后找到了這個(gè)好用的視頻工具 DroidCam ,它分為兩個(gè)端,一個(gè)是手機(jī)端,一個(gè)是PC端,這樣QQ就可以用PC端的驅(qū)動(dòng)來實(shí)現(xiàn)PC的攝像頭效果。
但是,主要是靠手機(jī)端,因?yàn)?#xff0c;有了手機(jī)端,本身它就有了WebCamera的功能,其中像海康這種網(wǎng)絡(luò)攝像頭,都是有RTSP協(xié)議的,也是可以用的。
可以網(wǎng)上搜相關(guān)資源,也可以下載我提供的資源(我提供的是DroidCamX版本呦 支持720和1080清晰度呦)
安裝后效果
手機(jī)端是這個(gè)樣子的,直接運(yùn)行起來就好,還有一些相關(guān)的設(shè)置,可以自行設(shè)置
電腦端是這個(gè)樣子的
連上手機(jī)后
效果還是很明顯
Web直接打開
地址大概是: http://192.168.1.3:4747/video
也可以通過 http://192.168.1.3:4747 打開
我這里是亂碼了,但是,可以點(diǎn)一下
就可以通過Web的方式來實(shí)現(xiàn)對(duì)攝像頭的相關(guān)設(shè)置。這樣也就不用客戶端了。
OpenCvSharp 攝像頭人臉識(shí)別
主要是通過以下兩個(gè)Nuget
Install-Package?OpenCvSharp4.Windows?-Version?4.6.0.20220608 Install-Package?OpenCvSharp4.Extensions?-Version?4.6.0.20220608人臉識(shí)別模型庫(kù)
人臉識(shí)別模型庫(kù)是從官網(wǎng)下載的
地址如下:
https://codeload.github.com/opencv/opencv/zip/refs/tags/4.6.0
在這個(gè)目錄下
人臉識(shí)別相關(guān)業(yè)務(wù)邏輯
static?void?Main(string[]?args) {Mat?frame?=?new?Mat();var?Capture?=?new?VideoCapture("http://192.168.1.3:4747/video?1280x720");?//?這里是DroidCam手機(jī)端的IP地址和端口號(hào)??1280x720Console.WriteLine($"攝像頭是否打開:{Capture.IsOpened()}");//聲明窗口Cv2.NamedWindow("video",?WindowFlags.KeepRatio);Cv2.ResizeWindow("video",?1280,?720);//加載人眼、人臉模型數(shù)據(jù)CascadeClassifier?faceFinder?=?new?CascadeClassifier(@"haarcascades\haarcascade_frontalface_default.xml");CascadeClassifier?eyeFinder?=?new?CascadeClassifier(@"haarcascades\haarcascade_eye_tree_eyeglasses.xml");var?Count?=?new?ConcurrentDictionary<long,?int>();long?PreviousTime?=?0;long?FPS?=?0;while?(true){bool?res?=?Capture.Read(frame);//會(huì)阻塞線程if?(!res?||?frame.Empty()){continue;}var?times?=?GettimeStamp();if?(PreviousTime?!=?times?&&?Count.ContainsKey(times?-?1)){PreviousTime?=?times;FPS?=?Count[times?-?1];Console.WriteLine($"每秒處理圖片:{FPS}幀");}Count.AddOrUpdate(times,?1,?(k,?v)?=>?v?+?1);Cv2.PutText(frame,?$"{FPS}",?new?Point(10,?70),?HersheyFonts.HersheyPlain,?4,?new?Scalar(0,?0,?255),?3);//進(jìn)行檢測(cè)識(shí)別Rect[]?faceRects?=?faceFinder.DetectMultiScale(frame);Rect[]?eyeRects?=?eyeFinder.DetectMultiScale(frame);//如果有檢測(cè)到,就繪制結(jié)果到圖像上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);}//顯示結(jié)果Cv2.ImShow("video",?frame);Cv2.WaitKey(1);//省略幾個(gè)以加快圖像的速度Capture.Grab();Capture.Grab();Capture.Grab();Capture.Grab();}Capture.Release();//銷毀所有的窗口Cv2.DestroyAllWindows();Console.WriteLine("錄制完畢!");Console.ReadLine(); } public?static?long?GettimeStamp() {return?new?DateTimeOffset(DateTime.UtcNow).ToUnixTimeSeconds(); }運(yùn)行結(jié)果
哈哈,算是露臉了,我這臉可是有版權(quán)的呦!!!
總結(jié)
效果還是很不錯(cuò)的,終于算是入手OpenCv了,后期的各種技巧和書籍就可以學(xué)起來了。最好,以后可以通過一張圖片,就能識(shí)別到對(duì)方是誰,這樣的應(yīng)用場(chǎng)景應(yīng)該很多,我之前公司的門禁都是統(tǒng)一拍照發(fā)照片搞定的。
但是,具體人臉咋搞一個(gè)數(shù)據(jù)出來,還得繼續(xù)搞搞。
代碼地址(包含了DroidCamX 相關(guān)工具)
https://github.com/kesshei/CameraDemo.git
https://gitee.com/kesshei/CameraDemo.git
閱
一鍵三連呦!,感謝大佬的支持,您的支持就是我的動(dòng)力!
技術(shù)群:添加小編微信并備注進(jìn)群
小編微信:mm1552923 ??
公眾號(hào):dotNet編程大全? ??
總結(jié)
以上是生活随笔為你收集整理的AI 之 OpenCvSharp 安卓手机摄像头识别人脸的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大数据之实时数据分析之Apache Do
- 下一篇: android 百度输入法表情,百度输入