オンラインのセミナー・会議はスクショで忙しい
コロナが流行してから生活スタイルが大きく変わりました。ただ、一部のサラリーマンにとってはテレワークが認められるなど、まんざら悪いことばかりとも言えない状況です。
中でも会議のスタイルは大きく変わりましたね。特に私のようなエンジニアは、技術知識のアップデートのため社外の勉強会に足しげく通う必要があったのですが、これが全部オンラインに変わりました。移動時間がなくなって本当に良かった。コロナが収束しても2度と勉強会をリアルで開いてくれるな。絶対にだ。
セミナーや会議がオンラインに移行したことで、スクショをとる機会が非常に増えませんでしたか?
私が参加する大抵のセミナーは映した資料をくれません。講師の発言のメモも取らないといけませんが、やはり発言の前提となるスライドは残しておきたいので、オンラインセミナー中はスクショとメモとりで非常に忙しくなりました。
会議の場合でも「その資料下さい」と言いにくい関係ってありますよね。お客様がチラッと見せてくれる資料とか・・そういう時は、どうしてもスクショせざるを得ません。
なお一番不愉快なパターンは、最後のあたりになって「本日の資料は会議終了後にお送りさせていただきます」とか言いだすやつ。そういう大事なことは最初に言え。無駄にスクショをとりまくったこの作業は何だったんだ、という表情に出せない徒労感を隠すための愛想笑いを浮かべて、さも初めて気付いたかのように「あっ、そうですね。助かります」などと言ったりします。やれやれ。
AIがテレビ会議のスクショを全部とってくれるSummary Shots
弊社 Tokyo Properties で開発したSummary Shots を使えばテレビ会議の画面をAIが認識するので、スライドが切替わった時に自動でスクショをとります。録音もできますし、スクショ画像と音声を同期して再生することもできる優れモノです。こちらから無料トライアル版をご利用できますのでお試しください。
スクショ画像を無料で文字起こしする方法(クラウド版)
実のところ無料の文字起こしという条件をつけると、OCR製品の比較検証をするまでもありません。Googleドライブを使う方法一択です。悩まなくていい。フォルダごとGoogleドライブにドラッグ&ドロップするだけだ。

Googleドライブに画像フォルダをアップロード
スクショ画像に書かれている文書はあなたが何もしなくてもGoogle様が開発した高性能OCRで勝手に、正確に、文字起こししてくれます。
もし文字起こしされたテキストデータを自分の資料に使いたい場合は、その画像ファイルを右クリックして「アプリで開く→Googleドキュメント」とします。「ワード」のような画面が開くと先ほどの画像が貼り付けられており、その下に文字起こしされた文章が表示されていますので、必要な部分をコピペして自分の資料に貼り付けます。

Googleドキュメントとして開くとOCRされた文字列を利用可能
もし文字起こしされたテキストから、スクショされた画像ファイルを検索したい場合、検索欄に文字列を入れて検索するだけです。Google得意の検索機能が遺憾なく発揮され、瞬時に必要な画像ファイルが表示されることでしょう。さすがに、これはすごい!!

画像の検索も一瞬
ところが大変残念なことがあります。私も「すべての会議のスクショ画像をGoogleドライブにアップしています」と言いたいところですが、嘘です。アップしているのは無料セミナーのスクショ画像だけです。仕事の会議資料はGoogleドライブには上げていません。だって、ほら、Googleドライブは日本企業が大嫌いなクラウドサービスだから。
スクショ画像を無料で文字起こしする方法(デスクトップ版)
上記のGoogleドライブを使う方法の問題点があるとすれば、Googleドライブが使えない(!)ことですね。日本の多くの大企業ではGoogleドライブに資料をアップすることはおろか、アクセスすること自体URLレベルで禁止されていたりします。設定間違いで全世界向けに社内会議資料を大公開してしまう間抜けな社員が一定の確率でどうしても出てきますので、会社側としては禁止せざるをえないのでしょう。
こういう場合は、ローカルPC上で、大量のスクショ画像を、一括で、できれば無料で、文字起こししないといけません。これはわりと大変です。
必要な作業は以下のようなフローになります。

PCにPythonを入れる
Windows PCへのpython のインストールの仕方についてはこことか、こことか、色々なサイトに方法が記述されているのでご参照ください。
必要なライブラリを2つ入れる
Tesseractのインストール
まず、OCRエンジン部分である「Tesseract」のWindows版をインストールします。以下のサイトからインストーラをダウンロードしてきます。
以下のような画面が表示されます。32bit と64 bit版がありますが、 Windows10なら64ビット版をダウンロードしてください。2021年8月時点でバージョン名はv.5.0.0 となっていますが、将来更新されていくのでバージョンの数値は違っていると思います。
インストール時に「次へ」、「次へ」と進んでいいですが、途中、以下の画像のようにスクリプトと言語を追加するところがあります。

Tessearctインストール時のオプション追加
Additional script data の部分では+ボタンを開いて2か所チェック。

追加スクリプトの選択
Additional language data の部分も+を開いて3か所チェックしてください。

追加言語の選択
保存場所はデフォルトの C:\Program Files\Tesseract-OCR のままで大丈夫です。
インストールが完了したら実験してみます。Cドライブの直下に TEMP というフォルダを作成して以下の画像をsample.pngとして保存してください。

「sample.png」 としてC:\TEMPに保存する
コマンドプロンプトを起動して、以下のように入力してください。
cd C:\TEMP
"C:\Program Files\Tesseract-OCR\tesseract.exe" sample.png ocr-test-out -l jpn

コマンドプロンプトへの入力
C:\TEMPフォルダ内にocr-test-out.txt というファイルが出力されて文字起こしされた結果が保存されていればTesseract のインストールは成功しています。
pyocrのインストール
次にpyocr をインストールします。pyocr はpythonからTesseractを操作してOCR機能を提供するラッパーのようなものです。こちらのインストールは簡単です。
コマンドプロンプトを起動して、
python -m pip install pyocr
と打ち込んでください。どのフォルダで打ち込んでも大丈夫です。
Successfully Installed pyocr
と表示されればインストール完了です。
コードを書く
以下は、特定フォルダ内にある全てのjpg, png 画像を一括でOCRしてoutput.tsv というファイルに出力するpython のコードです。
コピペしてocr.py と名前を付けて適当なフォルダに保存しましょう。ここでは仮に C:\TEMP\に保存するとします。
# -*- coding: utf-8 -*-
"""
コマンドプロンプトで
>python ocr.py フォルダのフルパス
と入力すると、当該フォルダ以下のすべてのpng, jpg 画像をOCRして output.tsv として出力する。
"""
import os
import sys
import re
import pyocr
from PIL import Image
#インストールしたTesseractを環境変数「PATH」へ追記 (もし事前に設定していれば以下の2行は不要)
path='C:\\Program Files\\Tesseract-OCR'
os.environ['PATH'] = os.environ['PATH'] + path
def ocr(path):
tools = pyocr.get_available_tools()
tool = tools[0]
img = Image.open(path)
builder = pyocr.builders.TextBuilder(tesseract_layout=6)
ocr_text = tool.image_to_string(img, lang="jpn", builder=builder)
ocr_text = " ".join(ocr_text.replace("\n","").split())#テキスト中の改行を削除、複数のスペースがある場合一つにまとめる
output_text = path + "\t" + ocr_text
print(path) #進捗確認用
with open('./output.tsv', 'a') as f:
print(output_text, file=f)
def file_check(path): #フォルダ内部を再帰的にチェックし、png か jpgファイルがあればOCRをかけてテキスト出力する。
if os.path.isdir(path):
files = os.listdir(path)
for file in files:
file_check(path + "\\" + file)
else:
if path[-4:] == '.png' or path[-4:] == '.jpg':
ocr(path)
if __name__ == "__main__":
args = sys.argv
file_check(args[1])
実行する
コマンドプロンプトを開いて、ocr.py を保存したフォルダに移動します。
cd C:\TEMP
OCRしたい画像のあるフォルダの場所が、仮に C:\hogehoge\pictures\ だとすると、以下のように入力することで一括OCRが開始され output.tsv として出力されます。
python ocr.py C:\hogehoge\pictures
出力されたoutput.tsvには、「画像ファイルのフルパス[タブ]文字起こしされたテキスト[改行]」 という書式で1行に1画像分の文字列が保存されます。テキストエディタで開いて文字列検索をすれば、どのファイルに何が書かれているか検索できます。→そう。GUIで検索できる訳ではなく、テキストエディタで検索して、画像のファイル名・フルパスを探し出し、手作業で画像ファイルを開かないといけません。
Googleドライブに保存するのに比べてずいぶんと手間のかかることです。
OCRの実行結果を比較する
最後に文字起こしの精度を比較してみましょう。GoogleのOCRと比べて、Tesseract+pyocr によるOCRの性能はどれほどのものなのでしょうか?
白地に黒文字のシンプルな画像

Googleドライブの文字起こし結果
報道資料
令和3年8月6日
「防災等に資する公衆無線LAN(Wi-Fi)環境の整備・利活用
促進に向けた 自治体向けオンラインセミナー」の開催
総務省は、「防災等に資する公衆無線LAN(Wi-Fi)環境の整備・利活用 促進に向けた自治体向けオンラインセミナー」を開催します。 本セミナーでは、防災向け公衆無線LANについて地方公共団体担当者 からの優良事例の紹介、有識者からのWi-Fiを整備するにあたっての基 礎知識講座等に加え、Wi-Fi関連の機器展示をすべてオンラインにて行 います。
「担当者 から」「基 礎知識」「行 います」と妙なところに3か所スペースが入っていますが、それ以外は完璧です。
Tesseract+pyocrの文字起こし結果
報道資料令和3年8月6日「防災等に資する公衆無線LAN(Wi-Fi) 環境の整備・利活用促進に向けた自治体向けオンラインセミナー」の開催総務省は、「防災等に資する公衆無線LAN(WFi) 環境の整備・利活用促進に向けた自治体向けオンラインセミナー」を開催します。本セミナ ーでは、防災向け公衆無線LANについて地方公共団体担当者からの優良事例の紹介、有識者からのWi-Fiを整備するにあたっての基礎知識講座等に加え、Wi-Fi関連の機器展示をすべてオンラインにて行います。
文字起こし結果に対するpythonによる後処理により、改行をすべて削除していることと、2文字以上の連続するスペースを1つのスペースに集約する処理を入れていますが、こちらも認識間違いはWi-Fiを「WFi」としていた点と「セミナ ー」と変な場所にスペースが残っている場所だけで、ほぼ完ぺきです。こういう書式なら使えそうです。
飾り文字ありの画像

文字起こし性能比較サンプル画像2
Googleドライブの文字起こし結果
電波伝搬障害防止 制度のご案内
電波伝搬障害防止制度は、重要無線通信を行う無線回線が31mを 超える高層建築物等の建築によって突然に遮断されるのを
未然に防ぐことを目的としています。
さすがGoogle。飾り文字も完璧です。
Tesseract+pyocrの文字起こし結果
=や 一 と電流伝搬障害防中リ ヒコZ に 電波伝搬障害防上制度は、重要無線通信を行う舞線回線が31mを超える高層革築物等の建築によって 突然に返断されるのを未然に防ぐことを目的としています。 3
飾り文字になったとたんにグダグダになりました。青文字の部分もチョコチョコ間違えてくれています。ちょっと微妙な感じですね。Tesseract の使いどころは「白地に文字」限定という感じでしょうか。
まとめ
無料OCRによる文字起こし性能に関しては「Googleドライブ」を使えばスクショ資料の検索には十分です。ローカルPC上で無料OCRによる文字起こしをするなら Tesseractとpyocr を使うしかありませんが、飾り文字には弱いです。
オンラインセミナーなど万一情報漏洩しても問題にはならないという会議のスクショ画面を文字起こしするならGoogleドライブ一択です。逆に内部会議など万一にも漏れては困る、というスクショ画像ならローカルPC上でのOCRを使うしかないですが、認識精度の問題から、検索時にヒットしないこともあると思いますので、少し不満は残るだろうと思われます。