当前位置: 首页 > 知识库问答 >
问题:

Google Cloud Vision-如何使用节点发送请求属性。js

嵇浩淼
2023-03-14

我正在使用谷歌云视觉检测图像上的文本。这种方法在80%的情况下有效。另外20%,我得到了这个错误:

Error: 3 INVALID_ARGUMENT: Request must specify image and features.
    at Object.callErrorFromStatus (C:\Users\emily\workspace\bot\node_modules\@grpc\grpc-js\build\src\call.js:31:26)
    at Object.onReceiveStatus (C:\Users\emily\workspace\bot\node_modules\@grpc\grpc-js\build\src\client.js:180:52)
    at Object.onReceiveStatus (C:\Users\emily\workspace\bot\node_modules\@grpc\grpc-js\build\src\client-interceptors.js:336:141)
    at Object.onReceiveStatus (C:\Users\emily\workspace\bot\node_modules\@grpc\grpc-js\build\src\client-interceptors.js:299:181)
    at C:\Users\emily\workspace\bot\node_modules\@grpc\grpc-js\build\src\call-stream.js:160:78
    at processTicksAndRejections (node:internal/process/task_queues:78:11) {
  code: 3,
  details: 'Request must specify image and features.',
  metadata: Metadata { internalRepr: Map(0) {}, options: {} },
  note: 'Exception occurred in retry method that was not classified as transient'

当我在谷歌上搜索这个问题时,似乎我需要发送特定的标题和我的请求来解决这个问题,基本上就像这里指定的:https://cloud.google.com/vision/docs/ocr#specify_the_language_optional

但是,我不知道如何用我正在使用的Node.js代码发送这些请求参数,我在任何地方都找不到任何示例。有人能帮我弄清楚如何使用这个吗?我目前的代码是这样的:

                // Performs text detection on the image file using GCV
                (async () => {
                    await Jimp.read(attachment.url).then(image => {
                        return image
                            .invert()
                            .contrast(0.5)
                            .brightness(-0.25)
                            .write('temp.png');
                    });

                    const [result] = await googleapis.textDetection('temp.png');
                    const fullImageResults = result.textAnnotations;

谢谢!

共有1个答案

齐承泽
2023-03-14

如果您使用的是Node。js与Vision API一起使用时,您可以参考此示例快速启动代码来使用Node。用于文本检测的Vision API中的js客户端库。

对于您面临的错误,可以参考以下代码添加请求参数:

index.js:

async function quickstart() {
   const vision = require('@google-cloud/vision');
    const client = new vision.ImageAnnotatorClient();
    const request = {
     "requests": [
       {
         "image": {
           "source": {
             "imageUri": "gs://bucket1/download.png"
           }
         },
         "features": [
           {
             "type": "TEXT_DETECTION"
           }
         ],
         "imageContext": {
           "languageHints": ["en"]
         }
       }
     ]
   };
    const [result] = await client.batchAnnotateImages(request);
   const detections = result.responses[0].fullTextAnnotation;
   console.log(detections.text);
 }
  quickstart().catch(console.error);

在上面的代码中,我已经将图像存储在GCS中,并在代码中使用了图像的路径。

图片:

输出:

It was the best of
times, it was the worst
of times, it was the age
of wisdom, it was the
age of foolishness...

如果要使用存储在本地系统中的图像文件,可以参考以下代码。

由于文件位于本地系统中,首先需要将其转换为base64编码的字符串格式,并在代码中的请求参数中传递相同的格式。

index.js:

async function quickstart() {

   const vision = require('@google-cloud/vision');

   const client = new vision.ImageAnnotatorClient();
  
   const request ={
     "requests":[
       {
         "image":{
           "content":"/9j/7QBEUGhvdG9...image contents...eYxxxzj/Coa6Bax//Z"
                },
         "features": [
           {
             "type":"TEXT_DETECTION"
           }
         ],
         "imageContext": {
           "languageHints": ["en"]
         }
       }
     ]
   };
   const [result] = await client.batchAnnotateImages(request);
   const detections = result.responses[0].fullTextAnnotation;
   console.log(detections.text);
  
   }
  
   quickstart();
 类似资料:
  • 问题内容: 想象一下,客户端应用程序需要访问Cassandra集群。在Java api中,我们创建一个集群实例,并通过Session发送读取或写入请求。如果我们使用读/写一致性ONE,则api如何选择实际节点(协调器节点)以转发请求。是随机选择吗?请帮忙弄清楚。 问题答案: Cassandra驱动程序使用“ gossip”协议(以及称为节点发现的过程)来获取有关群集的信息。如果某个节点不可用,则客

  • 我有两个节点js应用程序,一个发送post请求,如下所示: 另一个是试图用表达式和正文解析器来处理它: 问题是在接收端我无法检索我正在寻找的json数据。有人知道我错过了什么吗?

  • 问题内容: 我正在尝试向SOAP Web服务发送请求。我阅读了本教程并准备了以下代码。但是,我将向多个SOAP Web服务发送不同的请求,而本教程只关注一个请求。如何使用发送SOAP请求? WebServiceTemplate 问题答案: 您可以使用以下代码,而无需在xml文件中定义任何内容。

  • 问题内容: 我不想使用文件,但是只有django才需要发出POST请求。 就像发送请求一样。 问题答案: 结合使用urllib2和urllib中的方法即可解决问题。这是我使用这两种方法发布数据的方式: 是用于打开URL的方法。 将参数转换为百分比编码的字符串。

  • 剪辑过,我剪短了。 代码变量被赋值 首先需要用get请求触发php脚本,输出不应该保存 然后,当上面的请求完成后,将get请求发送到并将响应保存到一个变量, 对于https://flower.nyaizhel.ml/fun/carbon/shorturl.php?short&code=ii,它应该是6,请参阅url 我试着取,没有结果

  • 我知道Javascript,但对NodeJS非常陌生。我希望在代码中的任何位置,即server.js之外的位置,重用HTTP请求。请看一看: server.js