序文
核酸の標準化により、核酸検査はますますすべての人の仕事や生活の一部になってきました。多くのユニットでは、統計的な目的で、個人の核酸スクリーンショットを収集する必要があることがよくあります。スクリーンショットを収集した後、通常は、見やすいように特定の形式 (ジョブ番号 + 名前など) に従って画像ファイル名を変更する必要があります。ただし、これは多くの場合、次の手順を含む反復的で退屈なタスクです: 核酸のスクリーンショット (WeChat から) をフォルダーに保存する - スクリーンショットを表示して名前やその他の情報を取得する - 画像の名前を変更する。画像の数が多すぎない場合は、各画像の名前を手動で変更できます。しかし、写真の数が多い場合、1枚1枚に名前を付けるのは非常に時間がかかります。幸いなことに、Python を使用すると、画像情報の認識からファイル名の変更までのプロセスを自動化できます。
目次
1. OpenCV の概要
コードを紹介する前に、コード内でのいくつかのコア ライブラリの使用法について簡単に説明する必要があります。まずはOpenCVです。OpenCV (オープンソース コンピューター ビジョン ライブラリ) は、オープンソースのコンピューター ビジョンおよび機械学習ソフトウェア ライブラリです。このライブラリには、古典的および最先端のコンピューター ビジョンおよび機械学習アルゴリズムの完全なセットを含む、2,500 を超える最適化アルゴリズムが含まれています。これらのアルゴリズムは、顔の検出と認識、オブジェクトの識別、ビデオ内の人間の行動の分類、カメラの動きの追跡、移動するオブジェクトの追跡などに使用でき、マシン ビジョンのほとんどのアプリケーション シナリオをカバーすると言えます。この記事では、ライブラリを使用して核酸のスクリーンショットを読み取り、画像をトリミング、拡大縮小、および 2 値化します。
##安装OpenCV库
pip install opencv-python
2. EasyOCR の概要
EasyOCR は、画像をテキストに変換できる Python パッケージです。これまでで最も簡単な OCR 方法であり、英語、中国語、日本語、韓国語、ヒンディー語などを含む 70 以上の言語へのアクセスが追加されています。EasyOCR は、Jaided AI 企業によって作成されました。この記事では、ライブラリは核酸スクリーンショットの名前とその他の情報を識別するために使用されます。
##安装EasyOCR库
pip install easyocr
3. コード
核酸コードは場所によって均一ではないため、写真から読み取られる情報も異なります。以下では、広東地域の岳康コードをデモンストレーションとして使用しますが、読者は必要に応じてコードを調整する必要があります。
核酸のスクリーンショット上の名前の 2 番目の文字が * に置き換えられていることがわかります。そのため、実際の命名では、まず完全な名前情報テーブルを用意し、それをスクリーンショット上の名前と比較する必要があります。 、その名前を使用します ファイルの名前を変更します。
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をオンにする必要があります。