염산하
@[email protected] · Reply to 염산하's post
좋아! 호환형 completions 로 바꾸고, gemini 2.5 Flash preview 로 바꿔서 공짜로 하자
// Name: OCR
// Description: Capture a screenshot and recognize the text using OpenAI
import "@johnlindquist/kit";
import OpenAI from 'openai';
const clipboardImage = await clipboard.readImage()
if (clipboardImage.byteLength) {
// const apiKey = await env("OPENAI_API_KEY")
const apiKey = await env("GEMINI_AI_STUDIO_API_KEY")
const openai = new OpenAI({
apiKey: apiKey,
// gemini 사용하기 위한 호환 엔드포인트
baseURL: "https://generativelanguage.googleapis.com/v1beta/openai/"
})
console.log("OCR started")
const imageBase64 = await clipboardImage.toString('base64')
const dataUri = `data:image/png;base64,${imageBase64}`
console.log("base64 done")
console.log("calling openai...")
try {
const response = await openai.chat.completions.create({
// model: 'gpt-4.1-mini',
model: 'gemini-2.5-flash-preview-04-17', // 현재 무료!
messages: [
{
role: 'system',
content: 'You are a OCR assistant that extracts text from images',
},
{
role: 'user',
content: [
{
type: 'text',
text: 'Extract the text from the image',
},
{
type: 'image_url',
image_url: { url: dataUri },
},
],
},
],
});
const outputText = response.choices[0].message.content
console.log("openai done")
console.log(`writing to clipboard... ${outputText}`)
await clipboard.writeText(outputText);
notify({
title: "OCR finished",
message: `Copied text to your clipboard`,
})
} catch (error) {
console.error("Error calling Google compatibility endpoint:", error);
notify({
title: "OCR failed",
message: `Error: ${error.message || 'Unknown error'}`,
});
}
} else {
notify({
title: "OCR failed",
message: `No image found in clipboard`,
})
}