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