前言

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

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

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

原理

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

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

实现

创建一个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“,记住我!

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

  1. StegaStamp:加州大学伯克利分校开源神奇的照片隐写术,打印的照片能当二维码用...

    点击我爱计算机视觉标星或置顶,更快获取CVML新技术 要说目前最火的用到手机摄像头的应用是什么,毫无疑问非二维码识别莫属了.微信带起来的二维码热,几乎已经改变了整个世界的支付方式.社交方式. 但二维码 ...

  2. 解决zing生成二维码时二维码太小、白框太大的问题

    项目里实现生成二维码这个功能时,发现二维码的边框太大了,导致二维码内容区域太小.百度了一下,发现有人说设置EncodeHintType.MARGIN属性即可,这个属性值为1-4,实际测试发现并没有什么 ...

  3. 利用xposed自动获得支付宝个人收款二维码链接和收款记录

    一.说明 现在的App一般都会带有支付功能,而现在比较流行的支付一般有支付宝.微信.银行卡等,一般情况下,应用开发者会直接对接支付宝.微信或者第三方支付公司的Api,以完成支付,但是都需要收取不小的费 ...

  4. Python+Selenium自动化测试——126邮箱自动登录脚本(登录首页是二维码,切入账号密码输入框)

    Python+Selenium自动化测试--126邮箱自动登录脚本 版权声明:本文为博主原创文章,未经允许不得转载.https://blog.csdn.net/qiao_wan/article/det ...

  5. 工作中遇到的问题之android客户端自动生成带logo的二维码

    android中生成动态二维码很简单,网上随便搜一搜便能找到,本以为任务很快就把任务解决了,可是客户说二维码中一定要添加他们公司的logo这可把哥们难倒了,开始再次投入度娘的怀抱,查看各位大神的代码, ...

  6. C# 生成二维码, winform生成二维码,二维码编号自动增加

    首先在设计器画出来对应的UI展示样式: 效果: 设计代码: namespace LongDeTools {partial class FrmLedPreview{/// <summary> ...

  7. 集成zxing扫码解决二维码自动放大

    只需要在跳转的时候添加intent.putExtra("autoEnlarged", true);即可: // 扫码 Intent intent = new Intent(); i ...

  8. 二维码相关---java生成二维码名片,并且自动保存到手机通讯录中...

    二维码相关---java生成二维码名片,并且自动保存到手机通讯录中... 技术qq交流群:JavaDream:251572072 1.首先介绍一个api.   Zxing是Google提供的关于条码 ...

  9. 二维码太丑?用风格迁移生成个性二维码了解一下

    文章选自arXiv,作者:Mingliang Xu等,机器之心编译 手机二维码太普通,换来换去还是不好看.何不自定义一个自己喜欢的呢?近日,郑州大学.浙江大学.微软亚洲研究院.北京航空航天大学的研究者 ...

  10. jenkins 下自动构建 生成二维码(不使用蒲公英 fir)

    最近蒲公英每个版本只能下载10次了. 我感觉未来免费的东西会越来越不好,所以准备利用Tengine或者tomcat搭建自己 的下载平台. 先说下如何实现吧: 首先jenkins自动打包apk后, 把a ...

最新文章

  1. during怎么念_during是什么意思_during的翻译_音标_读音_用法_例句_爱词霸在线词典...
  2. Log4j详细介绍(七)----日志格式化器Layout
  3. 多路查找树之2-3树(理论)
  4. php实现for循环输出星阵,星阵让先再胜职业棋手三阵 18日晚将对阵世界冠军
  5. hadoop误删除文件
  6. C# 数组比较--取得两个集合的交集,差集,并集的方法
  7. 解决UBUNTU NVIDIA驱动安装后循环登录问题:关闭UEFI Secure Boot选项
  8. 传输层协议 ——— UDP协议
  9. Flink中的时间语义 和WaterMark
  10. vue前端使用xlsx和 xlsx-style 导出excel,并修改样式
  11. PostGreSQL安装压缩包格式
  12. 谷歌雅虎新闻大战-两种路线的PK
  13. python怎么创建窗口_python如何设计窗口
  14. JAVA毕设项目社区电商平台系统(java+VUE+Mybatis+Maven+Mysql)
  15. iOS应用的内测签名、分发托管平台:蒲公英内测分发平台简介
  16. 【沐风老师】3DMAX一键生成圣诞树建模插件使用教程
  17. FZU - 2062 - Suneast Yayamao
  18. 热插拔机制之udev和mdev
  19. 抢跑AT拿到消费金融牌照后,度小满能否走过“J型曲线”拐点?
  20. 网络安全:常见的网络协议

热门文章

  1. 驰骋表单设计器 设计表单案例演示
  2. phpexcel中文教程-设置表格字体颜色背景样式、数据格式、对齐方式、添加图片、批注、文字块、合并拆分单元格、单元格密码保护
  3. iOS开发 CGAffineTransform 让图片旋转, 旋转后获得图片旋转的角度
  4. 我的手机 不支持箭头函数
  5. js最全的十种跨域解决方案
  6. HDU 3487 Play with Chain | Splay
  7. Hibernate深入之get()与load()懒加载
  8. andriod之应用内置浏览器 webview
  9. Linux内核升级,从2.6.18升级到3.2.14
  10. [导入]体验Asp.Net Mvc Preview5(3)-探索ModelBinder的工作原理