{"id":5884,"date":"2013-09-11T09:45:06","date_gmt":"2013-09-11T09:45:06","guid":{"rendered":"http:\/\/178.62.14.192\/?p=5884"},"modified":"2013-09-11T09:45:06","modified_gmt":"2013-09-11T09:45:06","slug":"pi_piper-an-event-driven-python-library-for-raspberrypi","status":"publish","type":"post","link":"https:\/\/www.recantha.co.uk\/blog\/?p=5884","title":{"rendered":"pi_piper &#8211; an event-driven Python library for #RaspberryPi"},"content":{"rendered":"<p>Jason Whitehorn has written a library for Python to control\/read the GPIO pins based on events. It means you can write code like:<\/p>\n<pre class=\"code ruby\" style=\"color: #000000; font-family: monospace; padding: 5px 12px; margin-top: 4px; border-color: #eeeeff; background-color: #f5f5ff; font-size: 13px; letter-spacing: normal; line-height: normal;\"><code class=\"ruby\"><span class=\"id identifier rubyid_watch\">watch<\/span> <span class=\"symbol\" style=\"color: #c5060b;\">:pin<\/span> <span class=\"op\">=&gt;<\/span> <span class=\"int\">23<\/span> <span class=\"kw\" style=\"color: #0000ff;\">do<\/span>\n  <span class=\"id identifier rubyid_puts\">puts<\/span> <span class=\"tstring\" style=\"color: #036a07;\"><span class=\"tstring_beg\">\"<\/span><span class=\"tstring_content\">Pin changed from <\/span><span class=\"embexpr_beg\">#{<\/span><span class=\"id identifier rubyid_last_value\">last_value<\/span><span class=\"embexpr_end\">}<\/span><span class=\"tstring_content\"> to <\/span><span class=\"embexpr_beg\">#{<\/span><span class=\"id identifier rubyid_value\">value<\/span><span class=\"embexpr_end\">}<\/span><span class=\"tstring_end\">\"<\/span><\/span>\n<span class=\"kw\" style=\"color: #0000ff;\">end<\/span>\n\n<span class=\"comment\" style=\"color: #0066ff;\">#Or\n<\/span>\n<span class=\"id identifier rubyid_after\">after<\/span> <span class=\"symbol\" style=\"color: #c5060b;\">:pin<\/span> <span class=\"op\">=&gt;<\/span> <span class=\"int\">23<\/span><span class=\"comma\">,<\/span> <span class=\"symbol\" style=\"color: #c5060b;\">:goes<\/span> <span class=\"op\">=&gt;<\/span> <span class=\"symbol\" style=\"color: #c5060b;\">:high<\/span> <span class=\"kw\" style=\"color: #0000ff;\">do<\/span>\n  <span class=\"id identifier rubyid_puts\">puts<\/span> <span class=\"tstring\" style=\"color: #036a07;\"><span class=\"tstring_beg\">\"<\/span><span class=\"tstring_content\">Button pressed<\/span><span class=\"tstring_end\">\"<\/span><\/span>\n<span class=\"kw\" style=\"color: #0000ff;\">end<\/span><\/code><\/pre>\n<p>&#8230; which is very intuitive and is an excellent way of doing it.<\/p>\n<p><a href=\"http:\/\/rubygems.org\/gems\/pi_piper\">Read more and download the library here<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Jason Whitehorn has written a library for Python to control\/read the GPIO pins based on events. It means you can write code like: watch :pin =&gt; 23 do puts &#8220;Pin changed from #{last_value} to #{value}&#8221; end #Or after :pin =&gt;&hellip;<\/p>\n<p class=\"more-link-p\"><a class=\"more-link\" href=\"https:\/\/www.recantha.co.uk\/blog\/?p=5884\">Read more &rarr;<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[39],"tags":[],"class_list":["post-5884","post","type-post","status-publish","format-standard","hentry","category-programming"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.8 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>pi_piper - an event-driven Python library for #RaspberryPi - Raspberry Pi Pod<\/title>\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.recantha.co.uk\/blog\/?p=5884\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"pi_piper - an event-driven Python library for #RaspberryPi - Raspberry Pi Pod\" \/>\n<meta property=\"og:description\" content=\"Jason Whitehorn has written a library for Python to control\/read the GPIO pins based on events. It means you can write code like: watch :pin =&gt; 23 do puts &quot;Pin changed from #{last_value} to #{value}&quot; end #Or after :pin =&gt;&hellip;Read more &rarr;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.recantha.co.uk\/blog\/?p=5884\" \/>\n<meta property=\"og:site_name\" content=\"Raspberry Pi Pod\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/recantha\/\" \/>\n<meta property=\"article:published_time\" content=\"2013-09-11T09:45:06+00:00\" \/>\n<meta name=\"author\" content=\"Michael Horne\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@recantha\" \/>\n<meta name=\"twitter:site\" content=\"@recantha\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Michael Horne\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.recantha.co.uk\/blog\/?p=5884#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.recantha.co.uk\/blog\/?p=5884\"},\"author\":{\"name\":\"Michael Horne\",\"@id\":\"https:\/\/www.recantha.co.uk\/blog\/#\/schema\/person\/c27c4ef2ee1c18b130f1fcd5dcdbb263\"},\"headline\":\"pi_piper &#8211; an event-driven Python library for #RaspberryPi\",\"datePublished\":\"2013-09-11T09:45:06+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.recantha.co.uk\/blog\/?p=5884\"},\"wordCount\":52,\"commentCount\":1,\"publisher\":{\"@id\":\"https:\/\/www.recantha.co.uk\/blog\/#organization\"},\"articleSection\":[\"Programming\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.recantha.co.uk\/blog\/?p=5884#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.recantha.co.uk\/blog\/?p=5884\",\"url\":\"https:\/\/www.recantha.co.uk\/blog\/?p=5884\",\"name\":\"pi_piper - an event-driven Python library for #RaspberryPi - Raspberry Pi Pod\",\"isPartOf\":{\"@id\":\"https:\/\/www.recantha.co.uk\/blog\/#website\"},\"datePublished\":\"2013-09-11T09:45:06+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.recantha.co.uk\/blog\/?p=5884#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.recantha.co.uk\/blog\/?p=5884\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.recantha.co.uk\/blog\/?p=5884#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.recantha.co.uk\/blog\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"pi_piper &#8211; an event-driven Python library for #RaspberryPi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.recantha.co.uk\/blog\/#website\",\"url\":\"https:\/\/www.recantha.co.uk\/blog\/\",\"name\":\"Raspberry Pi Pod\",\"description\":\"Experiences with the Raspberry Pi micro computer and microcontroller\",\"publisher\":{\"@id\":\"https:\/\/www.recantha.co.uk\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.recantha.co.uk\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.recantha.co.uk\/blog\/#organization\",\"name\":\"Raspberry Pi Pod\",\"url\":\"https:\/\/www.recantha.co.uk\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.recantha.co.uk\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/i0.wp.com\/www.recantha.co.uk\/blog\/wp-content\/uploads\/2016\/03\/cropped-PiPod-Logo-v3.png?fit=800%2C337&ssl=1\",\"contentUrl\":\"https:\/\/i0.wp.com\/www.recantha.co.uk\/blog\/wp-content\/uploads\/2016\/03\/cropped-PiPod-Logo-v3.png?fit=800%2C337&ssl=1\",\"width\":800,\"height\":337,\"caption\":\"Raspberry Pi Pod\"},\"image\":{\"@id\":\"https:\/\/www.recantha.co.uk\/blog\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/recantha\/\",\"https:\/\/x.com\/recantha\",\"https:\/\/www.linkedin.com\/in\/recantha\/\",\"https:\/\/www.youtube.com\/channel\/UCK4F9blabxzmk8Inzhs8tpg\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.recantha.co.uk\/blog\/#\/schema\/person\/c27c4ef2ee1c18b130f1fcd5dcdbb263\",\"name\":\"Michael Horne\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.recantha.co.uk\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/479778b0677caadde0ceb54c4129804ef674914607e3ed0998808148357d10d8?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/479778b0677caadde0ceb54c4129804ef674914607e3ed0998808148357d10d8?s=96&d=mm&r=g\",\"caption\":\"Michael Horne\"},\"url\":\"https:\/\/www.recantha.co.uk\/blog\/?author=1\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"pi_piper - an event-driven Python library for #RaspberryPi - Raspberry Pi Pod","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.recantha.co.uk\/blog\/?p=5884","og_locale":"en_US","og_type":"article","og_title":"pi_piper - an event-driven Python library for #RaspberryPi - Raspberry Pi Pod","og_description":"Jason Whitehorn has written a library for Python to control\/read the GPIO pins based on events. It means you can write code like: watch :pin =&gt; 23 do puts \"Pin changed from #{last_value} to #{value}\" end #Or after :pin =&gt;&hellip;Read more &rarr;","og_url":"https:\/\/www.recantha.co.uk\/blog\/?p=5884","og_site_name":"Raspberry Pi Pod","article_publisher":"https:\/\/www.facebook.com\/recantha\/","article_published_time":"2013-09-11T09:45:06+00:00","author":"Michael Horne","twitter_card":"summary_large_image","twitter_creator":"@recantha","twitter_site":"@recantha","twitter_misc":{"Written by":"Michael Horne"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.recantha.co.uk\/blog\/?p=5884#article","isPartOf":{"@id":"https:\/\/www.recantha.co.uk\/blog\/?p=5884"},"author":{"name":"Michael Horne","@id":"https:\/\/www.recantha.co.uk\/blog\/#\/schema\/person\/c27c4ef2ee1c18b130f1fcd5dcdbb263"},"headline":"pi_piper &#8211; an event-driven Python library for #RaspberryPi","datePublished":"2013-09-11T09:45:06+00:00","mainEntityOfPage":{"@id":"https:\/\/www.recantha.co.uk\/blog\/?p=5884"},"wordCount":52,"commentCount":1,"publisher":{"@id":"https:\/\/www.recantha.co.uk\/blog\/#organization"},"articleSection":["Programming"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.recantha.co.uk\/blog\/?p=5884#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.recantha.co.uk\/blog\/?p=5884","url":"https:\/\/www.recantha.co.uk\/blog\/?p=5884","name":"pi_piper - an event-driven Python library for #RaspberryPi - Raspberry Pi Pod","isPartOf":{"@id":"https:\/\/www.recantha.co.uk\/blog\/#website"},"datePublished":"2013-09-11T09:45:06+00:00","breadcrumb":{"@id":"https:\/\/www.recantha.co.uk\/blog\/?p=5884#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.recantha.co.uk\/blog\/?p=5884"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.recantha.co.uk\/blog\/?p=5884#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.recantha.co.uk\/blog"},{"@type":"ListItem","position":2,"name":"pi_piper &#8211; an event-driven Python library for #RaspberryPi"}]},{"@type":"WebSite","@id":"https:\/\/www.recantha.co.uk\/blog\/#website","url":"https:\/\/www.recantha.co.uk\/blog\/","name":"Raspberry Pi Pod","description":"Experiences with the Raspberry Pi micro computer and microcontroller","publisher":{"@id":"https:\/\/www.recantha.co.uk\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.recantha.co.uk\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.recantha.co.uk\/blog\/#organization","name":"Raspberry Pi Pod","url":"https:\/\/www.recantha.co.uk\/blog\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.recantha.co.uk\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/i0.wp.com\/www.recantha.co.uk\/blog\/wp-content\/uploads\/2016\/03\/cropped-PiPod-Logo-v3.png?fit=800%2C337&ssl=1","contentUrl":"https:\/\/i0.wp.com\/www.recantha.co.uk\/blog\/wp-content\/uploads\/2016\/03\/cropped-PiPod-Logo-v3.png?fit=800%2C337&ssl=1","width":800,"height":337,"caption":"Raspberry Pi Pod"},"image":{"@id":"https:\/\/www.recantha.co.uk\/blog\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/recantha\/","https:\/\/x.com\/recantha","https:\/\/www.linkedin.com\/in\/recantha\/","https:\/\/www.youtube.com\/channel\/UCK4F9blabxzmk8Inzhs8tpg"]},{"@type":"Person","@id":"https:\/\/www.recantha.co.uk\/blog\/#\/schema\/person\/c27c4ef2ee1c18b130f1fcd5dcdbb263","name":"Michael Horne","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.recantha.co.uk\/blog\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/479778b0677caadde0ceb54c4129804ef674914607e3ed0998808148357d10d8?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/479778b0677caadde0ceb54c4129804ef674914607e3ed0998808148357d10d8?s=96&d=mm&r=g","caption":"Michael Horne"},"url":"https:\/\/www.recantha.co.uk\/blog\/?author=1"}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p2RsaV-1wU","jetpack-related-posts":[{"id":16867,"url":"https:\/\/www.recantha.co.uk\/blog\/?p=16867","url_meta":{"origin":5884,"position":0},"title":"CamJam EduKit for the Raspberry Pi receives GPIO Zero \/ Python 3 worksheet update","author":"Michael Horne","date":"24 May 2017","format":false,"excerpt":"Tim Richardson and I are pleased\u00a0to announce that there are brand new\u00a0versions of the CamJam EduKit 1 worksheets now available from the CamJam website. In addition to the classic RPi.GPIO versions being revised\u00a0to feature 40-pin Pis and various small typographical changes, we now have available worksheets that use the\u00a0GPIO Zero\u2026","rel":"","context":"In &quot;Accessories&quot;","block_context":{"text":"Accessories","link":"https:\/\/www.recantha.co.uk\/blog\/?cat=54"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.recantha.co.uk\/blog\/wp-content\/uploads\/2017\/05\/EduKit_large.jpg?fit=480%2C360&ssl=1&resize=350%2C200","width":350,"height":200},"classes":[]},{"id":2547,"url":"https:\/\/www.recantha.co.uk\/blog\/?p=2547","url_meta":{"origin":5884,"position":1},"title":"Using a HMC5883L magnetometer\/compass with the #RaspberryPi","author":"Michael Horne","date":"2 March 2013","format":false,"excerpt":"This blog post describes getting an HMC5883L magnetic compass sensor to work with a Raspberry Pi. The pictures below show the sensor breakout board in question. For Arduino Leonardo If you do not have an Arduino, or just want the instructions for the Raspberry Pi, please skip this section. I\u2026","rel":"","context":"In &quot;Arduino&quot;","block_context":{"text":"Arduino","link":"https:\/\/www.recantha.co.uk\/blog\/?cat=55"},"img":{"alt_text":"P1370736","src":"\/blog\/wp-content\/uploads\/2013\/03\/P13707361-300x270.jpg","width":350,"height":200},"classes":[]},{"id":13491,"url":"https:\/\/www.recantha.co.uk\/blog\/?p=13491","url_meta":{"origin":5884,"position":2},"title":"New GPIO wrapper library for the Raspberry Pi","author":"Michael Horne","date":"2 October 2015","format":false,"excerpt":"Ben Nuttall has been working hard to create a library which will provide a simpler interface to the GPIO pins. The library is called GPIO Zero. At the moment, on the RPi.GPIO library, there are a couple of commands to set things like the pin numbering system that kids are\u2026","rel":"","context":"In &quot;Programming&quot;","block_context":{"text":"Programming","link":"https:\/\/www.recantha.co.uk\/blog\/?cat=39"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.elektronik-kompendium.de\/sites\/raspberry-pi\/fotos\/raspberry-pi-15.jpg?resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.elektronik-kompendium.de\/sites\/raspberry-pi\/fotos\/raspberry-pi-15.jpg?resize=350%2C200 1x, https:\/\/i0.wp.com\/www.elektronik-kompendium.de\/sites\/raspberry-pi\/fotos\/raspberry-pi-15.jpg?resize=525%2C300 1.5x"},"classes":[]},{"id":3248,"url":"https:\/\/www.recantha.co.uk\/blog\/?p=3248","url_meta":{"origin":5884,"position":3},"title":"Controlling servo motors on the #RaspberryPi","author":"Michael Horne","date":"28 March 2013","format":false,"excerpt":"As part of my \"SpacePi\" Raspberry Pi astronomy project, I want to be able to control the orientation of the camera module remotely. I want to be able to sit away from the camera rig and control where it is pointing using a web interface and (optionally, and because I\u2026","rel":"","context":"In &quot;Camera module&quot;","block_context":{"text":"Camera module","link":"https:\/\/www.recantha.co.uk\/blog\/?cat=8"},"img":{"alt_text":"Better PWM on the Raspberry Pi","src":"\/blog\/wp-content\/uploads\/2013\/03\/PanTilt-1L1.jpg","width":350,"height":200},"classes":[]},{"id":19358,"url":"https:\/\/www.recantha.co.uk\/blog\/?p=19358","url_meta":{"origin":5884,"position":4},"title":"Raspberry Pi physical computing library GPIO Zero gets an upgrade to v1.5 &#8211; includes physical pin numbering!","author":"Michael Horne","date":"13 February 2019","format":false,"excerpt":"Ben Nuttall over at Raspberry Pi has announced the release of GPIO Zero 1.5. This is a significant release and includes several enhancements. Improvements to the DistanceSensor class giving more accurate and reliable readings. Improvements to the source\/value functionality meaning you could just do: led.source = button to have a\u2026","rel":"","context":"In &quot;GPIO boards&quot;","block_context":{"text":"GPIO boards","link":"https:\/\/www.recantha.co.uk\/blog\/?cat=20"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.recantha.co.uk\/blog\/wp-content\/uploads\/2019\/02\/gpio_zero_v15.jpg?fit=768%2C576&ssl=1&resize=350%2C200","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/www.recantha.co.uk\/blog\/wp-content\/uploads\/2019\/02\/gpio_zero_v15.jpg?fit=768%2C576&ssl=1&resize=350%2C200 1x, https:\/\/i0.wp.com\/www.recantha.co.uk\/blog\/wp-content\/uploads\/2019\/02\/gpio_zero_v15.jpg?fit=768%2C576&ssl=1&resize=525%2C300 1.5x, https:\/\/i0.wp.com\/www.recantha.co.uk\/blog\/wp-content\/uploads\/2019\/02\/gpio_zero_v15.jpg?fit=768%2C576&ssl=1&resize=700%2C400 2x"},"classes":[]},{"id":16751,"url":"https:\/\/www.recantha.co.uk\/blog\/?p=16751","url_meta":{"origin":5884,"position":5},"title":"Learn how to use process images with OpenCV in Python with this free e-book","author":"Michael Horne","date":"13 April 2017","format":false,"excerpt":"Packt Publishing is always offering free e-books and today is great if you want to learn about image processing. You will use the OpenCV library with\u00a0Python with today's book. Here is the book blurb: OpenCV is an open source computer vision and machine learning software library that provides a common\u2026","rel":"","context":"In &quot;Books&quot;","block_context":{"text":"Books","link":"https:\/\/www.recantha.co.uk\/blog\/?cat=7"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/www.recantha.co.uk\/blog\/wp-content\/uploads\/2017\/04\/openCV.jpg?fit=500%2C617&ssl=1&resize=350%2C200","width":350,"height":200},"classes":[]}],"_links":{"self":[{"href":"https:\/\/www.recantha.co.uk\/blog\/index.php?rest_route=\/wp\/v2\/posts\/5884","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.recantha.co.uk\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.recantha.co.uk\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.recantha.co.uk\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.recantha.co.uk\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=5884"}],"version-history":[{"count":0,"href":"https:\/\/www.recantha.co.uk\/blog\/index.php?rest_route=\/wp\/v2\/posts\/5884\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.recantha.co.uk\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=5884"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.recantha.co.uk\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=5884"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.recantha.co.uk\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=5884"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}