Python重命名核酸截图文件

前言

        随着核酸常态化的进行,核酸检测已经越来越成为每个人工作生活中的一部分。在很多单位里,出于统计需求,往往需要收集个人核酸截图。收集截图后一般要求对图片文件名按照某种特定格式进行重命名(如工号+姓名),以便查看。然而这往往是一个重复且枯燥的工作,包括了以下几步:将核酸截图(从微信)保存到文件夹--查看截图获取姓名等信息--为该图片重新命名。如果图片的数量不太多,手动为每张图片重新命名固然可行。但倘若图片的数量较多,为每张图片一个个命名将会耗费大量的时间。幸运的是,我们可以利用Python帮助实现从图片信息识别到文件重命名这一自动化过程。

目录

一、OpenCV 介绍

二、EasyOCR 介绍

三、代码

1.引入库

2.获取截图路径

3.读取图片

4.识别图片信息

5.执行代码

总结

一、OpenCV 介绍

        在介绍代码之前,有必要对代码中的几个核心库的使用方法进行简单的描述。首先是OpenCV。OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。该库拥有超过 2500 种优化算法,其中包括一整套经典和最先进的计算机视觉和机器学习算法。这些算法可用于检测和识别人脸、识别对象、对视频中的人类行为进行分类、跟踪摄像机运动、跟踪移动对象等等,可以说是涵盖了机器视觉的大部分应用场景。在本文中,该库用来读取核酸截图并且对图片进行裁剪、缩放以及二值化处理。

##安装OpenCV库
pip install opencv-python

二、EasyOCR 介绍

        EasyOCR 是一个允许将图像转换为文本的python包。这是迄今为止实现 OCR 最简单的方法,可以访问 70 多种语言,包括英语、中文、日语、韩语、印地语,还有更多正在添加中。EasyOCR 由 Jaided AI 公司创建。在本文中,该库用来识别核酸截图上的姓名等信息。

##安装EasyOCR库
pip install easyocr

三、代码

由于各地核酸码并不统一,因此图片上的信息读取也会有所差别。下面以广东地区粤康码为列进行演示,读者需要根据自身需求对代码进行调整。

可以看到核酸截图上的姓名第二个字用*替代了,因此在实际命名中,我们需要首先准备一份完整的名字信息表,与截图上的名字进行比较,如果配对,则用该名字对文件进行重命名。

1.引入库

import pandas as pd
import os
import cv2
import easyocr
import re

2.获取截图路径

def GetImage(path):    #path为截图所在的文件夹路径
    os.chdir(path)    #将python工作路径切换到截图所在的文件夹
    return os.listdir()    #返回文件夹内所有截图的原名称

 3.读取图片

def ReadImage(img_path):
    img=cv2.imread(img_path,0)    #将图片导入cv2中进行处理
    ret,thresh=cv2.threshold(img,160,255,cv2.THRESH_BINARY)    #对图片进行二值化处理
    thresh=thresh[150:600,:]    #对图片进行裁剪
    thresh=cv2.resize(thresh,None,fx=0.5,fy=0.5)    对图片进行缩放以减小图片大小
    return thresh    #返回图片

 4.识别图片信息

def ImgRecognition(img,reader): #reader为easyocr.Reader引用
    result=reader.readtext(img,detail=0)    #读取图片上的文字
    return result    #返回读取结果

5.执行代码

if __name__=="__main__":
    data=pd.read_excel("name.xlsx")        #读取完整姓名信息
    data=data["姓名"].tolist()
    reader=easyocr.Reader(['ch_sim'])    #初始化easyocr
    jpg_list=GetImage(".\Path")    #jpt_list为所有图片名称的列表
    for img in jpg_list:    #遍历所有图片
        IMG=ReadImage(img)
        result="".join(ImgRecognition(IMG,reader))
        for name in data:
            name_sub=re.sub(r"(\w)\w",r"\1*",name)    #现用*替代name中的第二个字
            if re.search(name_sub.replace("*","\*"),result)!=None:  #比较name和读取的result
                try:
                    os.rename(img,name+".jpg")    #重命名文件
                    print(img,"-->",name)
                    break
                except:
                    pass

总结

用python对核酸截图进行重命名的原理简单,但由于easyocr的文字识别率难以达到100%准确,因此会有一些图片命名不成功,对于这些图片,可以通过手动命名。同时为了加快easyocr的识别速度,需要开启GPU。

猜你喜欢

转载自blog.csdn.net/m0_56572447/article/details/125223565