车牌识别基于paddleocr和HSV

我开始做车牌识别,也是用字符切割和模板匹配,不仅成功率低,还十分麻烦。后把模块匹配改为SVM算法,结果好了一点。最好我决定用百度AL的paddleocr直接进行识别,用HSV来扫描车牌位置。

结果简单,实用。


直接上代码。下载好库,和图片路径就可以用了

import cv2
import numpy as np
import pytesseract
import matplotlib.pyplot as plt
from paddleocr import PaddleOCR

import os
os.environ['KMP_DUPLICATE_LIB_OK']='True'
#上面两行是为了防止调用paddleocr时出错,可以用也可以不用。

# 车牌检测函数
def detect_license_plate(image):
   

    # 将图像转换为HSV颜色空间
    hsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)

    # 定义蓝色的范围,这里采用了一个比较宽的范围
    lower_blue = np.array([100, 50, 50])
    upper_blue = np.array([130, 255, 255])

    # 进行颜色分割
    mask = cv2.inRange(hsv, lower_blue, upper_blue)

    # 对二值图像进行形态学操作,以去除噪声和增强字符
    kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
    mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)

    # 查找轮廓
    mask, contours, hierarchy = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)

    # 对轮廓进行筛选,选出可能的车牌轮廓
    candidates = []
    for contour in contours:
        x, y, w, h = cv2.boundingRect(contour)
        aspect_ratio = w / h
        if 1.5 < aspect_ratio < 4 and h > 10 and w > 80:
            candidates.append(contour)

    # 如果没有找到车牌轮廓,返回None
    if not candidates:
        return None

    # 选择最大的车牌轮廓
    license_plate = max(candidates, key=cv2.contourArea)

    # 使用灰度图像进行车牌分割
    x, y, w, h = cv2.boundingRect(license_plate)
    plate_image = cv2.cvtColor(image[y:y+h, x:x+w], cv2.COLOR_BGR2GRAY)

    # 调用PaddleOCR进行车牌号码识别
    ocr = PaddleOCR(lang='ch')
    result = ocr.ocr(plate_image)

    # 在原图上圈出车牌位置
    cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)

    # 显示原图和识别结果
    cv2.imshow('Original Image', image)
    print(result)
    #for line in result:
     #   print(line[1][0])

    cv2.waitKey(0)
    cv2.destroyAllWindows()

# 测试
image=cv2.imread('C:/Users/dell/Pictures/Saved Pictures/100.png')#照片路径
detect_license_plate(image)

结果显示

总结

paddlecor有自带的图片识别,用HSV来提取图片位置,判断有没有图片。最好,paddlecor比较难下载,自行要研究一下

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值