Deteksi Objek Pada Gambar Dengan Python

April 04, 2023

 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(urlnew_width=256new_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(imageboxesclass_namesscoresmax_boxes=10min_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(detectorpath):
  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.

Share this :

Hai readers. Saya seorang pelajar di perbatasan provinsi Jateng dan Jatim. I hope you're can enjoy to this blog guys.

Previous
Next Post »
0 Komentar

Penulisan markup di komentar
  • Silakan tinggalkan komentar sesuai topik. Komentar yang menyertakan link aktif, iklan, atau sejenisnya akan dihapus.
  • Untuk menyisipkan kode gunakan <i rel="code"> kode yang akan disisipkan </i>
  • Untuk menyisipkan kode panjang gunakan <i rel="pre"> kode yang akan disisipkan </i>
  • Untuk menyisipkan quote gunakan <i rel="quote"> catatan anda </i>
  • Untuk menyisipkan gambar gunakan <i rel="image"> URL gambar </i>
  • Untuk menyisipkan video gunakan [iframe] URL embed video [/iframe]
  • Kemudian parse kode tersebut pada kotak di bawah ini
  • © 2015 Simple SEO ✔