Deteksi Objek Pada Gambar Dengan Python
contoh output
1. Apa itu Deteksi objek?
Deteksi objek adalah teknik visi komputer di mana sistem perangkat lunak dapat mendeteksi, menemukan, dan melacak objek dalam gambar atau video tertentu. Atribut khusus pengenalan objek adalah pengenalan kelas objek seperti orang, meja, kursi, dll. dan koordinat spesifik lokasinya dalam gambar tertentu. Lokasi ditunjukkan dengan menggambar kotak pembatas di sekitar objek. Kotak pembatas mungkin atau mungkin tidak secara tepat menemukan objek. Kemampuan untuk menemukan objek dalam suatu gambar menentukan efisiensi algoritma yang digunakan untuk pendeteksian. Pengenalan wajah adalah salah satu contoh pengenalan objek.
Algoritme deteksi objek ini dapat dilatih sebelumnya atau dilatih dari awal. Dalam kebanyakan kasus, kami menggunakan bobot yang diperoleh dari model yang telah dilatih sebelumnya dan kemudian menyempurnakannya sesuai dengan kebutuhan kami dan kasus penggunaan yang berbeda.
2. Apa itu TensorFlow?
Tensorflow dan Keras adalah pustaka sumber terbuka untuk komputasi numerik dan pembelajaran mesin skala besar yang memfasilitasi proses pengumpulan data Google Brain TensorFlow, model pelatihan, prediksi, dan peningkatan hasil di masa mendatang. Tensorflow menggabungkan pembelajaran mesin dan model serta algoritme pembelajaran mendalam. Itu menggunakan Python sebagai antarmuka yang nyaman dan menggunakannya secara efisien dalam C. Tensorflow yang dioptimalkan memungkinkan pengembang untuk melakukan perhitungan. Setiap simpul dalam grafik mewakili operasi matematika dan setiap tautan mewakili data. Oleh karena itu, pemrogram dapat fokus pada keseluruhan logika aplikasi, daripada berurusan dengan detail yang lebih kecil seperti cara yang benar untuk menghubungkan output dari satu fungsi ke input fungsi lainnya. Google Brain, kelompok riset kecerdasan buatan pembelajaran mendalam Google, mengembangkan TensorFlow pada tahun 2015 untuk penggunaan internal Google.
Tim peneliti menggunakan pustaka perangkat lunak sumber terbuka ini untuk melakukan beberapa tugas penting. TensorFlow saat ini merupakan pustaka perangkat lunak paling populer. TensorFlow telah dipopulerkan oleh beberapa aplikasi deep learning dunia nyata. TensorFlow adalah pustaka sumber terbuka untuk pembelajaran mendalam dan pembelajaran mesin, sehingga menemukan perannya dalam aplikasi berbasis teks, pengenalan gambar, pencarian ucapan, dan aplikasi lainnya. Sistem pengenalan gambar Facebook DeepFace menggunakan TensorFlow untuk mengenali gambar. Siri Apple menggunakannya untuk pengenalan suara. Setiap aplikasi Google yang Anda gunakan memanfaatkan TensorFlow untuk meningkatkan pengalaman Anda.
3. Menulis Program
import tensorflow as tf
import tensorflow_hub as hub
import numpy as np
from PIL import Image
from PIL import ImageColor
from PIL import ImageDraw
from PIL import ImageFont
from PIL import ImageOps
import matplotlib.pyplot as plt
import tempfile
from six.moves.urllib.request import urlopen
from six import BytesIO
import time
def display_image(image):
fig = plt.figure(figsize=(20, 15))
plt.grid(False)
plt.imshow(image)
def download_and_resize_image(url, new_width=256, new_height=256,
display=False):
_, filename = tempfile.mkstemp(suffix=".jpg")
response = urlopen(url)
image_data = response.read()
image_data = BytesIO(image_data)
pil_image = Image.open(image_data)
pil_image = ImageOps.fit(pil_image, (new_width, new_height), Image.ANTIALIAS)
pil_image_rgb = pil_image.convert("RGB")
pil_image_rgb.save(filename, format="JPEG", quality=90)
print("Image downloaded to %s." % filename)
if display:
display_image(pil_image)
return filename
def draw_bounding_box_on_image(image,
ymin,
xmin,
ymax,
xmax,
color,
font,
thickness=4,
display_str_list=()):
"""Adds a bounding box to an image."""
draw = ImageDraw.Draw(image)
im_width, im_height = image.size
(left, right, top, bottom) = (xmin * im_width, xmax * im_width,
ymin * im_height, ymax * im_height)
draw.line([(left, top), (left, bottom), (right, bottom), (right, top),
(left, top)],
width=thickness,
fill=color)
display_str_heights = [font.getsize(ds)[1] for ds in display_str_list]
total_display_str_height = (1 + 2 * 0.05) * sum(display_str_heights)
if top > total_display_str_height:
text_bottom = top
else:
text_bottom = top + total_display_str_height
for display_str in display_str_list[::-1]:
text_width, text_height = font.getsize(display_str)
margin = np.ceil(0.05 * text_height)
draw.rectangle([(left, text_bottom - text_height - 2 * margin),
(left + text_width, text_bottom)],
fill=color)
draw.text((left + margin, text_bottom - text_height - margin),
display_str,
fill="black",
font=font)
text_bottom -= text_height - 2 * margin
def draw_boxes(image, boxes, class_names, scores, max_boxes=10, min_score=0.1):
"""Overlay labeled boxes on an image with formatted scores and label names."""
colors = list(ImageColor.colormap.values())
try:
font = ImageFont.truetype("/usr/share/fonts/truetype/liberation/LiberationSansNarrow-Regular.ttf",
25)
except IOError:
print("Font not found, using default font.")
font = ImageFont.load_default()
for i in range(min(boxes.shape[0], max_boxes)):
if scores[i] >= min_score:
ymin, xmin, ymax, xmax = tuple(boxes[i])
display_str = "{}: {}%".format(class_names[i].decode("ascii"),
int(100 * scores[i]))
color = colors[hash(class_names[i]) % len(colors)]
image_pil = Image.fromarray(np.uint8(image)).convert("RGB")
draw_bounding_box_on_image(
image_pil,
ymin,
xmin,
ymax,
xmax,
color,
font,
display_str_list=[display_str])
np.copyto(image, np.array(image_pil))
return image
module_handle="https://tfhub.dev/google/faster_rcnn/openimages_v4/inception_resnet_v2/1"
detector = hub.load(module_handle).signatures['default']
image_url="/content/dog.jpg"
def load_img(path):
img = tf.io.read_file(path)
img = tf.image.decode_jpeg(img, channels=3)
return img
def run_detector(detector, path):
img = load_img(path)
converted_img = tf.image.convert_image_dtype(img, tf.float32)[tf.newaxis, ...]
start_time = time.time()
result = detector(converted_img)
end_time = time.time()
result = {key:value.numpy() for key,value in result.items()}
print("Found %d objects." % len(result["detection_scores"]))
print("Inference time: ", end_time-start_time)
image_with_boxes = draw_boxes(
img.numpy(), result["detection_boxes"],
result["detection_class_entities"], result["detection_scores"])
display_image(image_with_boxes)
run_detector(detector, image_url)
Code lengkap dengan google colab sebagai berikut : Klik ini!!!!!!
4. Demo Program
5. Kesimpulan
Dalam posting ini saya telah menunjukkan bagaimana mengimplementasikan deteksi objek sederhana melalui python dan openCV.
0 Komentar
Penulisan markup di komentar