Python调用腾讯API实现车辆号牌识别

Python调用腾讯API实现车辆号牌识别

1.作者介绍

张家腾,男,西安工程大学电子信息学院,2025级研究生

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

电子邮件:657984441@qq.com

2.关于理论方面的知识介绍

2.1 OCR技术介绍

OCR(Optical Character Recognition,光学字符识别)是一种将图像中的文字信息转换为可编辑文本的技术。车牌识别属于OCR在交通与车辆管理领域中的具体应用,其核心任务是在车辆图片中定位车牌区域,并识别车牌上的省份简称、字母和数字。

与普通文字识别相比,车牌识别还需要关注车牌区域定位、车牌颜色判断、字符排列规则以及图像拍摄角度等因素。因此,车牌识别通常将图像检测、字符识别和结果结构化输出结合在一起完成。

2.2 腾讯云车牌识别接口介绍

本实验使用腾讯云文字识别OCR中的车牌识别接口LicensePlateOCR。该接口支持对中国大陆机动车车牌进行自动定位和识别,能够返回车牌号码、车牌颜色以及车牌在图片中的坐标位置等信息。

接口请求域名为 ocr.tencentcloudapi.com。程序可以通过图片Base64编码或图片URL的方式提交图像数据,本实验采用本地图片转Base64编码的方式进行调用。

注意:SecretId和SecretKey属于腾讯云账号敏感凭证,实验中通过环境变量读取,不在代码正文中明文保存。

2.3 技术流程

本实验的技术流程如下:准备车辆图片 → 读取腾讯云密钥 → 将图片转换为Base64编码 → 构造LicensePlateOCR请求 → 调用腾讯云OCR接口 → 解析JSON返回结果 → 输出车牌号码和车牌颜色。

3.关于实验过程的介绍,完整实验代码,测试结果

3.1 数据集、环境准备与软件包

本实验采用一张车辆号牌清晰的测试图片作为输入,文件名为 car.jpg。图片与程序文件放置在同一项目文件夹 plate_ocr 中,便于程序通过相对路径直接读取。

图1 测试车辆图片 car.jpg

图2 项目文件夹结构

实验运行环境为 Windows 系统下的 Anaconda Prompt,Python版本为3.8.15。需要安装的主要软件包为 tencentcloud-sdk-python,该SDK用于在Python程序中调用腾讯云服务接口。

图3 Python环境检查

主要安装命令如下:

pip install tencentcloud-sdk-python

3.2 腾讯云服务开通与密钥配置

在腾讯云控制台中开通文字识别OCR服务,并在服务列表中确认"车牌识别 LicensePlateOCR"接口处于可使用状态。控制台中可查看接口类别、资源包使用情况以及接口QPS上限等信息。

图4 腾讯云车牌识别服务开通情况

随后,在腾讯云访问管理页面获取API密钥,并在Windows环境变量中保存为 TENCENTCLOUD_SECRET_ID 和 TENCENTCLOUD_SECRET_KEY。程序运行时通过 os.getenv() 读取密钥。

注意:密钥不要直接写入代码,也不要在报告截图中展示完整SecretKey。

3.3 实验步骤

第一步:在Anaconda Prompt中确认Python环境是否可用。

第二步:创建项目文件夹plate_ocr,并将测试图片car.jpg和程序plate_ocr.py放在同一文件夹。

第三步:安装腾讯云Python SDK。

第四步:在腾讯云控制台开通LicensePlateOCR车牌识别接口。

第五步:配置SecretId和SecretKey环境变量。

第六步:编写Python程序读取图片、转换Base64并调用接口。

第七步:运行程序并查看返回结果。

3.4 完整实验代码

下面给出本实验使用的完整Python代码。代码中包含读取环境变量、读取图片、Base64编码、调用腾讯云OCR接口和解析返回结果等步骤,并添加了较为详细的注释。

python 复制代码
import os
import base64
import json

from tencentcloud.common import credential
from tencentcloud.common.exception.tencent_cloud_sdk_exception import TencentCloudSDKException
from tencentcloud.ocr.v20181119 import ocr_client, models


def image_to_base64(image_path):
    """
    将本地图片转换为Base64字符串。
    腾讯云OCR接口支持接收Base64格式的图片数据,因此需要先完成编码。
    """
    with open(image_path, "rb") as f:
        return base64.b64encode(f.read()).decode("utf-8")


def main():
    # 从Windows环境变量中读取腾讯云API密钥,避免在代码中明文保存密钥
    secret_id = os.getenv("TENCENTCLOUD_SECRET_ID")
    secret_key = os.getenv("TENCENTCLOUD_SECRET_KEY")

    # 如果没有读取到密钥,直接提示并结束程序
    if not secret_id or not secret_key:
        print("没有读取到腾讯云密钥,请检查环境变量。")
        return

    # 本实验使用的测试图片,要求与plate_ocr.py放在同一文件夹
    image_path = "car.jpg"

    # 判断图片是否存在,避免路径错误导致程序异常
    if not os.path.exists(image_path):
        print("没有找到图片:car.jpg")
        print("请把车牌图片放到当前文件夹,并命名为 car.jpg")
        return

    try:
        # 1. 创建腾讯云身份认证对象
        cred = credential.Credential(secret_id, secret_key)

        # 2. 创建OCR客户端,地域参数使用ap-guangzhou
        client = ocr_client.OcrClient(cred, "ap-guangzhou")

        # 3. 创建车牌识别请求对象
        req = models.LicensePlateOCRRequest()

        # 4. 将图片Base64编码写入请求参数
        req.ImageBase64 = image_to_base64(image_path)

        # 5. 调用腾讯云车牌识别接口
        resp = client.LicensePlateOCR(req)

        # 6. 将返回结果转换为Python字典,方便读取字段
        result = json.loads(resp.to_json_string())

        # 输出完整JSON结果
        print("完整识别结果:")
        print(json.dumps(result, ensure_ascii=False, indent=2))

        # 输出重点结果
        print("\n重点结果:")
        print("车牌号:", result.get("Number"))
        print("车牌颜色:", result.get("Color"))
        print("车牌类型:", result.get("LicensePlateCategory"))

    except TencentCloudSDKException as e:
        # 捕获腾讯云SDK异常,方便定位接口调用错误
        print("调用腾讯云接口失败:")
        print(e)
if __name__ == "__main__":
    main()

3.5 测试结果

运行 plate_ocr.py 后,程序成功调用腾讯云OCR接口,并返回车辆号牌识别结果。根据运行结果,测试图片中的车牌号识别为"浙F77777",车牌颜色为"蓝",车牌类型为"标准实体车牌"。

图5 程序运行结果

项目 识别结果
车牌号 浙F77777
车牌颜色
车牌类型 标准实体车牌
车牌位置 X=148,Y=168,Width=159,Height=44

从测试结果可以看出,程序能够完成本地图片读取、Base64编码、接口调用以及返回结果解析,达到了车辆号牌识别的实验目标。

3.6 常见问题与处理

(1)服务未开通:如果未开通腾讯云OCR车牌识别服务,程序调用时会提示服务未开通。解决方法是在腾讯云控制台开通LicensePlateOCR接口。

(2)图片路径错误:如果car.jpg没有放在程序同一目录,或文件名写错,程序会提示找不到图片。解决方法是检查图片名称与存放位置。

(3)密钥配置错误:如果环境变量中的SecretId或SecretKey配置错误,接口认证会失败。解决方法是重新检查环境变量和腾讯云访问密钥。

(4)网络连接异常:调用云端API需要访问腾讯云服务器,如本地网络或代理设置异常,可能导致接口请求失败。解决方法是检查网络环境或设置腾讯云接口直连。

4.参考连接

1\] 腾讯云文字识别OCR:车牌识别 LicensePlateOCR 接口文档,https://cloud.tencent.com/document/product/866/36211 \[2\] Tencent Cloud SDK for Python,https://pypi.org/project/tencentcloud-sdk-python/ \[3\] Python官方文档:base64模块,https://docs.python.org/zh-cn/3/library/base64.html

相关推荐
kexnjdcncnxjs1 小时前
CSS如何利用-nth-of-type(1)修改首个元素样式_通过位置约束精准修饰
jvm·数据库·python
dinglu1030DL1 小时前
Tailwind CSS如何实现鼠标悬停变色_使用hover-bg-blue-500类.txt
jvm·数据库·python
神明9311 小时前
Tailwind CSS如何实现鼠标悬停变色_使用hover-bg-blue-500类
jvm·数据库·python
2401_850491651 小时前
Redis如何监控系统QPS的变化趋势
jvm·数据库·python
m0_463672201 小时前
c++如何利用filesystem--relative计算两个文件之间的相对路径【详解】
jvm·数据库·python
m0_596749091 小时前
C#怎么使用with表达式 C#record类型中with表达式怎么用如何创建对象的修改副本【语法】
jvm·数据库·python
神明9311 小时前
uni-app动画效果实现 uni-app如何使用animation API
jvm·数据库·python
m0_690825821 小时前
uni-app怎么做类似于微博的新消息气泡 uni-app角标动画效果实现【代码】
jvm·数据库·python
m0_631529821 小时前
uni-app iOS后台运行 uni-app App如何实现后台定位或音乐播放
jvm·数据库·python