{"id":15934,"date":"2021-09-30T17:29:52","date_gmt":"2021-09-30T15:29:52","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/?p=15934"},"modified":"2023-06-07T17:55:26","modified_gmt":"2023-06-07T15:55:26","slug":"creating-embedded-vision-systems","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/creating-embedded-vision-systems\/","title":{"rendered":"Creating Embedded Vision Systems"},"content":{"rendered":"\t\t\t\t<div class=\"wp-block-uagb-table-of-contents uagb-toc__align-left uagb-toc__columns-1  uagb-block-473d8eb7      \"\n\t\t\t\t\tdata-scroll= \"1\"\n\t\t\t\t\tdata-offset= \"30\"\n\t\t\t\t\tstyle=\"\"\n\t\t\t\t>\n\t\t\t\t<div class=\"uagb-toc__wrap\">\n\t\t\t\t\t\t<div class=\"uagb-toc__title\">\n\t\t\t\t\t\t\tTable Of Contents\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t<div class=\"uagb-toc__list-wrap \">\n\t\t\t\t\t\t<ol class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#elements-of-a-pl-image-processing-system\" class=\"uagb-toc-link__trigger\">Elements of a PL Image Processing System\u00a0<\/a><ul class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#image-capture\" class=\"uagb-toc-link__trigger\">Image Capture<\/a><li class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#algorithm\" class=\"uagb-toc-link__trigger\">Algorithm\u00a0<\/a><li class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#output-pipeline\" class=\"uagb-toc-link__trigger\">Output Pipeline<\/a><\/li><\/ul><\/li><li class=\"uagb-toc__list\"><a href=\"#software-defined-image-processing\" class=\"uagb-toc-link__trigger\">Software-Defined Image Processing\u00a0<\/a><ul class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#bare-metal\" class=\"uagb-toc-link__trigger\">Bare Metal<\/a><li class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#pynq\" class=\"uagb-toc-link__trigger\">PYNQ\u00a0<\/a><li class=\"uagb-toc__list\"><li class=\"uagb-toc__list\"><a href=\"#petalinux\" class=\"uagb-toc-link__trigger\">PetaLinux<\/a><\/li><\/ul><\/li><\/ul><\/li><li class=\"uagb-toc__list\"><a href=\"#conclusions\" class=\"uagb-toc-link__trigger\">Conclusions<\/a><\/ul><\/ul><\/ol>\t\t\t\t\t<\/div>\n\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\n\n\n<p>Embedded vision systems are on the rise. There is something special about seeing an image that you have created on a display. That display could be demonstrating a simple, transparent image showcasing an image sensor\u2019s capability.<\/p>\n\n\n\n<p>Alternatively, it could be implementing an advanced image processing solution that identifies and classifies objects or tracks movement in the image.&nbsp;<\/p>\n\n\n\n<p>Of course, with the correct sensor selection, we can push the range of vision beyond the visible range into the infrared or X-ray elements of the EM spectrum.<\/p>\n\n\n\n<p>Implementing image processing algorithms for embedded vision systems is computationally intensive, especially as image resolutions increase beyond HD and move to 4K.<\/p>\n\n\n\n<p>A color HD image of 1920 pixels by 1080 lines using a 30-bit pixel has to process 3.73 Gbps to achieve 60 frames per second. Moving to 4K resolution, which has 3840 pixels and 2160 lines with a 30-bit pixel and 60 frames per second, requires significantly more at 14.92 Gpbs.&nbsp;<\/p>\n\n\n\n<p>Therefore, each stage of the image processing algorithm must be able to support this <a href=\"https:\/\/www.codemotion.com\/magazine\/dev-hub\/data-scientist\/cyber-data-ai\/\" target=\"_blank\" rel=\"noopener\">data<\/a> rate to achieve the desired frame rates, even when doing complex calculations on each pixel.&nbsp;<\/p>\n\n\n\n<p>The truly parallel nature of <a href=\"https:\/\/www.codemotion.com\/magazine\/dev-hub\/machine-learning-dev\/programmable-logic-internal-external-interfacing\/\" target=\"_blank\" rel=\"noopener\">programmable logic<\/a> provides an ideal technology to implement image processing pipelines.&nbsp;<\/p>\n\n\n\n<p>The parallel nature frees the developer from the sequential software world where each stage of the image processing algorithm must be implemented in sequence. In programmable logic, the algorithm\u2019s elements run in parallel, enabling increased throughput and more deterministic performance &#8211; both critical for many image processing applications that use embedded vision to interact safely with the environment. ADAS or vision-guided robotics are two good examples.<\/p>\n\n\n\n<p>Developers can get the best of both worlds by using a heterogeneous SoC such as the Zynq-7000 SoC or Zynq UltraScale+ MPSoC.&nbsp;<\/p>\n\n\n\n<p>These devices combine programmable logic with high-performance Arm processors, providing significant flexibility because the image processing algorithms can be implemented within the programmable logic.&nbsp;<\/p>\n\n\n\n<p>While the processing system can provide the image processing algorithm configuration to allow easy adaption to new image sensors or requirements, it can also implement high-level algorithms that take the output from the image processing system.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-elements-of-a-pl-image-processing-system\">Elements of a PL Image Processing System&nbsp;<\/h2>\n\n\n\n<p>Implementing an image processing system in programmable logic is not as daunting as it first may seem. The image processing pipeline can be broken down into three distinct elements: image capture, algorithm, and output pipeline.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-image-capture\"><strong>Image Capture<\/strong><\/h3>\n\n\n\n<p>The image capture pipeline connects directly with the image sensor or camera. As such, the image capture interfaces externally to the programmable logic over HDMI, SD\/HD\/UHD-SDI, MIPI or Parallel \/ LVDS.&nbsp;<\/p>\n\n\n\n<p>Thanks to the flexible nature of programmable logic IOs, most standards can be implemented using the IO structures without the need for an external PHY.&nbsp;<\/p>\n\n\n\n<p>To help capture the image, Xilinx provides a range of IP cores in the Vivado IP library that enables the image to be captured and made ready for further processing &#8211; possibly required to obtain a useable image for the image processing algorithm.&nbsp;<\/p>\n\n\n\n<p>This additional image processing may require color filtering (debayer) to convert raw pixel values to RGB pixels.&nbsp;<\/p>\n\n\n\n<p>The image capture phase may also include gamma correction, noise filtering, and color space conversion. In adaptive systems, the input video timing and resolution is detected to enable the image processing system to configure itself for the video format received automatically.&nbsp;<\/p>\n\n\n\n<p>An example image capture pipeline can be seen in Figure 1 below, showing a MIPI CSI-2, demosaic (debater), and frameBuffer to write to PS DDR memory.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh4.googleusercontent.com\/9U0q3rVMKA6XNCpQoGo13jJDqIWAMmZTvcfwa5TyuzXOku7_tqZSkdtgmp3ROooO9qF-0u_yfB3RLfzHn7-X00yC96psQvUgWnEYbloYF5h8VkkCVcpj9qolhKoHuVkE_S2uXqQ\" alt=\"\"\/><figcaption class=\"wp-element-caption\">Figure 1 &#8211; <em>Example Image Capture Pipeline<\/em><\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-algorithm\"><strong>Algorithm&nbsp;<\/strong><\/h3>\n\n\n\n<p>This is the actual implementation of the image processing algorithm. In many cases, it consists of several stages of image processing algorithms, each one connected to the next stage using an AXI Stream.&nbsp;<\/p>\n\n\n\n<p>These IP blocks may be provided by the Xilinx Vivado IP library, including IP blocks that can scale images up or down and layer video layers on top of each other, as demonstrated in Figure 2.<\/p>\n\n\n\n<p>Alternatively, they can be implemented using a hardware description language or high-level synthesis, enabling higher-level languages such as C\/C++ to implement image processing algorithms.&nbsp;<\/p>\n\n\n\n<p>Using a higher-level language enables developers to leverage the vision domain Xilinx Vitis accelerated libraries. These libraries provide several advanced image processing functions like filters, bounding boxes, bad pixel correction, warp transformation, and stereo block matching.<\/p>\n\n\n\n<p>If the image needs to be made available to the processor system for higher-level algorithms, for example, Video Direct Memory can be used to transfer the video stream to the PS DDR. This transfer can also operate to transfer data from the processor system to the programmable logic. Such PS-PL transfers can be used to provide an overlay on the image, presenting information on the display if required.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh6.googleusercontent.com\/Myt1EwnzOt81CqC4e06E6iz_PinW0tA6SxyZ3M5iUSL9TxZpeaWxNw1z5fCdz59nGLjHd41RJ1V--hTQC_F51yVc-4fH8acfWphVWq7UquSZpTMPtXJhqq4Q6Jm_4ZU74dXeWIA\" alt=\"\"\/><figcaption class=\"wp-element-caption\"><em>Figure 2 \u2013 Image Processing Video Mixer mixing live video with a test pattern.<\/em><\/figcaption><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-output-pipeline\"><strong>Output Pipeline<\/strong><\/h3>\n\n\n\n<p>Once the image has completed the algorithm pipeline, the processed image is output to the appropriate display. This could be MIPI-DSI, HDMI, SD\/HD\/UHD-SDI, or traditional parallel video with pixel clock, V Sync and H Sync. In the programmable logic, the developer needs to convert the processed image from AXI Stream format into the correct output format.<\/p>\n\n\n\n<p>The video must also be re-timed for output. Just like with the image capture and algorithm pipeline, the Vivado IP library contains the necessary IP cores to generate the output video in the correct format. Figure 3 below shows a typical output pipeline.&nbsp;<\/p>\n\n\n\n<p>A frame reads from the PS DDR passes data to the AXI Stream to Parallel Video output, operating under the control of the video timing controller.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/lh3.googleusercontent.com\/XR53vw_VB9xTDDwjvRA5JoLHjE0gLvsGpFSSyfB3Y-0jnWix_dhfsjxN2ma2bYYJST3H5uovT_O2khTbfPDQnQcAZ1khfm3G0y1bB4N7wOFkxxW_I31cKiZjcUjHo3v_XCLGY3c\" alt=\"\"\/><figcaption class=\"wp-element-caption\"><em>Figure 3 \u2013 Example Output Pipeline<\/em><\/figcaption><\/figure>\n\n\n\n<p>It is possible to move the image into the processing system DDR memory during the algorithmic processing, allowing the processing system to perform high-level algorithms on the processed image contents. The software can further process the image and output it back into the image processing stream if so desired.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-software-defined-image-processing\">Software-Defined Image Processing&nbsp;<\/h2>\n\n\n\n<p>Several approaches can be undertaken when working with the image in the processing system. Regardless of the approach taken, the image processing implemented within the programmable logic is highly configurable by the developed application software.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-bare-metal\"><strong>Bare Metal<\/strong><\/h3>\n\n\n\n<p>Bare metal developments are often used as an initial stage in developing the image processing system. They enable developers to quickly and easily demonstrate the <a href=\"https:\/\/www.codemotion.com\/magazine\/dev-hub\/machine-learning-dev\/embedded-processing-in-programmable-logic\/\" target=\"_blank\" rel=\"noopener\" class=\"ek-link\">programmable logic<\/a> design and enable the image sensor to be correctly configured.\u00a0<\/p>\n\n\n\n<p>This allows for the creation of a transparent path that displays the captured image on the selected display. The bare metal application does not include the complexity of an embedded Linux stack.&nbsp;<\/p>\n\n\n\n<p>As such, it is beneficial for debugging and commissioning the design using the Internal Logic Analysers (ILA) and memory views and the debugging capabilities to inspect register contents.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-pynq\"><strong>PYNQ&nbsp;<\/strong><\/h3>\n\n\n\n<p>The open-source PYNQ framework enables developers to leverage the power of Python to control IP within the programmable logic thanks to several PYNQ APIs, drivers, and libraries.&nbsp;<\/p>\n\n\n\n<p>Thanks to these PYNQ provisions, developers can focus on algorithm development because the PYNQ frameworks include drivers for most AXI connected IP blocks on the programmable logic. PYNQ runs on an Ubuntu-like distribution allowing developers to focus on the image processing algorithms using OpenCV and other popular Python frameworks.<\/p>\n\n\n\n<p>&nbsp;It enables focus on the algorithm development using real-world sensors, including seeing the limitations of the sensor under different conditions and the impact on the implemented algorithm.&nbsp;<\/p>\n\n\n\n<p>Once we know what the algorithm is, we can implement the <a href=\"https:\/\/www.codemotion.com\/magazine\/dev-hub\/web-developer\/the-what-why-and-how-of-javascript-functional-programming\/\" target=\"_blank\" rel=\"noopener\">functionality in the programmable<\/a> logic using Xilinx IP, HLS or the Vitis accelerated library function.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"h-petalinux\"><strong>PetaLinux<\/strong><\/h3>\n\n\n\n<p>An embedded Linux solution may be considered if higher-level algorithms or communication is needed.&nbsp;<\/p>\n\n\n\n<p>In this instance, PetaLinux can be used in conjunction with the Video4Linux (V4L) and GStreamer packages to create higher-level image processing algorithms. This framework may also be used if USB3 cameras are used that are connected to the processing system.&nbsp;<\/p>\n\n\n\n<p>Using PetaLinux enables the developer to make use of the Vitis AI flow and the Xilinx <a href=\"https:\/\/www.codemotion.com\/magazine\/dev-hub\/machine-learning-dev\/from-artificial-intelligence-to-generative-deep-learning\/\" target=\"_blank\" rel=\"noopener\">Deep Learning<\/a> Processor Unit (DPU). This aids the acceleration of the <a href=\"https:\/\/www.codemotion.com\/magazine\/dev-hub\/machine-learning-dev\/edge-machine-learning\/\" target=\"_blank\" rel=\"noopener\">machine learning<\/a> inference into the programmable logic using the DPU and supporting frameworks such as TensorFlow, Caffe, and PyTorch.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-conclusions\">Conclusions<\/h2>\n\n\n\n<p>The parallel nature of programmable logic frees the developer from the sequential world of traditional software image processing solutions, thereby enabling higher resolutions and frame rates for better embedded vision systems.<\/p>\n\n\n\n<p>Creating a software configurable image processing pipeline can be implemented using the Xilinx Vivado IP library, HLS, and Vitis accelerated libraries.&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Embedded vision systems are on the rise. There is something special about seeing an image that you have created on a display. That display could be demonstrating a simple, transparent image showcasing an image sensor\u2019s capability. Alternatively, it could be implementing an advanced image processing solution that identifies and classifies objects or tracks movement in&#8230; <a class=\"more-link\" href=\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/creating-embedded-vision-systems\/\">Read more<\/a><\/p>\n","protected":false},"author":121,"featured_media":16811,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":6,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[46],"tags":[3357,7214],"collections":[],"class_list":{"0":"post-15934","1":"post","2":"type-post","3":"status-publish","4":"format-standard","5":"has-post-thumbnail","7":"category-ai-ml","8":"tag-iot","9":"tag-machine-learning","10":"entry"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.9 (Yoast SEO v26.9) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Creating Embedded Vision Systems - Codemotion Magazine<\/title>\n<meta name=\"description\" content=\"Image processing must support high data rates. Programmable logic provides an ideal solution for embedded vision systems.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/creating-embedded-vision-systems\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Creating Embedded Vision Systems\" \/>\n<meta property=\"og:description\" content=\"Image processing must support high data rates. Programmable logic provides an ideal solution for embedded vision systems.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/creating-embedded-vision-systems\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2021-09-30T15:29:52+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-06-07T15:55:26+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/09\/computer-6107592_1280.webp\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"788\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/webp\" \/>\n<meta name=\"author\" content=\"Adam Taylor\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Adam Taylor\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"7 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/creating-embedded-vision-systems\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/creating-embedded-vision-systems\/\"},\"author\":{\"name\":\"Adam Taylor\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/4e3230f5a1c7f0eb48725176e548f9aa\"},\"headline\":\"Creating Embedded Vision Systems\",\"datePublished\":\"2021-09-30T15:29:52+00:00\",\"dateModified\":\"2023-06-07T15:55:26+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/creating-embedded-vision-systems\/\"},\"wordCount\":1428,\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/creating-embedded-vision-systems\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/09\/computer-6107592_1280.webp\",\"keywords\":[\"IoT\",\"Machine Learning\"],\"articleSection\":[\"AI\/ML\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/creating-embedded-vision-systems\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/creating-embedded-vision-systems\/\",\"name\":\"Creating Embedded Vision Systems - Codemotion Magazine\",\"isPartOf\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/creating-embedded-vision-systems\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/creating-embedded-vision-systems\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/09\/computer-6107592_1280.webp\",\"datePublished\":\"2021-09-30T15:29:52+00:00\",\"dateModified\":\"2023-06-07T15:55:26+00:00\",\"description\":\"Image processing must support high data rates. Programmable logic provides an ideal solution for embedded vision systems.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/creating-embedded-vision-systems\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/creating-embedded-vision-systems\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/creating-embedded-vision-systems\/#primaryimage\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/09\/computer-6107592_1280.webp\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/09\/computer-6107592_1280.webp\",\"width\":1280,\"height\":788},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/creating-embedded-vision-systems\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"AI\/ML\",\"item\":\"https:\/\/www.codemotion.com\/magazine\/ai-ml\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Creating Embedded Vision Systems\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#website\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"contentUrl\":\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/Codemotion.Italy\/\",\"https:\/\/x.com\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/4e3230f5a1c7f0eb48725176e548f9aa\",\"name\":\"Adam Taylor\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c0772bd98d83ddadde2d54b38356f5580817f7f676bebfb82d49b572e780a8c4?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c0772bd98d83ddadde2d54b38356f5580817f7f676bebfb82d49b572e780a8c4?s=96&d=mm&r=g\",\"caption\":\"Adam Taylor\"},\"description\":\"Adam Taylor is an expert in design and development of embedded systems and FPGA\u2019s for several end applications. He is the author of numerous articles and papers on electronic design and FPGA design, a Chartered Engineer, Fellow of the Institute of Engineering and Technology, Visiting Professor of Embedded Systems at the University of Lincoln and Arm Innovator. He is also the owner of the engineering and consultancy company Adiuvo Engineering and Training.\",\"url\":\"https:\/\/www.codemotion.com\/magazine\/author\/adam-taylor\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Creating Embedded Vision Systems - Codemotion Magazine","description":"Image processing must support high data rates. Programmable logic provides an ideal solution for embedded vision systems.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/creating-embedded-vision-systems\/","og_locale":"en_US","og_type":"article","og_title":"Creating Embedded Vision Systems","og_description":"Image processing must support high data rates. Programmable logic provides an ideal solution for embedded vision systems.","og_url":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/creating-embedded-vision-systems\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2021-09-30T15:29:52+00:00","article_modified_time":"2023-06-07T15:55:26+00:00","og_image":[{"width":1280,"height":788,"url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/09\/computer-6107592_1280.webp","type":"image\/webp"}],"author":"Adam Taylor","twitter_card":"summary_large_image","twitter_creator":"@CodemotionIT","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"Adam Taylor","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/creating-embedded-vision-systems\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/creating-embedded-vision-systems\/"},"author":{"name":"Adam Taylor","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/4e3230f5a1c7f0eb48725176e548f9aa"},"headline":"Creating Embedded Vision Systems","datePublished":"2021-09-30T15:29:52+00:00","dateModified":"2023-06-07T15:55:26+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/creating-embedded-vision-systems\/"},"wordCount":1428,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/creating-embedded-vision-systems\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/09\/computer-6107592_1280.webp","keywords":["IoT","Machine Learning"],"articleSection":["AI\/ML"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/creating-embedded-vision-systems\/","url":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/creating-embedded-vision-systems\/","name":"Creating Embedded Vision Systems - Codemotion Magazine","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/creating-embedded-vision-systems\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/creating-embedded-vision-systems\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/09\/computer-6107592_1280.webp","datePublished":"2021-09-30T15:29:52+00:00","dateModified":"2023-06-07T15:55:26+00:00","description":"Image processing must support high data rates. Programmable logic provides an ideal solution for embedded vision systems.","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/creating-embedded-vision-systems\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/ai-ml\/creating-embedded-vision-systems\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/creating-embedded-vision-systems\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/09\/computer-6107592_1280.webp","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/09\/computer-6107592_1280.webp","width":1280,"height":788},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/creating-embedded-vision-systems\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"AI\/ML","item":"https:\/\/www.codemotion.com\/magazine\/ai-ml\/"},{"@type":"ListItem","position":3,"name":"Creating Embedded Vision Systems"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/4e3230f5a1c7f0eb48725176e548f9aa","name":"Adam Taylor","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/c0772bd98d83ddadde2d54b38356f5580817f7f676bebfb82d49b572e780a8c4?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c0772bd98d83ddadde2d54b38356f5580817f7f676bebfb82d49b572e780a8c4?s=96&d=mm&r=g","caption":"Adam Taylor"},"description":"Adam Taylor is an expert in design and development of embedded systems and FPGA\u2019s for several end applications. He is the author of numerous articles and papers on electronic design and FPGA design, a Chartered Engineer, Fellow of the Institute of Engineering and Technology, Visiting Professor of Embedded Systems at the University of Lincoln and Arm Innovator. He is also the owner of the engineering and consultancy company Adiuvo Engineering and Training.","url":"https:\/\/www.codemotion.com\/magazine\/author\/adam-taylor\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/09\/computer-6107592_1280-600x400.webp","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/09\/computer-6107592_1280-600x600.webp","author_info":{"display_name":"Adam Taylor","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/adam-taylor\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/09\/computer-6107592_1280.webp",1280,788,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/09\/computer-6107592_1280-150x150.webp",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/09\/computer-6107592_1280-300x185.webp",300,185,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/09\/computer-6107592_1280-768x473.webp",768,473,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/09\/computer-6107592_1280-1024x630.webp",1024,630,true],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/09\/computer-6107592_1280.webp",1280,788,false],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/09\/computer-6107592_1280.webp",1280,788,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/09\/computer-6107592_1280.webp",100,62,false],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/09\/computer-6107592_1280-180x128.webp",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/09\/computer-6107592_1280-896x504.webp",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/09\/computer-6107592_1280-400x225.webp",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/09\/computer-6107592_1280-600x400.webp",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2021\/09\/computer-6107592_1280-600x600.webp",600,600,true]},"uagb_author_info":{"display_name":"Adam Taylor","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/adam-taylor\/"},"uagb_comment_info":0,"uagb_excerpt":"Embedded vision systems are on the rise. There is something special about seeing an image that you have created on a display. That display could be demonstrating a simple, transparent image showcasing an image sensor\u2019s capability. Alternatively, it could be implementing an advanced image processing solution that identifies and classifies objects or tracks movement in&#8230;&hellip;","lang":"en","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/15934","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/121"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=15934"}],"version-history":[{"count":6,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/15934\/revisions"}],"predecessor-version":[{"id":21247,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/15934\/revisions\/21247"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/16811"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=15934"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=15934"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=15934"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=15934"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}