利用OpenCV实现软件自动识别核酸检测时间

2023-11-19


问题介绍

在程序工程训练课程中,出现了一道题:

手机截屏核酸检测报告,利用OpenCV实现软件自动识别核酸检测时间是否在72小时之内。


一、前期准备工作

实现本任务需要的软件:

- Python3.x
- OpenCV-Python 4.x
- Tesseract-OCR 5.x
- Win10 64 或 Win11 64

1.Python的安装

安装Python SDK时选择默认安装,同时勾选将其添加到环境变量中。
闲麻烦的可以直接从Microsoft Store下载
或者安装PyCharm
PyCharm下载地址

2.安装OpenCV-Python开发包

调用cmd,或在终端中使用pip指令安装:

pip install opencv-python

如果下载网速较慢,可以使用清华镜像源地址,需要在命令结尾加上-i https://pypi.tuna.tsinghua.edu.cn/simple/
完整指令:

pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple/

3.安装Tesseract-OCR

官方网站
官方文档
语言包地址
下载地址
首先安装Tesseract-OCR Python SDK支持,调用cmd,或在终端中使用pip指令安装:

pip install pytesseract -i https://pypi.tuna.tsinghua.edu.cn/simple/

然后点击下载地址链接安装Tesseract-OCR最新版本,然后在环境变量中添加:

C:\Program Files\Tesseract-OCR

安装与配置好OpenCV-Python与Tesseract-OCR之后,需要进一步通过代码验证正确性。打开Pycharm IDE,新建一个python项目与python文件,输入以下代码:

import pytesseract as tess
print(tess.get_tesseract_version())
print(tess.get_languages())

或者在终端中输入:

tesseract -v

如果安装成功,会显示对应版本号和适用语言。
最后点击语言包地址链接安装chi_sim中文简体语言包,下载后将该包直接放在程序安装目录的tessdata文件夹里面即可。
命令行使用 tesseract --list-langs命令可查看当前软件支持的语言:

tesseract --list-langs

二、编写程序

1.引入库

本程序需要的库函数,代码如下(示例):

import cv2 as cv
import pytesseract as tess
from datetime import datetime

2.使用Tesseract做文字识别(OCR)

OCR(optical character recognition,光学字符识别)是指直接将包含文本的图像识别为计算机文字(计算机黑白点阵)的技术。图像中的文本一般为印刷体文本。
Tesseract是github上的OCR开源库,今天我们将使用Tesseract来进行文字识别。
比如我们需要识别核酸检测报告上的文字:
在这里插入图片描述
输入以下代码进行测试:

import cv2 as cv
import pytesseract as tess
image = cv.imread("hesuan.png")
image_rgb = cv.cvtColor(image, cv.COLOR_BGR2RGB)
text = tess.image_to_string(image_rgb, lang="eng")
content = text.replace("\f", "").split("\n")
txt = []
for c in content:
    if len(c) > 0:
        print(c)
h, w, c = image.shape
boxes = tess.image_to_boxes(image)
for b in boxes.splitlines():
    b = b.split(' ')
    image = cv.rectangle(image, (int(b[1]), h - int(b[2])), (int(b[3]), h - int(b[4])), (0, 255, 0), 2)
cv.imshow('text detect', image)
cv.waitKey(0)
cv.destroyAllWindows()

运行结果:
在这里插入图片描述
可以看到图片中的信息被很好地识别了出来。
但是在输出中出现了乱码:
在这里插入图片描述
是因为我们选用的是英文标准库,如果需要识别中文我们需要将代码中lang的参数改为中文简体:

text = tess.image_to_string(image_rgb, lang="chi_sim")

在这里插入图片描述
中文和对应的日期成功识别。

3.筛选日期

利用列表和字符串遍历可以快速筛选出日期信息。

for c in content:
    if len(c) > 0:
        txt.append(c)
for i in txt:
    if i[0]=='检' and i[2]=='测' and i[4]=='时' and i[6]=='间':
        ret=i
        break
    else:
        ret=False
print(ret)
time = ret[10:]
print(time)

可以得到对应结果
在这里插入图片描述

4.日期运算

Python 中的日期不是其自身的数据类型,但是我们可以导入名为 datetime 的模块,把日期视作日期对象进行处理。
datetime是模块,datetime模块还包含一个datetime类,通过from datetime import datetime导入的才是datetime这个类。

from datetime import datetime

用户输入的日期和时间是字符串,要处理日期和时间,首先必须把str转换为datetime。转换方法是通过datetime.strptime()实现,需要一个日期和时间的格式化字符串:

date = datetime.strptime(time, '%Y-%m-%d %H:%M:%S')

使用datetime.now()可以获取系统日期:

print(datetime.now())

格式化后的日期可以作减法,并通过delta.days()函数显示对应天数。

delta = datetime.now() - date
print(delta.days)
if(delta.days<=3):
    print("核酸报告在三天之内")
else:
    print("核酸报告不在三天之内")

5.运行程序

运行程序,得到相应结果。
在这里插入图片描述

总结

本文介绍了利用OCR方案,基于OpenCV实现软件自动识别核酸检测时间是否在72小时之内。程序能够准确运行的前提是截图清晰可见,如果用拍摄的图像作文字识别,需要利用OpenCV进行更多的图像处理,如二值化、投影变换等。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

利用OpenCV实现软件自动识别核酸检测时间 的相关文章

随机推荐

  • Html如何引用公用的JS和CSS

    1 问题原因 项目开发几乎每个Html都会引用JS和CSS 那么就会有一些常用JS或者CSS 我们不希望每个Html文件都引用一堆文件 而是只引用公用的JS和CSS就可以了 2 解决办法 2 1定义commonJs js添加公用的JS文件引
  • LightingandRenderingScenes_译

    LightingandRenderingScenes 译 在这个教程中 你会学到怎样快速设置场景实现高视觉保真渲染和截图 然而这些技术的一部分是为实时体验 这些设置的一部分为实时体验可能太重表现了 你会学到怎样 1 设置和调整全球后处理体积
  • 10款Visual Studio实用插件

    目录 前言 Visual Studio插件搜索 Visual Studio插件市场 ReSharper 付费 GitHub Copilot 付费 CodeMaid 免费 CSharpier 免费 Visual Studio Theme Pa
  • 绪论、Ambari二次开发思路

    1 总体思路 1 对ambari admin ambari web模块进行单独编译 二次开发主要针对这两个模块 2 利用Brunch watch功能 对文件夹源码进行实时监控编译 提高开发效率 2 开发方向 1 参照HDP 基于Apache
  • Git安装

    1 Git官网 地址 https git scm com 下载自己需要的安装包 2 安装过程 选择安装位置 安装完成后右键 git bash here 打开
  • Unity3D实战【六】SetCursor 设置鼠标指针

    一 修改人物移动的方法 上一节使用的是将人物拖拽的方法实现人物移动 这一节我们进行修改一下 首先打开mousemanger脚本代码 单例模式 首先创建一个自身的static变量 通常取名Instance public static Mous
  • java基础知识精讲视频教程百度云盘分享!

    java基础知识精讲视频教程百度云盘分享 课程简介 本课程是由尚观科技java资深讲师讲述的java基础知识视频教程 适合零基础同学学习的Java基础视频教程 课程目录 1 java介绍 2 进制 3 标识符 4 变量二 5 类型转换 6
  • java并查集 - Kaiqisan

    大家好 都吃晚饭了吗 我是Kaiqisan 是一个已经走出社恐的一般生徒 最近被力扣的每日一题给整破防了 天天都是并查集 我麻了 所以最近都在学习并查集 现在终于搞懂了 于是有了这篇博客 文章目录 什么是并查集 代码实现 优化 代码 总结
  • 相机标定-kinectv1外参数标定(没有高度,pnp)

    1 相机镜头表面距离桌面1m 输入的图像没有内参文件 内参和畸变采用freenect包默认参数 棋盘格19 14 每一个4厘米 实际坐标为 左上角 0 0 点 水平向右为x正方向 垂直向下为y轴负方向 2 四个角点分别为 pixel poi
  • centOS 安装 elasticsearch 7.0.0和kibana7.0.0_单机版

    cd opt wget wget https artifacts elastic co downloads elasticsearch elasticsearch 7 0 0 linux x86 64 tar gz tar xzvf ela
  • Matlab 安装和使用xgboost的详细步骤(源码+安装包)

    几个重要的ref 看完后你可以解决你的问题 知乎官网指导 官网讨论 安装MinGW w64 安装需要的模块和源码可以从下面地址下载 链接 https pan baidu com s 1oqCMI7VmVxDzf9Vbaf4VJw pwd 1
  • Arduino与HX711称重传感器握手

    Arduino教程传送门 Arduino与HX711称重传感器握手 1 0 简介 2 0 实验材料 3 0 实验步骤 3 1 根据原理图搭建电路 3 2 新建sketch 拷贝如下代码并进行保存编译上传 3 3 实验现象 4 0 总结 1
  • python基础(更新中)

    文章目录 print函数 数据类型 基本类型 数据拼接 数据转换 条件判断 标识符 关键字 注释 使用帮助 运算符 转义字符 三重引号字符串 字符串格式化 符号格式化字符串 字符串格式的书写 常用格式字符的含义 format 方法格式化字符
  • python loop详解_Python进阶学习笔记(3)-Loop

    while 语法结构 用 隔开 while condition expression x 1 while x lt 4 print x x x 1 Initialize offset offset 8 Code the while loop
  • 硬件基础之电容篇

    一 技术理论 1 电容定义 两个相互靠近的金属板中间夹一层绝缘介质组成的器件 当两端存在电势差时 由于介质阻碍了电荷移动而积累在金属板上 衡量金属板上储存电荷的能力 称为电容 相应的器件称为电容器 电容的符号为C 单位为法拉 F 电容越大
  • 宝塔面板设置域名后无法访问

    设置域名前 需要先备案通过 并解析到宝塔面板的服务器上面才能访问 然后没有做上面相关的时候 设置了域名导致不能访问 解决方式如下 删除域名配置 删除该配置即可 rm f www server panel data domain conf 然
  • HADOOP集群搭建

    1首先新建文件夹路径 root hdp01 home mkdir p home hadoop apps 2修改主机名 vi etc sysconfig network 3配置内网域名映射 vi etc hosts 4配置ssh免密登陆 1在
  • 伴随矩阵及其运算

    关键公式 A B A B
  • mysql jdbc url连接超时_JDBC链接出现超时问题

    今日线上突发一个问题 应用假死 不接受http请求 排查日志 发现有大量的 The last packet successfully received from 异常 首先排查数据库和链接池配置 destroy method close g
  • 利用OpenCV实现软件自动识别核酸检测时间

    文章目录 问题介绍 一 前期准备工作 1 Python的安装 2 安装OpenCV Python开发包 3 安装Tesseract OCR 二 编写程序 1 引入库 2 使用Tesseract做文字识别 OCR 3 筛选日期 4 日期运算