这篇文章的代码主要是将核酸检测的手机截图(目前实现的是甘肃省)转换为表格形式,便于相关工作人员进行统计分析;

  • 由于gitee暂时不能克隆,可以按照下面结构新建项目并填入相应的文件。
  • 如果你没有使用过paddleocr请一定阅读readme.md文件。
  • 环境:windows+ python + PaddleOCR

项目结构

image.png

文件解释

解释上图中各个文件及文件夹作用:

  • img 存放待检测的图片;
  • main.py 程序入口;
  • result.csv 检测结果;
  • readme.md 请务必阅读该文件。

结果展示

主要取图片中的日期、时间、检测机构、结果、被检人姓名。
image.png

. main.py文件代码

from pathlib import Path

import cv2
import numpy as np
from paddleocr import PaddleOCR

ocr = PaddleOCR(use_angle_cls=True, lang="ch")  # need to run only once to download and load model into memory


def gen_text(img):
    START = 0
    result = ocr.ocr(img, cls=True)
    for line in result:  # 选择起始检测位置(假设 仅支持查询以下的才是有效内容)
        if line[1][0].startswith("仅支持查询"):
            coordinate = np.array(line[0])
            START = int(max(coordinate[:, 1])) + 1
            break

    if START > 1:  # 如果是核酸检测截图,则运行图片转文字
        date, org, det_res, tested_person = 0, 0, 0, 0
        image = cv2.imread(img)[START:, :]
        result = ocr.ocr(image, cls=True)
        for line in result:
            if line[1][0].startswith("检测时间"):
                if date != 0:
                    with open("result.csv", "a+", encoding="utf8") as f:
                        f.write(str(date) + "," + str(org) + "," + str(det_res) + "," + str(tested_person) + "\n")
                    print(date, org, det_res, tested_person)
                date, org, det_res, tested_person = 0, 0, 0, 0

            # 去除字段中多余文字
            text = line[1][0].replace("检测时间:", "").replace("检测机构:", "").replace("被检人:", "")

            if text.startswith("2022-"):  # 日期及时间
                text = text[:10] + "," + text[10:]
                date = text
            else:
                if len(text) > 6:  # 检测机构
                    org = text
                else:
                    if text == "阴性" or text == "阳性":  # 检测结果
                        det_res = text
                    else:
                        tested_person = text  # 被检人


if __name__ == '__main__':

    p = Path("./img")
    for file in p.glob("**/*.*"):
        if file.is_file():  # 是否为文件
            img_path = str(file.absolute())  # 绝对路径的文件名
            if img_path.lower().endswith("jpg") or img_path.lower().endswith("png") or img_path.lower().endswith(
                    "jpeg"):  # 目前仅支持jpg png jpeg格式图片
                gen_text(img_path)

README.md内容

covid_19_img_rec

介绍

  • 该脚本用于识别核酸检测结果的手机截图,并将其转换为csv文件(可以用excel打开)。
  • 目前支持甘肃的,如需拓展其他省请联系我;
  • 由于该仓库刚新建,gitee审核三天后其他人才可以看到,因此将其暂放在阿里云盘。
    太坑了,刚试了阿里云也分享不了,所以您就按照项目结构新建目录及相应文件吧!!!
  • 仓库地址

软件架构

  • img待检测图片所在文件夹,将需要检测的图片全部放入该文件夹
  • main.py 程序入口
  • result.csv 结果文件

安装教程

  1. 安装AnacondaPycharm
  2. 安装PaddleOCR
    1. 新建虚拟环境conda create --name paddle_env python=3.8 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
    2. 激活虚拟环境conda activate paddle_env
    3. 安装paddlepaddlepip install paddlepaddle -i https://mirror.baidu.com/pypi/simple
    4. 安装paddleocr pip install paddleocr -i https://mirror.baidu.com/pypi/simple
      对于Windows环境用户:直接通过pip安装的shapely库可能出现[winRrror 126]
      找不到指定模块的问题。建议从这里下载shapely安装包完成安装。
    5. 如果pip install 某些包失败,尝试一下conda install package_name;
  3. 安装其他依赖包

使用说明

  1. 将待检测图片放入img文件夹;
  2. 运行main.py文件即可获得结果文件result.csv;
  3. 第一次运行时需要下载,推理模型,因此启动时间会长一些;
  4. 后期正常运行,一张图片耗时大约10sec左右;
  5. 建议一次放入图片不超过200张;
  6. 每次运行完毕,备份result.csv文件至其他位置然后删除;

参与贡献

  1. Fork 本仓库
  2. 新建 Feat_xxx 分支
  3. 提交代码
  4. 新建 Pull Request
  5. 微信: i_biology,联系请备注covid。

特技

  1. 使用 Readme_XXX.md 来支持不同的语言,例如 Readme_en.md, Readme_zh.md
  2. Gitee 官方博客 blog.gitee.com
  3. 你可以 https://gitee.com/explore 这个地址来了解 Gitee 上的优秀开源项目
  4. GVP 全称是 Gitee 最有价值开源项目,是综合评定出的优秀开源项目
  5. Gitee 官方提供的使用手册 https://gitee.com/help
  6. Gitee 封面人物是一档用来展示 Gitee 会员风采的栏目 https://gitee.com/gitee-stars/