diff --git a/rybki.ipynb b/rybki.ipynb new file mode 100644 index 0000000..a2d5796 --- /dev/null +++ b/rybki.ipynb @@ -0,0 +1,122 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "import cv2\n", + "import matplotlib.pyplot as plt\n", + "import keras\n", + "import numpy as np\n", + "import threading" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [], + "source": [ + "model = keras.models.load_model('./model')" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [], + "source": [ + "cap = cv2.VideoCapture(\"rybki.mp4\")\n", + "cap.set(cv2.CAP_PROP_FPS, 60)\n", + "\n", + "class_names=sorted(['Fish', \"Jellyfish\", 'Penguin', 'Puffin', 'Shark', 'Starfish', 'Stingray'])\n", + "object_detector = cv2.createBackgroundSubtractorMOG2(history=100, varThreshold=50)\n", + "\n", + "\n", + "width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) \n", + "height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))\n", + "fps = cap.get(cv2.CAP_PROP_FPS)\n", + "out = cv2.VideoWriter('track_fish.avi', cv2.VideoWriter_fourcc(*'MJPG'), fps, (width, height))\n", + "\n", + "while True:\n", + " ret, frame = cap.read()\n", + " if(frame is not None):\n", + " roi = frame[100: 900,330:1900]\n", + " mask = object_detector.apply(roi)\n", + " _, mask = cv2.threshold(mask,254,255, cv2.THRESH_BINARY)\n", + " conturs, _ =cv2.findContours(mask, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)\n", + "\n", + " images = []\n", + "\n", + " for cnt in conturs:\n", + " area = cv2.contourArea(cnt)\n", + " if area > 200:\n", + " #cv2.drawContours(roi,[cnt],-1,(0,255,0),2)\n", + " x,y,w,h = cv2.boundingRect(cnt)\n", + " rectangle = cv2.rectangle(roi,(x,y),(x+w,y+h),(0,255,0),3)\n", + " image_to_predict = roi[y:y+h,x:x+w]\n", + " image_to_predict = cv2.resize(image_to_predict,(227,227))\n", + " images.append((x,y,rectangle,np.expand_dims(image_to_predict,axis=0)))\n", + " \n", + " # pred = model.predict(np.expand_dims(image_to_predict, axis=0))\n", + " # label = class_names[np.argmax(pred)]\n", + " if images:\n", + " pred = model.predict(np.vstack([image[3] for image in images]))\n", + " labels = [class_names[np.argmax(pre)] for pre in pred]\n", + " for i,image in enumerate(images):\n", + " cv2.putText(image[2], labels[i], (image[0], image[1]-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (36,255,12), 1)\n", + " roi = cv2.resize(roi, (960, 540)) \n", + " cv2.imshow(\"roi\", roi)\n", + "\n", + " key = cv2.waitKey(30)\n", + " if key == 27:\n", + " break\n", + "\n", + " #out.write(frame)\n", + " else:\n", + " break\n", + "\n", + "\n", + "#out.release()\n", + "cap.release()\n", + "cv2.destroyAllWindows()" + ] + }, + { + "cell_type": "code", + "execution_count": 59, + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.2" + }, + "orig_nbformat": 4, + "vscode": { + "interpreter": { + "hash": "393784674bcf6e74f2fc9b1b5fb3713f9bd5fc6f8172c594e5cfa8e8c12849bc" + } + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/rybki.mp4 b/rybki.mp4 new file mode 100644 index 0000000..bed22dc Binary files /dev/null and b/rybki.mp4 differ