首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Google Cloud Vision查找图像中特定类型的每个对象

使用Google Cloud Vision查找图像中特定类型的每个对象
EN

Stack Overflow用户
提问于 2021-10-12 08:56:52
回答 1查看 167关注 0票数 0

我想使用Google Vision和Nodejs来检测大型照片中的每个车牌,这样我就可以模糊它们,使它们变得不可读,以保护隐私。

代码语言:javascript
运行
复制
const client = new Vision.ImageAnnotatorClient();
const [result] = await client.objectLocalization(fileUrl);
return result.localizedObjectAnnotations;

问题:这并不能返回图像中的所有对象。它只返回几个。因此,如果我过滤“车牌”,我不会找到图片中的每一个车牌。我尝试过像这样使用文本检测:

代码语言:javascript
运行
复制
const client = new Vision.ImageAnnotatorClient();
const [result] = await client.textDetection(fileUrl);
return result.textAnnotations;

这样做效果更好,但仍有一些车牌未被检测到。这些光板是人眼可读的。如果我只裁剪车牌并通过对象检测功能运行它,AI就会将其识别为车牌。

总而言之: vision API能够识别包含少量对象的小图像中的车牌,但我想进行搜索,以找到大图片中的所有车牌。使用Vision API可以做到这一点吗?

EN

回答 1

Stack Overflow用户

发布于 2021-10-13 10:15:12

在Cloud Vision API中,对象本地化n功能主要用于检测图像中的多个对象。您使用此功能但没有获得输出中的所有车牌的原因是,在Vision API中,您可以在图像中的每个类别中获得最多10个对象。

例如-

如果一个图像有多个类别,如自行车、自行车、手机等,那么使用对象本地化功能,您可以获得每个类别最多10个对象,这意味着Cloud Vision API返回的对象总数超过10个,而不是特定类别的10个以上的对象。

我用一张图片测试了你的用例,我在图片中有大约24个车牌。当我尝试运行代码并进行计数时,我得到了10个车牌对象。

您可以查看以下代码片段和相关输出:

代码语言:javascript
运行
复制
async function localizeObjectsGCS(gcsUri) {
  const vision = require('@google-cloud/vision');

 const client = new vision.ImageAnnotatorClient();
 const data =[]

 const [result] = await client.objectLocalization(gcsUri);
 const objects = result.localizedObjectAnnotations;
 objects.forEach(object => {
   console.log(`Name: ${object.name}`);
   data.push(`Name: ${object.name}`);
  
 });

console.log(data.length);  
}

localizeObjectsGCS(`gs://mybucket/img.jpg`)

输出:

代码语言:javascript
运行
复制
Name: License plate
Name: License plate
Name: License plate
Name: License plate
Name: License plate
Name: License plate
Name: License plate
Name: License plate
Name: License plate
Name: License plate
10

这意味着对于每个类别,您将根据此doc拥有最大数量的对象。在response字段中有一个名为maxResults的参数,我们可以在其中定义每个类别的最大对象数,但它应该小于或等于10。

如果您要使用对象本地化功能,则必须具有最多10个车牌的图像,具体取决于您的使用案例。

关于第二点,您正在应用filter 车牌并进行文本检测,但没有获得输出中的所有数字,这里您也可以尝试使用针对密集文本进行优化的document text detection,而不是文本检测。

您可以参考下面的python代码片段:

代码语言:javascript
运行
复制
from google.cloud import vision
client = vision.ImageAnnotatorClient()
l1=[]
image = vision.Image()


response = client.annotate_image({
 'image': {'source': {'image_uri': 'gs://mybucket/img.jpg'}},
 'features': [{'type_': vision.Feature.Type.OBJECT_LOCALIZATION},
 {'type_': vision.Feature.Type.DOCUMENT_TEXT_DETECTION}
  ]
})

lo_annotations = response.localized_object_annotations
for obj in lo_annotations:
       if obj.name == 'License plate':
           for page in response.full_text_annotation.pages:
     
               for block in page.blocks:

                   for paragraph in block.paragraphs:

                       for word in paragraph.words:
                           words = ''.join([
                       symbol.text for symbol in word.symbols
                       ])
                           print('Words: {} (confidence: {})'.format(
                           words, word.confidence))

输出(完整输出的一部分):

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69537678

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档