{"id":3221,"date":"2021-02-16T23:26:18","date_gmt":"2021-02-16T21:26:18","guid":{"rendered":"https:\/\/www.robinglauser.ch\/blog\/?p=3221"},"modified":"2021-02-17T12:58:22","modified_gmt":"2021-02-17T10:58:22","slug":"using-python-and-lobe-to-automate-among-us-tasks","status":"publish","type":"post","link":"https:\/\/www.robinglauser.ch\/blog\/2021\/02\/16\/using-python-and-lobe-to-automate-among-us-tasks\/","title":{"rendered":"Using Python and Lobe to automate Among Us tasks"},"content":{"rendered":"\n<p>Much like many others, I\u2019ve started playing Among Us with my friends. We\u2019ve really enjoyed accusing each other and it has been fun convincing my friends that I\u2019m not the imposter.<\/p>\n\n\n\n<p>What had been bothering me, though, was always having to do the same tasks. Especially the card swiping, which takes such a long time to do in order to get the timing right. This has been the cause of me being accused of faking it, as it sometimes takes me a ridiculously long time to do it.<\/p>\n\n\n\n<p>So, I gave myself a challenge.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>How many of the tasks in Among Us can I automate?<\/p><\/blockquote>\n\n\n\n<p>The answer can be found at the end of this post.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Getting started with Python<\/h2>\n\n\n\n<p>I started with Python with the <a href=\"https:\/\/pyautogui.readthedocs.io\/en\/latest\/install.html\">pyautogui<\/a>, <a href=\"https:\/\/pypi.org\/project\/PyScreeze\/\">pyscreeze,<\/a> <a href=\"https:\/\/pypi.org\/project\/keyboard\/\">keyboard<\/a>&nbsp;and<a href=\"https:\/\/pypi.org\/project\/PyGetWindow\/\"> pygetwindow<\/a> libraries.<\/p>\n\n\n\n<p>To be able to move around and resize the window without messing with the position of the simulated mouse clicks, I first developed a system as a wrapper around pyautogui, where I can send the relative position inside the Among Us Window and it will automatically calculate the pixel position based on the window position and size.<\/p>\n\n\n\n<p>This ensures that, even if I move or resize the window, the mouse can click at the same position with the same code.<\/p>\n\n\n\n<p>Here is an example to showcase this with the mouse click code wrapper:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\ndef click(self, x, y, duration=0.1):\n    pyautogui.click(\n        (x * self.amongus.width) + self.amongus.left,\n        (y * self.amongus.height) + self.amongus.top,\n        duration=duration\n    )\n<\/pre><\/div>\n\n\n<p>By multiplying the relative x coordinate with the width and adding the left offset of the window, I get the absolute pixel coordinate for the x axis and the same can be done on the y axis.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Comparing the colors<\/h2>\n\n\n\n<p>Next, I had to write code to get the color at the relative position and check it against a provided color with some tolerance.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\ndef getColor(self, x, y):\n    im = pyscreeze.screenshot()\n    return im.getpixel((\n        int((x * self.amongus.width) + self.amongus.left),\n        int((y * self.amongus.height) + self.amongus.top))\n    )\n\ndef checkColor(self, x, y, color, tolerance=15):\n    return self.tolerance(color, self.getColor(x, y), tolerance=tolerance)\n\ndef tolerance(self, color, scolor, tolerance=15):\n    r, g, b = color&#x5B;:3]\n    exR, exG, exB = scolor\n    return (abs(r - exR) &lt;= tolerance) and (abs(g - exG) &lt;= tolerance) and (abs(b - exB) &lt;= tolerance)\n<\/pre><\/div>\n\n\n<p>With this helper done, I created a loop that checks whether I have control and alt pressed. If so, it runs the following code which displays the relative x and y coordinate and the color at that coordinate:<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\nif keyboard.is_pressed(&quot;ctrl&quot;) and keyboard.is_pressed(&quot;alt&quot;):\n    try:\n        point = self.position()\n        im = pyscreeze.screenshot()\n        print(point)\n        print(im.getpixel((pyautogui.position().x, pyautogui.position().y)))\n    except IndexError:\n        print()\n    pyautogui.sleep(2)\n<\/pre><\/div>\n\n\n<p>This is a helper function so I can find the points and colors to trigger a task automatically. This means the task can be run without me doing anything other than opening the task.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Card swipe task<\/h2>\n\n\n\n<p>With this, I started with the card swipe task, because it annoyed me the most.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\nif self.checkColor(x=0.7019628099173554, y=0.31724754244861486, color=(0, 99, 71)) and \\\n        self.checkColor(x=0.6797520661157025, y=0.8543342269883825, color=(71, 147, 52)) and \\\n        self.checkColor(x=0.5981404958677686, y=0.8945487042001787, color=(233, 121, 52)):\n    print(&quot;Card&quot;)\n    self.moveTo(x=0.428202479338843, y=0.7444146559428061, duration=0.3)\n    self.click(x=0.428202479338843, y=0.7444146559428061)\n    self.moveTo(x=0.3114669421487603, y=0.42359249329758714, duration=0.3)\n    self.dragTo(x=0.7902892561983471, y=0.46291331546023234, duration=0.6)\n<\/pre><\/div>\n\n\n<p>While in my loop, I check for the above condition, which, if they are true, means the card swipe is open.<\/p>\n\n\n\n<p>Then, I can move the mouse to the card, click there and move the card along the swiping area at the right speed.<\/p>\n\n\n\n<div style=\"width:100%;height:0;padding-bottom:56%;position:relative;\"><iframe loading=\"lazy\" src=\"https:\/\/giphy.com\/embed\/bnkF0AuPZjxVoa32Rt\" width=\"100%\" height=\"100%\" style=\"position:absolute\" frameBorder=\"0\" class=\"giphy-embed\" allowFullScreen><\/iframe><\/div><p><a href=\"https:\/\/giphy.com\/gifs\/bnkF0AuPZjxVoa32Rt\">via GIPHY<\/a><\/p>\n\n\n\n<p>Using this method, I was able to automate almost all of the non-moving tasks.<\/p>\n\n\n\n<div style=\"width:100%;height:0;padding-bottom:56%;position:relative;\"><iframe loading=\"lazy\" src=\"https:\/\/giphy.com\/embed\/Qloq4N9W9cRYUMZwau\" width=\"100%\" height=\"100%\" style=\"position:absolute\" frameBorder=\"0\" class=\"giphy-embed\" allowFullScreen><\/iframe><\/div><p><a href=\"https:\/\/giphy.com\/gifs\/Qloq4N9W9cRYUMZwau\">via GIPHY<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Solving the &#8220;Unlock Manifolds&#8221; task<\/h2>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"296\" height=\"142\" src=\"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2021\/02\/image.png\" alt=\"\" class=\"wp-image-3228\"\/><\/figure><\/div>\n\n\n\n<p>But when I looked at the \u201cUnlock Manifolds\u201d task, I was slightly stumped. You have to click the numbers from 1-10 in order and their position is always randomized.<\/p>\n\n\n\n<p>The first idea was to potentially use OCR to find out the order of the numbers.<\/p>\n\n\n\n<p>I downloaded and installed&nbsp;<a href=\"https:\/\/tesseract-ocr.github.io\/\">Tesseract&nbsp;<\/a>a OCR library and their&nbsp;<a href=\"https:\/\/github.com\/madmaze\/pytesseract\">python&nbsp;<\/a>wrapper. Even after trying to optimize the image by converting the single numbers into black and white pictures, it didn\u2019t recognize the numbers.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\nimg = self.screenshot(0.303202479338843 + i * 0.07902892561,\n                      0.3735478105451296 + j * 0.13717605004, 0.07902892561,\n                      0.13717605004)\nimg = ImageOps.grayscale(img)\nimg = ImageOps.solarize(img, 1)\nimg = ImageOps.invert(img)\nimg = ImageOps.autocontrast(img, 10)\nimg = ImageOps.crop(img, 10)\nthreshold = 190\nimg = img.point(lambda p: p &gt; threshold and 255)\n\nif img.mode != &quot;RGB&quot;:\n    img = img.convert(&quot;RGB&quot;)\n<\/pre><\/div>\n\n\n<p>In the documentation, there was a notice that, for handwritten things, you could retrain the neural network to recognize it better.<\/p>\n\n\n\n<p>But I had no idea how to do that and it was 2am by this time.<\/p>\n\n\n\n<p>Then I remembered that I had a program called&nbsp;<a href=\"https:\/\/lobe.ai\/\">Lobe<\/a>&nbsp;installed, which provided an easy interface to train a machine learning model.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Using lobe to solve the task<\/h2>\n\n\n\n<p>I exported some samples for the different numbers and imported and labelled them inside lobe.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"573\" src=\"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2021\/02\/image-1-1024x573.png\" alt=\"\" class=\"wp-image-3229\" srcset=\"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2021\/02\/image-1-1024x573.png 1024w, https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2021\/02\/image-1-400x224.png 400w, https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2021\/02\/image-1-768x430.png 768w, https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2021\/02\/image-1.png 1430w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>It automatically trained them for me, and I could export my model as a Python Tensorflow Project.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"573\" src=\"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2021\/02\/image-2-1024x573.png\" alt=\"\" class=\"wp-image-3230\" srcset=\"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2021\/02\/image-2-1024x573.png 1024w, https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2021\/02\/image-2-400x224.png 400w, https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2021\/02\/image-2-768x430.png 768w, https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2021\/02\/image-2.png 1430w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Now, you have to know it was 2am and, with this app, I was able to train a machine learning model even whilst half asleep.<\/p>\n\n\n\n<p>The export creates a folder and a class which you can import inside your own project. So, I was able to simply create a new instance of the model and provide the image and then I got back the prediction.<\/p>\n\n\n<div class=\"wp-block-syntaxhighlighter-code \"><pre class=\"brush: python; title: ; notranslate\" title=\"\">\nfrom Model import Model\nmodel = Model()\nmodel.load()\n# ... Generate Image\noutputs = model.predict(img)\nlist.append(int(outputs&#x5B;&#039;Prediction&#039;]))\n<\/pre><\/div>\n\n\n<p>With this task working I was finished, and I got some sleep.<\/p>\n\n\n\n<div style=\"width:100%;height:0;padding-bottom:56%;position:relative;\"><iframe loading=\"lazy\" src=\"https:\/\/giphy.com\/embed\/ZER6ipGPSqsNqVnZb0\" width=\"100%\" height=\"100%\" style=\"position:absolute\" frameBorder=\"0\" class=\"giphy-embed\" allowFullScreen><\/iframe><\/div><p><a href=\"https:\/\/giphy.com\/gifs\/ZER6ipGPSqsNqVnZb0\">via GIPHY<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Final results<\/h2>\n\n\n\n<p>Here is the final output of my evening of trying to automate as many tasks as possible in Among Us:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Name<\/th><th>Duration<\/th><th>Automated<\/th><\/tr><\/thead><tbody><tr><td><a href=\"https:\/\/among-us.fandom.com\/wiki\/Align_Engine_Output\">Align Engine Output<\/a><\/td><td>Long<\/td><td>No<\/td><\/tr><tr><td><a href=\"https:\/\/among-us.fandom.com\/wiki\/Calibrate_Distributor\">Calibrate Distributor<\/a><\/td><td>Short<\/td><td>No<\/td><\/tr><tr><td><a href=\"https:\/\/among-us.fandom.com\/wiki\/Chart_Course\">Chart Course<\/a><\/td><td>Short<\/td><td>No<\/td><\/tr><tr><td><a href=\"https:\/\/among-us.fandom.com\/wiki\/Clean_O2_Filter\">Clean O2 Filter<\/a><\/td><td>Short<\/td><td>No<\/td><\/tr><tr><td><a href=\"https:\/\/among-us.fandom.com\/wiki\/Clear_Asteroids\">Clear Asteroids<\/a><\/td><td>Long, visual<\/td><td>No<\/td><\/tr><tr><td><a href=\"https:\/\/among-us.fandom.com\/wiki\/Divert_Power\">Divert Power<\/a><\/td><td>Short<\/td><td>No<\/td><\/tr><tr><td><a href=\"https:\/\/among-us.fandom.com\/wiki\/Empty_Garbage\">Empty Chute<\/a><\/td><td>Long, visual<\/td><td>Yes<\/td><\/tr><tr><td><a href=\"https:\/\/among-us.fandom.com\/wiki\/Empty_Garbage\">Empty Garbage<\/a><\/td><td>Long, visual<\/td><td>Yes<\/td><\/tr><tr><td><a href=\"https:\/\/among-us.fandom.com\/wiki\/Fix_Wiring\">Fix Wiring<\/a><\/td><td>Common<\/td><td>Yes<\/td><\/tr><tr><td><a href=\"https:\/\/among-us.fandom.com\/wiki\/Fuel_Engines\">Fuel Engines<\/a><\/td><td>Long<\/td><td>Yes<\/td><\/tr><tr><td><a href=\"https:\/\/among-us.fandom.com\/wiki\/Inspect_Sample\">Inspect Sample<\/a><\/td><td>Long<\/td><td>No<\/td><\/tr><tr><td><a href=\"https:\/\/among-us.fandom.com\/wiki\/Prime_Shields\">Prime Shields<\/a><\/td><td>Short, visual<\/td><td>Yes<\/td><\/tr><tr><td><a href=\"https:\/\/among-us.fandom.com\/wiki\/Stabilize_Steering\">Stabilize Steering<\/a><\/td><td>Short<\/td><td>Yes<\/td><\/tr><tr><td><a href=\"https:\/\/among-us.fandom.com\/wiki\/Start_Reactor\">Start Reactor<\/a><\/td><td>Long<\/td><td>Yes<\/td><\/tr><tr><td><a href=\"https:\/\/among-us.fandom.com\/wiki\/Submit_Scan\">Submit Scan<\/a><\/td><td>Long, visual<\/td><td>Yes<\/td><\/tr><tr><td><a href=\"https:\/\/among-us.fandom.com\/wiki\/Swipe_Card\">Swipe Card<\/a><\/td><td>Common<\/td><td>Yes<\/td><\/tr><tr><td><a href=\"https:\/\/among-us.fandom.com\/wiki\/Unlock_Manifolds\">Unlock Manifolds<\/a><\/td><td>Short<\/td><td>Yes<\/td><\/tr><tr><td><a href=\"https:\/\/among-us.fandom.com\/wiki\/Upload_Data\">Upload Data<\/a><\/td><td>Short<\/td><td>Yes<\/td><\/tr><tr><td>Automated Tasks<\/td><td><\/td><td>61%<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p>I\u2019m sure you can automate even more of them &#8211; I was close to automating the \u201cAlign Engine Output\u201d and \u201cCalibrate Distributor\u201d \u2013 and maybe I\u2019ll get to them when I have more time.<\/p>\n\n\n\n<p>The most difficult ones are those where things are moving or too dynamic like the \u201cChart Course\u201d, \u201cClean O2 Filter\u201d, \u201cClear Asteroid\u201d ones. In those cases, I\u2019m always too slow to click and would have to add some kind of predictability, so it\u2019s faster to do this yourself at the moment.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Video of me using my tool<\/h2>\n\n\n\n<p>Here is a video showcasing what happens when you try to do all of the tasks. It skips the non-working tasks and has been sped-up during the waiting and walking times.<\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-rich is-provider-embed-handler wp-block-embed-embed-handler wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Among Us automated with Python and Lobe\" width=\"750\" height=\"422\" src=\"https:\/\/www.youtube.com\/embed\/sBDBkUXyeY8?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p>I\u2019m pretty happy with the results of this fun little project.<\/p>\n\n\n\n<p>I won\u2019t be publishing the source code, as I don\u2019t want people using this without also sacrificing some sweat and tears to generate the code.<\/p>\n\n\n\n<p>If someone is interested and can show me that they wouldn\u2019t use it for \u2018evil\u2019 you can, of course, contact me.<\/p>\n\n\n\n<div class=\"alert alert-info\"><b>Disclaimer:<\/b> Someone from Lobe contacted me to ask for feedback for the app, which gave me the final push and motivation to write this post. I really liked how easy Lobe is to use. Also it&#8217;s dead simple how to integrate it into an application. I did not get paid or asked to write this post, but still feel obligated to mention this.<\/div>\n","protected":false},"excerpt":{"rendered":"<p class=\"excerpt\">How many of the tasks in Among Us can I automate?<br \/>\nThe answer can be found at the end of this post.<\/p>\n","protected":false},"author":2,"featured_media":3239,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"inline_featured_image":false,"footnotes":""},"categories":[123,45],"tags":[339,343,341,342,337,340],"class_list":["post-3221","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-case-studies","category-development","tag-ai","tag-among-us","tag-lobe","tag-machine-learning","tag-programming","tag-python"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.2 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Using Python and Lobe to automate Among Us tasks - Robin Glauser<\/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.robinglauser.ch\/blog\/2021\/02\/16\/using-python-and-lobe-to-automate-among-us-tasks\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Using Python and Lobe to automate Among Us tasks - Robin Glauser\" \/>\n<meta property=\"og:description\" content=\"How many of the tasks in Among Us can I automate? The answer can be found at the end of this post.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.robinglauser.ch\/blog\/2021\/02\/16\/using-python-and-lobe-to-automate-among-us-tasks\/\" \/>\n<meta property=\"og:site_name\" content=\"Robin Glauser\" \/>\n<meta property=\"article:published_time\" content=\"2021-02-16T21:26:18+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-02-17T10:58:22+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2021\/02\/amongus-2.png\" \/>\n\t<meta property=\"og:image:width\" content=\"3602\" \/>\n\t<meta property=\"og:image:height\" content=\"1028\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Robin Glauser\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@robinglauser\" \/>\n<meta name=\"twitter:site\" content=\"@robinglauser\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Robin Glauser\" \/>\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.robinglauser.ch\/blog\/2021\/02\/16\/using-python-and-lobe-to-automate-among-us-tasks\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.robinglauser.ch\/blog\/2021\/02\/16\/using-python-and-lobe-to-automate-among-us-tasks\/\"},\"author\":{\"name\":\"Robin Glauser\",\"@id\":\"https:\/\/www.robinglauser.ch\/blog\/#\/schema\/person\/e1a94504a6ff5171fa13670932514b19\"},\"headline\":\"Using Python and Lobe to automate Among Us tasks\",\"datePublished\":\"2021-02-16T21:26:18+00:00\",\"dateModified\":\"2021-02-17T10:58:22+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.robinglauser.ch\/blog\/2021\/02\/16\/using-python-and-lobe-to-automate-among-us-tasks\/\"},\"wordCount\":1083,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.robinglauser.ch\/blog\/#\/schema\/person\/e1a94504a6ff5171fa13670932514b19\"},\"image\":{\"@id\":\"https:\/\/www.robinglauser.ch\/blog\/2021\/02\/16\/using-python-and-lobe-to-automate-among-us-tasks\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2021\/02\/amongus-2.png\",\"keywords\":[\"ai\",\"among us\",\"lobe\",\"machine learning\",\"programming\",\"python\"],\"articleSection\":[\"Case Studies\",\"Development\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.robinglauser.ch\/blog\/2021\/02\/16\/using-python-and-lobe-to-automate-among-us-tasks\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.robinglauser.ch\/blog\/2021\/02\/16\/using-python-and-lobe-to-automate-among-us-tasks\/\",\"url\":\"https:\/\/www.robinglauser.ch\/blog\/2021\/02\/16\/using-python-and-lobe-to-automate-among-us-tasks\/\",\"name\":\"Using Python and Lobe to automate Among Us tasks - Robin Glauser\",\"isPartOf\":{\"@id\":\"https:\/\/www.robinglauser.ch\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.robinglauser.ch\/blog\/2021\/02\/16\/using-python-and-lobe-to-automate-among-us-tasks\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.robinglauser.ch\/blog\/2021\/02\/16\/using-python-and-lobe-to-automate-among-us-tasks\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2021\/02\/amongus-2.png\",\"datePublished\":\"2021-02-16T21:26:18+00:00\",\"dateModified\":\"2021-02-17T10:58:22+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.robinglauser.ch\/blog\/2021\/02\/16\/using-python-and-lobe-to-automate-among-us-tasks\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.robinglauser.ch\/blog\/2021\/02\/16\/using-python-and-lobe-to-automate-among-us-tasks\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.robinglauser.ch\/blog\/2021\/02\/16\/using-python-and-lobe-to-automate-among-us-tasks\/#primaryimage\",\"url\":\"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2021\/02\/amongus-2.png\",\"contentUrl\":\"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2021\/02\/amongus-2.png\",\"width\":3602,\"height\":1028},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.robinglauser.ch\/blog\/2021\/02\/16\/using-python-and-lobe-to-automate-among-us-tasks\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.robinglauser.ch\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Using Python and Lobe to automate Among Us tasks\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.robinglauser.ch\/blog\/#website\",\"url\":\"https:\/\/www.robinglauser.ch\/blog\/\",\"name\":\"Robin Glauser\",\"description\":\"My Blog about Development, Design and my random thoughts.\",\"publisher\":{\"@id\":\"https:\/\/www.robinglauser.ch\/blog\/#\/schema\/person\/e1a94504a6ff5171fa13670932514b19\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.robinglauser.ch\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.robinglauser.ch\/blog\/#\/schema\/person\/e1a94504a6ff5171fa13670932514b19\",\"name\":\"Robin Glauser\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2015\/10\/DSC_1244_small.jpg\",\"url\":\"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2015\/10\/DSC_1244_small.jpg\",\"contentUrl\":\"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2015\/10\/DSC_1244_small.jpg\",\"width\":800,\"height\":530,\"caption\":\"Robin Glauser\"},\"logo\":{\"@id\":\"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2015\/10\/DSC_1244_small.jpg\"},\"description\":\"I'm a web developer.\",\"sameAs\":[\"https:\/\/www.robinglauser.ch\",\"https:\/\/www.instagram.com\/robinglauser\/\",\"https:\/\/x.com\/robinglauser\"],\"url\":\"https:\/\/www.robinglauser.ch\/blog\/author\/robin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Using Python and Lobe to automate Among Us tasks - Robin Glauser","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.robinglauser.ch\/blog\/2021\/02\/16\/using-python-and-lobe-to-automate-among-us-tasks\/","og_locale":"en_US","og_type":"article","og_title":"Using Python and Lobe to automate Among Us tasks - Robin Glauser","og_description":"How many of the tasks in Among Us can I automate? The answer can be found at the end of this post.","og_url":"https:\/\/www.robinglauser.ch\/blog\/2021\/02\/16\/using-python-and-lobe-to-automate-among-us-tasks\/","og_site_name":"Robin Glauser","article_published_time":"2021-02-16T21:26:18+00:00","article_modified_time":"2021-02-17T10:58:22+00:00","og_image":[{"width":3602,"height":1028,"url":"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2021\/02\/amongus-2.png","type":"image\/png"}],"author":"Robin Glauser","twitter_card":"summary_large_image","twitter_creator":"@robinglauser","twitter_site":"@robinglauser","twitter_misc":{"Written by":"Robin Glauser","Est. reading time":"7 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.robinglauser.ch\/blog\/2021\/02\/16\/using-python-and-lobe-to-automate-among-us-tasks\/#article","isPartOf":{"@id":"https:\/\/www.robinglauser.ch\/blog\/2021\/02\/16\/using-python-and-lobe-to-automate-among-us-tasks\/"},"author":{"name":"Robin Glauser","@id":"https:\/\/www.robinglauser.ch\/blog\/#\/schema\/person\/e1a94504a6ff5171fa13670932514b19"},"headline":"Using Python and Lobe to automate Among Us tasks","datePublished":"2021-02-16T21:26:18+00:00","dateModified":"2021-02-17T10:58:22+00:00","mainEntityOfPage":{"@id":"https:\/\/www.robinglauser.ch\/blog\/2021\/02\/16\/using-python-and-lobe-to-automate-among-us-tasks\/"},"wordCount":1083,"commentCount":0,"publisher":{"@id":"https:\/\/www.robinglauser.ch\/blog\/#\/schema\/person\/e1a94504a6ff5171fa13670932514b19"},"image":{"@id":"https:\/\/www.robinglauser.ch\/blog\/2021\/02\/16\/using-python-and-lobe-to-automate-among-us-tasks\/#primaryimage"},"thumbnailUrl":"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2021\/02\/amongus-2.png","keywords":["ai","among us","lobe","machine learning","programming","python"],"articleSection":["Case Studies","Development"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.robinglauser.ch\/blog\/2021\/02\/16\/using-python-and-lobe-to-automate-among-us-tasks\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.robinglauser.ch\/blog\/2021\/02\/16\/using-python-and-lobe-to-automate-among-us-tasks\/","url":"https:\/\/www.robinglauser.ch\/blog\/2021\/02\/16\/using-python-and-lobe-to-automate-among-us-tasks\/","name":"Using Python and Lobe to automate Among Us tasks - Robin Glauser","isPartOf":{"@id":"https:\/\/www.robinglauser.ch\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.robinglauser.ch\/blog\/2021\/02\/16\/using-python-and-lobe-to-automate-among-us-tasks\/#primaryimage"},"image":{"@id":"https:\/\/www.robinglauser.ch\/blog\/2021\/02\/16\/using-python-and-lobe-to-automate-among-us-tasks\/#primaryimage"},"thumbnailUrl":"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2021\/02\/amongus-2.png","datePublished":"2021-02-16T21:26:18+00:00","dateModified":"2021-02-17T10:58:22+00:00","breadcrumb":{"@id":"https:\/\/www.robinglauser.ch\/blog\/2021\/02\/16\/using-python-and-lobe-to-automate-among-us-tasks\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.robinglauser.ch\/blog\/2021\/02\/16\/using-python-and-lobe-to-automate-among-us-tasks\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.robinglauser.ch\/blog\/2021\/02\/16\/using-python-and-lobe-to-automate-among-us-tasks\/#primaryimage","url":"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2021\/02\/amongus-2.png","contentUrl":"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2021\/02\/amongus-2.png","width":3602,"height":1028},{"@type":"BreadcrumbList","@id":"https:\/\/www.robinglauser.ch\/blog\/2021\/02\/16\/using-python-and-lobe-to-automate-among-us-tasks\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.robinglauser.ch\/blog\/"},{"@type":"ListItem","position":2,"name":"Using Python and Lobe to automate Among Us tasks"}]},{"@type":"WebSite","@id":"https:\/\/www.robinglauser.ch\/blog\/#website","url":"https:\/\/www.robinglauser.ch\/blog\/","name":"Robin Glauser","description":"My Blog about Development, Design and my random thoughts.","publisher":{"@id":"https:\/\/www.robinglauser.ch\/blog\/#\/schema\/person\/e1a94504a6ff5171fa13670932514b19"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.robinglauser.ch\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.robinglauser.ch\/blog\/#\/schema\/person\/e1a94504a6ff5171fa13670932514b19","name":"Robin Glauser","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2015\/10\/DSC_1244_small.jpg","url":"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2015\/10\/DSC_1244_small.jpg","contentUrl":"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2015\/10\/DSC_1244_small.jpg","width":800,"height":530,"caption":"Robin Glauser"},"logo":{"@id":"https:\/\/www.robinglauser.ch\/blog\/wp-content\/uploads\/2015\/10\/DSC_1244_small.jpg"},"description":"I'm a web developer.","sameAs":["https:\/\/www.robinglauser.ch","https:\/\/www.instagram.com\/robinglauser\/","https:\/\/x.com\/robinglauser"],"url":"https:\/\/www.robinglauser.ch\/blog\/author\/robin\/"}]}},"_links":{"self":[{"href":"https:\/\/www.robinglauser.ch\/blog\/wp-json\/wp\/v2\/posts\/3221","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.robinglauser.ch\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.robinglauser.ch\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.robinglauser.ch\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.robinglauser.ch\/blog\/wp-json\/wp\/v2\/comments?post=3221"}],"version-history":[{"count":29,"href":"https:\/\/www.robinglauser.ch\/blog\/wp-json\/wp\/v2\/posts\/3221\/revisions"}],"predecessor-version":[{"id":3261,"href":"https:\/\/www.robinglauser.ch\/blog\/wp-json\/wp\/v2\/posts\/3221\/revisions\/3261"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.robinglauser.ch\/blog\/wp-json\/wp\/v2\/media\/3239"}],"wp:attachment":[{"href":"https:\/\/www.robinglauser.ch\/blog\/wp-json\/wp\/v2\/media?parent=3221"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.robinglauser.ch\/blog\/wp-json\/wp\/v2\/categories?post=3221"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.robinglauser.ch\/blog\/wp-json\/wp\/v2\/tags?post=3221"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}