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?

Open AI Resposes APIがめちゃ進化してる(OCR, ネット検索)

Last updated at Posted at 2025-06-25

内容

  • opan ai APIをいろいろ触ってみる
    • ocr
    • ネット検索

きっかけ

  • 個人開発
    • よく本屋に行き、面白そうものを写真に残す
      • 放置しがち
    • 写真から著者, タイトル, 目次などまとめたい

MVPで作りたい処理

  1. 写真をインポート
  2. web APIを利用
    1. 写真をアップロード
    2. OCRなどで情報取得
    3. ネットから情報取得
  3. レスポンスから情報を抽出, 利用

技術

  • open ai API
    • モデル
      • gpt-4o, gpt4.1
    • pythonライブラリ
      • openai

準備

  • open ai API
    • アカウントの作成
    • API Keyの作成
    • クレジットの購入
      • いつのまにか事前にクレジット残高がないと使えないようになってる
        • 自動チャージ設定あり
      • 昔は月締めで請求が来るスタイルだった
    • 公式ドキュメント
  • python
    • (js, ts向けクライアントもあります。curlなどでhttpリクエストを送ることもできます。)
    • なんでもよい
      • 僕はminiconda
      • ms storeで入れるのが多分、一番楽だと思います
    • openaiクライアントインストール
  • 任意のエディタ

コード

  • 使う写真

2025-05-31 17.33.09.jpeg

  • データアナリストの友人が呼んでいた本
    • 手前の本だけ認識してほしい

写真のアップロードとOCR

  • 通常のチャット機能を使う
    • .chat.completions.create()というAPI
from dotenv import load_dotenv
import osfrom pathlib import Path

# ./.secret/.env を明示的に読み込む
env_path = Path(".secret") / ".env"

load_dotenv(dotenv_path=env_path)
api_key = os.getenv("openaiAPI")
#print(f"API Key: {api_key}")  # 確認のためにAPIキーを出力(実際の使用では注意が必要)

import openaiimport base64
# 画像をbase64にエンコードする関数
def encode_image(image_path):    
    with open(image_path, "rb") as image_file:        
    return base64.b64encode(image_file.read()).decode("utf-8")    

# 画像のパス
image_path = "./sample_code/images/2025-05-31 17.33.09.jpeg"

# 画像をbase64にエンコードする
base64_image = encode_image(image_path)

# モデルの名前を指定する
model_name = "gpt-4o"

# OpenAI APIのクライアントを作成する.
client = openai.OpenAI(    
    api_key=api_key,
)

# プロンプト
prompt = "この本の写真の情報を知りたい。(複数ある時は一番手前、中央、にある被写体、手に持っているもの)タイトル、著者、版などを、後にブラウザ検索しやすいクエリで出力しろ。クエリのみ出力。"
# チャットの応答を生成する
#"""
response = client.chat.completions.create(    
    model=model_name,    
    messages=[        
        {            
            "role": "user",            
            "content": [                
                {"type": "text", "text": prompt},  
                # ここに質問を書く               
                {"type": "image_url", "image_url":{"url": f"data:image/jpeg;base64,{base64_image}"}},  # 画像の指定の仕方がちょい複雑            ],        }    ],    max_tokens=1000,)#"""

print(response.choices[0].message.content)
exit()
(base) c:\Users\Ishikawa\workspace\book-image_serching> c: && cd c:\Users\Ishikawa\workspace\book-image_serching && cmd /C "c:\Users\Ishikawa\miniconda3\envs\book-image_searching\python.exe c:\Users\Ishikawa\.vscode\extensions\ms-python.debugpy-2025.8.0-win32-x64\bundled\libs\debugpy\launcher 56069 -- "C:\Users\Ishikawa\workspace\book-image_serching\sample_code\openaiAPI_test copy.py" "

問題解決のためのデータ分析 新装版 著者 斎藤健太

  • OCR
    • しっかりと読み取れている
  • 僕が大学生だったころ、マルチモーダルモデルはまだ構想・開発段階だった
    • わずか3年ほどで画像、音声データのインプットや画像生成まで対応してきた

写真のアップロードとOCR, ネット検索を1つのリクエストで

prompt = "この本の写真の情報を知りたい。タイトル、著者、版などから検索し、目次を出力しろ。版が一致するようにしろ、新しい版を優先しろ。目次だけをmark downで構造化して出力。目次だけ出力。"
model_name = "gpt-4.1"
response = client.responses.create(    
    model=model_name,
  input=[        
        {            
            "role": "user",            
            "content": [                
                {"type": "input_text", "text": prompt},                
                {"type": "input_image", "image_url":f"data:image/jpeg;base64,{base64_image}"},            
                ]        
            }    
        ],        
        tools=[        
            {"type": "web_search"}        
        ],
    )#"""
    
print(response.output[1].content[0].text)  # ツールの出力を表示
exit()
(base) C:\Users\Ishikawa\workspace\book-image_serching> c: && cd c:\Users\Ishikawa\workspace\book-image_serching && cmd /C "c:\Users\Ishikawa\miniconda3\envs\book-image_searching\python.exe c:\Users\Ishikawa\.vscode\extensions\ms-python.debugpy-2025.8.0-win32-x64\bundled\libs\debugpy\launcher 61246 -- C:\Users\Ishikawa\workspace\book-image_serching\sample_code\openaiAPI_test.py "
以下に、齋藤健太著『問題解決のためのデータ分析』の目次をMarkdown形式で構造化して示します。

```markdown
# 目次

## はじめに

## Chapter 0 今、求められているデータ分析

### 01 今どきのビジネスパーソンは数字で語れてなんぼ
- 根拠となる数字データに基づいて説明する
- データ分析により若手でも活躍できる
- 企業に必要なデータ分析
- 本書の構成

## Chapter 1 データ分析は課題の見極めが9割

### 01 ビジネスパーソンに求められる問題解決力
- 問題解決のアプローチ
  - (1) 現状の理解
  - (2) 原因の見極め
  - (3) 打ち手の決定
  - (4) 実行
- PDCAを回すことが重要

### 02 データ分析のアプローチ
- 一本筋の通ったアプローチを
  - (1) 課題の見極め(目的の明確化)
  - (2) 仮説の洗い出しと絞り込み
  - (3) 分析作業の定義
  - (4) 情報収集
  - (5) 分析

## Chapter 2 課題や仮説を洗い出すための考え方

. . .(省略)

## Chapter 6 参考 データ分析で必要なエクセルスキルは3つ!

### 01 必要なエクセルスキルは3つだけ

### 02 関数「VLOOKUP」の使用方法と活用例
- VLOOKUPの機能
- VLOOKUPの使い方
  - (1) VLOOKUP関数を使う
  - (2) 全セルに同様にVLOOKUP関数を入力
  - (3) 応用編:4番目の引数に1を入力する場合

### 03 「ピボットテーブル」の使用方法と活用例
- ピボットテーブルの作成
- 知っておきたい便利なポイント

### 04 「ソルバー」の使用方法と活用例
- ソルバーを有効にする
- 知っておきたい便利なポイント

## おわりに

この目次は、クロスメディア・パブリッシングの公式サイトに掲載されている情報を基にしています。 ([book.cm-marketing.jp](https://book.cm-marketing.jp/books/9784844373278/?utm_source=openai))
  • うまくいったアウトプット
    • あまり安定しない
      • 実装直後は成功したが、次の日はまったく成功しなくなった。(OCRは成功して要るっぽいが、「もっと詳細な情報が必要」と言ってくる。ネット検索機能が起動してない?その次の日はまた使えるようになった。)
    • 他の検索APIや本に特化したもの(google books APIなど)検討

まとめ

  • 自然言語以外にもLLMで扱えるようになった

    • ぜひ、皆も触ってみて個人開発などで利用してほしい
  • なんとか動きそうなので個人開発を完成させたい

    • まずwebアプリで実装
    • その後、Tauriなどでモバイルアプリをリリースしてみたい
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?