本教程展示如何在c# Xamarin应用程序中使用LEADTOOLS SDK,通过Xamarin摄像头控件访问从设备摄像头实时捕获的视频帧。
| 概述 | |
|---|---|
| 总结 | 本教程介绍如何在c# Xamarin应用程序中访问实时捕获的视频帧 |
| 完成时间 | 30分钟 |
| Visual Studio项目 | 下载教程项目(461 KB) |
| 平台 | c# Xamarin跨平台应用 |
| IDE | Visual Studio 2019 |
| 开发许可 | 下载LEADTOOLS |
步骤熟悉创建项目的基本步骤添加引用和设置License教程,在工作之前集成实时捕捉与Xamarin相机控制- Xamarin c#教程。
在Visual Studio中,创建一个新的c# Xamarin项目,并添加以下必要的LEADTOOLS引用。
所需要的参考资料取决于项目的目的。对于这个项目,需要以下NuGet包:
Leadtools.Camera.Xamarin
许可证解锁项目所需的特性。它必须在调用任何工具箱函数之前设置。有关详细信息,包括针对不同平台的教程,请参阅设置运行时License.
有两种类型的运行时许可证:
请注意
中详细介绍了添加LEADTOOLS NuGet引用和设置许可添加引用和设置License教程。
随着项目的创建、引用的添加和许可的设置,编码就可以开始了。
在解决方案资源管理器,打开MainPage.xaml.cs并确保将以下内容添加到使用代码顶部的区域:
使用Xamarin.Essentials;
添加以下全局变量:
保龄球PermissionsGranted;
添加一个MainPage_Appearing ()事件处理程序主页类。
公共主页(){//保留其余的代码InitializeComponent ();出现+= mainpage_appear;}
使用下面的代码检查相机并提示用户在使用实时捕获摄像机控件加载ContentPage之前启用它们。
私人异步无效MainPage_Appearing (对象发送者,EventArgs{permissionsgranting =等待验证权限();如果(PermissionsGranted = =假)返回;其他的App.Current.MainPage =新LiveCapturePage ();}私人异步任务<保龄球> VerifyPermissions (){试一试{PermissionStatus status = PermissionStatus. unknown;//相机权限-注意:需要添加权限到Android Manifest和iOS pListstatus = await Permissions.CheckStatusAsync(); 如果(status != permissionstatus . granting){等待DisplayAlert (“需要摄像权限”,“这个应用程序将处理从设备摄像头实时拍摄的帧”,“OK”);status = await permission . requestasync < permission . camera >();如果(status != permissionstatus . granting)返回假;}//所有需要的权限被授予返回真正的;}抓(异常交货){等待DisplayAlert (“错误”、ex.ToString ()“OK”);返回假;}}
在解决方案资源管理器,右键单击> <项目。机器人项目。点击属性.在安卓系统清单Tab,转到需要的权限部分,并启用相机许可。
在解决方案资源管理器,右键单击Info.plist.点击打开…….选择通用PList编辑器,然后按好吧.
单击+单击编辑器中最后一行上的。这个将被称为自定义属性,类型设置为字符串和一个空值。点击财产名称和下拉列表将会出现。从下拉菜单中选择隐私-图片库使用说明.然后在价值列,说明应用程序为什么要访问该给定特性。
随着项目的创建、引用的添加和许可的设置,编码就可以开始了。
在解决方案资源管理器,右键单击基本c#项目并选择添加->新项目.选择内容页选项并命名类LiveCapturePage.xaml
开放LiveCapturePage.xaml并将以下代码添加到ContentPage要添加CameraView控件、一个Live Capture按钮和一个说明处理了多少帧的标签。
<ContentPage。内容><StackLayout><——所有东西的主网格容器——><Grid x:Name="mainGrid" HorizontalOptions=" fillanexpand " VerticalOptions=" fillanexpand "><网格。ColumnDefinitions><ColumnDefinition x:Name="c0" Width="*"/><ColumnDefinition x:Name="c1" Width="*"/><ColumnDefinition x:Name="c2" Width="*"/></网格。ColumnDefinitions><网格。RowDefinitions><RowDefinition x:Name="r0" Height="*"/><RowDefinition x:Name="r1" Height="*"/><RowDefinition x:Name="r2" Height="*"/><RowDefinition x:Name="r3" Height="*"/><RowDefinition x:Name="r4" Height="*"/><RowDefinition x:Name="r5" Height="*"/><RowDefinition x:Name="r6" Height="*"/><RowDefinition x:Name="r7" Height="*"/><RowDefinition x:Name="r8" Height="*"/></网格。RowDefinitions><标签x:Name="capturedFrames" Text="Frames capturing: 0" TextColor="Blue"网格。行= " 0 "网格。网格列= " 0 "。ColumnSpan = 3 /><namespace:CameraView x:Name="leadCamera"行= " 1 "网格。网格列= " 0 "。ColumnSpan = " 3 "网格。RowSpan="7" HorizontalOptions=" fillanexpand " VerticalOptions=" fillanexpand "/ . RowSpan="7" HorizontalOptions=" fillanexpand><按钮x:名称="liveCapture"文本="Live Capture"网格。行= " 8 "网格。点击列= " 1 " = " liveCapture_Clicked " /></网格></ StackLayout></ ContentPage。内容>
右键单击该页并选择视图代码打开后面的代码LiveCapturePage.xaml.将下列语句添加到使用块的顶部LiveCapturePage.xaml.cs.
//在顶部使用块使用系统;使用Xamarin.Forms;使用Xamarin.Forms.Xaml;
//添加全局变量私人intframeCounter = 0;
控件来配置摄像机控件CameraOptions。AutoRotateImage来真正的在LiveCapturePage ()方法:
公共LiveCapturePage (){InitializeComponent ();leadCamera.CameraOptions.AutoRotateImage =真正的;}
在解决方案资源管理器,打开LiveCapturePage.xaml.cs.添加一个新的点击事件处理程序liveCapture,如果它还不存在。在处理程序中添加下面的代码,将相机控件与事件处理程序挂钩,该事件处理程序将处理捕获的每一帧并将计数器增加1。
私人无效liveCapture_Clicked (对象发送者,EventArgs{//点击Live Capture按钮将勾住framerecreceived事件处理程序,允许处理每一帧如果(liveCapture。文本= =“实时捕捉”){liveCapture。文本=“停止”;leadCamera。framerreceived += leadcamera_framerreceived;}其他的{liveCapture。文本=“实时捕捉”;leadCamera。framerreceived -= leadcamera_framerreceived;}}私人无效LeadCamera_FrameReceived (Leadtools.Camera.Xamarin。FrameHandlerEventArgs e){//帧接收处理程序代码frameCounter = frameCounter + 1;Device.BeginInvokeOnMainThread (() = >{capturedFrames。Text = $"Frames Processed: {frameCounter}";});}
选择所需的项目(iOS或Android),按运行项目F5,或选择调试->开始调试.
如果正确地执行了这些步骤,应用程序将运行并请求允许相机需要的权限。要进行测试,请单击捕捉生活按钮在设备屏幕底部。从设备的摄像头预览将显示在CameraView每处理一帧,处理的帧数就增加一帧。单击停止按钮,结束预览。
方法的使用CameraView类来处理设备相机拍摄的帧。