質問編集履歴

1 for文を途中からしか記載していなかったので、全文入力しました。

zuzu1984

zuzu1984 score 21

2019/03/06 23:53  投稿

画像から文字が抽出できない。
指定した画像から文字を抽出して、文字認識を行いたいです。
(不必要なimportが混じっていますが、ご容赦願います)
書いているコードだと[tools]が空のため、[No OCR tool found]に繋がってしまいます。
どうすれば、文字抽出に進むことができるでしょうか。
【結果】
```python
1
No OCR tool found
```
【コード】
```python
# -*^cording: utf-8 -*-
   picno = 1
   for i in range(5):
       event_pic = testfld + '/Cut/988-3_no' + str(picno) + '.png'
       print(picno)
import cv2
import pyocr
import pyocr.builders
import numpy as np
from matplotlib import pyplot as plt
from PIL import Image, ImageFilter
import time
       #======================================
       # グレースケール
       mov_in = cv2.imread(event_pic, cv2.IMREAD_GRAYSCALE)   # 画像ファイrの読み込み
       if mov_in is None:
           print('ファイルが読み込めません')
           import sys
           sys.exit()
import glob
import os
import sys
import win32com.client
from datetime import datetime
       cv2.imwrite(testfld + '/mov_in_gray.png', mov_in)
       cv2.waitKey(0)
       #======================================  
       # 2値化  
       img_gry = (testfld + '/mov_in_gray.png')  
       org_img = cv2.imread(img_gry, 0)  
#===============================================================================
testfld = 'C:/python/test/Cap'
       THRESHOLD = 215        # 閾値はNumpyで調べた
       MAXVALUE = 255         # 255 = white
#===============================================================================
       _, bin_cv2 = cv2.threshold(org_img, THRESHOLD, MAXVALUE, cv2.THRESH_BINARY_INV)
                   # [_INV]で背景白、黒文字にすることができる(Tesseractで読める絶対条件!)
#-------------------------------------------------------------------------------
if __name__ == '__main__':
       bin_npy = np.zeros(org_img.shape, org_img.dtype)
       bin_npy[np.where(org_img > THRESHOLD)] = MAXVALUE
      cv2.imwrite(testfld + '/binary_no' +str(picno)+ '.png', bin_cv2)
      cv2.imwrite(testfld + '/binary_no' +str(picno)+ '.png', bin_cv2)
       #======================================
       # 文字認識
       tools = pyocr.get_available_tools()
       if len(tools) == 0:
           print('No OCR tool found')
           sys.exit()
       tool = tools[0]
##       print("Will use tool '%s'" % (tool.get_name()))
       langs = tool.get_available_languages()
##       print("Availble languages: %s" % ", ".join(langs))
                   # 使用可能言語の確認なので、コメントアウト中
                   # [langs]に入れる略記の確認には使える
       txt = tool.image_to_string(
           Image.open(testfld + '/binary_no' +str(picno)+ '.png'),
           lang = 'eng',
           builder = pyocr.builders.TextBuilder()
       )
       print(txt)
       print('----------------------------')
       if picno == 1:
           ev01 = txt
       elif picno == 2:
           ev02 = txt
       elif picno == 3:
           ev03 = txt
       elif picno == 4:
           ev04 = txt
       elif picno == 5:
           ev05 = txt
       picno = picno + 1
       print('----------------------------')
       print('Event5回取得')
       print('----------------------------')
       text = [ev01, ev02, ev03, ev04, ev05]
 
 
 
 
 
 
 
 
 
```
  • Python

    36694 questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • NumPy

    1859 questions

    NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

  • OpenCV

    3176 questions

    OpenCV(オープンソースコンピュータービジョン)は、1999年にインテルが開発・公開したオープンソースのコンピュータビジョン向けのクロスプラットフォームライブラリです。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る