2025/05/21 08:05 How we made our optical character recognition (OCR) code more accurate

やあ、ロボ子。今日はOCR、光学文字認識について話すのじゃ。

OCRですか。デジタル画像から文字を認識する技術ですね。それがどうしたのですか、博士?

ふむ。Piecesという会社が、コードに特化したOCR技術を開発したらしいのじゃ。これは面白そうじゃな。

コードに特化、ですか。普通のOCRと何が違うんです?

そこがミソじゃ!彼らはOCRエンジンとしてTesseractを使って、テキストと画像のペアで学習させたLSTMを使ったらしいぞ。Tesseractは100以上の言語をサポートする無料OCRツールじゃ。

LSTMで学習させたんですか。精度が高そうですね。

そうじゃ!さらに、PiecesはTesseractの標準機能をコードに最適化するために、特定の前処理と後処理ステップを追加したらしい。例えば、プログラミング環境のライトモードとダークモードの両方で良好な結果が得られるように対応しているらしいぞ。

ダークモード対応は重要ですね。エンジニアはダークモード好きが多いですから。

じゃろ?画像の平均ピクセル輝度を計算して、ダークモードかどうかを判断して反転させるらしい。賢いのじゃ!

なるほど。それから、コードのレイアウトを整えるために、インデントも推測するんですね。

そう!Tesseractはデフォルトでインデントを出力しないから、コードの可読性が悪くなる。Pythonみたいな言語だと意味が変わっちゃうから、インデントは超重要じゃ。

確かに。インデントがないコードは読む気がしません...

じゃろ?だから、Tesseractが返すコード行ごとのバウンディングボックスを使ってインデントを追加するらしい。ボックスの幅と文字数から、その行の文字の平均幅を計算して、インデントを調整するのじゃ。

すごい。細かいところまで考えてますね。

じゃな!彼らは画像とテキストのペアの手作りおよび生成されたデータセットを使用して、OCRパイプラインの修正を評価しているらしい。各画像でOCRを実行し、予測されたテキストと正解テキストの間のレーベンシュタイン距離を計算するのじゃ。

レーベンシュタイン距離ですか。編集距離のことですね。それで精度を測るんですね。

そうそう!小さい画像のアップサンプリング方法も色々試したらしいぞ。SRCNNみたいな超解像モデルも試したけど、バイキュービック法と大差なかったから、処理速度を考えてバイキュービック法にしたらしい。

なるほど。バランスが大事ですね。

じゃな!Piecesは、コードに合わせて調整された最初のOCRモデルの1つを提供しているらしい。しかも、Piecesデスクトップアプリをダウンロードしてモデルをテストできるらしいぞ。開発者向けのAPIも提供しているらしいし、Github、Cursorとの統合やMCPの実装も行っているらしい。

試してみる価値はありそうですね。私もダウンロードしてみようかしら。

そうじゃ!OCRでコードを読み取るのが得意になったら、手書きの設計書も読めるようになるかも…って、それは無理か!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。