code-from-image について
画像からコードや擬似コードを読み取り、実装するためのスキルです。OCRの選定、曖昧な文字の解釈、結果の検証手順を扱います。
主な機能
- 01OCRツールの準備と選定
- 02画像の確認と前処理
- 03曖昧な認識結果の分析
- 04エラー処理を含む実装
- 05実装結果の体系的な検証
活用シーン
- 01スクリーンショットのコード転記
- 02判別しにくいOCR文字の解釈
- 03画像内テキストからの実装検証
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ letta-ai/ skills --skill code-from-imageインストール後、Claude Code で/code-from-imageを入力して読み込まれたか確認します。
詳細
画像からコードを読み取る
概要
このスキルでは、画像からコードや擬似コードを抽出し、正しく実装するためのガイダンスを提供します。OCR ツールの選定、曖昧なテキスト抽出への対処、正確に実装できていることを確認するための検証方法について説明します。
ワークフロー
ステップ 1:環境の準備
画像を読み取る前に、利用可能なツールとパッケージを確認します。
- 利用可能なパッケージマネージャー(
pip、pip3、uv、conda)を確認します - インストールされている画像処理ツール(
tesseract、pytesseract、PIL/Pillow)を確認します - 不足している依存関係を、先にインストールします
これにより、利用できないツールで試行錯誤する無駄を省けます。
ステップ 2:画像の分析
OCR で抽出する前に、画像を調べます。
file <image>を使用してファイル形式を確認し、有効な画像であることを確かめます- 可能であれば画像を目視で開き、内容の構造を把握します
- 画質、コントラスト、テキストの鮮明さを確認します
ステップ 3:複数回の試行による OCR 抽出
OCR には本質的に誤りが伴います。精度を高めるには、次の手順に従います。
- 最初の試行:標準的な OCR(デフォルト設定の pytesseract)を使用します
- 出力が文字化けしている場合:画像の前処理を行います。
- コントラストを上げます
- グレースケールに変換します
- 二値化(しきい値処理)を適用します
- 画像を拡大します(2 倍または 3 倍にすると効果がある場合があります)
- 出力を比較:複数回の OCR で異なる結果が得られた場合は、それぞれを照合します
PIL を使用した前処理の例:
from PIL import Image, ImageEnhance, ImageFilter
img = Image.open("code.png")
# Convert to grayscale
img = img.convert("L")
# Increase contrast
enhancer = ImageEnhance.Contrast(img)
img = enhancer.enhance(2.0)
# Apply threshold for binarization
img = img.point(lambda x: 0 if x < 128 else 255, '1')
img.save("preprocessed.png")
ステップ 4:OCR 出力の解釈
OCR では、文字が別の文字に置き換わる誤りが頻繁に発生します。解釈した内容はすべて明示的に記録します。
よくある OCR の読み間違い:
0(ゼロ)とO(大文字の O)とo(小文字の o)1(数字の 1)とl(小文字の L)とI(大文字の i)Sと5と$Gと6Bと8:と;sha256がcha256やsha2S6と表示されることがあります- 変数名の文字が誤って認識される場合があります(例:
SALTではなくGALT) - 引用符が誤認識される場合があります(バイト文字列の
b"が6"と表示されるなど) - 配列のスライスが誤認識される場合があります(
h0[:10]がhof:10]と表示されるなど)
解釈の手順:
- OCR 出力のうち不明瞭な箇所をそれぞれ列挙します
- 最も可能性の高い正しい解釈を記録します
- それぞれの解釈の根拠を説明します
- 確信度の低い解釈には、その旨を明記します
ステップ 5:実装
抽出したコードを実装する際は、次の点に従います。
- アルゴリズムの構造を維持する:記述どおりのロジックに従い、早まって最適化しないでください
- エンコーディングを明示的に扱う:暗号処理では、文字列とバイト列のエンコーディングを明確に指定します
- 基本的なエラー処理を追加する:ファイル操作や外部呼び出しには try/except を含めます
- 中間値を記録する:デバッグのため、中間結果を出力またはログに記録します
ステップ 6:検証
実装を体系的に検証します。
- ヒントが提示されている場合(期待される出力の接頭辞など):検証に使用しますが、それだけに頼らないでください
- アルゴリズムを手作業で追跡する:理解した内容と実装が一致していることを確かめます
- 既知の入力でテストする:可能であれば、予測可能な出力が得られるテストケースを作成します
- エッジケースを確認する:空の入力、特殊文字、境界条件を確認します
警告:ヒントだけを使った検証は脆弱です。出力の接頭辞が正しくても、あらゆる入力に対してアルゴリズムが完全に正しいとは限りません。
よくある落とし穴
OCR 関連
- 最初の OCR 出力を検証せずに受け入れる:不明瞭な文字は必ず照合してください
- 前提を記録しない:文字化けしたテキストを解釈する際は、何を前提としたかを明示してください
- 前処理を省略する:画像を補正すると OCR の精度が大幅に向上します
実装関連
- 文字列とバイト列の混同:Python では、暗号処理関数が文字列ではなくバイト列(
b"string")を必要とすることがよくあります - インポート漏れ:実行前に、必要なモジュールがすべてインポートされていることを確認してください
- エラーが表面化しない:ファイル操作には明示的なエラーメッセージを追加してください
検証関連
- 部分的なヒントに頼りすぎない:接頭辞が一致していても、出力全体が正しいとは限りません
- 中間ステップを検証しない:最終出力だけでなく、各段階の値を確認します
- OCR の結果を正しいと思い込まない:出力が想定と異なる場合は、OCR の解釈を見直します
フォールバック戦略
最初の解釈で正しい結果が得られない場合:
- 元の画像を再確認し、不明瞭な文字に注目します
- 別の OCR 前処理手法を試します
- 曖昧な文字をすべて列挙し、別の解釈を体系的に試します
- 複数の解釈がある場合は、それぞれを実装してテストします
ワークフローの例
「画像から擬似コードを抽出してハッシュを計算する」タスクの場合:
- 環境を確認します:
which tesseract、pip3 list | grep -i pil - 必要であればインストールします:
pip3 install pillow pytesseract - 画像を分析します:
file code.png - OCR でテキストを抽出します
- 文字化けしている場合は、画像を前処理して OCR を再試行します
- 解釈を記録します:「OCR の結果は
GALT = 6"0000...です。G と S は混同されやすく、6" はバイト列を表す b" の可能性が高いため、SALT = b"0000..."と解釈します」 - アルゴリズムを実装します
- 出力を、提供されたヒントと照合して検証します
- 検証に失敗した場合は、別の解釈を使って手順 5~6 をやり直します
コメント
Markdown 対応