ディスプレイ

Pythonによる設備点検表保存の簡略化

Python

今回は、うつ病となり休職期間に自身の今後のキャリアについて考えた結果
プログラミングについて、学んでいこうとの考えに至り、成果を備忘録として記録します。

ド素人のため、指摘事項があれば是非ご教示いただきたいです。
お問い合わせフォームよりお願いいたします。

うつ病発症まで
プラント運転管理課長が課長となりうつ病を発症するまで
うつ病発症要因_職場環境編
うつ病と診断されてから、1年以上が経過しました。業務内容・職場環境が大幅に変わり従来通り業務をこなせるようになったと感じています。以前、うつ病となった要因を自分自身の面から振り返りましたが今回は、業務内容・職場環境の面から考えてみました。

 

この記事を書いた人:Eikou

実施したい事

現場から紙で提出される設備点検表をパソコンに取込み、フォルダ上で右上の通番号順に並び変える

実施手順
  1. 設備点検表をスキャナーで取込む
  2. 設備点検表の右上の通番号を認識させる
  3. 認識した通番号にファイル名を変更する
  4. 指定したフォルダにファイルを保存する

 

 

ソースコード

 

from PIL import Image
import pyocr
import pyocr.builders
import sys
import glob
import os
import shutil
import time

 

#OCR
tools = pyocr.get_available_tools()
pyocr.tesseract.TESSERACT_CMD = r'C:/Program Files (x86)/Tesseract-OCR/tesseract.exe'
time.sleep(3)
tool = tools[0]


#対象ファイル(jpg)のフォルダパスを取得
imgs = glob.glob('C:/Users/〇〇/*.jpg')


#for文で繰返し処理
#カウンタは0から始まるので1から始めたい場合はenumerate()関数にstart引数を指定
# for カウンタ, 配列の中身 in enumerate(配列):

for i, fig in enumerate(imgs, 0):

#pathの \\ を / へ置換
new_imgs02 = (fig).replace("\\", "/")

#画像の読込み
new_input_img = Image.open(new_imgs02)#from PIL import Image

#OCR処理する領域を指定
new_img_region = new_input_img.crop((2900, 130, 3400, 300))#画像の左上が原点。(x1, y1, x2, y2)  x1,y1は左上の端。x2,y2は右下の端 

# OCRを実行する画像イメージや言語指定、オプション指定
new_txt = tool.image_to_string( 
new_img_region, 
lang='eng+jpn', 
builder=pyocr.builders.TextBuilder() #オプション番号は必要に応じて変更。デフォルトは「3」
)
#読み込み対象の通No.の空白を置換
new_txt_rename = new_txt.replace(" ", "")
print(new_txt_rename)

#renameファイルを指定のフォルダへコピー
new_file_name = os.path.dirname(new_imgs02) +'/' +'rename'+ '/'+new_txt_rename+ '.jpg'
shutil.copy(new_imgs02, new_file_name)

 

個別説明

OCR設定

Optical Character Reader 光学式文字読取装置
Optical Character Recognition 光学式文字認識

紙面を写した画像などを解析して、その中に含まれる文字に相当するパターンを検出し、書かれている内容を文字データとして取り出す装置やソフトウェアのこと。また、そのような方式による自動文字認識。

Tesseract OCR を事前にインストール必要

#OCR
tools = pyocr.get_available_tools()
pyocr.tesseract.TESSERACT_CMD = r'C:/Program Files (x86)/Tesseract-OCR/tesseract.exe'
time.sleep(3)
tool = tools[0]

上記コードを実行すると、IndexError: list index out of rangeとエラーが発生します。もう一度実行するとエラー無く実行できます。

上記の原因が分からないため、どなたかご教示いただけたら幸いです。

対象ファイルのパス取得

 

#対象ファイル(jpg)のフォルダパスを取得
imgs = glob.glob('C:/Users/〇〇/*.jpg')

対象ファイル(jpg)のフォルダパスを取得します。

glob関数でパターン(jpg)にマッチしたパスを取得

 

OCRの領域指定

 

#OCR処理する領域を指定
new_img_region = new_input_img.crop((2900, 130, 3400, 300))#画像の左上が原点。(x1, y1, x2, y2) 

読取りする領域を右上の通番号付近に指定します。

 

 

 

 

ファイル名を通番号へ変更したファイルを指定したフォルダへコピー

 

#renameファイルを指定のフォルダへコピー
new_file_name = os.path.dirname(new_imgs02) +'/' +'rename'+ '/'+new_txt_rename+ '.jpg'
shutil.copy(new_imgs02, new_file_name)

new_file_name = os.path.dirname(new_imgs02) +’/’ +’rename‘+ ‘/’+new_txt_rename+ ‘.jpg’

ファイル名を通番号へ変更したファイルを・・・/renameというフォルダに通番号.jpgというファイル名でコピーします。

 

総括

プログラミングに関してド素人ですので、記載内容の不具合等ありましたらお問い合わせフォームよりご指摘いただけると幸いです。

タイトルとURLをコピーしました