Spaces:
Sleeping
Sleeping
Faizan Azizahmed Shaikh
commited on
Commit
·
59e57cd
1
Parent(s):
67c544d
Upload 6 files
Browse files- app.py +66 -0
- requirements.txt +0 -2
- src/Webcam_Object_Detection.ipynb +101 -0
- src/items.py +12 -0
- src/realtime.py +42 -0
- src/yolov8n.pt +3 -0
app.py
ADDED
|
@@ -0,0 +1,66 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
#!/usr/bin/env python
|
| 2 |
+
# coding: utf-8
|
| 3 |
+
|
| 4 |
+
# In[ ]:
|
| 5 |
+
|
| 6 |
+
|
| 7 |
+
# import required libraries
|
| 8 |
+
from ultralytics import YOLO
|
| 9 |
+
import gradio as gr
|
| 10 |
+
import cv2
|
| 11 |
+
import math
|
| 12 |
+
from items import classNames
|
| 13 |
+
|
| 14 |
+
|
| 15 |
+
# In[ ]:
|
| 16 |
+
|
| 17 |
+
|
| 18 |
+
# detection function
|
| 19 |
+
def yolo_detect(feed, vid):
|
| 20 |
+
video = vid
|
| 21 |
+
# Load a pretrained YOLOv8n model
|
| 22 |
+
model = YOLO('yolov8n.pt')
|
| 23 |
+
|
| 24 |
+
# Run inference on the source
|
| 25 |
+
results = model(video, stream=True, verbose=False)
|
| 26 |
+
frames = list()
|
| 27 |
+
|
| 28 |
+
# plot annotations
|
| 29 |
+
for frame in results:
|
| 30 |
+
boxes = frame.boxes
|
| 31 |
+
single = frame.orig_img
|
| 32 |
+
for box in boxes:
|
| 33 |
+
# bounding box
|
| 34 |
+
x1, y1, x2, y2 = box.xyxy[0]
|
| 35 |
+
x1, y1, x2, y2 = int(x1), int(y1), int(x2), int(y2) # convert to int values
|
| 36 |
+
|
| 37 |
+
# put box in cam
|
| 38 |
+
cv2.rectangle(single, (x1, y1), (x2, y2), (255, 0, 255), 3)
|
| 39 |
+
|
| 40 |
+
# object details
|
| 41 |
+
cv2.putText(single, classNames[int(box.cls[0])], (x1,y1), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 1)
|
| 42 |
+
|
| 43 |
+
frames.append(single)
|
| 44 |
+
cv2.destroyAllWindows()
|
| 45 |
+
|
| 46 |
+
h, w, c = frames[1].shape
|
| 47 |
+
|
| 48 |
+
out_file = "output.avi"
|
| 49 |
+
fourcc=cv2.VideoWriter_fourcc('X', 'V', 'I', 'D')
|
| 50 |
+
writer = out = cv2.VideoWriter(out_file, fourcc, 25.0, (w, h))
|
| 51 |
+
for i in range(len(frames)):
|
| 52 |
+
writer.write(frames[i])
|
| 53 |
+
writer.release()
|
| 54 |
+
return out_file
|
| 55 |
+
|
| 56 |
+
|
| 57 |
+
# In[ ]:
|
| 58 |
+
|
| 59 |
+
|
| 60 |
+
demo = gr.Interface(fn=yolo_detect,
|
| 61 |
+
inputs=[gr.PlayableVideo(source='webcam'), gr.Video(autoplay=True)],
|
| 62 |
+
outputs=[gr.PlayableVideo(autoplay=True, format='avi')],
|
| 63 |
+
cache_examples=True, allow_flagging='never')
|
| 64 |
+
demo.queue()
|
| 65 |
+
demo.launch(inline=False, debug=True, show_api=False, quiet=True)
|
| 66 |
+
|
requirements.txt
CHANGED
|
@@ -1,2 +0,0 @@
|
|
| 1 |
-
opencv_python==4.8.0.74
|
| 2 |
-
ultralytics==8.0.150
|
|
|
|
|
|
|
|
|
src/Webcam_Object_Detection.ipynb
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"cells": [
|
| 3 |
+
{
|
| 4 |
+
"cell_type": "code",
|
| 5 |
+
"execution_count": null,
|
| 6 |
+
"id": "d9904ec5-391d-4967-9357-c8779d677142",
|
| 7 |
+
"metadata": {},
|
| 8 |
+
"outputs": [],
|
| 9 |
+
"source": [
|
| 10 |
+
"# import required libraries\n",
|
| 11 |
+
"from ultralytics import YOLO\n",
|
| 12 |
+
"import gradio as gr\n",
|
| 13 |
+
"import cv2\n",
|
| 14 |
+
"import math\n",
|
| 15 |
+
"from items import classNames"
|
| 16 |
+
]
|
| 17 |
+
},
|
| 18 |
+
{
|
| 19 |
+
"cell_type": "code",
|
| 20 |
+
"execution_count": null,
|
| 21 |
+
"id": "1dbb6ae7-c844-4933-9a5c-f778bb1dfa83",
|
| 22 |
+
"metadata": {},
|
| 23 |
+
"outputs": [],
|
| 24 |
+
"source": [
|
| 25 |
+
"# detection function\n",
|
| 26 |
+
"def yolo_detect(feed, vid):\n",
|
| 27 |
+
" video = vid\n",
|
| 28 |
+
" # Load a pretrained YOLOv8n model\n",
|
| 29 |
+
" model = YOLO('yolov8n.pt')\n",
|
| 30 |
+
" \n",
|
| 31 |
+
" # Run inference on the source\n",
|
| 32 |
+
" results = model(video, stream=True, verbose=False) \n",
|
| 33 |
+
" frames = list()\n",
|
| 34 |
+
" \n",
|
| 35 |
+
" # plot annotations\n",
|
| 36 |
+
" for frame in results:\n",
|
| 37 |
+
" boxes = frame.boxes\n",
|
| 38 |
+
" single = frame.orig_img\n",
|
| 39 |
+
" for box in boxes:\n",
|
| 40 |
+
" # bounding box\n",
|
| 41 |
+
" x1, y1, x2, y2 = box.xyxy[0]\n",
|
| 42 |
+
" x1, y1, x2, y2 = int(x1), int(y1), int(x2), int(y2) # convert to int values\n",
|
| 43 |
+
"\n",
|
| 44 |
+
" # put box in cam\n",
|
| 45 |
+
" cv2.rectangle(single, (x1, y1), (x2, y2), (255, 0, 255), 3)\n",
|
| 46 |
+
"\n",
|
| 47 |
+
" # object details\n",
|
| 48 |
+
" cv2.putText(single, classNames[int(box.cls[0])], (x1,y1), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 1)\n",
|
| 49 |
+
" \n",
|
| 50 |
+
" frames.append(single)\n",
|
| 51 |
+
" cv2.destroyAllWindows()\n",
|
| 52 |
+
" \n",
|
| 53 |
+
" h, w, c = frames[1].shape\n",
|
| 54 |
+
" \n",
|
| 55 |
+
" out_file = \"output.avi\"\n",
|
| 56 |
+
" fourcc=cv2.VideoWriter_fourcc('X', 'V', 'I', 'D')\n",
|
| 57 |
+
" writer = out = cv2.VideoWriter(out_file, fourcc, 25.0, (w, h))\n",
|
| 58 |
+
" for i in range(len(frames)):\n",
|
| 59 |
+
" writer.write(frames[i])\n",
|
| 60 |
+
" writer.release()\n",
|
| 61 |
+
" return out_file"
|
| 62 |
+
]
|
| 63 |
+
},
|
| 64 |
+
{
|
| 65 |
+
"cell_type": "code",
|
| 66 |
+
"execution_count": null,
|
| 67 |
+
"id": "692f5c49-67cd-4c11-8ee9-03dc7cb98809",
|
| 68 |
+
"metadata": {},
|
| 69 |
+
"outputs": [],
|
| 70 |
+
"source": [
|
| 71 |
+
"demo = gr.Interface(fn=yolo_detect, \n",
|
| 72 |
+
" inputs=[gr.PlayableVideo(source='webcam'), gr.Video(autoplay=True)],\n",
|
| 73 |
+
" outputs=[gr.PlayableVideo(autoplay=True, format='avi')],\n",
|
| 74 |
+
" cache_examples=True, allow_flagging='never')\n",
|
| 75 |
+
"demo.queue()\n",
|
| 76 |
+
"demo.launch(inline=False, debug=True, show_api=False, quiet=True)"
|
| 77 |
+
]
|
| 78 |
+
}
|
| 79 |
+
],
|
| 80 |
+
"metadata": {
|
| 81 |
+
"kernelspec": {
|
| 82 |
+
"display_name": "Python 3 (ipykernel)",
|
| 83 |
+
"language": "python",
|
| 84 |
+
"name": "python3"
|
| 85 |
+
},
|
| 86 |
+
"language_info": {
|
| 87 |
+
"codemirror_mode": {
|
| 88 |
+
"name": "ipython",
|
| 89 |
+
"version": 3
|
| 90 |
+
},
|
| 91 |
+
"file_extension": ".py",
|
| 92 |
+
"mimetype": "text/x-python",
|
| 93 |
+
"name": "python",
|
| 94 |
+
"nbconvert_exporter": "python",
|
| 95 |
+
"pygments_lexer": "ipython3",
|
| 96 |
+
"version": "3.11.4"
|
| 97 |
+
}
|
| 98 |
+
},
|
| 99 |
+
"nbformat": 4,
|
| 100 |
+
"nbformat_minor": 5
|
| 101 |
+
}
|
src/items.py
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# object classes
|
| 2 |
+
classNames = ["person", "bicycle", "car", "motorbike", "aeroplane", "bus", "train", "truck", "boat",
|
| 3 |
+
"traffic light", "fire hydrant", "stop sign", "parking meter", "bench", "bird", "cat",
|
| 4 |
+
"dog", "horse", "sheep", "cow", "elephant", "bear", "zebra", "giraffe", "backpack", "umbrella",
|
| 5 |
+
"handbag", "tie", "suitcase", "frisbee", "skis", "snowboard", "sports ball", "kite", "baseball bat",
|
| 6 |
+
"baseball glove", "skateboard", "surfboard", "tennis racket", "bottle", "wine glass", "cup",
|
| 7 |
+
"fork", "knife", "spoon", "bowl", "banana", "apple", "sandwich", "orange", "broccoli",
|
| 8 |
+
"carrot", "hot dog", "pizza", "donut", "cake", "chair", "sofa", "pottedplant", "bed",
|
| 9 |
+
"diningtable", "toilet", "tvmonitor", "laptop", "mouse", "remote", "keyboard", "cell phone",
|
| 10 |
+
"microwave", "oven", "toaster", "sink", "refrigerator", "book", "clock", "vase", "scissors",
|
| 11 |
+
"teddy bear", "hair drier", "toothbrush"
|
| 12 |
+
]
|
src/realtime.py
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# import libraries
|
| 2 |
+
from ultralytics import YOLO
|
| 3 |
+
import cv2
|
| 4 |
+
import sys
|
| 5 |
+
|
| 6 |
+
def realtime(video):
|
| 7 |
+
# Load the YOLOv8 model
|
| 8 |
+
model = YOLO('yolov8n.pt')
|
| 9 |
+
|
| 10 |
+
# Open the video file
|
| 11 |
+
video_path = video
|
| 12 |
+
cap = cv2.VideoCapture(video_path)
|
| 13 |
+
cap.set(3, 720)
|
| 14 |
+
cap.set(4, 1280)
|
| 15 |
+
# Loop through the video frames
|
| 16 |
+
while cap.isOpened():
|
| 17 |
+
# Read a frame from the video
|
| 18 |
+
success, frame = cap.read()
|
| 19 |
+
|
| 20 |
+
if success:
|
| 21 |
+
# Run YOLOv8 inference on the frame
|
| 22 |
+
results = model(frame, verbose=False)
|
| 23 |
+
|
| 24 |
+
# Visualize the results on the frame
|
| 25 |
+
annotated_frame = results[0].plot()
|
| 26 |
+
|
| 27 |
+
# Display the annotated frame
|
| 28 |
+
cv2.imshow("YOLOv8 Inference", annotated_frame)
|
| 29 |
+
|
| 30 |
+
# Break the loop if 'q' is pressed
|
| 31 |
+
if cv2.waitKey(1) & 0xFF == ord("q"):
|
| 32 |
+
break
|
| 33 |
+
else:
|
| 34 |
+
# Break the loop if the end of the video is reached
|
| 35 |
+
break
|
| 36 |
+
|
| 37 |
+
# Release the video capture object and close the display window
|
| 38 |
+
cap.release()
|
| 39 |
+
cv2.destroyAllWindows()
|
| 40 |
+
|
| 41 |
+
if __name__ == '__main__':
|
| 42 |
+
realtime(sys.argv[1])
|
src/yolov8n.pt
ADDED
|
@@ -0,0 +1,3 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
version https://git-lfs.github.com/spec/v1
|
| 2 |
+
oid sha256:31e20dde3def09e2cf938c7be6fe23d9150bbbe503982af13345706515f2ef95
|
| 3 |
+
size 6534387
|