AI 之 OpenCvSharp 安卓手機攝像頭識別人臉

OpenCvSharp是OpenCv的包裝器,相當于底層是OpenCv只是用.Net的方式調用底層的接口的實現,所以,從OpenCv的知識架構來講,源碼是一樣一樣的。就是換個語言寫而已。

  1. 1. OpenCvSharp 盡可能地以原生 OpenCV C/C++ API 風格為藍本。

  2. 2. OpenCvSharp 的許多類都實現了 IDisposable。無需管理不安全的資源。

  3. 3. OpenCvSharp 不會強迫您使用面向對象的編程風格。您還可以調用原生風格的 OpenCV 函數。

  4. 4. OpenCvSharp 提供了從轉換Mat為Bitmap(GDI+) 或WriteableBitmap(WPF) 的函數。

所以,只要想學OpenCv,那就可以以原OpenCv的代碼方式用.NET 來進行實現。

我早就想識別人臉,最好能識別我是誰,最好能把家里的小貓,也識別了,爽歪歪,最近去了一趟水世界,人家都是攝像頭識別人臉,只用提交一張自拍照就可以了,而OpenCv肯定是能達到這種效果的,當然,我還在學習中,先試試識別人臉的效果。

我是臺式機,也沒有攝像頭,突發奇想,能不能連上我的手機(安卓)來實現攝像頭的效果,經過不斷嘗試,終于達到了目的,也算是有一個不錯的效果。

手機支持Web攝像頭

網上搜了很多資料,最后找到了這個好用的視頻工具 DroidCam ,它分為兩個端,一個是手機端,一個是PC端,這樣QQ就可以用PC端的驅動來實現PC的攝像頭效果。

但是,主要是靠手機端,因為,有了手機端,本身它就有了WebCamera的功能,其中像海康這種網絡攝像頭,都是有RTSP協議的,也是可以用的。

可以網上搜相關資源,也可以下載我提供的資源(我提供的是DroidCamX版本呦 支持720和1080清晰度呦)

安裝后效果

手機端是這個樣子的,直接運行起來就好,還有一些相關的設置,可以自行設置

f72db55a0a4ea015654b2d3ce7e75af0.jpeg

電腦端是這個樣子的

f830839f80d711661c580ad3a488eed8.png

連上手機后

a1d6dff7d85bb795eb36567db0df7807.png

效果還是很明顯

Web直接打開

地址大概是: http://192.168.1.3:4747/video

dc0fed821c56b7c5cb8e7fdc921f296a.png

也可以通過 http://192.168.1.3:4747 打開

1d01e4b92ef991f1cc7560222435a70f.png

我這里是亂碼了,但是,可以點一下

7a06790177a7ede8427ceed3ba044db3.png

就可以通過Web的方式來實現對攝像頭的相關設置。這樣也就不用客戶端了。

OpenCvSharp 攝像頭人臉識別

主要是通過以下兩個Nuget

Install-Package?OpenCvSharp4.Windows?-Version?4.6.0.20220608
Install-Package?OpenCvSharp4.Extensions?-Version?4.6.0.20220608

人臉識別模型庫

人臉識別模型庫是從官網下載的

地址如下:

https://codeload.github.com/opencv/opencv/zip/refs/tags/4.6.0

在這個目錄下

5bf70b9ad97d79218db66928cc0daa81.png

人臉識別相關業務邏輯

static?void?Main(string[]?args)
{Mat?frame?=?new?Mat();var?Capture?=?new?VideoCapture("http://192.168.1.3:4747/video?1280x720");?//?這里是DroidCam手機端的IP地址和端口號??1280x720Console.WriteLine($"攝像頭是否打開:{Capture.IsOpened()}");//聲明窗口Cv2.NamedWindow("video",?WindowFlags.KeepRatio);Cv2.ResizeWindow("video",?1280,?720);//加載人眼、人臉模型數據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);//會阻塞線程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);//進行檢測識別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);//省略幾個以加快圖像的速度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();
}

運行結果

ad9d6be5b27ab6faed52859a9746422e.gif

哈哈,算是露臉了,我這臉可是有版權的呦!!!

總結

效果還是很不錯的,終于算是入手OpenCv了,后期的各種技巧和書籍就可以學起來了。最好,以后可以通過一張圖片,就能識別到對方是誰,這樣的應用場景應該很多,我之前公司的門禁都是統一拍照發照片搞定的。

但是,具體人臉咋搞一個數據出來,還得繼續搞搞。

代碼地址(包含了DroidCamX 相關工具)

https://github.com/kesshei/CameraDemo.git

https://gitee.com/kesshei/CameraDemo.git

一鍵三連呦!,感謝大佬的支持,您的支持就是我的動力!

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/284859.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/284859.shtml
英文地址,請注明出處:http://en.pswp.cn/news/284859.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C#中二進制和流之間的各種相互轉換

一. 二進制轉換成圖片間的轉換 12345MemoryStream ms new MemoryStream(bytes); ms.Position 0; Image img Image.FromStream(ms); ms.Close(); this.pictureBox1.Image二. C#中byte[]與string的轉換代碼 1. 123System.Text.UnicodeEncoding converter new System.Text.Uni…

ASCII碼16進制對照表

ASCII碼對照表 ASCII&#xff08;American Standard Code for Information Interchange&#xff0c;美國信息互換標準代碼&#xff0c;ASCⅡ&#xff09;是基于拉丁字母的一套電腦編碼系統。它主要用于顯示現代英語和其他西歐語言。它是現今最通用的單字節編碼系統&#xff0c…

如何獲得帶時間的ping的結果

ping 192.168.1.91 | awk {print strftime("%Y-%m-%d %H:%M:%S") "\t" $0} 轉載于:https://blog.51cto.com/351842/2051815

iVX低代碼平臺系列制作APP簡單的個人界面

一、前言 我們知道&#xff0c;目前市場上開發app或者小程序這些應用&#xff0c;都離不開一個個人界面&#xff0c;就是類似下面的這種界面&#xff0c;我們可以利用iVX低代碼平臺來開發&#xff0c;簡單快速&#xff0c;如果還有不知道iVX低代碼平臺是啥的&#xff0c;猛戳這…

王高利:Apache Httpd負載均衡Tomcat并實現Session Sticky和Session Cluster

Apache Httpd負載均衡Tomcat并實現Session Sticky和Session Clusterhttp://anyisalin.blog.51cto.com/10917514/1766736轉載于:https://blog.51cto.com/wanggaoli/1770659

對比C#聊聊C++大一統的初始化運算符 {}

一&#xff1a;背景 最近發現 C 中的類型初始化操作&#xff0c;沒有 {} 運算符搞不定的&#xff0c;蠻有意思&#xff0c;今天我們就來逐一列一下各自的用法以及匯編展現&#xff0c;本來想分為 值類型 和 引用類型 兩大塊&#xff0c;但發現在 C 中沒這種說法&#xff0c;默認…

[轉]【高并發】高并發秒殺系統架構解密,不是所有的秒殺都是秒殺!

前言 很多小伙伴反饋說&#xff0c;高并發專題學了那么久&#xff0c;但是&#xff0c;在真正做項目時&#xff0c;仍然不知道如何下手處理高并發業務場景&#xff01;甚至很多小伙伴仍然停留在只是簡單的提供接口&#xff08;CRUD&#xff09;階段&#xff0c;不知道學習的并發…

【ArcGIS微課1000例】0019:什么是Shapefile文件?Shapefile文件之全解

文章目錄 Shapefile文件組成Shapefile文件創建Shapefile文件大小限制Shapefile文件注意事項ESRI Shapefile(shp),或簡稱shapefile,是美國環境系統研究所公司(ESRI)開發的一種空間數據開放格式。該文件格式已經成為了地理信息軟件界的一個開放標準,這表明ESRI公司在全球的…

扼殺 304,Cache-Control: immutable

隨著近些年社交網站的流行&#xff0c;越來越多的人學會了“刷”網頁 ── 刷微博&#xff0c;刷朋友圈&#xff0c;刷新聞&#xff0c;刷秒殺頁。這里的“刷”&#xff0c;就是刷新的意思&#xff0c;在瀏覽器里&#xff0c;你可以通過點擊刷新按鈕&#xff0c;或者用快捷鍵&a…

Eolink是國產API接口管理的無冕之王

一、傳統API接口管理的缺陷 1、前言 項目開發我們都知道在一個項目團隊中是由很多角色組成&#xff0c;最常見團隊的就是前端開發工程師、客戶端開發工程師、服務端開發工程師組成一個團隊&#xff0c;團隊之間進行合作&#xff0c;一般我們都離不開API接口管理和測試&#x…

linux下永久添加靜態路由

在linux下永久添加靜態路由有兩種方法&#xff1a; 添加路由的命令&#xff1a; 1&#xff0c;route add route add -net 192.56.76.0 netmask 255.255.255.0 dev eth0#添加一條靜態路由 route add default gw 192.168.0.1#添加默認路由 route del -net 192.168.1.0/24 gw 192.…

【ArcGIS微課1000例】0020:關于ArcCatalog,你知道多少?

文章目錄 一、ArcCatalog簡介1. ArcCatalog啟動和關閉2. ArcCatalog界面3. 菜單欄4. 目錄樹5. 搜索窗口6. 主窗口7. 工具欄二、ArcCatalog主要功能1. 文件夾連接2. 添加空間數據庫連接3. 文件類型的添加和移除4. 文件特性的顯示設置5. 導出數據6. 查看數據7. ArcCatalog中圖層的…

【數據結構】二叉排序樹

二叉排序樹&#xff08;Binary Sort Tree&#xff09;又稱二叉查找樹&#xff08;Binary Search Tree&#xff09;&#xff0c;亦稱二叉搜索樹。 特點 二叉排序樹或者是一棵空樹&#xff0c;或者是具有下列性質的二叉樹&#xff1a; 1、若左子樹不空&#xff0c;則左子樹上所有…

記一次 .NET 某電廠Web系統 內存泄漏分析

一&#xff1a;背景 1. 講故事前段時間有位朋友找到我&#xff0c;說他的程序內存占用比較大&#xff0c;尋求如何解決&#xff0c;截圖就不發了&#xff0c;分析下來我感覺除了程序本身的問題之外&#xff0c;.NET5 在內存管理方面做的也不夠好&#xff0c;所以有必要給大家分…

Bomb(hdu 3555)

題意&#xff1a;給定一個閉區間&#xff0c;求區間內有多少數中含“49” /*dp[i][j]表示i位數以j為最高位位中的所有不符合數的個數。然后把數字拆分&#xff0c;亂搞即可。 */ #include<cstdio> #include<iostream> #define lon long long using namespace std; …

《深入實踐Spring Boot》下載

本書以豐富的實例&#xff0c;介紹了如何使用SpringBoot開發框架進行基礎應用和分布式應用等方面的開發&#xff0c;以及如何使用SpringBoot開發的應用構建高性能的服務平臺&#xff0c;同時還對SpringBoot的一些核心代碼進行了深入剖析。本書從基本的入門&#xff0c;到數據庫…

【ArcGIS微課1000例】0021:ArcToolBox工具箱功能與環境概述

文章目錄 一、ArcToolBox功能簡介1. 3D分析工具2. 分析工具3. 制圖工具4. 轉換工具5. 數據管理工具6. 地理編碼工具7. 地統計分析工具8. 線性參考工具9. 空間分析工具10. 空間統計工具二、ArcToolBox環境設置一、ArcToolBox功能簡介 ArcToolbox的空間處理工具條目眾多、功能豐…

[轉]將圖片轉換為 latex 公式

一、官網鏈接及使用方法 官網鏈接&#xff08;跨平臺&#xff09;: Mathpix 公式截圖快捷鍵截圖生成 latex 公式--------------------- 作者&#xff1a;man_world 來源&#xff1a;CSDN 原文&#xff1a;https://blog.csdn.net/mzpmzk/article/details/84140617 版權聲明&…

在SQL Server2005中使用 .NET程序集

昨天完成了一個最簡單的在數據庫中創建標量值函數,今天主要完成表值函數,存儲過程和用戶定義類型在和.NET結合下的使用方法.1,表值函數所謂表值函數就是說這個函數返回的結果是一個Table,而不是單個的值.在.NET 中創建這樣的函數,返回的結果是一個IEnumerable接口.這個接口非常…