在树莓派上可以使用它官方标配的摄像头,但是这个摄像头似乎不能被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. 【codeforces 765A】Neverending competitions

    [题目链接]:http://codeforces.com/contest/765/problem/A [题意] 给你一个人的n个行程 行程都是从家到某个地方或从某个地方到家; 且是无序的,且如果到了非 ...

  2. easyui样式及js导入顺序及刷新回车的问题

    在使用easyui时,需要导入样式表及其js文件,在导入时.不光要遵守jquery包在easyui包的前面,还需要把样式表放在js的前边 <link type="text/css&qu ...

  3. findbugs静态代码分析工具使用教程

    FindBugs 是一个静态分析工具,很多程序猿都在使用,再次详细列出findbugs的使用教程,希望对大家有帮助. 1 安装 FindBugs通过检查类文件或 JAR文件,将字节码与一组缺陷模式进行 ...

  4. 通过getElementById来取得Form里的表单元素

    <1> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <title>湖南易通 ...

  5. 【codeforces 779A】Pupils Redistribution

    [题目链接]:http://codeforces.com/contest/779/problem/A [题意] 让你把两个组的5个人的数目都变成一样的. 支持交换操作; 问你最少需要交换几次. [题解 ...

  6. Springboot系列:@SpringBootApplication注解

    在使用 Springboot 框架进行开发的时候,通常我们会在 main 函数上添加 @SpringBootApplication 注解,今天为大家解析一下 @SpringBootApplicatio ...

  7. [MFC]SDI在图片背景上实现文本跟随鼠标移动

    SDI是单文档接口应用程序的简称.本文要实现的是在视图区域显示一张图片,然后在图片表层显示文字,并且文字跟随鼠标移动.思考一下,可以判断这个问题一共分为以下几个部分:1.显示图片:2.找到鼠标的位置: ...

  8. IT企业级应?开发模式演化

    原文:IT企业级应?开发模式演化 前端研发流程 传统To B类系统的研发模式 探索 & 思考设计模式库(DPL)设计语⾔设计语⾔详解基于MVVM模式的Web框架 & UI库优化后的开发 ...

  9. ADO.NET- 中批量添加数据的几种实现方法比较

    在.Net中经常会遇到批量添加数据,如将Excel中的数据导入数据库,直接在DataGridView控件中添加数据再保存到数据库等等. 方法一:一条一条循环添加 通常我们的第一反应是采用for或for ...

  10. Linux input

    Linux input 输入设备都有共性:中断驱动+字符IO,基于分层的思想,Linux内核将这些设备的公有的部分提取出来,基于cdev提供接口,设计了输入子系统,所有使用输入子系统构建的设备都使用主 ...