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

无法正确识别车牌(Python、OpenCv、Tesseract)

我正在尝试识别车牌,但出现了错误,例如错误/未读取字符

以下是每个步骤的可视化:

从颜色阈值+变形关闭获得遮罩

以绿色突出显示的车牌轮廓过滤器

将板轮廓粘贴到空白遮罩上

Tesseract OCR的预期结果

BP 1309 GD

但我得到的结果是

BP 1309 6D

我试着把轮廓切成3片

是的,它是有效的,但如果我在这个方法中插入差异图像,一些图像就无法识别,比如这个

字母N不可识别,但如果使用第一种方法,它会起作用

这是程序

import numpy as np
import pytesseract
import cv2
import ospytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"
image_path = "data"for nama_file in sorted(os.listdir(image_path)):print(nama_file)# Load image, create blank mask, convert to HSV, define thresholds, color thresholdI = cv2.imread(os.path.join(image_path, nama_file))dim = (500, 120)I = cv2.resize(I, dim, interpolation = cv2.INTER_AREA)(thresh, image) = cv2.threshold(I, 127, 255, cv2.THRESH_BINARY)result = np.zeros(image.shape, dtype=np.uint8)result = 255 - resulthsv = cv2.cvtColor(image, cv2.COLOR_BGR2HSV)lower = np.array([0,0,0])upper = np.array([179,100,130])mask = cv2.inRange(hsv, lower, upper)slices = []slices.append(result.copy())slices.append(result.copy())slices.append(result.copy())i = 0j = 0xs = []# Perform morph close and merge for 3-channel ROI extractionkernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3,3))close = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel, iterations=1)extract = cv2.merge([close,close,close])# Find contours, filter using contour area, and extract using Numpy slicingcnts = cv2.findContours(close, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)cnts = cnts[0] if len(cnts) == 2 else cnts[1]boundingBoxes = [cv2.boundingRect(c) for c in cnts](cnts, boundingBoxes) = zip(*sorted(zip(cnts, boundingBoxes),key=lambda b:b[1][0], reverse=False))for c in cnts:x,y,w,h = cv2.boundingRect(c)area = w * hras = format(w / h, '.2f')if h >= 40 and h <= 70 and w >= 10 and w <= 65 and float(ras) <= 1.3:cv2.rectangle(I, (x, y), (x + w, y + h), (36,255,12), 3)result[y:y+h, x:x+w] = extract[y:y+h, x:x+w]# Slicexs.append(x)if i > 0:if (xs[i] - xs[i-1]) > 63:j = j+1i = i + 1slices[j][y:y+h, x:x+w] = extract[y:y+h, x:x+w]# Split throw into Pytesseractj=0for s in slices:cv2.imshow('result', s)cv2.waitKey()if j != 1 :data = pytesseract.image_to_string(s, lang='eng',config='--psm 6 _char_whitelist=ABCDEFGHIJKLMNOPQRTUVWXYZ')else :data = pytesseract.image_to_string(s, lang='eng',config='--psm 6 _char_whitelist=1234567890')print(data)# Block throw into Pytesseractdata = pytesseract.image_to_string(result, lang='eng',config='--psm 6')print(data)cv2.imshow('image', I)cv2.imshow('close', close)cv2.imshow('extract', extract)cv2.imshow('result', result)cv2.waitKey()

我尝试了很多方法,找到了一些解决方案:

应用扩张形态学操作使字母变薄:

# Split throw into Pytesseract
j=0
for s in slices:cv2.imshow('result', s)cv2.waitKey(1)if j != 1:data = pytesseract.image_to_string(s, config="-c tessedit""_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890""  psm 6"" ")if data=='':            s = cv2.dilate(s, cv2.getStructuringElement(cv2.MORPH_ELLIPSE, (5,5)))cv2.imshow('cv2.dilate(s)', s)cv2.waitKey(1)data = pytesseract.image_to_string(s, config="-c tessedit""_char_whitelist=ABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890""  psm 6"" ")else:pytesseract.pytesseract.tessedit_char_whitelist = '1234567890'data = pytesseract.image_to_string(s, lang='eng',config=' psm 6 _char_whitelist=1234567890')print(data)

这种行为很奇怪。
有很多投诉,建议的解决方案不起作用

至少我学会了如何使用_char_whitelist选项(您需要添加-c tessedit

我认为该解决方案不够健壮(可能是偶然工作)。
我认为在当前版本的Tesseract中没有简单的解决方案

http://www.lryc.cn/news/123381.html

相关文章:

  • VSCODE[配置ssh免密远程登录]
  • Multi-object navigation in real environments using hybrid policies 论文阅读
  • 初始多线程
  • 论坛项目day3|开发社区首页
  • Server - 文字转语音 (Text to Speech) 的在线服务 TTSMaker
  • Python学习笔记_基础篇_数据类型之字符串
  • (二分查找) 11. 旋转数组的最小数字 ——【Leetcode每日一题】
  • docker 制作tomcat镜像
  • 年之年的选择,组装版
  • 英语词法——代词
  • 1475.商品折扣后的最终价格
  • php、 go 语言怎么结合构建高性能高并发商城。
  • ubuntu 部署 ChatGLM-6B 完整流程 模型量化 Nvidia
  • 【数据分享】2001-2022年我国省市县镇四级的逐月最高气温数据(无需转发/Shp/Excel格式)
  • 线段树-模板-区间查询-区间修改
  • 微服务架构和分布式架构的区别
  • Ajax-概念、Http协议、Ajax请求及其常见问题
  • react 09之状态管理工具1 redux+ react-thunk的使用实现跨组件状态管理与异步操作
  • opencv实战项目 手势识别-实现尺寸缩放效果
  • Netty对HPACK头部压缩的支持
  • C++:替换string中的字符
  • 【ChatGPT】自我救赎
  • 微信小程序(由浅到深)
  • 冒泡排序 简单选择排序 插入排序 快速排序
  • linux文件I/O之 open() 函数用法
  • 用Java操作MySQL数据库
  • SpringBoot启动报错:java: 无法访问org.springframework.boot.SpringApplication
  • Vue3 setup语法糖 解决富文本编辑器上传图片64位码过长问题 quill-image-extend-module
  • 百度坐标(BD09)、国测局坐标(火星坐标,GCJ02)、和WGS84坐标系之间的转换
  • 论文浅尝 | CI4MRC:基于因果推断去除机器阅读理解中的名字偏差