太神奇了!使用C#实现自动核验健康码:(1)二维码识别

前言

因为疫情的原因,无论是进入商场还是医院、车站,都需要出示健康码。

现在基本都是采取人工方式核验健康码,看到绿码就通过,否则就禁止进入。

但是,单靠人工核验健康码容易造成人员拥堵,增加病毒交叉感染的风险,其实完全可以使用计算机来实现自动核验

原理

如图所示,健康码其实就是个二维码,里面存储了健康码相关信息。

因此,只需通过摄像头扫描手机界面,识别出手机上的二维码即可。

实现

创建一个WinForm程序,添加下列控件:

  • button 开启摄像头

  • pictureBox 显示摄像头图像

  • time 定时识别摄像头图像,频率设为100

  • label 显示健康码状态

1. 开启摄像头

添加nuget包AForge.Video.DirectShow,设置button的Click事件:

VideoCaptureDevice _camera;
private void button1_Click(object sender, EventArgs e)
{_camera = new VideoCaptureDevice(new FilterInfoCollection(FilterCategory.VideoInputDevice)[0].MonikerString);_camera.NewFrame += camera_NewFrame;_camera.Start();timer1.Enabled = true;
}private void camera_NewFrame(object sender, AForge.Video.NewFrameEventArgs eventArgs)
{//将摄像头每帧图像显示到pictureBoxpictureBox1.Image = (Bitmap)eventArgs.Frame.Clone();       
}

2. 识别二维码

引用nuget包ZXing.Net,在timer的Tick事件中识别二维码:

private void timer1_Tick(object sender, EventArgs e)
{if (pictureBox1.Image != null){var img = (Bitmap)pictureBox1.Image.Clone();var barcodeReader = new BarcodeReader();var result = barcodeReader.Decode(img);if (result != null){var healthCode = JsonConvert.DeserializeAnonymousType(result.Text,new { Color = "" });if (healthCode != null){var color = healthCode.Color;if (color == "green"){label1.Text = "绿码";label1.ForeColor = Color.Green;}else if (color == "red"){label1.Text = "红码";label1.ForeColor = Color.Red;}else if (color == "yellow"){label1.Text = "黄码";label1.ForeColor = Color.Yellow;}else{label1.Text = "异常";}}}}
}

健康码的内容是一个json字符串,其中Color属性代表健康码状态。

3. 运行效果

运行程序,点击“开启摄像头”,可以正常识别:

结论

健康码的内容不包含时间,因此下一步还需要把更新时间从图片中识别出来,保证是最新的健康码。

如果你觉得这篇文章对你有所启发,请关注我的个人公众号”My IO“,记住我!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/299410.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三角形中惊现叛徒!自己胖的像个球,却能成就世界上最快的赛车引擎......

全世界只有3.14 % 的人关注了青少年数学之旅一日,理科生上山寻访禅师。理科生问禅师:“大师,世人为何总嫌我棱角太突出,不合群!”禅师思索一阵,掏出数根圆柱铺在地上,在上面搁了一块木板&#x…

我丢,去面试初级Java开发岗位,被问到泛型?

1、泛型的基础概念 1.1 为什么需要泛型 List list new ArrayList();//默认类型是Objectlist.add("A123");list.add("B234");list.add("C345");System.out.println(list);for(int i0;i<list.size();i){//若要将list中的元素赋给String变量&a…

echart 地图 某个地区_中国饮食地图来袭!你爱的口味暗藏健康隐患吗?

食&#xff0c;既是人生存之根本&#xff0c;也是人们热爱生活的体现。中国地域广阔、物产富饶&#xff0c;中国人对“吃”看重也愿钻研&#xff0c;种种因素造就了中国美食 “百花齐放”的局面&#xff0c;在“吃货”眼里&#xff0c;中国地图俨然就是一张美食地图。不同地区的…

面试官:实现一个带值变更通知能力的Dictionary

如题&#xff0c; 你知道字典KEY对应的Value什么时候被覆盖了吗&#xff1f;最近大家都在追.Net6 update&#xff0c;咱还是保持节奏&#xff0c;通用语言聊技术。没背景说个铲铲上文中 数据获取组件维护了业务方所有(在用)的连接对象&#xff0c;DBA能在后台无侵入的切换备份库…

颠覆认知!完美赌徒,到底是如何用数学打造经济神话?!

▲ 点击查看说起世界上最会赚钱的数学家&#xff0c;非詹姆斯西蒙斯莫属。1938年&#xff0c;西蒙斯出生于美国的马萨诸塞州&#xff0c;是一个鞋厂的儿子。在其他的孩子&#xff0c;还在听童话故事的时候&#xff0c;西蒙斯就已经开始展露出惊人的数学天赋了。3岁的时候&…

abs函数的使用方法 oracle_SQL Server 常用函数使用方法

1、SubString()&#xff1a;用于截取指定字符串的方法。该方法有三个参数&#xff1a;参数1&#xff1a;用于指定要操作的字符串。参数2&#xff1a;用于指定要截取的字符串的起始位置&#xff0c;起始值为 1 。参数3&#xff1a;用于指定要截取的长度。select substring(abcde…

高考落榜怎么办,奉劝学弟学妹们一些事情,请一定要擦亮眼睛

在目前这个社会情况Java技术是当前社会的一个热门专业&#xff0c;无论是pc端还是移动端对java的需求都是最多的&#xff0c;大学生学java正好顺应时代的发展&#xff0c;不仅有钱途还有前途&#xff0c;Java也适合零基础的人学习。 最近看见一句话 高考不努力&#xff0c;学习…

神仙打架!一人公开单挑全欧洲数学家,却惨遭4位数学家大反转,66年的难题被一晚破解......

全世界只有3.14 % 的人关注了青少年数学之旅两点之间直线最短&#xff0c;这家喻户晓的数学名言&#xff0c;就算是学渣也能倒背如流。但学渣们不知道的是&#xff0c;这条直线并不是最快的。为了让学渣们真正理解这句话&#xff0c;今天&#xff0c;超模君决定科普一波起源关于…

基于事件驱动架构构建微服务第4部分:repositories

原文链接&#xff1a;https://logcorner.com/building-microservices-through-event-driven-architecture-part4-repositories/在本文中&#xff0c;我将实现Repositories的命令端。存储库属于Clean架构的接口适配器在这一步中&#xff0c;我将开始实现基础设施的命令端&#x…

小松

之前做过一次小小的介绍(没看过的请参看此文&#xff1a;闲话小松)&#xff0c;相信不少老朋友应该都知道我是谁了。还不认识我的朋友可以称呼我小松(这名号有年头了&#xff0c;听习惯了^_^)&#xff0c;当然你喜欢怎么喊都成&#xff1a;)偶是个是理想主义的倡导者&#xff0…

vlan后 出现 outlook 正在试图从服务器检索数据

vlan后 出现 outlook 正在试图从服务器检索数据 cisco vlan outlook 正图试从Microsoft Exchange Server 检索数据。cisco 3750 vlan outlook is retrieving data from Microsoft Exchange Server mail.abc.com 最近对公司的网络按需要划分了基出802.1q的VLAN&#xff0c;…

二面京东,面试官直接问我JVM,我心里一阵暗爽~

二面京东&#xff0c;面试官直接问我JVM&#xff0c;我心里一阵暗爽~简直了&#xff0c;hhhh明人不说暗话&#xff0c;直接进入主题&#xff01;&#xff01;&#xff01;一、什么是JVM二、JAVA代码编译和执行过程类加载机制类执行机制三、JVM内存管理和垃圾回收垃圾回收按照基…

最后的代课老师———漆红玉[转]

1月31日凌晨6点我们从渭源县城出发&#xff0c;天还未亮。1月的甘肃干冷干冷的&#xff0c;我们是在半路上接的漆老师&#xff0c;刚开始我以为是寇筱茜老师的一个熟人&#xff0c;路上寇老师才和我说漆老师也是代课老师。寇筱茜老师有一句名言&#xff1a;每一个代课老师都有一…

ae渲染出现错误是什么问题_[Switch]解决OPENWRT路由,使用UU加速器等出现相同IP,DNS解析错误问题...

本文在之上添加DNS解析错误的解决方案解决 NS openwrt路由器 开腾讯 UU之类的加速器无法上网的问题​tieba.baidu.com将子网掩码转换为二进制&#xff0c;即为11111111.11111111.0.0&#xff0c;1有16位&#xff0c;令x16&#xff1b;IP地址若为aaa.bbb.ccc.ddd&#xff0c;设置…

程序员从入门到升级,或许可以看一看这几个公众号

全世界只有3.14 % 的人关注了青少年数学之旅快节奏的现代社会中&#xff0c;每个人都疲于奔命&#xff0c;“丧、累、太难了”已成为成年人的生活主题。难得的闲暇时间&#xff0c;公众号是不可或缺的消遣方式。但我们被海量数据淹没&#xff0c;越来越多的公众号只是消耗情绪&…

C# 向Main函数传递参数(程序启动时传递参数)

代码 staticvoidMain(string[] args) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false);if(args.Length!0) { Application.Run(newF_WebIE(args[0])); }else{ Application.Run(newF_WebIE(null)); } }注意&#xff1a;不能把 参数 s…

12c oracle 修改内存_关于Oracle数据库12c 新特性总结

概述今天主要简单介绍一下Oracle12c的一些新特性&#xff0c;仅供参考。参考&#xff1a;http://docs.oracle.com/database/121/NEWFT/chapter12102.htm#NEWFT003https://docs.oracle.com/database/121/NEWFT/chapter12101.htm#NEWFT3481、不可见字段(Invisible columns)在 12c…

华为面试官问我:你真的明白Java垃圾回收器吗?我生气了!!(︶︿︶)

[第一阶段]&#xff1a;串行垃圾回收器&#xff1a;jdk1.3.1之前Java虚拟机仅仅只支持Serial收集器 [第二阶段]&#xff1a;并行垃圾回收器&#xff1a;随着多核的出现&#xff0c;Java引入了并行垃圾回收器&#xff0c;充分利用多核性能提升垃圾回收效率 [第三阶段]&#xff1…

看OpenCV如何在python中实现图像检测!

全世界只有3.14 % 的人关注了爆炸吧知识在我们生活中&#xff0c;常见的图像处理软件有Adobe Photoshop、Adobe Illustrator等。然而&#xff0c;并非只有软件才能实现图像处理&#xff0c;通过编程手段也是能实现的&#xff01;今天&#xff0c;小天将要带着大家走进计算机视觉…

dotnet 基于 dotnet format 的 GitHub Action 自动代码格式化机器人

是不是大家也会觉得代码审查里面审查代码格式化问题是无意义的&#xff0c;但是不审查又觉得过不去&#xff1f;是否有个专门的工具人&#xff0c;用来协助修复代码格式化的问题&#xff1f;本文来安利大家一个特别好用的方法&#xff0c;使用 dotnet 完全开源的专业格式化工具…