在Windows IoT上使用网络摄像头
在树莓派上可以使用它官方标配的摄像头,但是这个摄像头似乎不能被Windows IoT识别和使用。但是,可以在树莓派的USB口上插入任意型号的摄像头,就可以实现树莓派的拍摄功能。
关于摄像头的寻找和拍摄,我将其封装成一个类,如下:
public class WebCamHelper
{
public MediaCapture mediaCapture; private bool initialized = false; /// <summary>
/// 异步初始化网络摄像头
/// </summary>
public async Task InitializeCameraAsync()
{
if (mediaCapture == null)
{
// 尝试发现摄像头
var cameraDevice = await FindCameraDevice(); if (cameraDevice == null)
{
// 没有发现摄像头
Debug.WriteLine("No camera found!");
initialized = false;
return;
} // Creates MediaCapture initialization settings with foudnd webcam device
var settings = new MediaCaptureInitializationSettings { VideoDeviceId = cameraDevice.Id }; mediaCapture = new MediaCapture();
await mediaCapture.InitializeAsync(settings);
initialized = true;
}
} /// <summary>
/// 异步寻找摄像头,如果没有找到,返回null,否则返回DeviceInfomation
/// </summary>
private static async Task<DeviceInformation> FindCameraDevice()
{
// Get available devices for capturing pictures
var allVideoDevices = await DeviceInformation.FindAllAsync(DeviceClass.VideoCapture); if (allVideoDevices.Count > )
{
// 如果发现,返回
return allVideoDevices[];
}
else
{
return null;
}
} /// <summary>
/// 开启摄像头预览
/// </summary>
public async Task StartCameraPreview()
{
try
{
await mediaCapture.StartPreviewAsync();
}
catch
{
initialized = false;
Debug.WriteLine("Failed to start camera preview stream");
}
} /// <summary>
/// 关闭摄像头预览
/// </summary>
public async Task StopCameraPreview()
{
try
{
await mediaCapture.StopPreviewAsync();
}
catch
{
Debug.WriteLine("Failed to stop camera preview stream");
}
} /// <summary>
/// 拍摄照片,返回StorageFile,文件将被存储到临时文件夹
/// </summary>
public async Task<StorageFile> CapturePhoto()
{
// Create storage file in local app storage
string fileName = GenerateNewFileName() + ".jpg";
CreationCollisionOption collisionOption = CreationCollisionOption.GenerateUniqueName;
StorageFile file = await ApplicationData.Current.TemporaryFolder.CreateFileAsync(fileName, collisionOption); // 拍摄并且存储
await mediaCapture.CapturePhotoToStorageFileAsync(ImageEncodingProperties.CreateJpeg(), file); //await Task.Delay(500); return file;
} /// <summary>
/// 产生文件名称
/// </summary>
private string GenerateNewFileName()
{
return " IoTSample" + DateTime.Now.ToString("yyyy.MMM.dd HH-mm-ss");
} public string GenerateUserNameFileName(string userName)
{
return userName + DateTime.Now.ToString("yyyy.MM.dd HH-mm-ss") + ".jpg";
} /// <summary>
/// 如果摄像头初始化成功,返回true,否则返回false
/// </summary>
public bool IsInitialized()
{
return initialized;
}
使用示例:
1.初始化
private WebCamHelper camera;
if(camera==null)
{
camera = new WebCamHelper();
await camera.InitializeCameraAsync();
}
if(camera.IsInitialized())
{
tbMessage.Text = "Camera启动成功...";
}
else
{
tbMessage.Text = "Camera启动失败...";
}
2.拍摄
if (!camera.IsInitialized()) return;
StorageFile imgFile = await camera.CapturePhoto();
拍摄完成的图片文件就存储在上面的imgFile中。
3.视频预览
如果想开启视频预览,实时查看摄像头捕获的图像,可以在XAML中先添加一个CaptureElement控件:
<CaptureElement x:Name="cameraElement"
Loaded="cameraElement_Loaded"/>
在CaptureElement的Loaded事件中执行source绑定:
cameraElement.Source = camera.mediaCapture;
然后在想要开始视频预览的地方,执行:
await camera.StartCameraPreview();
关闭视频预览:
await camera.StopCameraPreview();
在Windows IoT上使用网络摄像头的更多相关文章
- 在Windows IoT上生成和识别二维码
在Windows IoT生成和识别二维码,实际上由于是UWP上实现,所以,理论上,这些生成和识别二维码的方法也可以在其它平台上运行. 关于二维码的生成有很多库可以实现,比如QRCoder,这个库可以在 ...
- 【译】如何使用Vue捕获网络摄像头视频
几个月前,我一直关注着比特币的爆发并且在GDAX网站上注册账号.在注册验证的过程中,网站提示要通过计算机的网络摄像头提交我自己的一张照片作为照片ID.这是一个很酷的做法,让我思考一个问题:在网络浏览器 ...
- 安天透过北美DDoS事件解读IoT设备安全——Mirai的主要感染对象是linux物联网设备,包括:路由器、网络摄像头、DVR设备,入侵主要通过telnet端口进行流行密码档暴力破解,或默认密码登陆,下载DDoS功能的bot,运行控制物联网设备
安天透过北美DDoS事件解读IoT设备安全 安天安全研究与应急处理中心(安天CERT)在北京时间10月22日下午启动高等级分析流程,针对美国东海岸DNS服务商Dyn遭遇DDoS攻击事件进行了跟进分析. ...
- Android IOS WebRTC 音视频开发总结(八十三)-- 使用WebRTC广播网络摄像头视频(上)
本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:bl ...
- 如何在Windows系统上用抓包软件Wireshark截获iPhone等网络通讯数据
http://www.jb51.net/os/windows/189090.html 今天给大家介绍一种如何在Windows操作系统上使用著名的抓包工具软件Wireshark来截获iPhone.iPa ...
- 在Windows系统上怎么使用SecureCRT链接Linux AWS EC2 -摘自网络
在Windows系统上就需要使用SecureCRT,Putty等工具,进行连接.但是AWS提供的XXX.pem文件,需要做一些处理SecureCRT的方法: 1.使用XXX.pem文件生成一个公钥文件 ...
- TVideoGrabber如何将网络摄像头影像实时发布到网络
在TVideoGrabber中如何将网络摄像头影像实时发布到网络?如何设置正在运行TVideoGrabber的一台电脑,同时通过另一台电脑在网络中实时的观看在线视频呢? 在这里称发送视频流的电脑为“m ...
- 【安富莱原创开源应用第1期】花式玩转网络摄像头之TCP上位机软件实现,高端大气上档次,速度2MB/S,华丽丽的界面效果
说明:1.例子是两年前做的,一直没有顾上整理出来,今天特地整理出来,开源出来给大家玩.2.上位机是emWin模拟器开发的,大家估计很难猜到,所以你会emWin话的,就可以轻松制作上位机.做些通信和控制 ...
- 《Windows IoT 应用开发指南》
物物互联的时代已经到来,智能家居.智慧校园.智慧交通.可穿戴.无人机.全息投影,各种各样的新名词.黑科技层出不穷.当我们为五年前能够通过手机控制家电而欣喜若狂的时候,可曾憧憬过当前使用增强现实设备完成 ...
随机推荐
- iOS的安全性和越狱
提到越狱,很多人第一反应大概是免费的游戏和 app. 作为软件从业人员,深知中国的大环境的特殊性.内有用户想吃免费午餐的不良付费习惯,外有行业内大头诸如某讯对创新的绞杀.大家对越狱是为了免费.盗版软件 ...
- 数据批量插入MSSQL
MSSQL数据批量插入优化详细 序言 现在有一个需求是将10w条数据插入到MSSQL数据库中,表结构如下,你会怎么做,你感觉插入10W条数据插入到MSSQL如下的表中需要多久呢? 或者你的批量数据 ...
- 读取数据变JSON传值!
$(document).on("click",".btn_small",function(){ v ...
- Entity Framework加载数据的三种方式。
MSDN文章Loading Related Entities 有 Eagerly Loading Lazy Loading Explicitly Loading 三种方式. 而看到查询中包含Inclu ...
- windown下linux子系统的安装和卸载
原文:windown下linux子系统的安装和卸载 安装 第一步 打开开发人员模式 第二步 勾选适用linux的window子系统 第三步 打开powershell 第四步 在PowerShe ...
- 回调函数实现类似QT中信号机制
1. 定义回调接口类: class UIcallBack { public: virtual void onAppActivated() = 0; virtual void onShowMore() ...
- python3处理不标准json数据
keywords: python jsonsource: http://txw1958.cnblogs.com/ 先看下JSON的语法规则: JSON 语法规则JSON 语法是 JavaScript ...
- 自由度(degree of freedom)
In many scientific fields, the degrees of freedom of a system is the number of parameters of the sys ...
- ThreadPool类(线程池)
原文:ThreadPool类(线程池) CLR线程池并不会在CLR初始化时立即建立线程,而是在应用程序要创建线程来运行任务时,线程池才初始化一个线程.线程池初始化时是没有线程的,线程池里的线程的初始化 ...
- 漫谈 KVC 与 KVO
KVC 与 KVO 无疑是 Cocoa 提供给我们的一个非常强大的特性,使用熟练可以让我们的代码变得非常简洁并且易读.但 KVC 与 KVO 提供的 API 又是比较复杂的,绝对超出我们不经深究之前所 ...