You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python和Pandas DataFrame实现车牌字符串相似度匹配?

车牌匹配相似度检测实现问题

需求说明

  • 用Pandas将采集到的车牌文本与Excel中的登记车牌DataFrame做对比
  • 因OCR识别存在I与1、l混淆的误差,需实现字符相似度匹配逻辑:当登记车牌与采集车牌的7个字符中有6个相同时,执行通行通过操作

原代码问题分析

原代码存在语法错误与逻辑漏洞:

  1. for plateR.iloc(pos) in registered_plates: 遍历DataFrame的语法错误
  2. if plateR[i] == plateC[i] 语句缺少冒号
  3. 循环逻辑错误:仅对比第一个字符后就执行break,无法完成全字符遍历
  4. 百分比计算公式括号不匹配,逻辑有误
  5. 变量名不一致:placasR与定义的变量名不统一

修正后的代码

import pandas as pd

# 初始化变量,collected_plate替换为实际采集到的车牌
collected_plate = "ABC123I"
matched_plate = None
match_count = 0

# 读取Excel中的登记车牌数据
xlsx_path = r"C:\My Computer\Downloads\Python\Project.xlsx"
registered_plates = pd.read_excel(xlsx_path)
# 假设Excel中车牌列名为"plate",请根据实际情况修改
plate_col = "plate"

# 遍历所有登记车牌
for idx, row in registered_plates.iterrows():
    reg_plate = str(row[plate_col]).strip()
    # 过滤非7位的无效车牌
    if len(reg_plate) != 7 or len(collected_plate) != 7:
        continue
    # 统计匹配字符数,同时处理I/1/l的混淆问题
    current_match = 0
    for r_char, c_char in zip(reg_plate, collected_plate):
        # 将I、l、1视为等价字符,解决OCR识别误差
        r_group = r_char.lower() in {'i', 'l', '1'}
        c_group = c_char.lower() in {'i', 'l', '1'}
        if r_group and c_group or r_char == c_char:
            current_match += 1
    # 匹配数达到6个及以上则记录并退出循环
    if current_match >= 6:
        match_count = current_match
        matched_plate = reg_plate
        break

# 根据匹配结果执行对应操作
if matched_plate:
    match_percent = (match_count / 7) * 100
    print(f"匹配率: {match_percent:.2f}%")
    print("达到最低要求,发送通行信号。")
    print("匹配的登记车牌:", matched_plate)
    # publish.single(...)  # 此处添加通行信号发送逻辑
else:
    print("未达到最低匹配要求,请重新识别车牌。")
    # publish.single(...)  # 此处添加拒绝通行逻辑

关键优化点

  • 修复DataFrame遍历逻辑:使用iterrows()正确遍历每一行数据
  • 新增I/1/l混淆处理:将这三个易混淆字符视为等价匹配,解决OCR识别误差
  • 完善字符匹配统计:逐字符对比并累计匹配数
  • 增加车牌长度校验,过滤无效数据
  • 修正百分比计算逻辑,确保结果准确

内容的提问来源于stack exchange,提问作者VicourtBitt

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 06:15:58