{"id":395,"date":"2020-01-31T23:07:38","date_gmt":"2020-01-31T23:07:38","guid":{"rendered":"https:\/\/ctoinsight.com\/?p=395"},"modified":"2021-02-11T21:31:49","modified_gmt":"2021-02-11T21:31:49","slug":"ai-grammar-parking-signs","status":"publish","type":"post","link":"https:\/\/ctoinsight.com\/index.php\/2020\/01\/31\/ai-grammar-parking-signs\/","title":{"rendered":"A Grammar for AI-based Parking Sign Understanding"},"content":{"rendered":"\n<p>Street parking in Los Angeles can be a nightmare.  Besides the lack of available spaces, signage can be complex and confusing.  Often there are multiple signs posted on the same pole that must be read, understood, and reasoned over in order to avoid a citation or towing (the signs in the image at the top of this post are typical).  Fortunately, parking sign understanding can be automated with Artificial Intelligence techniques such as image recognition, text recognition, and machine learning.  This post describes one piece of a comprehensive solution &#8211; a grammar for parking signs &#8211; that can be used to generate parsers that apply rules to unstructured sign text to facilitate automated reasoning.  I will also show how <a href=\"https:\/\/www.antlr.org\/\">ANTLR<\/a> can be be used to generate a parser from the grammar.  Grammar for LA parking signs and example photos can be found here on <a href=\"https:\/\/github.com\/steveobjectmethods\/parking-signs\">GitHub<\/a>.<\/p>\n\n\n\n<p>Grammar in this context is defined as the way that we expect words to be arranged on parking signs (for now, we ignore non-alphanumeric symbols such as a P with a line through it).   A useful grammar notion commonly used in Computer Science is <a href=\"https:\/\/en.wikipedia.org\/wiki\/Extended_Backus%E2%80%93Naur_form\">Extended Backus-Naur form (EBNF)<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">No Parking for Street Sweeping<\/h2>\n\n\n\n<p>One common sign found in Los Angeles and the source of many citations is <strong>no parking when there is street sweeping<\/strong>.  Several instances of this sign are shown below.  Note the following variations:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>&#8220;NO PARKING&#8221; text versus the symbol P with a red circle and line through it<\/li><li>The time range specified by &#8220;TO&#8221; versus a dash &#8220;-&#8220;<\/li><li>&#8220;12NOON&#8221; instead of &#8220;12PM&#8221;<\/li><li>&#8220;STREET SWEEPING&#8221; versus &#8220;STREET CLEANING&#8221;<\/li><\/ol>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"726\" height=\"946\" src=\"https:\/\/ctoinsight.com\/wp-content\/uploads\/2020\/01\/Screen-Shot-2020-01-31-at-9.16.12-AM.png\" alt=\"Street Sweeping Sign\" class=\"wp-image-415\" srcset=\"https:\/\/ctoinsight.com\/wp-content\/uploads\/2020\/01\/Screen-Shot-2020-01-31-at-9.16.12-AM.png 726w, https:\/\/ctoinsight.com\/wp-content\/uploads\/2020\/01\/Screen-Shot-2020-01-31-at-9.16.12-AM-230x300.png 230w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 984px) 61vw, (max-width: 1362px) 45vw, 600px\" \/><\/figure>\n\n\n\n<p>I wrote a program using Apple&#8217;s <a href=\"https:\/\/developer.apple.com\/documentation\/vision\">Vision Framework<\/a> to process these images and extract text from them.  The output for these four signs (clockwise from top left) is as follows (note that the output is always uppercase):<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>NO PARKING 9AM TO 12 NOON MONDAY STREET CLEANING<\/li><li>NO PARKING 8AM &#8211; 10AM TUESDAY STREET CLEANING<\/li><li>8AM TO 10 AM TUESDAY STREET SWEEPING<\/li><li>9AM TO 12NOON MONDAY STREET SWEEPING<\/li><\/ol>\n\n\n\n<h2 class=\"wp-block-heading\">EBNF Grammar<\/h2>\n\n\n\n<p>We would like a grammar that covers all of these variations, can be used to distinguish street sweeping signs from other signs, and allow us to understand the parking rules on this street.   Taking a bottom-up approach, note that &#8220;STREET SWEEPING&#8221; and &#8220;STREET CLEANING&#8221; really mean the same thing, so we can create an EBNF grammar rule for them as follows.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>streetSweeping : STREET ( SWEEPING | CLEANING ) ;<\/code><\/pre>\n\n\n\n<p>The vertical line between SWEEPING and CLEANING means that either of these tokens can match.  So if a parser finds the text &#8220;STREET SWEEPING&#8221; or &#8220;STREET CLEANING,&#8221; this grammar rule would be executed and create a &#8220;streetSweeping&#8221; node in the parse tree with the matching tokens as child nodes.<\/p>\n\n\n\n<p>The part of the Parser that matches input text to tokens is called the Lexer.  Our grammar would need three lexical rules to support the &#8220;streetSweeping&#8221; rule as follows.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>STREET : 'STREET' ;\nSWEEPING : 'SWEEPING' ;\nCLEANING : 'CLEANING' ;<\/code><\/pre>\n\n\n\n<p>The characters between the single quote marks are matched one for one with the input text from the sign and if there is a match, the Lexer creates a node in the parse tree corresponding to the word.<\/p>\n\n\n\n<p>We apply the same approach to identifying the time range on the signs.  Some signs specify the range in the form 8AM TO 10AM and others as 8 TO 10AM so we have different rules for &#8220;time&#8221; and just a plain integer.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>timeRange : (time to time) | (INT to time) ;<\/code><\/pre>\n\n\n\n<p>Since the signs have three conventions for indicating time range (&#8220;TO&#8221; &#8220;THRU&#8221; and &#8220;-&#8220;), we can have a grammar rule for this as well, along with lexical rules to support it.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>to : TO | THRU | DASH ;\nTO : 'TO' ;\nTHRU : 'THRU' ;\nDASH : '-' ;<\/code><\/pre>\n\n\n\n<p>For the hours in the time range, we need to handle AM\/PM and also NOON and MIDNIGHT.  We also need to be able to handle the case when there is a space between the hour number and the AM\/PM\/NOON\/MIDNIGHT and when there is no space (the output of the text recognition software is inconsistent here).<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>time\n  : INT (':' INT )? (am | pm )?\n  | twelveNoon\n  | twelveMidnight\n  ;\n\ntwelveNoon : NOON | ('12' NOON) ;\ntwelveMidnight : MIDNIGHT | ('12' MIDNIGHT) ;\n\nam : 'AM' | ('A.M.') ;\npm : 'PM' | ('P.M.') ;\nNOON : 'NOON' ;\nMIDNIGHT : 'MIDNIGHT' ;\n\nINT : &#91;0-9]+ ;<\/code><\/pre>\n\n\n\n<p>Finally, we need rules for the days of week and the words &#8220;NO&#8221; and &#8220;PARKING.&#8221;  The last rule &#8220;WS&#8221; is to ignore whitespace.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>day : MON | TUE | WED | THU | FRI | SAT | SUN ;\nMON : 'MONDAY' | 'MON' ;\nTUE : 'TUESDAY' | 'TUE' ;\nWED : 'WEDNESDAY' | 'WED' ;\nTHU : 'THURSDAY' | 'THU' ;\nFRI : 'FRIDAY' | 'FRI' ;\nSAT : 'SATURDAY' | 'SAT' ;\nSUN : 'SUNDAY' | 'SUN' ;\n\nNO : 'NO' ;\nPARKING : 'PARKING' ;\n\nWS : &#91; \\t\\r\\n]+ -&gt; skip ;<\/code><\/pre>\n\n\n\n<p>The top-level EBNF grammar rule for street sweeping signs can be written as:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>streetSweepingSign\n    : NO?  PARKING?  timeRange  day  streetSweeping\n    ;<\/code><\/pre>\n\n\n\n<p>The question marks after &#8220;NO&#8221; and &#8220;PARKING&#8221; mean that these are optional.  That is all the grammar to support this one type of sign.  Many of these rules can be reused for other signs (e.g., day, timeRange).<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Generating a Parser from the Grammar<\/h2>\n\n\n\n<figure class=\"wp-block-image size-medium\"><img loading=\"lazy\" decoding=\"async\" width=\"300\" height=\"102\" src=\"https:\/\/ctoinsight.com\/wp-content\/uploads\/2020\/01\/Screen-Shot-2020-01-31-at-12.59.20-PM-300x102.png\" alt=\"\" class=\"wp-image-449\" srcset=\"https:\/\/ctoinsight.com\/wp-content\/uploads\/2020\/01\/Screen-Shot-2020-01-31-at-12.59.20-PM-300x102.png 300w, https:\/\/ctoinsight.com\/wp-content\/uploads\/2020\/01\/Screen-Shot-2020-01-31-at-12.59.20-PM.png 568w\" sizes=\"auto, (max-width: 300px) 85vw, 300px\" \/><\/figure>\n\n\n\n<p><a href=\"https:\/\/www.antlr.org\">ANTLR<\/a> is a powerful parser generator that operates on an input grammar file to generate all the source code files you need in a target language that can be incorporated into the rest of your application. It also provides command line tools to test your grammar against input text streams.  Running the parser generated from the Street Sweeping Sign grammar against the four sign instances creates the following parse trees.<\/p>\n\n\n\n<p><strong>NO PARKING 9AM TO 12 NOON MONDAY STREET CLEANING<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"412\" src=\"https:\/\/ctoinsight.com\/wp-content\/uploads\/2020\/01\/Screen-Shot-2020-01-31-at-1.47.30-PM-1024x412.png\" alt=\"\" class=\"wp-image-462\" srcset=\"https:\/\/ctoinsight.com\/wp-content\/uploads\/2020\/01\/Screen-Shot-2020-01-31-at-1.47.30-PM-1024x412.png 1024w, https:\/\/ctoinsight.com\/wp-content\/uploads\/2020\/01\/Screen-Shot-2020-01-31-at-1.47.30-PM-300x121.png 300w, https:\/\/ctoinsight.com\/wp-content\/uploads\/2020\/01\/Screen-Shot-2020-01-31-at-1.47.30-PM-768x309.png 768w, https:\/\/ctoinsight.com\/wp-content\/uploads\/2020\/01\/Screen-Shot-2020-01-31-at-1.47.30-PM.png 1084w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/figure>\n\n\n\n<p><strong>NO PARKING 8AM &#8211; 10AM TUESDAY STREET CLEANING<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"427\" src=\"https:\/\/ctoinsight.com\/wp-content\/uploads\/2020\/01\/Screen-Shot-2020-01-31-at-1.48.26-PM-1024x427.png\" alt=\"\" class=\"wp-image-463\" srcset=\"https:\/\/ctoinsight.com\/wp-content\/uploads\/2020\/01\/Screen-Shot-2020-01-31-at-1.48.26-PM-1024x427.png 1024w, https:\/\/ctoinsight.com\/wp-content\/uploads\/2020\/01\/Screen-Shot-2020-01-31-at-1.48.26-PM-300x125.png 300w, https:\/\/ctoinsight.com\/wp-content\/uploads\/2020\/01\/Screen-Shot-2020-01-31-at-1.48.26-PM-768x320.png 768w, https:\/\/ctoinsight.com\/wp-content\/uploads\/2020\/01\/Screen-Shot-2020-01-31-at-1.48.26-PM.png 1066w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/figure>\n\n\n\n<p><strong>8AM TO 10 AM TUESDAY STREET SWEEPING<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"924\" height=\"424\" src=\"https:\/\/ctoinsight.com\/wp-content\/uploads\/2020\/01\/Screen-Shot-2020-01-31-at-1.49.27-PM.png\" alt=\"\" class=\"wp-image-464\" srcset=\"https:\/\/ctoinsight.com\/wp-content\/uploads\/2020\/01\/Screen-Shot-2020-01-31-at-1.49.27-PM.png 924w, https:\/\/ctoinsight.com\/wp-content\/uploads\/2020\/01\/Screen-Shot-2020-01-31-at-1.49.27-PM-300x138.png 300w, https:\/\/ctoinsight.com\/wp-content\/uploads\/2020\/01\/Screen-Shot-2020-01-31-at-1.49.27-PM-768x352.png 768w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/figure>\n\n\n\n<p><strong>9AM TO 12NOON MONDAY STREET SWEEPING<\/strong>.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"908\" height=\"410\" src=\"https:\/\/ctoinsight.com\/wp-content\/uploads\/2020\/01\/Screen-Shot-2020-01-31-at-1.45.18-PM.png\" alt=\"\" class=\"wp-image-461\" srcset=\"https:\/\/ctoinsight.com\/wp-content\/uploads\/2020\/01\/Screen-Shot-2020-01-31-at-1.45.18-PM.png 908w, https:\/\/ctoinsight.com\/wp-content\/uploads\/2020\/01\/Screen-Shot-2020-01-31-at-1.45.18-PM-300x135.png 300w, https:\/\/ctoinsight.com\/wp-content\/uploads\/2020\/01\/Screen-Shot-2020-01-31-at-1.45.18-PM-768x347.png 768w\" sizes=\"auto, (max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Other Types of Parking Signs<\/h2>\n\n\n\n<p>There are other types of parking signs that can be found in Los Angeles. The grammar described here for street sweeping signs has been extended to cover all of the  instances I&#8217;ve encountered (I haven&#8217;t driven on every street in LA yet!).  This comprehensive parking sign grammar and parser can be used to identify multiple parking signs and reason about whether it is safe to park and for how long.  That app is under development and could be the subject of a future post.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>A grammar for parking signs can be used in conjunction with image recognition and text recognition to reason when parking is permitted and for how long.<\/p>\n","protected":false},"author":1,"featured_media":397,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[8],"tags":[27,28,30,29],"class_list":["post-395","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software","tag-ai","tag-artificial-intelligence","tag-image-recognition","tag-text-recognition"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.5 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>A Grammar for AI-based Parking Sign Understanding - CTO Insights<\/title>\n<meta name=\"description\" content=\"A grammar for parking signs can be used in conjunction with image recognition and text recognition to reason when parking is permitted and for how long.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/ctoinsight.com\/index.php\/2020\/01\/31\/ai-grammar-parking-signs\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"A Grammar for AI-based Parking Sign Understanding - CTO Insights\" \/>\n<meta property=\"og:description\" content=\"A grammar for parking signs can be used in conjunction with image recognition and text recognition to reason when parking is permitted and for how long.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/ctoinsight.com\/index.php\/2020\/01\/31\/ai-grammar-parking-signs\/\" \/>\n<meta property=\"og:site_name\" content=\"CTO Insights\" \/>\n<meta property=\"article:published_time\" content=\"2020-01-31T23:07:38+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-02-11T21:31:49+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/ctoinsight.com\/wp-content\/uploads\/2020\/01\/Screen-Shot-2020-01-31-at-7.52.26-AM-1024x1019.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"1019\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Steve Kowalski\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Steve Kowalski\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/ctoinsight.com\\\/index.php\\\/2020\\\/01\\\/31\\\/ai-grammar-parking-signs\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ctoinsight.com\\\/index.php\\\/2020\\\/01\\\/31\\\/ai-grammar-parking-signs\\\/\"},\"author\":{\"name\":\"Steve Kowalski\",\"@id\":\"https:\\\/\\\/ctoinsight.com\\\/#\\\/schema\\\/person\\\/ae035f84ffb32d94aa6f4aa9b3780df0\"},\"headline\":\"A Grammar for AI-based Parking Sign Understanding\",\"datePublished\":\"2020-01-31T23:07:38+00:00\",\"dateModified\":\"2021-02-11T21:31:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/ctoinsight.com\\\/index.php\\\/2020\\\/01\\\/31\\\/ai-grammar-parking-signs\\\/\"},\"wordCount\":917,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/ctoinsight.com\\\/#\\\/schema\\\/person\\\/ae035f84ffb32d94aa6f4aa9b3780df0\"},\"image\":{\"@id\":\"https:\\\/\\\/ctoinsight.com\\\/index.php\\\/2020\\\/01\\\/31\\\/ai-grammar-parking-signs\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/ctoinsight.com\\\/wp-content\\\/uploads\\\/2020\\\/01\\\/Screen-Shot-2020-01-31-at-7.52.26-AM.png\",\"keywords\":[\"AI\",\"Artificial Intelligence\",\"Image Recognition\",\"Text Recognition\"],\"articleSection\":[\"Software\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/ctoinsight.com\\\/index.php\\\/2020\\\/01\\\/31\\\/ai-grammar-parking-signs\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/ctoinsight.com\\\/index.php\\\/2020\\\/01\\\/31\\\/ai-grammar-parking-signs\\\/\",\"url\":\"https:\\\/\\\/ctoinsight.com\\\/index.php\\\/2020\\\/01\\\/31\\\/ai-grammar-parking-signs\\\/\",\"name\":\"A Grammar for AI-based Parking Sign Understanding - CTO Insights\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/ctoinsight.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/ctoinsight.com\\\/index.php\\\/2020\\\/01\\\/31\\\/ai-grammar-parking-signs\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/ctoinsight.com\\\/index.php\\\/2020\\\/01\\\/31\\\/ai-grammar-parking-signs\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/ctoinsight.com\\\/wp-content\\\/uploads\\\/2020\\\/01\\\/Screen-Shot-2020-01-31-at-7.52.26-AM.png\",\"datePublished\":\"2020-01-31T23:07:38+00:00\",\"dateModified\":\"2021-02-11T21:31:49+00:00\",\"description\":\"A grammar for parking signs can be used in conjunction with image recognition and text recognition to reason when parking is permitted and for how long.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/ctoinsight.com\\\/index.php\\\/2020\\\/01\\\/31\\\/ai-grammar-parking-signs\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/ctoinsight.com\\\/index.php\\\/2020\\\/01\\\/31\\\/ai-grammar-parking-signs\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/ctoinsight.com\\\/index.php\\\/2020\\\/01\\\/31\\\/ai-grammar-parking-signs\\\/#primaryimage\",\"url\":\"https:\\\/\\\/ctoinsight.com\\\/wp-content\\\/uploads\\\/2020\\\/01\\\/Screen-Shot-2020-01-31-at-7.52.26-AM.png\",\"contentUrl\":\"https:\\\/\\\/ctoinsight.com\\\/wp-content\\\/uploads\\\/2020\\\/01\\\/Screen-Shot-2020-01-31-at-7.52.26-AM.png\",\"width\":1210,\"height\":1204,\"caption\":\"Los Angeles Parking Sign\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/ctoinsight.com\\\/index.php\\\/2020\\\/01\\\/31\\\/ai-grammar-parking-signs\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/ctoinsight.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"A Grammar for AI-based Parking Sign Understanding\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/ctoinsight.com\\\/#website\",\"url\":\"https:\\\/\\\/ctoinsight.com\\\/\",\"name\":\"CTO Insights\",\"description\":\"Thoughts on software and technology leadership\",\"publisher\":{\"@id\":\"https:\\\/\\\/ctoinsight.com\\\/#\\\/schema\\\/person\\\/ae035f84ffb32d94aa6f4aa9b3780df0\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/ctoinsight.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/ctoinsight.com\\\/#\\\/schema\\\/person\\\/ae035f84ffb32d94aa6f4aa9b3780df0\",\"name\":\"Steve Kowalski\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/558ae6d325255bc5d2dd8dbf91724b3d5df6dbbd5c48e45bf8981de2b32907bb?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/558ae6d325255bc5d2dd8dbf91724b3d5df6dbbd5c48e45bf8981de2b32907bb?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/558ae6d325255bc5d2dd8dbf91724b3d5df6dbbd5c48e45bf8981de2b32907bb?s=96&d=mm&r=g\",\"caption\":\"Steve Kowalski\"},\"logo\":{\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/558ae6d325255bc5d2dd8dbf91724b3d5df6dbbd5c48e45bf8981de2b32907bb?s=96&d=mm&r=g\"},\"description\":\"Chief Technology Officer (CTO) - SaaS, Cloud, Agile\",\"sameAs\":[\"https:\\\/\\\/www.linkedin.com\\\/in\\\/drstevekowalski\\\/\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"A Grammar for AI-based Parking Sign Understanding - CTO Insights","description":"A grammar for parking signs can be used in conjunction with image recognition and text recognition to reason when parking is permitted and for how long.","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:\/\/ctoinsight.com\/index.php\/2020\/01\/31\/ai-grammar-parking-signs\/","og_locale":"en_US","og_type":"article","og_title":"A Grammar for AI-based Parking Sign Understanding - CTO Insights","og_description":"A grammar for parking signs can be used in conjunction with image recognition and text recognition to reason when parking is permitted and for how long.","og_url":"https:\/\/ctoinsight.com\/index.php\/2020\/01\/31\/ai-grammar-parking-signs\/","og_site_name":"CTO Insights","article_published_time":"2020-01-31T23:07:38+00:00","article_modified_time":"2021-02-11T21:31:49+00:00","og_image":[{"width":1024,"height":1019,"url":"https:\/\/ctoinsight.com\/wp-content\/uploads\/2020\/01\/Screen-Shot-2020-01-31-at-7.52.26-AM-1024x1019.png","type":"image\/png"}],"author":"Steve Kowalski","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Steve Kowalski","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/ctoinsight.com\/index.php\/2020\/01\/31\/ai-grammar-parking-signs\/#article","isPartOf":{"@id":"https:\/\/ctoinsight.com\/index.php\/2020\/01\/31\/ai-grammar-parking-signs\/"},"author":{"name":"Steve Kowalski","@id":"https:\/\/ctoinsight.com\/#\/schema\/person\/ae035f84ffb32d94aa6f4aa9b3780df0"},"headline":"A Grammar for AI-based Parking Sign Understanding","datePublished":"2020-01-31T23:07:38+00:00","dateModified":"2021-02-11T21:31:49+00:00","mainEntityOfPage":{"@id":"https:\/\/ctoinsight.com\/index.php\/2020\/01\/31\/ai-grammar-parking-signs\/"},"wordCount":917,"commentCount":0,"publisher":{"@id":"https:\/\/ctoinsight.com\/#\/schema\/person\/ae035f84ffb32d94aa6f4aa9b3780df0"},"image":{"@id":"https:\/\/ctoinsight.com\/index.php\/2020\/01\/31\/ai-grammar-parking-signs\/#primaryimage"},"thumbnailUrl":"https:\/\/ctoinsight.com\/wp-content\/uploads\/2020\/01\/Screen-Shot-2020-01-31-at-7.52.26-AM.png","keywords":["AI","Artificial Intelligence","Image Recognition","Text Recognition"],"articleSection":["Software"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/ctoinsight.com\/index.php\/2020\/01\/31\/ai-grammar-parking-signs\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/ctoinsight.com\/index.php\/2020\/01\/31\/ai-grammar-parking-signs\/","url":"https:\/\/ctoinsight.com\/index.php\/2020\/01\/31\/ai-grammar-parking-signs\/","name":"A Grammar for AI-based Parking Sign Understanding - CTO Insights","isPartOf":{"@id":"https:\/\/ctoinsight.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/ctoinsight.com\/index.php\/2020\/01\/31\/ai-grammar-parking-signs\/#primaryimage"},"image":{"@id":"https:\/\/ctoinsight.com\/index.php\/2020\/01\/31\/ai-grammar-parking-signs\/#primaryimage"},"thumbnailUrl":"https:\/\/ctoinsight.com\/wp-content\/uploads\/2020\/01\/Screen-Shot-2020-01-31-at-7.52.26-AM.png","datePublished":"2020-01-31T23:07:38+00:00","dateModified":"2021-02-11T21:31:49+00:00","description":"A grammar for parking signs can be used in conjunction with image recognition and text recognition to reason when parking is permitted and for how long.","breadcrumb":{"@id":"https:\/\/ctoinsight.com\/index.php\/2020\/01\/31\/ai-grammar-parking-signs\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/ctoinsight.com\/index.php\/2020\/01\/31\/ai-grammar-parking-signs\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/ctoinsight.com\/index.php\/2020\/01\/31\/ai-grammar-parking-signs\/#primaryimage","url":"https:\/\/ctoinsight.com\/wp-content\/uploads\/2020\/01\/Screen-Shot-2020-01-31-at-7.52.26-AM.png","contentUrl":"https:\/\/ctoinsight.com\/wp-content\/uploads\/2020\/01\/Screen-Shot-2020-01-31-at-7.52.26-AM.png","width":1210,"height":1204,"caption":"Los Angeles Parking Sign"},{"@type":"BreadcrumbList","@id":"https:\/\/ctoinsight.com\/index.php\/2020\/01\/31\/ai-grammar-parking-signs\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/ctoinsight.com\/"},{"@type":"ListItem","position":2,"name":"A Grammar for AI-based Parking Sign Understanding"}]},{"@type":"WebSite","@id":"https:\/\/ctoinsight.com\/#website","url":"https:\/\/ctoinsight.com\/","name":"CTO Insights","description":"Thoughts on software and technology leadership","publisher":{"@id":"https:\/\/ctoinsight.com\/#\/schema\/person\/ae035f84ffb32d94aa6f4aa9b3780df0"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/ctoinsight.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/ctoinsight.com\/#\/schema\/person\/ae035f84ffb32d94aa6f4aa9b3780df0","name":"Steve Kowalski","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/558ae6d325255bc5d2dd8dbf91724b3d5df6dbbd5c48e45bf8981de2b32907bb?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/558ae6d325255bc5d2dd8dbf91724b3d5df6dbbd5c48e45bf8981de2b32907bb?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/558ae6d325255bc5d2dd8dbf91724b3d5df6dbbd5c48e45bf8981de2b32907bb?s=96&d=mm&r=g","caption":"Steve Kowalski"},"logo":{"@id":"https:\/\/secure.gravatar.com\/avatar\/558ae6d325255bc5d2dd8dbf91724b3d5df6dbbd5c48e45bf8981de2b32907bb?s=96&d=mm&r=g"},"description":"Chief Technology Officer (CTO) - SaaS, Cloud, Agile","sameAs":["https:\/\/www.linkedin.com\/in\/drstevekowalski\/"]}]}},"_links":{"self":[{"href":"https:\/\/ctoinsight.com\/index.php\/wp-json\/wp\/v2\/posts\/395","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ctoinsight.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/ctoinsight.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/ctoinsight.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ctoinsight.com\/index.php\/wp-json\/wp\/v2\/comments?post=395"}],"version-history":[{"count":86,"href":"https:\/\/ctoinsight.com\/index.php\/wp-json\/wp\/v2\/posts\/395\/revisions"}],"predecessor-version":[{"id":824,"href":"https:\/\/ctoinsight.com\/index.php\/wp-json\/wp\/v2\/posts\/395\/revisions\/824"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/ctoinsight.com\/index.php\/wp-json\/wp\/v2\/media\/397"}],"wp:attachment":[{"href":"https:\/\/ctoinsight.com\/index.php\/wp-json\/wp\/v2\/media?parent=395"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/ctoinsight.com\/index.php\/wp-json\/wp\/v2\/categories?post=395"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/ctoinsight.com\/index.php\/wp-json\/wp\/v2\/tags?post=395"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}