This commit is contained in:
root
2026-07-04 08:01:01 +00:00
parent 73d84169d6
commit 104107bf1d
3 changed files with 96 additions and 34 deletions
+34
View File
@@ -768,6 +768,40 @@ func (s *QuizService) AskGemini(source string, id int, prompt string, base64Imag
return "started", nil
}
func (s *QuizService) PerformGeminiOcr(base64Image string) (string, error) {
if base64Image == "" {
return "", fmt.Errorf("Empty image data")
}
mimeType, decodedData, err := parseBase64Image(base64Image)
if err != nil {
return "", fmt.Errorf("Failed to parse base64 image: %v", err)
}
ctx := context.Background()
prompt := "이 이미지에서 손글씨 또는 인쇄된 글자(한글/영어 등)를 오직 텍스트로만 정확하게 추출해 주세요. 질문에 대한 해설이나 부가적인 설명(예: '추출한 텍스트:', 마크다운 장식 등)은 일절 제외하고, 이미지에 써져 있는 내용 그대로만 텍스트로 반환해야 합니다."
parts := []genai.Part{
genai.Text(prompt),
genai.Blob{
MIMEType: mimeType,
Data: decodedData,
},
}
resp, err := s.executeGeminiWithRetry(ctx, parts)
if err != nil {
return "", fmt.Errorf("Gemini API call failed: %v", err)
}
if len(resp.Candidates) == 0 || len(resp.Candidates[0].Content.Parts) == 0 {
return "", fmt.Errorf("No text detected by Gemini")
}
resultText := fmt.Sprintf("%v", resp.Candidates[0].Content.Parts[0])
return strings.TrimSpace(resultText), nil
}
func (s *QuizService) attachQuestionAssets(parts []genai.Part, source string, id int) []genai.Part {
var questionText, choice1, choice2, choice3, choice4, choice5, passage, explanation, imageURL string
queryQ := `