オーディオ書籍の自炊#3

<タイトル> オーディオ書籍の自炊#3

2025年06月13日 2025年06月19日 カテゴリ: 生活

#03.ファイルから文字を読み取る(OCR)

OCRサービスはGoogle Cloud Vision APIを採用している。理由として、読み取り処理が速い、日本語も読み取り精度が高い、月1000リクエストまでは無料枠で利用できるためです。また音声生成ソフトに読み込む際、利用するテキストファイルを処理する関数をJupyter側で開発したいためです。

※1000リクエストを超える場合、つまり1000ページ以上処理する場合には費用が発生するので注意してください。

Google Cloud Vision APIの取得方法(当時に参考にしたサイト)

Google Cloud Vision API(流れ)

  1. プロジェクトの作成
  2. Cloud Vision APIの有効化
  3. サービスアカウントの作成
サービスアカウント(手順について)
 > (Ⅰ) 「三」→「APIとサービス」→「認証情報」をクリックする。  
 > (Ⅱ) 「認証情報を作成」→「サービスアカウント」をクリックする。
 > (Ⅲ) 「サービスアカウント名」を入力する。(自動的に"サービスアカウント"は表示される)  
 > (Ⅳ) 「サービスアカウント名」以外の項目は省略して「完了」ボタンをクリックする。
 > (Ⅴ) サービスアカウントに作成したアカウントが表示されていることを確認する。  
 > (Ⅵ) このアカウントのメールアドレスのリンクを選択する。  
 > (Ⅶ) リンク先から「キー」→「鍵を追加」→「新しい鍵を作成」をクリックする。  
 > (Ⅷ) 「JSON」を選択して、「作成」をクリックする(ダウンロード)  
 
(➡)ダウンロードした"json"ファイルを利用して"API"アクセスを進めていく。

※サービスアカウントを経て取得した"json"ファイルは情報漏洩すると悪用させる恐れがあるため、保管に注意すること。

本記事では「key.json」というファイル名でメモしていく。

Jupyter側からGoogle Cloud Vision APIを利用するには、「key.json」をJupyter側のマウント先ディレクトリに配置する。

次にノートブックのセルから環境変数を定義するとGoogle Cloud Vision APIを利用できるようになる。

import os
os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = 'key.json'

Google Cloud Vision APIが機能しているのか検証する(画像を1枚用意する)

import io
import os
from pathlib import Path
from google.cloud import vision

# 検証用に画像を1枚用意する
file_name = os.path.abspath("XXXX.jpg")

# Google Cloud Vision APIを利用する
client = vision.ImageAnnotatorClient()

with io.open(file_name, 'rb') as image_file:
    content = image_file.read()
    
image = vision.Image(content=content)

# OCR(日本語対応)
response =  client.document_text_detection(image=image,
                                           image_context={'language_hints': ['ja']})
print(response.full_text_annotation.text)

#OCRを一括処理する関数#

import io
import os
from glob import glob
from time import sleep
from pathlib import Path
from google.cloud import vision

def Audio_Book_Text(book_path="./books/*.jpg",
                    api_key="key.json",
                    save_file_name="AudioBook"):
    '''
    <実装>
        オーディオ書籍を自炊する際、必要な全ての文章を含めたテキストを生成する関数
        関数を実行する際には、同じディレクトリにAPIキーを配置すること
        
    <引数>
        book_path = JPG拡張子に変換した画像を置いているディレクトリ
        api_key = "google-cloud-vision"の"OCR"を利用するためのキー(絶対パス)
        save_file_name = テキストファイルの保存名
        
    <実行例>
    Audio_Book_Text(book_path="./books/*.jpg",
                    api_key="key.json",
                    save_file_name="AudioBook")
    '''
    # "google-cloud-vision"の"OCR"を利用するための環境変数の設定
    os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = api_key

    # "OCR"にかける画像をまとめて取得する
    IMG = sorted(glob(book_path))

    Result_Text = []
    for file_name in IMG:
        # Instantiates a client 
        client = vision.ImageAnnotatorClient()
        with io.open(file_name, 'rb') as image_file:
            content = image_file.read()
        image = vision.Image(content=content)

        response =  client.document_text_detection(image=image,
                                                   image_context={'language_hints': ['ja']})
        TEXT_OCR = response.full_text_annotation.text

        # 改行を削除する
        TEXT_OCR = TEXT_OCR.replace("\n", "")
        print(TEXT_OCR)
        # リスト形式でテキストを保存する
        Result_Text.append(TEXT_OCR)
        sleep(1.0)

    # リストの中身を文字列に変換する
    TEXT_NEW_TEST = "".join(Result_Text)
    
    # テキストを保存する
    with open(f'{save_file_name}.txt', 'w') as F:
        F.write(TEXT_NEW_TEST)

この関数を実行すると、指定したファイル名のテキストファイルが作成される。

これを音声生成ソフトに読み込ませることによってオーディオ書籍が出来上がる。(#4に続く)



コメント(一覧)

コメント(入力画面)

空港MAP(#WIKI)
※現在の時刻 週間天気予報 (東京)
バックナンバー(年別)