我想使用Google Vision和Nodejs来检测大型照片中的每个车牌,这样我就可以模糊它们,使它们变得不可读,以保护隐私。
const client = new Vision.ImageAnnotatorClient();
const [result] = await client.objectLocalization(fileUrl);
return result.localizedObjectAnnotations;
问题:这并不能返回图像中的所有对象。它只返回几个。因此,如果我过滤“车牌”,我不会找到图片中的每一个车牌。我尝试过像这样使用文本检测:
const client = new Vision.ImageAnnotatorClient();
const [result] = await client.textDetection(fileUrl);
return result.textAnnotations;
这样做效果更好,但仍有一些车牌未被检测到。这些光板是人眼可读的。如果我只裁剪车牌并通过对象检测功能运行它,AI就会将其识别为车牌。
总而言之: vision API能够识别包含少量对象的小图像中的车牌,但我想进行搜索,以找到大图片中的所有车牌。使用Vision API可以做到这一点吗?
发布于 2021-10-13 10:15:12
在Cloud Vision API中,对象本地化n功能主要用于检测图像中的多个对象。您使用此功能但没有获得输出中的所有车牌的原因是,在Vision API中,您可以在图像中的每个类别中获得最多10个对象。
例如-
如果一个图像有多个类别,如自行车、自行车、手机等,那么使用对象本地化功能,您可以获得每个类别最多10个对象,这意味着Cloud Vision API返回的对象总数超过10个,而不是特定类别的10个以上的对象。
我用一张图片测试了你的用例,我在图片中有大约24个车牌。当我尝试运行代码并进行计数时,我得到了10个车牌对象。
您可以查看以下代码片段和相关输出:
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`)
输出:
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代码片段:
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))
输出(完整输出的一部分):
https://stackoverflow.com/questions/69537678
复制相似问题