10 01 車牌識別資料檢視 py

2021-10-02 15:07:07 字數 4394 閱讀 8290

import tensorflow as tf

import os

import cv2

import numpy as np

import matplotlib.pyplot as plt

from genplate import genplate, gen_sample, chars

defmake_example

(image, label)

:"""

產生example物件

:param image:

:param label:

:return:

"""return tf.train.example(features=tf.train.features(feature=))

defgenerate_tfrecord

(filename, genplate, height=

72, weight=

272, num_plat=

1000):

""" 隨機生成num_plat張車牌照並將資料輸出形成tfrecord格式

:param filename: tfrecord格式檔案儲存的路徑

:param genplate: 車牌照生成器

:param height: 車牌照高度

:param weight: 車牌照寬度

:param num_plat: 需要生成車牌照的數量

:return:

"""writer = tf.python_io.tfrecordwriter(filename)

for i in

range

(num_plat)

: num, img = gen_sample(genplate, weight, height)

# todo: 因為mxnet中的格式要求導致的問題,必須轉換回[height, weight, channels]

img = img.transpose(1,

2,0)

img = img.reshape(-1

).astype(np.float32)

num = np.array(num)

.reshape(-1

).astype(np.int32)

ex = make_example(img.tobytes(

), num.tobytes())

writer.write(ex.serializetostring())

writer.close(

)def

read_tfrecord

(filename, x_name=

'image'

, y_name=

'label'

, x_shape=[72

,272,3

], y_shape=[7

], batch_size=64,

shuffle_data=

false

, num_threads=1)

:"""

讀取tfrecord檔案

:param filename:

:param x_name: 給定訓練用x的名稱

:param y_name: 給定訓練用y的名稱

:param x_shape: x的格式

:param y_shape: y的格式

:param batch_size: 批大小

:param shuffle_data: 是否混淆資料,如果為true,那麼進行shuffle操作

:param num_threads: 執行緒數目

:return:

"""# 獲取佇列

filename_queue = tf.train.string_input_producer(

[filename]

)# 構建資料讀取器

reader = tf.tfrecordreader(

)# 讀取佇列中的資料

_, serialized_example = reader.read(filename_queue)

# 處理樣本

features = tf.parse_single_example(

serialized_example,

features=

)# 讀取特徵

image = tf.decode_raw(features[x_name]

, tf.float32)

label = tf.decode_raw(features[y_name]

, tf.int32)

# 格式重定

image = tf.reshape(image, x_shape)

label = tf.reshape(label, y_shape)

# 轉換為批次的tensor物件

capacity = batch_size *6+

10if shuffle_data:

image, label = tf.train.shuffle_batch(

[image, label]

, batch_size=batch_size, capacity=capacity,

num_threads=num_threads, min_after_dequeue=

int(capacity /2)

)else

: image, label = tf.train.batch(

[image, label]

, batch_size=batch_size, capacity=capacity, num_threads=num_threads)

return image, label

img_h =

72img_w =

272channels =

3num_label =

7batch_size =

1tfrecord_dir_path =

'./datas/tf_record'

train_tfrecord_path = os.path.join(tfrecord_dir_path,

"train_data.tfrecord"

)# 從磁碟中讀取資料(構建了讀取資料的操作符)

train_image, train_label = read_tfrecord(train_tfrecord_path,

x_shape=

[img_h, img_w, channels]

, y_shape=

[num_label]

, batch_size=batch_size,

shuffle_data=

true

)print

(train_image, train_label)

with tf.session(

)as sess:

sess.run(tf.global_variables_initializer())

# 2. 獲取一下資料看看

# 2. 啟動相關的執行緒

coor = tf.train.coordinator(

) threads = tf.train.start_queue_runners(sess=sess, coord=coor)

for _ in

range(3

):_image, _label = sess.run(

[train_image, train_label]

)print

(_image.shape, _label.shape,

type

(_image)

, _image.

max(

), _image.

min())

print

(_label)

imgs =

255* np.squeeze(_image)

imgs = np.uint8(imgs)

print

(imgs.shape)

# (1, 72, 272, 3)

plt.imshow(imgs)

plt.show(

)# cv2.imshow('img', imgs)

# cv2.waitkey(50000)

# cv2.destroyallwindows()

""" (2, 72, 272, 3) (2, 7)

[[20 53 31 60 32 59 36]

[17 62 60 50 42 51 56]]

"""

車牌識別之一 車牌定位

車牌識別大概步驟可分為 車牌定位,字元分割,字元識別三個步驟。細分點可以有以下幾個步驟 1 將灰度化與二值化 2 去噪,然後切割成乙個乙個的字元 3 提取每乙個字元的特徵,生成特徵向量或特徵矩陣 4 分類與學習。將特徵向量或特徵矩陣與樣本庫進行比對,挑選出相似的那類樣本,將這類樣本的值作為輸出結果。...

基於OpenCV的車牌識別 2 車牌字元識別

3 車牌字元切割 a.閾值濾波,使用cv thresh binary引數通過把白色值變為黑色,黑色值變為白色來實現閾值輸出的反轉,因為需要獲取字元的輪廓,而輪廓的演算法尋找的是白色畫素 b.查詢輪廓 c.驗證輪廓是否為字元,去除那些規格太小的或者寬高比不正確的區域。字元是45 77的寬高比,允許0....

車牌識別資料整理

一 車牌識別相機流程剖解 車牌識別相機作為智慧型停車的核心技術,智慧型化多 網路車牌識別系統廣泛應用在過往車輛自動登記 驗證,公路收費,車輛安全核查,小區 停車場管理等方面。車牌識別相機工作流程 車牌識別相機的流程可分為車牌定位 車牌預處理 字元分割和字元識別四個主要核心步驟。二 車牌識別相機實現功...