首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python:如何从API检索的JSON文件中提取字符串值

Python:如何从API检索的JSON文件中提取字符串值
EN

Stack Overflow用户
提问于 2022-06-12 00:30:12
回答 2查看 508关注 0票数 -1

我正在编程一个ALPR系统,我正在使用OpenALPR API从图片中提取车牌号码。访问服务的默认Python代码如下所示:

代码语言:javascript
复制
import base64
import json

# Sample image file is available at http://plates.openalpr.com/ea7the.jpg
IMAGE_PATH = '/tmp/sample.jpg'
SECRET_KEY = 'sk_DEMODEMODEMODEMODEMODEMO'

with open(IMAGE_PATH, 'rb') as image_file:
    img_base64 = base64.b64encode(image_file.read())

url = 'https://api.openalpr.com/v3/recognize_bytes?recognize_vehicle=1&country=us&secret_key=%s' % (SECRET_KEY)
r = requests.post(url, data = img_base64)

print(json.dumps(r.json(), indent=2))

我对JSON并不熟悉,所以现在我不知道如何提取某个值。print命令的可能输出如下所示:

代码语言:javascript
复制
{
   "data_type" : "alpr_results",
   "epoch_time" : 1592849838217,
   "img_width" : 600,
   "img_height" : 600,
   "error" : false,
   "version" : 3,
   "credit_cost" : 1,
   "uuid" : "",
   "processing_time" : {
      "plates" : 85.0386276245117,
      "vehicles" : 76.9439999994574,
      "total" : 830.30300000064
   },
   "regions_of_interest" : [
      {
         "y" : 0,
         "height" : 600,
         "x" : 0,
         "width" : 600
      }
   ],
   "credits_monthly_used" : 5001,
   "credits_monthly_total" : 100000,
   "results" : [
      {
         "requested_topn" : 10,
         "matches_template" : 1,
         "region_confidence" : 99,
         "plate_index" : 0,
         "plate" : "627WWI",
         "region" : "us-wa",
         "confidence" : 94.0910949707031,
         "coordinates" : [
            {
               "x" : 238,
               "y" : 358
            },
            {
               "x" : 357,
               "y" : 358
            },
            {
               "x" : 357,
               "y" : 408
            },
            {
               "x" : 239,
               "y" : 409
            }
         ],
         "candidates" : [
            {
               "matches_template" : 1,
               "plate" : "627WWI",
               "confidence" : 94.0910949707031
            },
            {
               "matches_template" : 0,
               "plate" : "627WW1",
               "confidence" : 74.0910949707031
            }
         ],
         "vehicle_region" : {
            "y" : 96,
            "x" : 3,
            "width" : 589,
            "height" : 483
         },
         "processing_time_ms" : 8.83281803131104,
         "vehicle_detected" : true,
         "vehicle" : {
            "make" : [
               {
                  "name" : "daihatsu",
                  "confidence" : 67.1475448608398
               },
               {
                  "name" : "mini",
                  "confidence" : 18.6626739501953
               },
               {
                  "name" : "fiat",
                  "confidence" : 8.87434959411621
               },
               {
                  "confidence" : 1.25781571865082,
                  "name" : "scion"
               },
               {
                  "confidence" : 1.04451608657837,
                  "name" : "toyota"
               }
            ],
            "year" : [
               {
                  "name" : "2005-2009",
                  "confidence" : 54.0047645568848
               },
               {
                  "confidence" : 39.7950668334961,
                  "name" : "2000-2004"
               },
               {
                  "name" : "2010-2014",
                  "confidence" : 5.38613367080688
               },
               {
                  "name" : "1995-1999",
                  "confidence" : 0.628315031528473
               },
               {
                  "confidence" : 0.16707843542099,
                  "name" : "1990-1994"
               }
            ],
            "color" : [
               {
                  "confidence" : 77.7851638793945,
                  "name" : "silver-gray"
               },
               {
                  "confidence" : 9.67624187469482,
                  "name" : "blue"
               },
               {
                  "name" : "black",
                  "confidence" : 7.02981376647949
               },
               {
                  "name" : "green",
                  "confidence" : 2.66030049324036
               },
               {
                  "name" : "gold-beige",
                  "confidence" : 1.42329037189484
               }
            ],
            "orientation" : [
               {
                  "name" : "180",
                  "confidence" : 99.9426956176758
               },
               {
                  "name" : "225",
                  "confidence" : 0.0323438383638859
               },
               {
                  "name" : "135",
                  "confidence" : 0.0129895266145468
               },
               {
                  "name" : "45",
                  "confidence" : 0.00725177442654967
               },
               {
                  "confidence" : 0.00194440386258066,
                  "name" : "90"
               }
            ],
            "body_type" : [
               {
                  "confidence" : 99.8512573242188,
                  "name" : "sedan-compact"
               },
               {
                  "name" : "tractor-trailer",
                  "confidence" : 0.0433907173573971
               },
               {
                  "name" : "sedan-sports",
                  "confidence" : 0.0432351566851139
               },
               {
                  "confidence" : 0.0218438617885113,
                  "name" : "suv-crossover"
               },
               {
                  "confidence" : 0.0212091449648142,
                  "name" : "sedan-wagon"
               }
            ],
            "make_model" : [
               {
                  "name" : "mini_cooper-s",
                  "confidence" : 35.001880645752
               },
               {
                  "confidence" : 23.0991153717041,
                  "name" : "mini_cooper"
               },
               {
                  "confidence" : 5.29244709014893,
                  "name" : "daihatsu_sirion"
               },
               {
                  "name" : "mini_hatch",
                  "confidence" : 4.69152307510376
               },
               {
                  "confidence" : 4.35747337341309,
                  "name" : "daihatsu_tanto"
               }
            ]
         }
      }
   ],
   "vehicles" : [
      {
         "x" : 3,
         "y" : 96,
         "width" : 589,
         "height" : 483,
         "details" : {
            "orientation" : [
               {
                  "name" : "180",
                  "confidence" : 99.9426956176758
               },
               {
                  "name" : "225",
                  "confidence" : 0.0323438383638859
               },
               {
                  "name" : "135",
                  "confidence" : 0.0129895266145468
               },
               {
                  "confidence" : 0.00725177442654967,
                  "name" : "45"
               },
               {
                  "name" : "90",
                  "confidence" : 0.00194440386258066
               }
            ],
            "make" : [
               {
                  "name" : "daihatsu",
                  "confidence" : 67.1475448608398
               },
               {
                  "name" : "mini",
                  "confidence" : 18.6626739501953
               },
               {
                  "confidence" : 8.87434959411621,
                  "name" : "fiat"
               },
               {
                  "confidence" : 1.25781571865082,
                  "name" : "scion"
               },
               {
                  "confidence" : 1.04451608657837,
                  "name" : "toyota"
               }
            ],
            "color" : [
               {
                  "name" : "silver-gray",
                  "confidence" : 77.7851638793945
               },
               {
                  "name" : "blue",
                  "confidence" : 9.67624187469482
               },
               {
                  "name" : "black",
                  "confidence" : 7.02981376647949
               },
               {
                  "confidence" : 2.66030049324036,
                  "name" : "green"
               },
               {
                  "confidence" : 1.42329037189484,
                  "name" : "gold-beige"
               }
            ],
            "year" : [
               {
                  "name" : "2005-2009",
                  "confidence" : 54.0047645568848
               },
               {
                  "name" : "2000-2004",
                  "confidence" : 39.7950668334961
               },
               {
                  "name" : "2010-2014",
                  "confidence" : 5.38613367080688
               },
               {
                  "name" : "1995-1999",
                  "confidence" : 0.628315031528473
               },
               {
                  "confidence" : 0.16707843542099,
                  "name" : "1990-1994"
               }
            ],
            "make_model" : [
               {
                  "confidence" : 35.001880645752,
                  "name" : "mini_cooper-s"
               },
               {
                  "confidence" : 23.0991153717041,
                  "name" : "mini_cooper"
               },
               {
                  "name" : "daihatsu_sirion",
                  "confidence" : 5.29244709014893
               },
               {
                  "confidence" : 4.69152307510376,
                  "name" : "mini_hatch"
               },
               {
                  "name" : "daihatsu_tanto",
                  "confidence" : 4.35747337341309
               }
            ],
            "body_type" : [
               {
                  "confidence" : 99.8512573242188,
                  "name" : "sedan-compact"
               },
               {
                  "confidence" : 0.0433907173573971,
                  "name" : "tractor-trailer"
               },
               {
                  "confidence" : 0.0432351566851139,
                  "name" : "sedan-sports"
               },
               {
                  "confidence" : 0.0218438617885113,
                  "name" : "suv-crossover"
               },
               {
                  "confidence" : 0.0212091449648142,
                  "name" : "sedan-wagon"
               }
            ]
         }
      }
   ]
}

我的目标是通过候选人的最大概率(关于“板块”号码),准确到一个新的字符串,我可以在以后的程序中使用。

我怎么能做到呢?任何帮助都是非常感谢的!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-06-12 00:43:10

你在这里的目标是什么,但我认为也许是最大值

假设确定了候选人和结果(因此不会出现错误),您可以这样做

代码语言:javascript
复制
data = r.json()  # the response json (a dict object)
results = data["results"]
all_best_candidates = []

for result in results:
    candidate_list = result["candidates"]
    best_candidate = max(candidate_list, key=lambda x: x["confidence"])
    # You can do whatever you want here
    # Just dont forget that results can be more than 1
    
    # this will be used later to get the best candidate of ALL results
    all_best_candidates.append(best_candidate)

absolute_best_candidate = max(all_best_candidates, key=lambda x: x["confidence"])

简单说明:最大值函数比较列表中的元素以找到最大值,我们使用key参数,这样我们就可以告诉max函数使用什么值,在本例中是candidates

data['results']是一个包含大量数据的列表,所以我们使用上面提到的最大值来获得每个结果的最高值,并将它们存储在best_candidates中,然后我们可以使用这个列表来获得它们的最佳结果,使用相同的方法。

票数 1
EN

Stack Overflow用户

发布于 2022-06-12 00:37:27

你可以简单地做:

代码语言:javascript
复制
jsn = r.json()
resultsList = jsn['results']

candidateList = []
for r in resultsList:
  candidateList.append(r['candidates'])

您可以按以下方式迭代candidateList

代码语言:javascript
复制
for c in candidateList:
  # you can do comparison here to find probability
  print(c['plate']) 

编辑1:在实现results is list,而不是dict之后,我更新了代码

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

https://stackoverflow.com/questions/72588752

复制
相关文章

相似问题

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