From cdcc1768fbb3380a64f04924a78e6a70c4bad7bd Mon Sep 17 00:00:00 2001 From: Dragonfire3900 Date: Wed, 20 Nov 2024 11:19:57 -0600 Subject: [PATCH 1/2] Added the pokemon card scraper as a sub module. This will make it a little smoother to get the data without having to contact someone. In addition any changes to the scraper will be in sync --- .gitmodules | 3 +++ scraper | 1 + 2 files changed, 4 insertions(+) create mode 100644 .gitmodules create mode 160000 scraper diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 0000000..140e510 --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "scraper"] + path = scraper + url = git@github.com:ben-hawks/pokedex_scraper.git diff --git a/scraper b/scraper new file mode 160000 index 0000000..a4b5322 --- /dev/null +++ b/scraper @@ -0,0 +1 @@ +Subproject commit a4b5322c997a6f7688260d13fe268f40e81f4fbd From 783c1ebb41fec3d84df36adcc1e3412c331c7a2c Mon Sep 17 00:00:00 2001 From: Dragonfire3900 Date: Wed, 20 Nov 2024 11:32:07 -0600 Subject: [PATCH 2/2] Added the PYNQ deployment code. In order to make deploying this demo as easy as possible it's important to keep everything in one place. I added the necessary code to deploy to a PYNQ board from @ben-hawks. As a result only this repository needs to be cloned to the PYNQ board which will make deployment faster. --- PYNQ/Demo_Camera_v3.ipynb | 357 ++++++++++++++++++++++++++++++++ PYNQ/axi_stream_driver.py | 79 +++++++ PYNQ/hls4ml_pokemon_demo_bg.png | Bin 0 -> 56273 bytes 3 files changed, 436 insertions(+) create mode 100644 PYNQ/Demo_Camera_v3.ipynb create mode 100644 PYNQ/axi_stream_driver.py create mode 100644 PYNQ/hls4ml_pokemon_demo_bg.png diff --git a/PYNQ/Demo_Camera_v3.ipynb b/PYNQ/Demo_Camera_v3.ipynb new file mode 100644 index 0000000..d9587f9 --- /dev/null +++ b/PYNQ/Demo_Camera_v3.ipynb @@ -0,0 +1,357 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Real-Time Edge AI on FPGAs - Live Pokemon Card Recognition!\n", + "\n", + "## Setup\n", + "\n", + "\n", + "### Make sure the USB Camera is plugged into **the PYNQ FPGA Dev Board, not the normal computer (Intel NUC)!!!!!**\n", + "\n", + "### Cable Setup (Sanity Check) \n", + "If you're reading this, the board is likely plugged in and setup correctly for the most part - but make sure:\n", + "* The ethernet cable is plugged straight into the intel NUC, and the intel NUC has a static IP set to `192.168.2.XX`, where `XX` is any number between 0-255 **that is not 99**, as the dev board itself is set to `192.168.2.99`\n", + " * If we're at DEFCON, we don't need to take any chances plugging this into any real network! We just need one computer to access and run this notebook.\n", + "* the HDMI cable is plugged into, and the monitor powered on, **before running the notebook**\n", + "* the USB camera is plugged into the Pynq Dev board itself, not the host computer! \n", + "\n", + "\n", + "### Camera setup & tweaks\n", + "Once all cables are verified as connected, press the \"Restart and Run all cells\" button at the top of the notebook (the fast forward icon/two arrows connected to eachother). This will start the actual video output of the USB webcam, which you will need to use to position/set the zoom, focus, etc. \n", + " * The goal is to position the camera so that the art of the card, when placed on the table in the printed box under the camera, will take up the entire frame and be in focus. \n", + " * Use the three adjustable rings on the camera lens itself to adjust zoom, aperature (brightness), and focus - in that order. You can use the little screws on each ring to lock it in place once properly set. \n", + " * If desired, you can set the script to display a \"camera calibration mode\" below via setting `calibrate_camera_mode = True`, but remember to set it back to `False` once your done, then Restart and Run All cells to output the actual display image\n", + " \n", + "Additionally, depending on the monitor/setup used, you might have to change the color mode. By default, BGR is used and assumed, but if the colors look weird, set `color_mode_bgr` to `False` (or `True` to switch back to BGR mode), then Restart & Re-run all cells to switch to RGB mode. \n", + "\n", + "## Running the Demo\n", + "\n", + "Once setup is complete, the demo hardware itself should be pretty hands off! It's up to you to talk to folks and walk them through the concept and idea of what's going on. More material for that is provided down below/along side this info!\n", + "\n", + "Folks are free to play with, rotate, etc. the fake pokemon cards to see what happens with the demo. Despite being just printed on some cardstock, they're not intended to be taken! We have a decent number of extras, but not enough to hand out. If some do disappear, there should be a stock of replacements nearby. Try to keep a decent balance of the pokemon that are out on the table! \n", + "\n", + "### Troubleshooting\n", + "\n", + "If you run into issues, try the following. If all else fails, restart and run all cells, and if that doesn't work, restart the whole dev board and/or call Ben Hawks (contact info left with AI Village staff) \n", + "\n", + "* The output froze!\n", + " * Try restart & run all cells. If that doesn't work, stop the cells and the kernel, unplug and power-cycle the display (if possible), plug it back in, then restart and run all cells. \n", + "* After multiple iterations/restarts of the notebook, the display output image is shifting and wrapping!\n", + " * This is a known issue with an unknown cause. Restarting the whole dev board is the only reliable way of fixing this. HDMI is weird. \n", + "* the colors are weird!\n", + " * the display probably expects a different mode. If this happens randomly, try restarting the display and/or restart&run all cells in the notebook. If that fails restart the dev board. \n", + "* The USB Camera isn't displaying/opening/connecting properly!\n", + " * Double check the normal usb connection, but also the weird barrel jack connector in the middle of the cable. also make sure it's plugged into the USB on the Pynq Dev board, not the host computer/Intel NUC. \n", + "* One of the cells is repeatedly giving an error!\n", + " * If all your connections are okay, and all the cells above that one have been run (and without any errors), call Ben Hawks. This shouldn't happen, probably?!\n", + "* It's not predicting the right pokemon!\n", + " * yeah it does that sometimes. The model is very small, and trained with a somewhat bad dataset. It should be able to get most cards after some rotating and movement, but if it seems like it's _never_ getting anything right, even with perfect framing and trying multiple cards of the same pokemon (Onix is pretty reliable), call Ben Hawks. \n", + "* I can't access the Jupyter server/webpage to start the notebook!\n", + " * The CPU itself is pretty small (dual core ARM) so it might take a minute to load pages, but if the connection is timing out, try restarting the dev board, but plug the ethernet cable in *before* powering it on. If the ethernet cable isn't connected, it gets a bit weird and doesn't automatically assign itself an ipv4 address without restarting the `networking` service (`sudo systemctl restart networking`). You can do this over the USB Serial connection (115200 baud, via the micro USB port next to the ethernet port) if you'd like, but the simplest way is to just restart the whole dev board.\n", + " \n", + " \n", + "**TL;DR - Try restarting the notebook, if that fails the dev board, and if that fails, call Ben Hawks (AIV Staff have contact info)**" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [], + "source": [ + "# Set to false if colors seem weird on display - likely an issue with display using BGR or RGB mode... \n", + "color_mode_bgr = True\n", + "\n", + "# Set to true if you need to set/calibrate the USB webcam position, zoom, focus, etc. \n", + "# outputs just a simplified view of the whole webcam frame if true. \n", + "# !!! Must set to True then Restart & Run all cells to go back to normal operation! !!!\n", + "calibrate_camera_mode = False\n", + "\n", + "# Count of how many frames to average the prediction over \n", + "# Higher num will likely give more \"accurate\" results, but have a noticable lag and make it harder to demonstrate some issues\n", + "# Lower num will have less of a lag when changing/placing new cards,but be less \"accurate\" overall\n", + "# 10 seems to be a good \"sweet spot\"\n", + "rolling_predict_frames = 15\n" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Capture device is open: True\n" + ] + } + ], + "source": [ + "# initialize camera from OpenCV\n", + "import cv2 as cv\n", + "\n", + "videoIn = cv.VideoCapture(cv.CAP_V4L)\n", + "videoIn = cv.VideoCapture(-1)\n", + "#videoIn = cv.VideoCapture('/dev/v4l/by-id/usb-HD_Web_Camera_HD_Web_Camera_Ucamera001-video-index0')\n", + "while(videoIn.isOpened() == False):\n", + " #videoIn = cv.VideoCapture(cv.CAP_V4L)\n", + " videoIn = cv.VideoCapture(-1)\n", + " #videoIn = cv.VideoCapture('/dev/v4l/by-id/usb-HD_Web_Camera_HD_Web_Camera_Ucamera001-video-index0')\n", + " videoIn.set(cv.CAP_PROP_FRAME_WIDTH, 640)\n", + " videoIn.set(cv.CAP_PROP_FRAME_HEIGHT, 480)\n", + "\n", + "\n", + "print(\"Capture device is open: \" + str(videoIn.isOpened()))" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "data": { + "application/javascript": [ + "\n", + "require(['notebook/js/codecell'], function(codecell) {\n", + " codecell.CodeCell.options_default.highlight_modes[\n", + " 'magic_text/x-csrc'] = {'reg':[/^%%microblaze/]};\n", + " Jupyter.notebook.events.one('kernel_ready.Kernel', function(){\n", + " Jupyter.notebook.get_cells().map(function(cell){\n", + " if (cell.cell_type == 'code'){ cell.auto_highlight(); } }) ;\n", + " });\n", + "});\n" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Load the Neural network FPGA firmware\n", + "import numpy as np\n", + "from axi_stream_driver import NeuralNetworkOverlay\n", + "\n", + "X_shape = (32, 32, 3)\n", + "y_shape =(10)\n", + "\n", + "nn = NeuralNetworkOverlay('../Video_v3.bit', X_shape, y_shape)" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [], + "source": [ + "# Load the background image for HDMI output\n", + "bg_img = cv.imread(\"hls4ml_pokemon_demo_bg.png\") #defaults to BGR, uncomment below if needed?\n", + "# bg_img = cv2.cvtColor(bg_img, cv2.COLOR_BGR2RGB)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Steup and start HDMI output, make sure it's connected before running the cell!\n", + "from pynq.lib.video import *\n", + "\n", + "# monitor configuration: 1280*720 @ 60Hz\n", + "Mode = VideoMode(1280,720,24)\n", + "hdmi_out = nn.video.hdmi_out\n", + "\n", + "if color_mode_bgr:\n", + " hdmi_out.configure(Mode,PIXEL_BGR)\n", + "else:\n", + " hdmi_out.configure(Mode,PIXEL_RGB)\n", + " \n", + "hdmi_out.start()" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Frames per second: 25.90793503645379\n" + ] + } + ], + "source": [ + "import time\n", + "start = time.time()\n", + "for NumOfFrames in range (50): \n", + " ret, frame = videoIn.read()\n", + " if (ret):\n", + " outframe = hdmi_out.newframe()\n", + " outframe[0:480,0:640,:] = frame[0:480,0:640,:] \n", + " hdmi_out.writeframe(outframe)\n", + " else:\n", + " raise RuntimeError(\"Failed to read from camera.\")\n", + "end = time.time()\n", + "print(\"Frames per second: \" + str(50 / (end - start)))" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [], + "source": [ + "## used to calibrate camera! Stop the cell, then set \"calibrate_camera_mode\" to false, then restart & run all when done!\n", + "while calibrate_camera_mode: \n", + " ret, frame = videoIn.read()\n", + " if (ret):\n", + " outframe = hdmi_out.newframe()\n", + " outframe[0:480,0:640,:] = frame[0:480,0:640,:] \n", + " hdmi_out.writeframe(outframe)\n", + " else:\n", + " raise RuntimeError(\"Failed to read from camera.\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "# Actual Running mode!\n", + "\n", + "# Capture webcam video and display to HDMI Output\n", + "%matplotlib inline \n", + "from matplotlib import pyplot as plt\n", + "import numpy as np\n", + "rolling_predict = np.zeros(rolling_predict_frames, dtype=np.int32)\n", + "#Prediction Text Location - Center Bottom of Screen (720p)\n", + "x,y,w,h = 550,660,150,40\n", + "start_time = time.time()\n", + "# FPS update time in seconds\n", + "display_time = 1\n", + "fc = 0\n", + "FPS = 0\n", + "fps_disp = \"\"\n", + "while (1):\n", + " # Read in image from webcam\n", + " ret, frame = videoIn.read()\n", + " if (ret):\n", + " \n", + " # Calculate FPS \n", + " fc+=1\n", + " TIME = time.time() - start_time\n", + " if (TIME) >= display_time:\n", + " FPS = fc / (TIME)\n", + " fc = 0\n", + " start_time = time.time()\n", + " fps_disp = \"FPS: \"+str(FPS)[:5]\n", + "\n", + " #preprocess image before passing to neural network, - Crop to square and resize to 32*32px\n", + " outframe = hdmi_out.newframe()\n", + " cropped_frame = frame[0:480, 0:480]\n", + " if color_mode_bgr:\n", + " RGB_img = cropped_frame #Desired input color format depends on monitor, USB Webcam returns RGB\n", + " else:\n", + " RGB_img = cv.cvtColor(cropped_frame, cv.COLOR_RGB2BGR)\n", + " resized = cv.resize(RGB_img, (32, 32))\n", + " resized_scaled = resized/255.\n", + " \n", + " # Send pre-processed image to FPGA Neural Network!\n", + " #y_hw, latency, throughput = nn.predict(resized_scaled, debug=False, profile=True)\n", + " y_hw = nn.predict(resized_scaled, debug=False, profile=False)\n", + " \n", + " # Get prediction back from FPGA, determine which pokemon to display as our prediction (rolling prediction)\n", + " percentage = np.array(y_hw)\n", + " last_predict = np.argmax(percentage)\n", + " if rolling_predict_frames > 1:\n", + " rolling_predict = rolling_predict[1:] # pop oldest element from our predictions\n", + " rolling_predict = np.append(rolling_predict, last_predict) # add newest prediction\n", + " percentage_max = np.bincount(rolling_predict).argmax() # get the most common prediction over the last N frames\n", + " else: # skip the whole array operations if set rolling pred is = 1, just for the sake of speed (+ ~0.25-0.5 FPS)\n", + " percentage_max = last_predict\n", + " if percentage_max == 0:\n", + " text = \"Bulbasaur\"\n", + " elif percentage_max == 1: \n", + " text = \"Charmander\"\n", + " elif percentage_max == 2:\n", + " text = \"Eevee\"\n", + " elif percentage_max == 3: \n", + " text = \"Gengar\"\n", + " elif percentage_max == 4: \n", + " text = \"Jigglypuff\"\n", + " elif percentage_max == 5: \n", + " text = \"Mewtwo\"\n", + " elif percentage_max == 6: \n", + " text = \"Onix\"\n", + " elif percentage_max == 7: \n", + " text = \"Pikachu\"\n", + " elif percentage_max == 8: \n", + " text = \"Snorlax\"\n", + " elif percentage_max == 9: \n", + " text = \"Squirtle\"\n", + " else: \n", + " text = \"NA\"\n", + " \n", + " # Construct our output HDMI video frame\n", + " scaled_input = cv.resize(resized, (480, 480),interpolation=cv.INTER_AREA) #resize our 32px image to 480px size, but at the same resolution\n", + " outframe[0:720,0:1280,:] = bg_img #Set background image\n", + " outframe[0:480,0:480,:] = RGB_img #add full resolution input image\n", + " outframe[0:480,800:1280,:] = scaled_input # add actual model input resolution image \n", + " cv.rectangle(outframe, (x,y), (x + w, y + h), (255,255,255), -1) # Add rectange & prediction text\n", + " cv.putText(img=outframe, text=text,org=(x+int(w/10),y+int(4*h/5)), fontFace=cv.FONT_HERSHEY_DUPLEX, fontScale=1, color=(255,0,0), thickness=1)\n", + " cv.putText(outframe, fps_disp, (10, 25), cv.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)\n", + " hdmi_out.writeframe(outframe) # Output the final constructed frame\n", + " else:\n", + " print(\"Failed to read from camera.\")\n", + " break" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "#### hdmi_out.close()" + ] + } + ], + "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.6.5" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/PYNQ/axi_stream_driver.py b/PYNQ/axi_stream_driver.py new file mode 100644 index 0000000..a5213a9 --- /dev/null +++ b/PYNQ/axi_stream_driver.py @@ -0,0 +1,79 @@ +from pynq import DefaultHierarchy, DefaultIP, allocate +from pynq import Overlay +from datetime import datetime +import pynq.lib.dma +import pynq.lib.video +import numpy as np + + +class NeuralNetworkOverlay(Overlay): + def __init__(self, bitfile_name, x_shape, y_shape, dtype=np.float32, dtbo=None, download=True, ignore_version=False, + device=None): + super().__init__(bitfile_name, dtbo=None, download=True, ignore_version=False, device=None) + self.sendchannel = self.hier_0.axi_dma_0.sendchannel + self.recvchannel = self.hier_0.axi_dma_0.recvchannel + self.input_buffer = allocate(shape=x_shape, dtype=np.float32) + self.output_buffer = allocate(shape=y_shape, dtype=np.float32) + + def _print_dt(self, timea, timeb, N): + dt = (timeb - timea) + dts = dt.seconds + dt.microseconds * 10 ** -6 + rate = N / dts + print("Classified {} samples in {} seconds ({} inferences / s)".format(N, dts, rate)) + return dts, rate + + def predict(self, X, debug=False, profile=False, encode=None, decode=None): + """ + Obtain the predictions of the NN implemented in the FPGA. + Parameters: + - X : the input vector. Should be numpy ndarray. + - dtype : the data type of the elements of the input/output vectors. + Note: it should be set depending on the interface of the accelerator; if it uses 'float' + types for the 'data' AXI-Stream field, 'np.float32' dtype is the correct one to use. + Instead if it uses 'ap_fixed', 'np.intA' is the correct one to use (note that A cannot + any integer value, but it can assume {..., 8, 16, 32, ...} values. Check `numpy` + doc for more info). + In this case the encoding/decoding has to be computed by the PS. For example for + 'ap_fixed<16,6>' type the following 2 functions are the correct one to use for encode/decode + 'float' -> 'ap_fixed<16,6>': + ``` + def encode(xi): + return np.int16(round(xi * 2**10)) # note 2**10 = 2**(A-B) + def decode(yi): + return yi * 2**-10 + encode_v = np.vectorize(encode) # to apply them element-wise + decode_v = np.vectorize(decode) + ``` + - profile : boolean. Set it to `True` to print the performance of the algorithm in term of `inference/s`. + - encode/decode: function pointers. See `dtype` section for more information. + - return: an output array based on `np.ndarray` with a shape equal to `y_shape` and a `dtype` equal to + the namesake parameter. + """ + if profile: + timea = datetime.now() + if encode is not None: + X = encode(X) + #print("Input size={}".format(X.size)) + self.input_buffer[:] = X + self.sendchannel.transfer(self.input_buffer) + self.recvchannel.transfer(self.output_buffer) + + + if debug: + print("Transfer OK") + self.sendchannel.wait() + if debug: + print("Send OK") + self.recvchannel.wait() + if debug: + print("Receive OK") + # result = self.output_buffer.copy() + if decode is not None: + self.output_buffer = decode(self.output_buffer) + + if profile: + timeb = datetime.now() + dts, rate = self._print_dt(timea, timeb, len(X)) + return self.output_buffer, dts, rate + else: + return self.output_buffer \ No newline at end of file diff --git a/PYNQ/hls4ml_pokemon_demo_bg.png b/PYNQ/hls4ml_pokemon_demo_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..058f60725c087683ae11b90d2eed82ca8694ab58 GIT binary patch literal 56273 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 O=HD)zpETF;$NvIgg2uQ2 literal 0 HcmV?d00001