精华内容
下载资源
问答
  • wpf版本
    2021-08-08 19:19:16

    虹软人脸识别WPF版本,3.0类库,含活体检测

    源码地址:
    https://gitee.com/dacaba/arcface-demo-csharp-wpf3

    将对应appid和appkey替换App.config文件中对应内容,项目中的是在2021年7月注册的,免费有效期一年
    解决方案中有两个版本,CSharp版本是基于官方的人脸识别CSharp2.2版本改造的
    支持人脸识别1:1(人证比对),1:N(人脸识别)

    改造内容

    把人脸的引擎相关全部代码放入FaceCompare.cs类中,实现了引擎启动,人脸注册,人脸比较

    FaceCompare.cs类的使用方法

    初始化引擎

    //初始化引擎
    lblMessage.Text = FaceCompare.InitEngines();
    if (lblMessage.Text != "1")
    {
    	//初始化失败
    	return;
    }
    

    注册一张人脸

    //注册一张人脸到人脸库,如果要注册多张循环调用就可以了
    Image image = Image.FromFile(@"d:\zp.jpg");
    pictureBox1.Image = image;
    FaceCompare.RegisterImage(image);	
    

    人脸识别

    //得到当前RGB摄像头下的图片,返回识别结果
    Bitmap bitmap = rgbVideoSource.GetCurrentVideoFrame();
    lblMessage.Text = FaceCompare.DoRgbCompare(bitmap, rgbVideoSource.Width, rgbVideoSource.Height);
    

    以下是官网的Readme内容

    快速上手:

    1.	安装VS2012环境安装包(vcredist_x86_vs2012.exe)、VS2013环境安装包(vcredist_x86_vs2013.exe)
    
    2.	从官网申请sdk  http://www.arcsoft.com.cn/ai/arcface.html  ,下载对应的sdk版本(x86或x64)并解压
    
    3.	将libs中的“libarcsoft_face.dll”、“libarcsoft_face_engine.dll”拷贝到工程bin目录的对应平台的debug或release目录下
    
    4.	将对应appid和appkey替换App.config文件中对应内容
    
    5.	在Debug或者Release中选择配置管理器,选择对应的平台
    
    6.	按F5启动程序
    
    7.	点击“注册人脸”按钮增加人脸库图片
    
    8.	点击“选择识别图”按钮增加人脸图片
    
    9.	点击“开始匹配”按钮进行比较
    
    10.	根据下面文本框查看相关信息 
    

    常见问题:

    1.后引擎初始化失败	
    	(1)请选择对应的平台,如x64,x86 
    	(2)删除bin下面对应的asf_install.dat,freesdk_132512.dat;
    	(3)请确保App.config下的appid,和appkey与当前sdk一一对应。
    	
    2.SDK支持那些格式的图片人脸检测?	
    	目前SDK支持的图片格式有jpg,jpeg,png,bmp等。
    	
    3.使用人脸检测功能对图片大小有要求吗?	
    	推荐的图片大小最大不要超过2M,因为图片过大会使人脸检测的效率不理想,当然图片也不宜过小,否则会导致无法检测到人脸。
    	
    4.使用人脸识别引擎提取到的人脸特征信息是什么?	
    	人脸特征信息是从图片中的人脸上提取的人脸特征点,是byte[]数组格式。 
    	
    5.SDK人脸比对的阈值设为多少合适?	
    	推荐值为0.8,用户可根据不同场景适当调整阈值。
    	
    6.可不可以将人脸特征信息保存起来,等需要进行人脸比对的时候直接拿保存好的人脸特征进行比对?
    	可以,当人脸个数比较多时推荐先存储起来,在使用时直接进行比对,这样可以大大提高比对效率。存入数据库时,请以Blob的格式进行存储,不能以string或其他格式存储。
    	
    7.在.Net项目中出现堆栈溢出问题,如何解决?
    	.Net平台设置的默认堆栈大小为256KB,SDK中需要的大小为512KB以上,推荐调整堆栈的方法为:
    	new Thread(new ThreadStart(delegate {
    		ASF_MultiFaceInfo multiFaceInfo = FaceUtil.DetectFace(pEngine, imageInfo);
    	}), 1024 * 512).Start();
    	
    8.X86模式下批量注册人脸有内存溢出或图片空指针	
    	请增加虚拟内存或每次批量注册人脸控制在20张图片范围内
    	
    9.图片中有人脸,但是检测时未检测到人脸	
    	(1)请调整detectFaceScaleVal的值;
    	(2)请确认图片的宽度是否为4的倍数;
    	(3)请确认图片是否通过ImageUtil.ReadBMP方法进行数据调整。
    
    更多相关内容
  • C# WPF版本号更改

    2022-06-15 13:48:45
    C#项目获取版本

    项目里可以在AssemblyInfo.cs里更换版本号

    public static string Version = System.Diagnostics.FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly().Location).FileVersion;//软件版本号
    

    在这里插入图片描述

    展开全文
  • wpf版本人脸识别,虹软的SDK3.0 全部开源。公司商用可以参考的,以前公司软件用过,效率不错.里面有表情包可以参考,
  • WPF版本贪吃蛇

    2019-09-05 11:50:18
    主要使用的WPF MVVM 思想进行的开发示例,可进行优化,增加分数等功能
  • 运算器wpf版本.zip

    2020-05-16 23:08:55
    使用3个窗口嵌套,可以切换页面不影响彼此的变量字典,实现了常见函数运算,弹出变量尺在变量区,可以滑动变量尺同时改变多个表达式值
  • 大文件搜索(源码)。项目注释完整 wpf编写 快速搜索指定盘符中指定大的小文件。 需要一定的wpf编程基础,可供学习参考
  • 海康WPF版本源码

    2017-11-01 15:02:12
    WPF开发的海康视频监控源码,有需要的朋友可以下载。WPF开发的海康视频监控源码,有需要的朋友可以下载。
  • wpf版本的计算器

    2013-07-26 12:03:09
    WPF实现的简易计算器,供广大初学者学习!
  • 灵活标记格式(FTF)是一种使用人类可读标签的完全灵活的存储格式,并且可能支持存储任何类型的数据。 这是C#/ WPF版本
  • wpf版本转场动画

    2016-10-18 15:27:01
    wpf版本转场动画
  • WPF版本的扫雷

    2016-06-21 18:09:08
    WPF扫雷
  • WPF版本的WEB测试小程序,还net4log的使用.WPF版本的WEB测试小程序,还net4log的使用.
  • SharePoint-Printing-ModernUI SharePoint 打印应用程序的现代 UI WPF 版本
  • 基于Visifire的WPF图标示例,可直接运行。 (Based on WPF sample chart with Visifire,which can be run directly.)
  • WPF版本的赛车小游戏

    2014-05-09 15:35:30
    WPF写的简单的赛车小游戏,内含详细代码,用C#写的
  • WPF版本老虎机

    热门讨论 2012-10-28 13:39:00
    WPF版本老虎机,采用三层架构设计模式,代码精辟,思路清晰,资源调用统一高效
  • Windows Presentation Foundation(WPF)Windows Presentation Foundation(WPF)是用于构建Windows桌面应用程序的UI框架。 WPF支持广泛的应用程序开发功能,其中包括Windows Presentation Foundation(WPF)的应用...
  • 最近公司在做WPF生成二维码 所以自己就写了个winForm+Web+WPF版本 生成二维码 只是把相应的图片Image类转换一下。
  • 本框架包含了某些客户端的模式,第一种常用的winform客户端,第二种为wpf客户端,第三种为asp.net mvc模式,第一种为安卓平台的客户端,从而您可以在winform和wpf客户端上选择一种模式,然后您的系统提供一些功能...
  • 俄罗斯方块wpf版本

    2011-05-30 08:28:19
    俄罗斯方块wpf版本 源码 wpf winform升级版 wpf演示
  • WPF自动检测更新版本

    2018-11-05 10:11:39
    WPF实现客户端版本的检测,更新操作,实现客户端程序的自动更新。
  • WPF版本的自动更新程序

    万次阅读 2011-05-21 18:37:00
    软件本身是用VS2010写的WPF版本的,所以更新程序也就决定用WPF来做吧。虽说,以前用WinForm做过,感觉应该是差不多。可实际操作过程中间,还是碰到了一些不太一样的地方吧。不过,原理都是一样一样滴。这里,只是...

      最近,拿到的项目代码是用WPF写的。C/S结构的东西更新起来不太方便。于是,就决定做个自动更新程序吧。软件本身是用VS2010写的WPF版本的,所以更新程序也就决定用WPF来做吧。虽说,以前用WinForm做过,感觉应该是差不多。可实际操作过程中间,还是碰到了一些不太一样的地方吧。不过,原理都是一样一样滴。

      这里,只是更新程序的代码,至于版本判断的方法,方式多多吧。这里的更新程序,需要放在软件主程序同目录下,而且我把客户端的版本号放在了软件的配置文件中了。在更新完成后会去修改里边的版本信息。至于,zip包的解压,引用了ICSharpCode.SharpZipLib.dll,网上很多下载的。

      App.xaml.cs代码

     

      MainWindow.xaml.cs代码

      更新程序的App.config

       

     

    展开全文
  • 基于wpf .NET6.0开发完成的PDF阅读器,书签,放大缩小,祛背景,提取当前页面文字(扫描的图片型文档不可以),可满足日常阅读使用,资源占用小,速度快
  • 如果你要在 WPF 程序中使用线程池完成一个特殊的任务,那么使用 .NET 的 API Task.Run 并传入一个 Lambda 表达式可以完成。不过,使用 Lambda 表达式会带来变量捕获的一些问题,比如说你需要区分一个变量作用于是在 ...

    如果你要在 WPF 程序中使用线程池完成一个特殊的任务,那么使用 .NET 的 API Task.Run 并传入一个 Lambda 表达式可以完成。不过,使用 Lambda 表达式会带来变量捕获的一些问题,比如说你需要区分一个变量作用于是在 Lambda 表达式中,还是当前上下文全局(被 Lambda 表达式捕获到的变量)。然后,在静态分析的时候,也难以知道此 Lambda 表达式在整个方法中的执行先后顺序,不利于分析潜在的 Bug。

    在使用 async/await 关键字编写异步代码的时候,虽然说实质上也是捕获变量,但这时没有显式写一个 Lambda 表达式,所有的变量都是被隐式捕获的变量,写起来就像在一个同步方法一样,便于理解。


    C++/WinRT

    以下 C++/WinRT 的代码来自 Raymond Chen 的示例代码。Raymond Chen 写了一个 UWP 的版本用于模仿 C++/WinRT 的线程切换效果。在看他编写的 UWP 版本之前我也思考了可以如何实现一个 .NET / WPF 的版本,然后成功做出了这样的效果。

    Raymond Chen 的版本可以参见:C++/WinRT envy: Bringing thread switching tasks to C# (UWP edition) - The Old New Thing

    winrt::fire_and_forget MyPage::Button_Click()
    {
      // We start on a UI thread.
      auto lifetime = get_strong();
    
      // Get the control's value from the UI thread.
      auto v = SomeControl().Value();
    
      // Move to a background thread.
      co_await winrt::resume_background();
    
      // Do the computation on a background thread.
      auto result1 = Compute1(v);
      auto other = co_await ContactWebServiceAsync();
      auto result2 = Compute2(result1, other);
    
      // Return to the UI thread to provide an interim update.
      co_await winrt::resume_foreground(Dispatcher());
    
      // Back on the UI thread: We can update UI elements.
      TextBlock1().Text(result1);
      TextBlock2().Text(result2);
    
      // Back to the background thread to do more computations.
      co_await winrt::resume_background();
    
      auto extra = co_await GetExtraDataAsync();
      auto result3 = Compute3(result1, result2, extra);
    
      // Return to the UI thread to provide a final update.
      co_await winrt::resume_foreground(Dispatcher());
    
      // Update the UI one last time.
      TextBlock3().Text(result3);
    }
    

    可以看到,使用 co_await winrt::resume_background(); 可以将线程切换至线程池,使用 co_await winrt::resume_foreground(Dispatcher()); 可以将线程切换至 UI。

    也许你会觉得这样没什么好处,因为 C#/.NET 的版本里面 Lambda 表达式一样可以这么做:

    await Task.Run(() =>
    {
        // 这里的代码会在线程池执行。
    });
    // 这里的代码会回到 UI 线程执行。
    

    但是,现在我们给出这样的写法:

    // 仅在某些特定的情况下才使用线程池执行,而其他情况依然在主线程执行 DoSomething()。
    if (condition) {
      co_await winrt::resume_background();
    }
    
    DoSomething();
    

    你就会发现 Lambda 的版本变得很不好理解了。

    C# / .NET / WPF 版本

    我们现在编写一个自己的 Awaiter 来实现这样的线程上下文切换。

    关于如何编写一个 Awaiter,可以阅读我的其他博客:

    这里,我直接贴出我编写的 DispatcherSwitcher 类的全部源码。

    using System;
    using System.Runtime.CompilerServices;
    using System.Threading.Tasks;
    using System.Windows.Threading;
    
    namespace Walterlv.ThreadSwitchingTasks
    {
        public static class DispatcherSwitcher
        {
            public static ThreadPoolAwaiter ResumeBackground() => new ThreadPoolAwaiter();
    
            public static ThreadPoolAwaiter ResumeBackground(this Dispatcher dispatcher)
                => new ThreadPoolAwaiter();
    
            public static DispatcherAwaiter ResumeForeground(this Dispatcher dispatcher) =>
                new DispatcherAwaiter(dispatcher);
    
            public class ThreadPoolAwaiter : INotifyCompletion
            {
                public void OnCompleted(Action continuation)
                {
                    Task.Run(() =>
                    {
                        IsCompleted = true;
                        continuation();
                    });
                }
    
                public bool IsCompleted { get; private set; }
    
                public void GetResult()
                {
                }
    
                public ThreadPoolAwaiter GetAwaiter() => this;
            }
    
            public class DispatcherAwaiter : INotifyCompletion
            {
                private readonly Dispatcher _dispatcher;
    
                public DispatcherAwaiter(Dispatcher dispatcher) => _dispatcher = dispatcher;
    
                public void OnCompleted(Action continuation)
                {
                    _dispatcher.InvokeAsync(() =>
                    {
                        IsCompleted = true;
                        continuation();
                    });
                }
    
                public bool IsCompleted { get; private set; }
    
                public void GetResult()
                {
                }
    
                public DispatcherAwaiter GetAwaiter() => this;
            }
        }
    }
    

    Raymond Chen 取的类名是 ThreadSwitcher,不过我认为可能 Dispatcher 在 WPF 中更能体现其线程切换的含义。

    于是,我们来做一个试验。以下代码在 MainWindow.xaml.cs 里面,如果你使用 Visual Studio 创建一个 WPF 的空项目的话是可以找到的。随便放一个 Button 添加事件处理函数。

    private async void DemoButton_Click(object sender, RoutedEventArgs e)
    {
        var id0 = Thread.CurrentThread.ManagedThreadId;
    
        await Dispatcher.ResumeBackground();
    
        var id1 = Thread.CurrentThread.ManagedThreadId;
    
        await Dispatcher.ResumeForeground();
    
        var id2 = Thread.CurrentThread.ManagedThreadId;
    }
    

    id0 和 id2 在主线程上,id1 是线程池中的一个线程。

    这样,我们便可以在一个上下文中进行线程切换了,而不需要使用 Task.Run 通过一个 Lambda 表达式来完成这样的任务。

    现在,这种按照某些特定条件才切换到后台线程执行的代码就很容易写出来了。

    // 仅在某些特定的情况下才使用线程池执行,而其他情况依然在主线程执行 DoSomething()。
    if (condition)
    {
        await Dispatcher.ResumeBackground();
    }
    
    DoSomething();
    

    Raymond Chen 的版本

    Raymond Chen 后来在另一篇博客中也编写了一份 WPF / Windows Forms 的线程切换版本。请点击下方的链接跳转至原文阅读:

    我在为他的代码添加了所有的注释后,贴在了下面:

    using System;
    using System.Runtime.CompilerServices;
    using System.Threading;
    using System.Windows.Forms;
    using System.Windows.Threading;
    
    namespace Walterlv.Windows.Threading
    {
        /// <summary>
        /// 提供类似于 WinRT 中的线程切换体验。
        /// </summary>
        /// <remarks>
        /// https://devblogs.microsoft.com/oldnewthing/20190329-00/?p=102373
        /// https://blog.walterlv.com/post/bring-thread-switching-tasks-to-csharp-for-wpf.html
        /// </remarks>
        public class ThreadSwitcher
        {
            /// <summary>
            /// 将当前的异步等待上下文切换到 WPF 的 UI 线程中继续执行。
            /// </summary>
            /// <param name="dispatcher">WPF 一个 UI 线程的调度器。</param>
            /// <returns>一个可等待对象,使用 await 等待此对象可以使后续任务切换到 UI 线程执行。</returns>
            public static DispatcherThreadSwitcher ResumeForegroundAsync(Dispatcher dispatcher) =>
                new DispatcherThreadSwitcher(dispatcher);
    
            /// <summary>
            /// 将当前的异步等待上下文切换到 Windows Forms 的 UI 线程中继续执行。
            /// </summary>
            /// <param name="control">Windows Forms 的一个控件。</param>
            /// <returns>一个可等待对象,使用 await 等待此对象可以使后续任务切换到 UI 线程执行。</returns>
            public static ControlThreadSwitcher ResumeForegroundAsync(Control control) =>
                new ControlThreadSwitcher(control);
    
            /// <summary>
            /// 将当前的异步等待上下文切换到线程池中继续执行。
            /// </summary>
            /// <returns>一个可等待对象,使用 await 等待此对象可以使后续的任务切换到线程池执行。</returns>
            public static ThreadPoolThreadSwitcher ResumeBackgroundAsync() =>
                new ThreadPoolThreadSwitcher();
        }
    
        /// <summary>
        /// 提供一个可切换到 WPF 的 UI 线程执行上下文的可等待对象。
        /// </summary>
        public struct DispatcherThreadSwitcher : INotifyCompletion
        {
            internal DispatcherThreadSwitcher(Dispatcher dispatcher) =>
                _dispatcher = dispatcher;
    
            /// <summary>
            /// 当使用 await 关键字异步等待此对象时,将调用此方法返回一个可等待对象。
            /// </summary>
            public DispatcherThreadSwitcher GetAwaiter() => this;
    
            /// <summary>
            /// 获取一个值,该值指示是否已完成线程池到 WPF UI 线程的切换。
            /// </summary>
            public bool IsCompleted => _dispatcher.CheckAccess();
    
            /// <summary>
            /// 由于进行线程的上下文切换必须使用 await 关键字,所以不支持调用同步的 <see cref="GetResult"/> 方法。
            /// </summary>
            public void GetResult()
            {
            }
    
            /// <summary>
            /// 当异步状态机中的前一个任务结束后,将调用此方法继续下一个任务。在此可等待对象中,指的是切换到 WPF 的 UI 线程。
            /// </summary>
            /// <param name="continuation">将异步状态机推进到下一个异步状态。</param>
            public void OnCompleted(Action continuation) => _dispatcher.BeginInvoke(continuation);
    
            private readonly Dispatcher _dispatcher;
        }
    
        /// <summary>
        /// 提供一个可切换到 Windows Forms 的 UI 线程执行上下文的可等待对象。
        /// </summary>
        public struct ControlThreadSwitcher : INotifyCompletion
        {
            internal ControlThreadSwitcher(Control control) =>
                _control = control;
    
            /// <summary>
            /// 当使用 await 关键字异步等待此对象时,将调用此方法返回一个可等待对象。
            /// </summary>
            public ControlThreadSwitcher GetAwaiter() => this;
    
            /// <summary>
            /// 获取一个值,该值指示是否已完成线程池到 Windows Forms UI 线程的切换。
            /// </summary>
            public bool IsCompleted => !_control.InvokeRequired;
    
            /// <summary>
            /// 由于进行线程的上下文切换必须使用 await 关键字,所以不支持调用同步的 <see cref="GetResult"/> 方法。
            /// </summary>
            public void GetResult()
            {
            }
    
            /// <summary>
            /// 当异步状态机中的前一个任务结束后,将调用此方法继续下一个任务。在此可等待对象中,指的是切换到 Windows Forms 的 UI 线程。
            /// </summary>
            /// <param name="continuation">将异步状态机推进到下一个异步状态。</param>
            public void OnCompleted(Action continuation) => _control.BeginInvoke(continuation);
    
            private readonly Control _control;
        }
    
        /// <summary>
        /// 提供一个可切换到线程池执行上下文的可等待对象。
        /// </summary>
        public struct ThreadPoolThreadSwitcher : INotifyCompletion
        {
            /// <summary>
            /// 当使用 await 关键字异步等待此对象时,将调用此方法返回一个可等待对象。
            /// </summary>
            public ThreadPoolThreadSwitcher GetAwaiter() => this;
    
            /// <summary>
            /// 获取一个值,该值指示是否已完成 UI 线程到线程池的切换。
            /// </summary>
            public bool IsCompleted => SynchronizationContext.Current == null;
    
            /// <summary>
            /// 由于进行线程的上下文切换必须使用 await 关键字,所以不支持调用同步的 <see cref="GetResult"/> 方法。
            /// </summary>
            public void GetResult()
            {
            }
    
            /// <summary>
            /// 当异步状态机中的前一个任务结束后,将调用此方法继续下一个任务。在此可等待对象中,指的是切换到线程池中。
            /// </summary>
            /// <param name="continuation">将异步状态机推进到下一个异步状态。</param>
            public void OnCompleted(Action continuation) => ThreadPool.QueueUserWorkItem(_ => continuation());
        }
    }
    

    参考资料


    我的博客会首发于 https://blog.walterlv.com/,而 CSDN 会从其中精选发布,但是一旦发布了就很少更新。

    如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

    知识共享许可协议

    本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系

    展开全文
  • wpf版本的一个特效

    2009-10-31 17:21:47
    Wpf 做的一个颜色特效 有仿visita的很炫的效果 界面很简单 但是可以拿来做练习用
  • AutoUpdater:WPF自动更新

    2021-05-04 16:04:17
    这是一个基于Wpf的自动更新应用程序,可以帮助开发人员更好地完成更新功能。 描述: WPF和MVVM 支持更新程序包文件验证(比较文件MD5代码) 支持区分x86和x64程序 支持更新程序的版本号 支持执行更新策略 用法: ...
  • cefsharp75 h264集成版本 支持wpf和winfom nuget 本地引用进项目即可 谷歌75版本内核,支持视频流
  • 工业 MES 系统源代码 Wpf C# WPF开发。 WPF MES 上位机产线执行系统。 1, 完整纯源代码; 2, AGV自动调度; 3, SQLSERVER数据库。带附加文件。 4, WPF各种技术应用。 5, 数据库技术应用。 6, DTU数据传输。 7...
  • WPF基于Vlc.DotNet.Wpf封装的视频播放器
  • C# WPF实战项目升级了

    2022-04-17 00:01:21
    概述 之前用Caliburn.Micro搭建的WPF实战项目,CM框架选用了 3.0.3,实际上CM框架目前最新版已经到4.0。173了,所有很有必须升级一下项目了. 本来打算把平台框架也直接升级到.NET 6 的,但是项目里面很多库不支持...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 26,846
精华内容 10,738
关键字:

wpf版本

友情链接: jpegcam-1.0.9.tar.gz