Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@

# Import Library
from __future__ import division
from __future__ import print_function
from __future__ import absolute_import

# untuk mengatur lokasi path
import os

# dalam script ini digunakan untuk konversi image kedalam format byte
import io

# untuk mengolah csv
import pandas as pd

# untuk generate tfrecord
import tensorflow as tf

# untuk mengolah/read data image
from PIL import Image

# dalam script ini digunakan untuk transformasi setiap value yg akan dijadikan tfrecord
from object_detection.utils import dataset_util

# untuk keperluan mengolah array, list, dict
from collections import namedtuple, OrderedDict


# parsing parameter dari command python (train/test, data csv, path output untuk tfrecord)
flags = tf.app.flags
flags.DEFINE_string('type', '', 'Type of CSV input (train/test)')
flags.DEFINE_string('csv_input', '', 'Path to the CSV input')
flags.DEFINE_string('output_path', '', 'Path to output TFRecord')
FLAGS = flags.FLAGS
# ---------------------------------------------------------------------


# Translasi nama kelas dalam bentuk text ke bentuk indeks integer
def class_text_to_int(row_label):
if row_label == 'plate':
return 1
else:
None
# ---------------------------------------------------------------------


# untuk memisahkan data csv yg terbaca kedalam beberapa kolom (delimiter)
def split(df, group):
data = namedtuple('data', ['filename', 'object'])
gb = df.groupby(group)
return [data(filename, gb.get_group(x)) for filename, x in zip(gb.groups.keys(), gb.groups)]
# ---------------------------------------------------------------------


# Fungsi untuk menghasilkan tf record
def create_tf_example(group, path):
# membaca file image
with tf.gfile.GFile(os.path.join(path, '{}'.format(group.filename)), 'rb') as fid:
encoded_jpg = fid.read()
encoded_jpg_io = io.BytesIO(encoded_jpg)
image = Image.open(encoded_jpg_io)
# -----------------------------------------------------------------

# mendapatkan ukuran image
width, height = image.size

# mendapatkan nama file dari image
filename = group.filename.encode('utf8')
image_format = b'jpg'

# inisialisasi list
xmins = []
xmaxs = []
ymins = []
ymaxs = []
classes_text = []
classes = []
# -----------------------------------------------------------------


# untuk setiap box pada image lakukan berikut,..
for index, row in group.object.iterrows():
# konversi setiap koordinat dari box dari pixel ke domain 0 - 1
xmins.append(row['xmin'] / width)
xmaxs.append(row['xmax'] / width)
ymins.append(row['ymin'] / height)
ymaxs.append(row['ymax'] / height)
# -----------------------------------------------------------------

# Menyimpan nama kelas kedalam list dalam bentuk text
classes_text.append(row['class'].encode('utf8'))

# Menyimpan nama kelas kedalam list dalam bentuk index integer
classes.append(class_text_to_int(row['class']))


# -----------------------------------------------------------------

# konversi ke tfrecord menggunakan fungsi tensorflow
tf_example = tf.train.Example(features=tf.train.Features(feature={
'image/height': dataset_util.int64_feature(height),
'image/width': dataset_util.int64_feature(width),
'image/filename': dataset_util.bytes_feature(filename),
'image/source_id': dataset_util.bytes_feature(filename),
'image/encoded': dataset_util.bytes_feature(encoded_jpg),
'image/format': dataset_util.bytes_feature(image_format),
'image/object/bbox/xmin': dataset_util.float_list_feature(xmins),
'image/object/bbox/xmax': dataset_util.float_list_feature(xmaxs),
'image/object/bbox/ymin': dataset_util.float_list_feature(ymins),
'image/object/bbox/ymax': dataset_util.float_list_feature(ymaxs),
'image/object/class/text': dataset_util.bytes_list_feature(classes_text),
'image/object/class/label': dataset_util.int64_list_feature(classes),
}))
# -----------------------------------------------------------------


return tf_example
# ---------------------------------------------------------------------



def main(_):
# menyiapkan variable untuk menyimpan tf record kedalam bentuk file
writer = tf.python_io.TFRecordWriter(FLAGS.output_path)

# inisialisasi path, apakah untuk path data train atau data test
path = os.path.join(os.getcwd(), 'images/{}'.format(FLAGS.type))

# membaca file csv
examples = pd.read_csv(FLAGS.csv_input)

# memisahkan setiap kolom yg terbaca dari data csv
grouped = split(examples, 'filename')

# mengolah tfrecord lalu menyimpannya kedalam bentuk file .tfrecord
for group in grouped:
tf_example = create_tf_example(group, path)
writer.write(tf_example.SerializeToString())
writer.close()
# -----------------------------------------------------------------

# menampilkan lokasi file .tfrecord
output_path = os.path.join(os.getcwd(), FLAGS.output_path)
print('Successfully created the TFRecords: {}'.format(output_path))
# -----------------------------------------------------------------


if __name__ == '__main__':
tf.app.run()
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
#import library
import numpy as np
import cv2
from detector import detector
from imutils import paths
import os
import time

#import plot_cv dari folder utils
from utils import plot_cv

#variabel det untuk memanggil class detector
det = detector.detector()

#mengatur path lukasi image yang akan di testing
image_folder = 'test_image'

#menyimpan file test image
imageNames = os.listdir(image_folder)

#nama class
name_class = ["plate"]

# mengulang pada setiap image yang ada pada folder
for imageName in imageNames:

#membaca file gambar
image = cv2.imread(image_folder + '/' + imageName)

#untuk ngedetek lokasi kotak pada gambar
(boxes, scores, classes, num, dump ) = det.detect_plate(image)

#jika dalam gambar tidak ditemukan box maka next
if len(boxes) == 0:
print('skip detection')
continue

#get ukuran gambar original
h, w = image.shape[:2]
boxes = boxes[0]
scores = scores[0]
classes = classes[0]

#untuk filter box mana yang akan ditampilan
for box, score, class_idx in zip(boxes, scores, classes):
(startY, startX, endY, endX) = box
#koordinat box
startX = int(startX * w)
startY = int(startY * h)
endX = int(endX * w)
endY = int(endY * h)
#koordinat box yang di dapat
box = (startX, startY, endX, endY)
#untuk menampilkan persentase confidence rate dalam %
text = name_class[int(class_idx-1)] + " " + str(int(score * 100)) + "%"
#jika score lebih besar dari 0,7 maka box akan ditampilkan
if score > 0.7:
image = plot_cv.plot_object(image, box, text, int(class_idx-1))

# Semua hasil telah diambil pada gambar. Sekarang tampilkan gambar.
cv2.namedWindow("plate detector", cv2.WINDOW_KEEPRATIO)
cv2.setWindowProperty("plate detector", cv2.WND_PROP_ASPECT_RATIO, cv2.WINDOW_KEEPRATIO)
cv2.imshow('plate detector', image)

# tekan apapun untuk menutup gambar
cv2.waitKey(0)

# Menutup window
cv2.destroyAllWindows()
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@
#import library
import numpy as np
import cv2
from detector import detector
from imutils import paths
import os
import time

#import plot_cv dari folder utils
from utils import plot_cv

#untuk notifikasi
print("[INFO] starting video stream...")

#untuk mengatur path pada file yang akan di test
vs = cv2.VideoCapture('test_image/testing_vidio.mp4')
#melakukan jeda
time.sleep(2.0)

#variabel det untuk memanggil class detector
det = detector.detector()

#nama class
name_class = ["plate"]

# Mengulang setiap gambar
while True:

#print(imageName)
ret, image = vs.read()
#untuk mendetek
(boxes, scores, classes, num, category_index) = det.detect_plate(image)
#jika box tidak ada maka next
if len(boxes) == 0:
print('skip detection')
continue
#ukuran gambar original
h, w = image.shape[:2]
boxes = boxes[0]
scores = scores[0]
classes = classes[0]

#untuk filter box mana yang akan ditampilan
for box, score, class_idx in zip(boxes, scores, classes):
(startY, startX, endY, endX) = box
#koordinat box dikali dengan lebar dan tinggi gambar
startX = int(startX * w)
startY = int(startY * h)
endX = int(endX * w)
endY = int(endY * h)
#koordinat box yang di dapat
box = (startX, startY, endX, endY)
#untuk menampilkan persentase confidence rate dalam %
text = name_class[int(class_idx-1)] + " " + str(int(score * 100)) + "%"
#jika score lebih besar dari 0,7 maka box akan ditampilkan
if score > 0.7:
image = plot_cv.plot_object(image, box, text, int(class_idx-1))

# Semua hasil telah diambil pada gambar. Sekarang tampilkan gambar.
cv2.namedWindow("Plate detector", cv2.WINDOW_KEEPRATIO)
cv2.setWindowProperty("Plate detector", cv2.WND_PROP_ASPECT_RATIO, cv2.WINDOW_KEEPRATIO)
cv2.imshow('Plate detector', image)

# tekan apapun untuk menutup gambar
key = cv2.waitKey(1) & 0xFF

# jika menekan q maka proses loop berhenti
if key == ord("q"):
break
# Menutup window
cv2.destroyAllWindows()
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
#import library
import numpy as np
import cv2
from detector import detector
from imutils import paths
import os
import time

#import plot_cv dari folder utils
from utils import plot_cv

#untuk notifikasi
print("[INFO] starting video stream...")

#untuk mengaktifkan camera
vs = cv2.VideoCapture(0, cv2.CAP_DSHOW)

#mengatur ukuran camera
vs.set(cv2.CAP_PROP_FRAME_WIDTH, 1080)
vs.set(cv2.CAP_PROP_FRAME_HEIGHT, 720)

#melakukan jeda
time.sleep(2.0)

#variabel det untuk memanggil class detector
det = detector.detector()

#nama class
name_class = ["plate"]

# Mengulang setiap gambar
while True:

#print(imageName)
ret, image = vs.read()
#untuk mendetek
(boxes, scores, classes, num, category_index) = det.detect_plate(image)
#jika box tidak ada maka next
if len(boxes) == 0:
print('skip detection')
continue
#ukuran gambar original
h, w = image.shape[:2]
boxes = boxes[0]
scores = scores[0]
classes = classes[0]

#untuk filter box mana yang akan ditampilan
for box, score, class_idx in zip(boxes, scores, classes):
(startY, startX, endY, endX) = box
#koordinat box dikali dengan lebar dan tinggi gambar
startX = int(startX * w)
startY = int(startY * h)
endX = int(endX * w)
endY = int(endY * h)
#box yang di dapat
box = (startX, startY, endX, endY)
#untuk menampilkan persentase confidence rate dalam %
text = name_class[int(class_idx-1)] + " " + str(int(score * 100)) + "%"
#jika score lebih besar dari 0,7 maka box akan ditampilkan
if score > 0.7:
image = plot_cv.plot_object(image, box, text, int(class_idx-1))

# Semua hasil telah diambil pada gambar. Sekarang tampilkan gambar.
cv2.namedWindow("plate detector", cv2.WINDOW_KEEPRATIO)
cv2.setWindowProperty("plate detector", cv2.WND_PROP_ASPECT_RATIO, cv2.WINDOW_KEEPRATIO)
cv2.imshow('plate detector', image)

# tekan apapun untuk menutup gambar
key = cv2.waitKey(1) & 0xFF

# jika menekan q maka proses loop berhenti
if key == ord("q"):
break
# Menutup window
cv2.destroyAllWindows()
Loading