#node.js #firebase #google-cloud-firestore #google-cloud-functions
#node.js #огневая база #google-облако-firestore #google-cloud-функции
Вопрос:
Я использую Google Vision API и облачную функцию firebase для некоторых рукописных текстовых документов, которые затем сохраняются в Firestore.
Я следую руководству «Обнаружение рукописного ввода на изображениях» здесь: https://cloud.google.com/vision/docs/handwriting#detect_document_text_in_a_remote_image
Проблема, с которой я столкнулся, заключается в том, что я, похоже, не могу сохранить текстовую полезную нагрузку в firestore. Я вижу данные, поступающие в облачные журналы, но затем я получаю сообщение об ошибке:
imageTagger.js
облачная функция:
ошибка в этой функции Ошибка: значение для аргумента «данные» не является допустимым документом Firestore. Ввод — это не простой объект JavaScript.
Вот моя облачная функция. Кто-нибудь что-нибудь заметил?
imageTagger.js
import * as functions from 'firebase-functions'
import * as admin from 'firebase-admin'
import * as vision from '@google-cloud/vision'
// Instantiate a vision client
const client = new vision.ImageAnnotatorClient()
const bucketName = 'demobucket'
export const imageTagger = functions.storage
.bucket(bucketName)
.object()
.onFinalize(async (object) => {
// return console.log('objectmetadata: ', object)
try {
const fileName = object.name
const imageUri = `gs://${bucketName}/${fileName}` // format required to send imageURLs to Google Vision
const [result] = await client.documentTextDetection(imageUri)
const fullTextAnnotation = result.fullTextAnnotation
const docRef = admin.firestore().collection('photosText').doc('test')
return docRef.set(JSON.stringify(fullTextAnnotation.text))
} catch (error) {
return console.error('error in this function', error)
}
})
Ответ №1:
При вызове JSON.stringify
вы получаете обратно строку. И хотя строка является допустимым значением для поля в Firestore, вы пытаетесь присвоить всему документу значение string, что невозможно:
return docRef.set(JSON.stringify(fullTextAnnotation.text))
Вы захотите установить для определенного поля это значение:
return docRef.set({ text: JSON.stringify(fullTextAnnotation.text) })