当前位置: 首页 > article >正文

调用百度智能云API实现货币识别

1.作者介绍

卢美琳,女,西安工程大学电子信息学院,2024级研究生

研究方向:机器视觉与人工智能

电子邮件:2251081972@qq.com

王子谦,男,西安工程大学电子信息学院,2024级研究生,张宏伟人工智能课题组

研究方向:机器视觉与人工智能

电子邮件:1523018430@qq.com

2.百度智能云API货币识别接口介绍

2.1 图像识别接口介绍

组合服务接口提供一个API接口,同时调用多个模型服务。支持图像识别的多个接口:通用物体和场景识别、图像单主体检测、动物识别、植物识别、果蔬识别、自定义菜品识别-检索、菜品识别、红酒识别、地标识别、图像多主体检测等12个模型服务的调用。可通过入参灵活指定需要调用的模型服务,传入图像,返回指定模型的识别结果。

该请求用于通用物体及场景识别,即对于输入的一张图片(可正常解码,且长宽比适宜),输出图片中的多个物体及场景标签。

2.2 接口使用说明

  • 组合服务接口根据请求参数确定要使用的模型服务类型,具体的请求参数和
  • 返回结果见下方描述。
  • 图像识别相关接口同时提供独立的服务接口,针对每个模型的出入参,可参
  • 考百度AI开放平台官网每个独立服务接口的文档。

2.2.1 请求示例

HTTP方法POST

请求URL https://aip.baidubce.com/api/v1/solution/direct/imagerecognition/combination

URL参数

参数
access_token通过API KeySecret Key获取的access_token,参考Access Token获取

Header如下:

参数
Content-Typeapplication/json;charset=utf-8

2.2.2 请求参数

Body中放置请求参数,参数详情如下:

参数类型是否必须说明
imagestring

图像数据,base64编码,示例如:/9j/4AAQSkZJRgABAQEPMpJkR0FdXVridlPy/9k=

imgUrlstring图像Url,和image参数二选一,不需要urlEncode,示例如:https://aip.bdstatic.com/portal-pc-node/dist/1591263471100/images/technology/imagerecognition/general/1.jpg
scenesarray指定本次调用的模型服务,以字符串数组表示。元素含义如下:advanced_general:通用物体和场景识别object_detect:图像单主体检测multi_object_detect:图像多主体检测animal:动物识别plant:植物识别ingredient:果蔬识别dish_search:自定义菜品识别-检索dishs:菜品识别red_wine:红酒识别currency:货币识别landmark:地标识别示例如:“scenes”:[“currency”,”animal”,”plant”]
sceneConfjsonObject对特定服务,支持的个性化参数,若不填则使用默认设置。jsonObject说明:key为要设置入参的服务类型,可取值同scenes字段,例如:advanced_general:通用物体和场景识别object_detect:图像单主体检测value为各模型服务个性化参数,详情请参照下文或百度AI开放平台官网图像识别具体接口文档

2.2.3 返回参数

字段

类型

是否必须

说明

log_id

uint64

唯一的log id,用于问题定位。

result

object

返回结果json串,其内包含要调用的各个模型服务的返回结果。

advanced_general

object

「通用物体和场景识别」服务返回结果。请参照“通用物体和场景识别接口文档”

object_detect

object

「图像单主体检测」服务返回结果。请参照“图像单主体检测接口文档”

multi_object_detect

object

「图像多主体检测」服务返回结果。请参照“图像多主体检测接口文档”

animal

object

「动物识别」服务返回结果。请参照“动物识别接口文档”

plant

object

「植物识别」服务返回结果。请参照“植物识别接口文档”

ingredient

object

「果蔬识别」服务返回结果。请参照“果蔬识别接口文档”

dish_search

object

「自定义菜品识别-检索」服务返回结果。请参照“自定义菜品识别-检索接口文档”

dishs

object

「菜品识别」服务返回结果。请参照“菜品识别接口文档”

red_wine

object

「红酒识别」服务返回结果。请参照“红酒识别接口文档”

currency

object

「货币识别」服务返回结果。请参照“货币识别接口文档”

landmark

object

「地标识别」服务返回结果。请参照“地标识别接口文档”

3.调用百度云API流程

步骤一:搜索百度智能云,注册登录百度智能云,并进行实名认证

步骤二:点击控制台进入总览界面,点击左上角九个点。

步骤三:点击左上角九个点进入产品导览,选择人工智能里面的图像识别,进去签署知情同意书。

步骤四:实名认证后,创建应用。

步骤五:实名认证后,创建应用,点击应用列表,获取App IDAPI KeySecret Key

4.代码实现

4.1 完整代码

from aip import AipImageClassify

""" 你的 APPID AK SK """
APP_ID = '你的APP_ID'
API_KEY = '你的API_KEY'
SECRET_KEY = '你的SECRET_KEY'

client = AipImageClassify(APP_ID, API_KEY, SECRET_KEY)

""" 读取图片 """
def get_file_content(filePath):
 with open(filePath, 'rb') as fp:
     return fp.read()
image = get_file_content('输入你的图片路径') # path为测试图片路径,例如C:/Users/啦啦啦/Desktop/10.jpg

""" 如果有可选参数 """
options = {}
options["top_num"] = 5 # 最多返回的结果数

""" 调用通用物体识别 """
result = client.advancedGeneral(image, options)

""" 处理返回结果 """
if "error_code" in result:
   print("API 调用失败,错误信息:", result)
else:
   print("API 调用成功,识别结果:")
   if "result" in result:
       for item in result["result"]:
           print("识别出的物体名称:", item["keyword"], "置信度:", item["score"])
   else:
       print("未识别到物体")

4.1.1 测试货币

100元识别

10元识别

古币识别

4.1.2 问题与分析

问题一:报错

分析问题原因py36环境中没有安装aip库。

解决办法:在py36虚拟环境中安装baidu-aip库。

问题二:显示调用失败

分析问题原因:不能调用货币识别或者没有权限访问货币识别API

解决办法:调用通用物体和场景识别接口API

问题三:识别出的置信度最高的与输入图片中物体不对应,输入古钱币的图片,输出置信度最高的是蚁鼻钱。

分析问题原因:可能是由于图像特征与模型训练数据中的某些类别相似或者图片背景复杂或光线不佳,导致模型误判。

解决办法:换张高清图片,截取想要识别的那个物体。

4.2 改进

上述代码只输出了识别出的物体名称和置信度,还想输出对应识别结果的百科词条名称,页面链接,图片链接和内容描述,因此对上述代码做出改进。

4.2.1 完整代码

import urllib.request
import base64
import json
import requests
from bs4 import BeautifulSoup

# client_id 为官网获取的AK, client_secret 为官网获取的SK
client_id = '你的API_KEY'
client_secret = '你的SECRET_KEY'

# 获取token
def get_token():
   host = 'https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=' + client_id + '&client_secret=' + client_secret
   request = urllib.request.Request(host)
   request.add_header('Content-Type', 'application/json; charset=UTF-8')
   response = urllib.request.urlopen(request)
   token_content = response.read()
   if token_content:
       token_info = json.loads(token_content)
       token_key = token_info['access_token']
   return token_key

# 通用物体识别
# filename: 图片名(本地存储包括路径)
def object_recognition(filename):
   request_url = "https://aip.baidubce.com/rest/2.0/image-classify/v2/advanced_general"

   # 二进制方式打开图片文件
   with open(filename, 'rb') as f:
       img = base64.b64encode(f.read())

   params = {
       'image': img,
       'with_face': 0  # 是否包含人脸,0表示不包含
   }
   params = urllib.parse.urlencode(params).encode("utf-8")

   access_token = get_token()
   request_url = request_url + "?access_token=" + access_token
   request = urllib.request.Request(url=request_url, data=params)
   request.add_header('Content-Type', 'application/x-www-form-urlencoded')
   response = urllib.request.urlopen(request)
   content = response.read()

   if content:
       content = content.decode('utf-8')
       data = json.loads(content)

       # 解析识别结果
       results = data['result']
       for result in results:
           keyword = result['keyword']
           score = result['score']
           print(f'物体名称: {keyword}, 置信度: {score}')

           # 获取百度百科词条信息
           baike_info = get_baike_info(keyword)
           if baike_info:
               print(f'百度百科词条名称: {baike_info["baike_name"]}')
               print(f'百度百科内容描述: {baike_info["baike_content"]}')
               print(f'百度百科页面链接: {baike_info["baike_url"]}')
               if baike_info["baike_image_url"]:
                   print(f'百度百科图片链接: {baike_info["baike_image_url"]}')
               else:
                   print('百度百科图片链接: 无图片链接')
           else:
               print('未找到对应的百度百科词条信息')

   return results

# 获取百度百科词条信息
import requests
from bs4 import BeautifulSoup

def get_baike_info(keyword):
   # 对关键词进行 URL 编码
   encoded_keyword = urllib.parse.quote(keyword)
   url = f'https://baike.baidu.com/item/{encoded_keyword}'
   try:
       # 发送HTTP请求
       response = requests.get(url)
       response.encoding = 'utf-8'  # 显式指定编码

       # 使用BeautifulSoup解析HTML
       soup = BeautifulSoup(response.text, 'html.parser')

       # 检查是否存在百科词条
       error_page = soup.find('div', class_='errorBox')
       if error_page:
           print(f'未找到关键词 "{keyword}" 的百度百科词条')
           return None

       # 获取百科词条名称
       title_tag = soup.find('h1')
       if not title_tag:
           print(f'未找到百科词条名称: {keyword}')
           return None
       baike_name = title_tag.text.strip()

       # 获取百科页面链接
       baike_url = url

       # 获取百科内容描述
       # 使用百度百科的API接口获取描述
       api_url = f'https://baike.baidu.com/api/openapi/BaikeLemmaCardApi?scope=103&format=json&appid=379020&bk_key={encoded_keyword}'
       api_response = requests.get(api_url)
       api_response.encoding = 'utf-8'
       api_data = api_response.json()

       if api_data and 'abstract' in api_data:
           baike_content = api_data['abstract']
       else:
           baike_content = '无描述信息'

       # 获取百科图片链接
       image_tags = soup.find_all('img')  # 查找所有图片标签
       baike_image_url = None
       for tag in image_tags:
           if tag.get('src') and 'bkimg.cdn.bcebos.com' in tag['src']:  # 检查图片URL是否包含百度百科的域名
               baike_image_url = tag['src']
               break

       return {
           'baike_name': baike_name,
           'baike_content': baike_content,
           'baike_url': baike_url,
           'baike_image_url': baike_image_url
       }
   except Exception as e:
       print(f'获取百度百科信息失败: {e}')
       return None

# 测试
if __name__ == '__main__':
   filename = '输入你的图片路径'  # 替换为你的图片路径,例如C:/Users/啦啦啦/Desktop/100.webp
   object_recognition(filename)

4.2.2 测试货币

5.参考链接

调用百度API实现菜品识别_百度菜品识别-CSDN博客

【攻略】百度货币识别API,搞定防诈骗的应用小程序-CSDN博客

 


http://www.kler.cn/a/592473.html

相关文章:

  • C语言经典代码练习题
  • 【论文阅读】CARES:医学视觉语言模型可信度的综合基准
  • 布谷视频直播系统源码开发:深度剖析从架构设计到实现
  • 若依分离版整合多数据源——Phoenix+HBase
  • LiteratureReading:[2017] Attention Is All You Need
  • MSys2统一开发环境,快速搭建windows opencv环境
  • jmeter定时器-Constant Throughput Timer
  • 【从零开始学习计算机】计算机网络(二)物理层
  • Web3到底解决了什么问题?
  • 隐私权案件如何办理?公众人物隐私权为何受限?
  • 【Linux】Windows 客户端访问 Linux 服务器
  • 《Linux 网络架构:基于 TCP 协议的多人聊天系统搭建详解》
  • 数据库GreenDao的使用、升级、以及相关常用注释说明
  • 如何为预训练模型进行领域适配:全参数微调、LoRA 还是 Prompt Tuning?
  • 3.数据探索与可视化基本图形(直方图、箱线图、散点图)——Python数据挖掘代码实践
  • Java 中 LinkedList 的底层数据结构及相关分析
  • kubectl describe pod 命令以及输出详情讲解
  • 基于Flask的自闭症患者诊断辅助系统:助力自闭症诊断
  • 【Golang那些事】go1.22和1.23 更新重点及测评
  • 从技术角度看交互作用分析