树莓派应用--AI项目实战篇来啦-10.OpenCV进行车牌检测

1. 介绍

本项目使用 esseract、OpenCV和Python探索光学字符识别(OCR)的神奇世界,本项目将

带你了解最受欢迎的OCR引擎 Tesseract 背后的技术,以及如何用 Pytesseract 和 OpenCV实现字符识别。

从图像中检测字符的技术称为 OCR(光学字符识别),使用 Pytesseract 库很容易实现。

2.Python pytesseract 字符识别OCR库介绍

Python 提供了支持 Tesseract-OCR 引擎的 Python 版本的库 pytesseract, pytesseract是一款用于光学字符识别(OCR)的python工具,即从图片中识别出和"读取"其中嵌入的文字。

pytesseract 是对 Tesseract-OCR的一层封装,同时也可以单独作为对 Tesseract 引擎的调用脚本,支持使用 PIL库(Python Imaging Library)读取各种图片文件类型,包括jpeg、png、gif、bmp、tiff 等其它格式。作为脚本使用时,pytesseract 将打印识别出的文字,而不是将其写入文件。

2.1 Pytesseract 字符识别库安装

sudo apt-get update 
sudo apt-get install libleptonica-dev 
sudo apt-get install tesseract-ocr 
sudo apt-get install libtesseract-dev 
pip3 install pytesseract 
pip3 install pillow

2.2 车牌识别相关操作

1.车牌检测:第一步是从汽车上检测车牌所在位置。使用OpenCV中矩形的轮廓检测来寻找车牌,如果我们知道车牌的确切尺寸,颜色和大致位置,则可以提高准确性。通常,也会将根据摄像机的位置和该特定国家/地区所使用的车牌类型来训练检测算法。但是图像可能并没有汽车的存在,在这种情况下我们将先进行汽车的,然后是车牌。

2.字符分割:检测到车牌后,必须将其裁剪并保存为新图像。同样,这可以使用OpenCV 来完成。

  1. 字符识别,在上一步中获得的新图像肯定可以写上一些字符(数字/字母)。因此,我们可以对其执行 OCR(光学字符识别)以检测数字。

3.源程序代码

python 复制代码
import cv2
import imutils
import numpy as np
import pytesseract

img  = cv2.imread('./images/car2.jpg',cv2.IMREAD_COLOR)

img = cv2.resize(img, (600,400) )

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) 
gray = cv2.bilateralFilter(gray, 13, 15, 15)

edged = cv2.Canny(gray, 30, 200) 
contours = cv2.findContours(edged.copy(), cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
contours = imutils.grab_contours(contours)
contours = sorted(contours, key = cv2.contourArea, reverse = True)[:10]
screenCnt = None

# 载入显示库
def bgr8_to_jpeg(value, quality=75):
    return bytes(cv2.imencode('.jpg', value)[1])
    
import ipywidgets.widgets as widgets
from IPython.display import display
imagecar = widgets.Image(format='jpeg', width=600, height=400)
imageCropped = widgets.Image(format='jpeg', width=600, height=400)
display(imagecar)
display(imageCropped)

for c in contours:
    
    peri = cv2.arcLength(c, True)
    approx = cv2.approxPolyDP(c, 0.018 * peri, True)
 
    if len(approx) == 4:
        screenCnt = approx
        break

if screenCnt is None:
    detected = 0
    print ("No contour detected")
else:
     detected = 1

if detected == 1:
    cv2.drawContours(img, [screenCnt], -1, (0, 0, 255), 3)

mask = np.zeros(gray.shape,np.uint8)
new_image = cv2.drawContours(mask,[screenCnt],0,255,-1,)
new_image = cv2.bitwise_and(img,img,mask=mask)

(x, y) = np.where(mask == 255)
(topx, topy) = (np.min(x), np.min(y))
(bottomx, bottomy) = (np.max(x), np.max(y))
Cropped = gray[topx:bottomx+1, topy:bottomy+1]

text = pytesseract.image_to_string(Cropped, config='--psm 11')
print("programming_fever's License Plate Recognition\n")
print("Detected license plate Number is:",text)
img = cv2.resize(img,(500,300))
Cropped = cv2.resize(Cropped,(400,200))
# 显示图像
imagecar.value = bgr8_to_jpeg(img)
imageCropped.value = bgr8_to_jpeg(Cropped)

相关推荐
ZHOU_WUYI1 小时前
3.langchain中的prompt模板 (few shot examples in chat models)
人工智能·langchain·prompt
如若1231 小时前
主要用于图像的颜色提取、替换以及区域修改
人工智能·opencv·计算机视觉
老艾的AI世界2 小时前
AI翻唱神器,一键用你喜欢的歌手翻唱他人的曲目(附下载链接)
人工智能·深度学习·神经网络·机器学习·ai·ai翻唱·ai唱歌·ai歌曲
DK221512 小时前
机器学习系列----关联分析
人工智能·机器学习
Robot2512 小时前
Figure 02迎重大升级!!人形机器人独角兽[Figure AI]商业化加速
人工智能·机器人·微信公众平台
浊酒南街3 小时前
Statsmodels之OLS回归
人工智能·数据挖掘·回归
畅联云平台3 小时前
美畅物联丨智能分析,安全管控:视频汇聚平台助力智慧工地建设
人工智能·物联网
加密新世界4 小时前
优化 Solana 程序
人工智能·算法·计算机视觉
hunteritself4 小时前
ChatGPT高级语音模式正在向Web网页端推出!
人工智能·gpt·chatgpt·openai·语音识别
Che_Che_4 小时前
Cross-Inlining Binary Function Similarity Detection
人工智能·网络安全·gnn·二进制相似度检测