前言

上次太神奇了!使用C#实现自动核验健康码:(1)二维码识别,我们已经实现了识别健康码的颜色,但是健康码的内容不包含时间属性。那么使用图片就可以通过检查,肯定是不合适的。

因此,我们还需要读出健康码上方的“更新于: xxxx”,获得最后的健康码更新时间,保证识别的是真实的健康码。

实现

1. OCR服务

由于通过摄像头获得的是图片,因此我们需要使用OCR文字识别功能,将图片上的文字读取出来。

可以有多种方式实现OCR功能,在这里,我们使用的是百度提供的“PaddleOCR 超轻量级中文OCR模型”在线体验服务(https://www.paddlepaddle.org.cn/hub/scene/ocr)。

它的优点是不用注册即可使用,而且速度和识别率也很高。

可以看到,服务返回的是一个JSON字符串,对应的C#数据结构如下:

public class OcrResult
{ public IReadOnlyList<ResultData> Result { get; set; }public class ResultData{public IReadOnlyList<TextData> Data { get; set; }public class TextData{public string Text { get; set; }}}
}

调用OCR服务代码如下:

var content = JsonConvert.SerializeObject(new { image = ToBase64(img) });
var json = Post("https://www.paddlepaddle.org.cn/paddlehub-api/image_classification/chinese_ocr_db_crnn_mobile", content);
var ocrResult = JsonConvert.DeserializeObject<OcrResult>(json);

2. 解析更新时间

我们需要读出Result数组的第一个元素,然后遍历Data数组,判断Text是不是以“更新于”开头,如果是,后面紧跟的就是更新时间。

由于图片角度的问题,一行文字可能会被截成2个TextData,因此需要做下判断。

具体实现代码如下:

string updateTimeText =null;
var dataResult = ocrResult.Result.First();
for (int i = 0; i < dataResult.Data.Count; i++)
{if (dataResult.Data[i].Text.StartsWith("更新于:") && dataResult.Data[i].Text.Length>4){updateTimeText = dataResult.Data[i].Text.Substring(4);break;}else if (dataResult.Data[i].Text.Equals("更新于:") || dataResult.Data[i].Text.Equals("更新于")){if (i < dataResult.Data.Count - 1){updateTimeText = dataResult.Data[i+1].Text;break;}}
}if (string.IsNullOrEmpty(updateTimeText))
{ return null;
}DateTime updateTime;
if (!DateTime.TryParseExact(updateTimeText, "yyyy-MM-ddHHmm", null,  DateTimeStyles.None, out updateTime))
{return null;
}return updateTime;

3. 判断更新时间

最后,只显示更新时间在5分钟之内的健康码,表示是最新的健康码:

var updateTime = GetUpdateTime(img);
if (!updateTime.HasValue|| Math.Abs((DateTime.Now - updateTime.Value).TotalMinutes) > 5)
{return;
}label2.Text = updateTime.Value.ToString("yyyy-MM-dd HH:mm");ShowColor(color);

结论

把功能和界面完善一下,完全可以做成一个产品,代替人工核验健康码。

科技改变生活!

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

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

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

    前言 因为疫情的原因,无论是进入商场还是医院.车站,都需要出示健康码. 现在基本都是采取人工方式核验健康码,看到绿码就通过,否则就禁止进入. 但是,单靠人工核验健康码容易造成人员拥堵,增加病毒交叉感染 ...

  2. 疫情加速人脸识别落地:多地试点AI门禁,居民刷脸核验健康码

    3月18日,国务院联防联控机制新闻发布会在北京举行.商务部消费促进司负责人王斌在会上提到,疫情之下,人工智能产业出现逆势发展. 从消毒机器人到CT影像诊断系统,疫情让一系列人工智能应用加速落地.南都记 ...

  3. 音诺恒科技多核验合一“数字电子哨兵”对接全国健康码精准核验

    电子哨兵是一款近些年非常适用的一种通行电子产品,它集合了测温.健康码.核酸信息.疫苗信息等为一体功能,助力社区通行无接触管理.只需要一秒就可以识别出通行人员的抗疫信息. 音诺恒科技推出的电子哨兵具备可 ...

  4. 7 11 藏尾诗c语言,为你写诗:11种杂体诗,汉语太神奇

    原标题:为你写诗:11种杂体诗,汉语太神奇 胸藏文墨怀如谷,腹有诗书气自华 杂体诗通指古典诗歌格律体以外的各种各样的诗体. 这些诗多把字形.句法.声律和押韵加以特殊变化,成为独出心裁的奇异之作,一般带 ...

  5. 【PTA】【Python】【拼题A 2022 跨年挑战赛】太神奇了

    "告诉大家一个神奇的消息,太神奇了:明年全世界所有的人都同岁,全部都等于2022.明年的日子很特别,大概每1000年才会有一次.明年你的周岁年龄+你的出生年,每个人都是2022年.例如:你明 ...

  6. excel计算式自动计算_钢筋计算太麻烦?全套钢筋翻样Excel自动计算表,限时分享...

    钢筋计算太麻烦?全套钢筋翻样Excel自动计算表,限时分享 对于工程人来说,钢筋计算可是个重难点.不知道大伙怎么样,反正老刘一直搞不明白,计算多样又复杂,常常弄得云里雾里. 老刘准备了一套钢筋翻样自动 ...

  7. html 加减法,加减法速算技巧太神奇了!

    据说80后已被00后气死!不写作业母慈子孝,一写作业鸡飞狗跳!有一个视频是这样的:妈妈教孩子背乘法口诀,孩子边哭边背"五七三十五.五七三十五.五七三十五",妈妈让孩子停下来问&qu ...

  8. excel怎么设置自动计算_钢筋计算太麻烦?全套钢筋翻样Excel自动计算表,限时分享...

    钢筋计算太麻烦?全套钢筋翻样Excel自动计算表,限时分享 对于工程人来说,钢筋计算可是个重难点.不知道大伙怎么样,反正老刘一直搞不明白,计算多样又复杂,常常弄得云里雾里. 老刘准备了一套钢筋翻样自动 ...

  9. 书真是太神奇了的超级玛丽

    今天的书真是太神奇了的 超级玛丽下载,决心戒毒,我知道爸爸在帮助我,我们娘俩相依为命,后来,这里的超级玛丽桃子比花果山的好吃的多了,我只在电视游戏上玩过打保龄球,知道了,我还有妈妈. 拍拍我的肩,动物 ...

最新文章

  1. linux程序计数器,如何在C中打印程序计数器的确切值
  2. manjaro升级的一些问题
  3. HDU2925(约瑟夫环问题)
  4. 分享一篇关于使用阿里云消息队列中遇到的坑
  5. cmf php,cmf公共函数解析-common.php
  6. Matlab二维绘图
  7. 【OS学习笔记】二十二 保护模式六:保户模式下操作系统内核如何加载用户程序并运行 对应的汇编代码之用户程序
  8. SPOJ LCS 后缀自动机
  9. OpenCV-获取图像中圆线上的数据
  10. 20171018校内训练
  11. (转) 三袋米的故事
  12. 微星X79主板修改BIOS支持NVMe
  13. Linux修改MySQL数据库密码
  14. 知识表示-马尔科夫链(MC)
  15. 1024,来一套程序员续命操!
  16. Excel 常用快捷键
  17. 温暖(warmth)
  18. 深圳学校积分计算机,深圳市龙岗区小学积分入学排行榜
  19. 公司基础网络架构及实现
  20. 记一次macbook pro A1708更换电池的经历

热门文章

  1. [转]android 获取手机GSM/CDMA信号信息
  2. 数据源的配置和使用 视频下载
  3. python c 选择_C和Python,小白应该选择学习哪门语言?
  4. IE6下margin-left双倍bug问题
  5. 二叉查找树转换成有序的双向链表
  6. 学习STL map, STL set之数据结构基础
  7. 如何在Windows 8中将旧控制面板添加到Metro Start屏幕
  8. 原生js打印指定节点元素
  9. Vim 4 常用插件
  10. [SDOI2009]Bill的挑战——全网唯一 一篇容斥题解