Skip to content

Commit

Permalink
Merge pull request #1097 from NANDAGOPALNG/main
Browse files Browse the repository at this point in the history
Added new project called as "Object Detector"
  • Loading branch information
UTSAVS26 authored Nov 10, 2024
2 parents ff1998e + 12d531d commit 9d8dfd8
Show file tree
Hide file tree
Showing 3 changed files with 178 additions and 0 deletions.
92 changes: 92 additions & 0 deletions Generative-AI/Object Detector/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
# Object Detector
## Description
The Object Detector is a computer vision project that uses deep learning algorithms to detect and identify objects in images and videos. This project can be used for a variety of applications, such as security monitoring, autonomous vehicles, and smart home systems.

## Features

1.Supports detection of multiple object classes in a single image or video frame

2.Provides bounding boxes and class labels for each detected object

3.Utilizes a pre-trained deep learning model for fast and accurate object detection

4.Allows for custom training of the object detection model on new datasets

5.Provides an easy-to-use Python API for integrating the object detector into your own projects

## Getting Started

**Prerequisites**

Python 3.6 or higher

TensorFlow 2.x or PyTorch 1.x

OpenCV

## Installation

1.Clone the repository:


git clone https://github.com/NANDAGOPALNG/PyVerse/tree/main/Generative-AI/Object%20Detector

2.Install the required dependencies:


pip install -r requirements.txt

## Usage

1.Import the object detector module:
python


from object_detector import ObjectDetector

2.Create an instance of the object detector:
python


detector = ObjectDetector()

3.Detect objects in an image:
python


image = cv2.imread('image.jpg')
detections = detector.detect(image)

4.Visualize the detected objects:
python


for detection in detections:

x, y, w, h = detection['bbox']

label = detection['label']

cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)

cv2.putText(image, label, (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (36,255,12), 2)

cv2.imshow('Object Detection', image)

cv2.waitKey(0)

## Contributing
We welcome contributions to the Object Detector project. If you would like to contribute, please follow these steps:

1.Fork the repository

2.Create a new branch for your feature or bug fix

3.Make your changes and commit them

4.Push your changes to your forked repository

5.Submit a pull request to the main repository

## License
This project is licensed under the MIT License.
82 changes: 82 additions & 0 deletions Generative-AI/Object Detector/app.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
import gradio as gr
from PIL import Image, ImageDraw, ImageFont


# Use a pipeline as a high-level helper
from transformers import pipeline

# model_path = ("../Models/models--facebook--detr-resnet-50/snapshots"
# "/1d5f47bd3bdd2c4bbfa585418ffe6da5028b4c0b")

object_detector = pipeline("object-detection",
model="facebook/detr-resnet-50")

# object_detector = pipeline("object-detection",
# model=model_path)


def draw_bounding_boxes(image, detections, font_path=None, font_size=20):
"""
Draws bounding boxes on the given image based on the detections.
:param image: PIL.Image object
:param detections: List of detection results, where each result is a dictionary containing
'score', 'label', and 'box' keys. 'box' itself is a dictionary with 'xmin',
'ymin', 'xmax', 'ymax'.
:param font_path: Path to the TrueType font file to use for text.
:param font_size: Size of the font to use for text.
:return: PIL.Image object with bounding boxes drawn.
"""
# Make a copy of the image to draw on
draw_image = image.copy()
draw = ImageDraw.Draw(draw_image)

# Load custom font or default font if path not provided
if font_path:
font = ImageFont.truetype(font_path, font_size)
else:
# When font_path is not provided, load default font but it's size is fixed
font = ImageFont.load_default()
# Increase font size workaround by using a TTF font file, if needed, can download and specify the path

for detection in detections:
box = detection['box']
xmin = box['xmin']
ymin = box['ymin']
xmax = box['xmax']
ymax = box['ymax']

# Draw the bounding box
draw.rectangle([(xmin, ymin), (xmax, ymax)], outline="red", width=3)

# Optionally, you can also draw the label and score
label = detection['label']
score = detection['score']
text = f"{label} {score:.2f}"

# Draw text with background rectangle for visibility
if font_path: # Use the custom font with increased size
text_size = draw.textbbox((xmin, ymin), text, font=font)
else:
# Calculate text size using the default font
text_size = draw.textbbox((xmin, ymin), text)

draw.rectangle([(text_size[0], text_size[1]), (text_size[2], text_size[3])], fill="red")
draw.text((xmin, ymin), text, fill="white", font=font)

return draw_image


def detect_object(image):
raw_image = image
output = object_detector(raw_image)
processed_image = draw_bounding_boxes(raw_image, output)
return processed_image

demo = gr.Interface(fn=detect_object,
inputs=[gr.Image(label="Select Image",type="pil")],
outputs=[gr.Image(label="Processed Image", type="pil")],
title="@GenAILearniverse Project 6: Object Detector",
description="THIS APPLICATION WILL BE USED TO DETECT OBJECTS INSIDE THE PROVIDED INPUT IMAGE.")
demo.launch()

# print(output)
4 changes: 4 additions & 0 deletions Generative-AI/Object Detector/requirement.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
transformers
torch
gradio
timm

0 comments on commit 9d8dfd8

Please sign in to comment.