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