在树莓派上可以使用它官方标配的摄像头,但是这个摄像头似乎不能被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上使用网络摄像头的更多相关文章

  1. 在Windows IoT上生成和识别二维码

    在Windows IoT生成和识别二维码,实际上由于是UWP上实现,所以,理论上,这些生成和识别二维码的方法也可以在其它平台上运行. 关于二维码的生成有很多库可以实现,比如QRCoder,这个库可以在 ...

  2. 【译】如何使用Vue捕获网络摄像头视频

    几个月前,我一直关注着比特币的爆发并且在GDAX网站上注册账号.在注册验证的过程中,网站提示要通过计算机的网络摄像头提交我自己的一张照片作为照片ID.这是一个很酷的做法,让我思考一个问题:在网络浏览器 ...

  3. 安天透过北美DDoS事件解读IoT设备安全——Mirai的主要感染对象是linux物联网设备,包括:路由器、网络摄像头、DVR设备,入侵主要通过telnet端口进行流行密码档暴力破解,或默认密码登陆,下载DDoS功能的bot,运行控制物联网设备

    安天透过北美DDoS事件解读IoT设备安全 安天安全研究与应急处理中心(安天CERT)在北京时间10月22日下午启动高等级分析流程,针对美国东海岸DNS服务商Dyn遭遇DDoS攻击事件进行了跟进分析. ...

  4. Android IOS WebRTC 音视频开发总结(八十三)-- 使用WebRTC广播网络摄像头视频(上)

    本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:bl ...

  5. 如何在Windows系统上用抓包软件Wireshark截获iPhone等网络通讯数据

    http://www.jb51.net/os/windows/189090.html 今天给大家介绍一种如何在Windows操作系统上使用著名的抓包工具软件Wireshark来截获iPhone.iPa ...

  6. 在Windows系统上怎么使用SecureCRT链接Linux AWS EC2 -摘自网络

    在Windows系统上就需要使用SecureCRT,Putty等工具,进行连接.但是AWS提供的XXX.pem文件,需要做一些处理SecureCRT的方法: 1.使用XXX.pem文件生成一个公钥文件 ...

  7. TVideoGrabber如何将网络摄像头影像实时发布到网络

    在TVideoGrabber中如何将网络摄像头影像实时发布到网络?如何设置正在运行TVideoGrabber的一台电脑,同时通过另一台电脑在网络中实时的观看在线视频呢? 在这里称发送视频流的电脑为“m ...

  8. 【安富莱原创开源应用第1期】花式玩转网络摄像头之TCP上位机软件实现,高端大气上档次,速度2MB/S,华丽丽的界面效果

    说明:1.例子是两年前做的,一直没有顾上整理出来,今天特地整理出来,开源出来给大家玩.2.上位机是emWin模拟器开发的,大家估计很难猜到,所以你会emWin话的,就可以轻松制作上位机.做些通信和控制 ...

  9. 《Windows IoT 应用开发指南》

    物物互联的时代已经到来,智能家居.智慧校园.智慧交通.可穿戴.无人机.全息投影,各种各样的新名词.黑科技层出不穷.当我们为五年前能够通过手机控制家电而欣喜若狂的时候,可曾憧憬过当前使用增强现实设备完成 ...

随机推荐

  1. hive character '' not supported here

    把在windows环境下编写的sql使用UTF-8无BOM保存后,再上传执行即可

  2. LR杂记 - Linux的系统监控工具vmstat详细说明

    一.前言 非常显然从名字中我们就能够知道vmstat是一个查看虚拟内存(Virtual Memory)使用状况的工具,可是如何通过vmstat来发现系统中的瓶颈呢?在回答这个问题前,还是让我们回想一下 ...

  3. spring-boot-sample-web-jsp

    Pom文件需要配置的: <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl&l ...

  4. WPF 使用 SharpDX

    原文:WPF 使用 SharpDX 版权声明:博客已迁移到 http://lindexi.gitee.io 欢迎访问.如果当前博客图片看不到,请到 http://lindexi.gitee.io 访问 ...

  5. 一些常用的WebServices

    天气预报Web服务,数据来源于中国气象局 Endpoint  Disco  WSDL IP地址来源搜索 WEB 服务(是目前最完整的IP地址数据) Endpoint  Disco  WSDL 随机英文 ...

  6. 全栈工程师之路(二)—— JavaScript(网页前端脚本语言)

    javascript 是可以运行在网页前端的脚本语言,可以基于 html 之上实现更丰富的交互(网页内容的交互显示).异步回调.多线程.定时器.动画等. hello_world.html <ht ...

  7. 【转】ARRAYLIST VECTOR LINKEDLIST 区别与用法

    转自:http://www.cnblogs.com/mgod/archive/2007/08/05/844011.html ArrayList 和Vector是采用数组方式存储数据,此数组元素数大于实 ...

  8. EasyUI学习之menu and button(菜单和按钮)

    前言 今天下午的天气感觉格外的气闷,整个人有一种黏糊糊的感觉,格外的不舒服.加之立即要放假了了,感觉自己全然坐不住呢(节前综合症么).只是学习还是的继续的. 原定计划这篇文章本来应该是关于search ...

  9. MySQL复制slave服务器死锁案例

    原文:MySQL复制slave服务器死锁案例 MySQL复制刚刚触发了一个bug,该bug的触发条件是slave上Xtrabackup备份的时候执行flushs tables with read lo ...

  10. ANDROID 中设计模式的採用--结构型模式

            结构型模式中的适配器模式.外观模式.装饰模式.代理模式都属于包装模式,都是对另外的类或对象的包装,仅仅是各自的意图不同. 适配器模式通过对另外的类或对象的包装,将其接口转换为用户期 ...