s470623-wko/wko-07.ipynb

1 line
3.9 MiB
Plaintext
Raw Normal View History

2023-01-16 12:59:07 +01:00
{"cells":[{"cell_type":"markdown","id":"73e26798","metadata":{"id":"73e26798"},"source":["![Logo 1](img/aitech-logotyp-1.jpg)\n","<div class=\"alert alert-block alert-info\">\n","<h1> Widzenie komputerowe </h1>\n","<h2> 07. <i>Analiza wideo: przepływ optyczny, śledzenie obiektów</i> [laboratoria]</h2> \n","<h3>Andrzej Wójtowicz (2021)</h3>\n","</div>\n","\n","![Logo 2](img/aitech-logotyp-2.jpg)"]},{"cell_type":"code","source":["from google.colab import drive\n","drive.mount('/content/drive')\n","%cd /content/drive/My Drive/aitech-wko-pub"],"metadata":{"colab":{"base_uri":"https://localhost:8080/"},"id":"eymGeZLkXqCz","executionInfo":{"status":"ok","timestamp":1673869105773,"user_tz":-60,"elapsed":2196,"user":{"displayName":"Cezary Gałązkiewicz","userId":"01409497901784152256"}},"outputId":"43967bcc-373e-4ab2-e362-99eeba17d166"},"id":"eymGeZLkXqCz","execution_count":2,"outputs":[{"output_type":"stream","name":"stdout","text":["Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n","/content/drive/My Drive/aitech-wko-pub\n"]}]},{"cell_type":"markdown","id":"f124f5cd","metadata":{"id":"f124f5cd"},"source":["W poniższych materiałach zobaczymy w jaki sposób możemy przy pomocy przepływu optycznego dokonać stabilizacji obrazu oraz w jaki sposób śledzić obiekty znajdujące się na filmie.\n","\n","Na początku załadujmy niezbędne biblioteki."]},{"cell_type":"code","execution_count":3,"id":"ed69629c","metadata":{"id":"ed69629c","executionInfo":{"status":"ok","timestamp":1673869106063,"user_tz":-60,"elapsed":293,"user":{"displayName":"Cezary Gałązkiewicz","userId":"01409497901784152256"}}},"outputs":[],"source":["import cv2 as cv\n","import numpy as np\n","import matplotlib.pyplot as plt\n","%matplotlib inline\n","import IPython.display"]},{"cell_type":"markdown","id":"f9ef8d67","metadata":{"id":"f9ef8d67"},"source":["# Przepływ optyczny\n","\n","Naszym celem będzie znalezienie na poniższym filmie punktów kluczowych, które pozwolą nam w jakiś sposób sprawdzić jak przemieszcza się rowerzystka:"]},{"cell_type":"code","execution_count":4,"id":"1629fc29","metadata":{"colab":{"base_uri":"https://localhost:8080/","height":421},"id":"1629fc29","executionInfo":{"status":"ok","timestamp":1673869106375,"user_tz":-60,"elapsed":315,"user":{"displayName":"Cezary Gałązkiewicz","userId":"01409497901784152256"}},"outputId":"d2cfed1b-dd06-4042-a05d-e2c32c4e864b"},"outputs":[{"output_type":"execute_result","data":{"text/plain":["<IPython.core.display.Video object>"],"text/html":["<video src=\"vid/bike.mp4\" controls width=\"800\" >\n"," Your browser does not support the <code>video</code> element.\n"," </video>"]},"metadata":{},"execution_count":4}],"source":["IPython.display.Video(\"vid/bike.mp4\", width=800)"]},{"cell_type":"markdown","id":"aa176c9a","metadata":{"id":"aa176c9a"},"source":["Załadujmy film:"]},{"cell_type":"code","execution_count":5,"id":"2463bd1d","metadata":{"id":"2463bd1d","executionInfo":{"status":"ok","timestamp":1673869106819,"user_tz":-60,"elapsed":448,"user":{"displayName":"Cezary Gałązkiewicz","userId":"01409497901784152256"}}},"outputs":[],"source":["bike = cv.VideoCapture(\"vid/bike.mp4\")"]},{"cell_type":"markdown","id":"dde041a3","metadata":{"id":"dde041a3"},"source":["Przy pomocy algorytmu Shi-Tomasi (rozwinięcie metody Harrisa) możemy znaleźć narożniki, które dobrze nadają się do śledzenia. W OpenCV algorytm jest zaimplementowany w funkcji [`cv.goodFeaturesToTrack()`](https://docs.opencv.org/4.5.3/dd/d1a/group__imgproc__feature.html#ga1d6bb77486c8f92d79c8793ad995d541):"]},{"cell_type":"code","execution_count":6,"id":"36492aa6","metadata":{"id":"36492aa6","executionInfo":{"status":"ok","timestamp":1673869107194,"user_tz":-60,"elapsed":378,"user":{"displayName":"Cezary Gałązkiewicz","userId":"01409497901784152256"}}},"outputs":[],"source":["corners_num = 100\n","corners_colors = np.random.randint(0, 255, (corners_num, 3))\n","\n","_, frame_1 = bike.read()\n","frame_1_gray = cv.cvtColor(f