0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Fresh+Tesseract 画面をWEBからOCRしてみる

0
Last updated at Posted at 2025-12-01

作ったもの

image.png

環境

開発環境は以下の通りです。

名前 バージョン
Deno 2.5.6
TypeScript 5.9.2
Fresh 2.2.0
Tesseract(npm) 6.0.1

画面キャプチャからOCR実行までの流れ

画面ストリームの取得と表示

画面キャプチャAPIを用いて、ユーザーに共有する画面を選択してもらいます。

const mediaStream = await navigator.mediaDevices.getDisplayMedia({
    video: true,
    audio: false
});

ここで取得したMediaStreamをuseStateで<video>タグに割り当て、表示します。
この映像が、今回OCR処理をする元データとなります。

静止画の切り出し

OCR処理をするために、静止画を切り出します。
はじめに<video>タグからフレームを切り出し、<canvas>に書き出します。その後Base64形式の画像データにします。

const captureFrame = ()=>{
    const ctx = canvas.getContext('2d');
    ctx.drawImage(video, 0, 0, canvas.width, canvas.height);
    return canvas.toDataURL('image/png');
};

OCRの実行

ここでTesseractを使用するのですが、npmの依存の関係(?)でファイル先頭に

import Tesseract from 'tesseract'

とするとエラーが出たので、以下のようにしました。

const Tesseract = (await import('tesseract')).default;

書き出した画像に対して処理を実行していきます。

const imageURL = captureFrame();
const result = await Tesseract.recognize(
    imageURL,
    'jpn'
);

ここまでが大まかな流れになります。

実行してみる

Screen Capture APIのページを写して、OCRの実行をしました。

image.png

実行結果からもみてとれるように、精度は悪いですね...

まとめ

今回の開発では画像をサーバーに転送せず、ブラウザ完結型の画面OCRアプリケーションのプロトタイプ開発について紹介しました。ここでは特に画像の前処理などもしていなかったので、実行結果についてはいまいちだったのでここを改善していきたいと思っています。
また、翻訳機能を追加し、ゲーム画面や画像などをリアルタイムに翻訳できるアプリケーションを目指していきたいです。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?