この記事は個人の備忘録ですので、正確な情報ではない情報が含まれている可能性があります!
結論:できます
(*OCR・・・画像を文字起こしさせること程度の認識で大丈夫です)
お疲れ様です、steveです。
最近、仕事柄gptのAPIを叩いてOCR走らせることが多いんですが、gptのことはgptに質問することが一番だろうということで、バグが起こったらgptに聞いたりしているのですが、画像をOCRしようとするとこんなレスポンスが来ることがあるんですよね・・・
gptは画像認証はサポートしていません。代わりにテキストタイプを・・・
嘘つけ!!
確かにgpt-4までのモデルだったらocrする前にgoogleのAPI別個叩いてOCRした文章を読み込ませる必要がありました。でも、
「普通にGPT使う時画像認証できているしそんなはずないやろ・・・」
気持ちわかります。実際に4o以上のmodelを指定していればocrできます。
そこで今回は、gpt-4oでocr回したのに認証受け付けてもらえない場合に確認するべきことを紹介します。
1,base64encodeしてる?
基本中の基本ですが、画像など、メディアタイプがテキストではないものをリクエストに含める場合、base64encode化して、base64imageのurlを作成する必要があります、基本的に以下のコードでencodeできます(js)
const base64Image = Utilities.base64Encode(file.getBlob().getBytes());
const base64ImageUrl = `data:${mimeType};base64,${base64Image}`;
このコードの前にmimeType(image/pngやjpegみたいな)を取得しておいてください
2,messagesの記法あってる?
"messages": [{
"role": "user",
"content": [
{
"type": "text",
"text": message
},
{
"type": "image_url",
"image_url": {
"url": base64ImageUrl
}
}
]
}]
プロンプト設計の仕方はこちらで解説しています
https://qiita.com/stevechaiqi0501/items/1cd26a30
基本は、一つのroleに対して一つのcontentです。
ヒューショットしたい場合等、プロンプトにこりたい場合は、上記のリンクより、roleについて学習していただけると幸いです。
3,プロンプトごちゃごちゃしてない?
gptの仕組み上、プロンプトが複雑な場合、トークン数を多く消費します。その過程でimageurlを認識しなくなる可能性があります
4,modelの設定あってる?
なぜだかわかりませんが、gptに修正依頼をすると勝手にmodelをgpt-4oからgpt-4に変えられる場合があります。ocrは4o以上のみ対応しているので、modelの設定には留意したいです
JSON出力に指定したらocrできない・・・
僕はこれが今回の案件における最大の難点でした
普通なら画像認証してくれるのに、プロンプトに「出力はjsonで」とお願いすると非対応だと言われる始末・・・
これができなくて1日ほど開発が遅れました。
どうやら、apiにおいては、以下のようなmodelがあるようですね
chatgpt-4o-latest
model = 'chatgpt-4o-latest'
と設定したらjsonでも走ってくれました。
結論:やっぱりdocumentは正義ですね