2023年12月、1週間くらいで gazo-tts を作った。画像の中の文字を拾って、それを音声で読み上げる、という小さいサイト。年末の短期プロジェクトとして手を動かした回。
環境
- Astro 4 + React + Tailwind
- OpenAI(
openaiv4) tesseract.js(ブラウザ/サーバーでの OCR)- デプロイは Cloudflare Pages(
@astrojs/cloudflare)
やったこと
流れはシンプルで、画像 → 文字起こし → 読み上げ。
src/pages/api/ocr.tsで OCR。当時のgpt-4-vision-previewに画像を投げて「何が写ってる?」を取る形と、tesseract.jsの二段構えsrc/pages/api/tts.tsで読み上げ。OpenAI のtts-1/ voice はalloyにinputテキストを渡すだけ
const res = await openai.audio.speech.create({
model: "tts-1",
voice: "alloy",
input: text,
});
TTS 側は本当にこれだけで音声が返ってくるので、拍子抜けするくらい簡単だった。むしろ OCR 側、画像の指定や vision の扱いの方でちょこちょこ調整していた記憶がある。
開発ログ
- 12/21 init → lexer ならぬ OCR/TTS まで一気に実装
- 12/22 PC では表示 OK、API route まわりを調整
コミットも 一旦コミット ttsまで PCではOK みたいな雑なメモで、勢いで作った感じがそのまま残っている。
おわり
年末の短周期プロジェクトは、本番運用より「1週間で動くもの」を作る方向に振ると気持ちよく終われる。OpenAI の TTS が手軽すぎたので、読み上げ系の機能はいろんな小物に後付けできそう、という発見があった回。今なら音声モデルももっと選べるので、別の用途にも転用できそう。