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.mzph.cn/news/284859.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

iVX低代码平台系列制作APP简单的个人界面

一、前言 我们知道&#xff0c;目前市场上开发app或者小程序这些应用&#xff0c;都离不开一个个人界面&#xff0c;就是类似下面的这种界面&#xff0c;我们可以利用iVX低代码平台来开发&#xff0c;简单快速&#xff0c;如果还有不知道iVX低代码平台是啥的&#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…

【数据结构】二叉排序树

二叉排序树&#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;所以有必要给大家分…

[转]将图片转换为 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接口.这个接口非常…

AI作画的业界天花板被我找到了,AIGC模型揭秘 | 昆仑万维

一、前景 1、AI和AIGC的关系 人工智能&#xff08;Artificial Intelligence&#xff09;&#xff0c;英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。 AIGC是继 UGC、PGC 之后新型利用AI技术自动生成内容的生产…

【ArcGIS微课1000例】0022:ArcGIS点(点坐标)自动连成线操作案例教程

ArcGIS中,可以将带三维坐标(X、Y、Z)的点/点集自动连成线,本文演示具体操作流程。 文章目录 实战演练GPS点数据下载实战演练 打开ArcMap软件,添加实验文件夹0022下的GPS轨迹点.shp矢量点数据(文末提供下载地址),该数据是由GPS RTK采集的河道点数据,首先需要将GPS点坐…

微信公众号 文章的爬虫系统

差不多俩个星期了吧&#xff0c;一直在调试关于微信公众号的文章爬虫系统&#xff0c;终于一切都好了&#xff0c;但是在这期间碰到了很多问题&#xff0c;今天就来回顾一下&#xff0c;总结一下&#xff0c;希望有用到的小伙伴可以学习学习。 1、做了俩次爬虫了&#xff0c;第…

OAuth认证与授权

什么是OAuth授权&#xff1f; 一、什么是OAuth协议OAuth(开放授权)是一个开放标准。允许第三方网站在用户授权的前提下访问在用户在服务商那里存储的各种信息。而这种授权无需将用户提供用户名和密码提供给该第三方网站。OAuth允许用户提供一个令牌给第三方网站&#xff0c;一个…

SegmentFault Hackathon 文艺复兴

我有一个 idea&#xff0c;我想实现它&#xff0c;我正实现它&#xff0c;我已实现它。世界上存在一些好奇心旺盛、不爱墨守成规的人&#xff0c;略微偏执但又极度投入的他们崇尚自由&#xff0c;热衷用技术实现自己的想法&#xff0c;他们带着不羁的态度生活&#xff0c;利用编…

卧槽!VS Code 上竟然也能画流程图了???

作为一款开源的主流代码编辑器&#xff0c;VSCode 在发布之后一直受到不少开发者的喜爱。 此前&#xff0c;我们也曾在公众号上分享过多篇文章&#xff0c;向大家推荐了不少 VSCode 上比较实用&#xff08;或沙雕&#xff09;的插件。因此&#xff0c;有很多水友也经常调侃道&…

【QGIS入门实战精品教程】14.1:QGIS如何加载各种在线地图?

文章目录 一、XYZ Tiles连接方式二、插件添加三、WMS/WMTS/OWS连接方式一、XYZ Tiles连接方式 1. 加载OpenStreetMap QGIS默认可以加载OpenStreetMap地图。在左侧点击XYZ Tiles,默认下面有个OpenStreetMap选项,双击打右侧会显示地图,如下图所示: 在OpenStreetMap上右键→…

SkiaSharp 之 WPF 自绘时钟(案例版)

SkiaSharp是一个跨平台2D图形API&#xff0c;用于.NET平台&#xff0c;基于Googles Skia Graphics库(skia.org网站). 它提供了一个全面的2D API&#xff0c;可以跨移动、服务器和桌面模型来渲染图像。该图形库可实现获取指定坐标像素值、绘制2d图形、绘制文字&#xff08;必须有…

推荐一简单易用的脑图制作工具

幕布是什么&#xff1f; 大纲文档工具&#xff0c;管理你的大脑层级折叠文字&#xff0c;结构化思考助手一键转换思维导图并编辑&#xff0c;效率翻倍幕布可以做什么&#xff1f; 大纲笔记&#xff0c;思维整理 学习笔记清单工具 管理日程管理待办购物清单等等内容创作会议记录…

【QGIS入门实战精品教程】4.5:QGIS打开Excel中的点坐标,并生成矢量文件

QGIS中可以很方便添加Excel或其他文本格式的点坐标,并将其转为矢量等多种格式的文件。 扩展阅读: 【ArcGIS风暴】ArcGIS 10.2导入Excel数据X、Y坐标(经纬度、平面坐标),生成Shapefile点数据图层 文章目录 1. 数据准备2. 添加数据3. 保存文矢量文件1. 数据准备 本实验使用…