{"id":15765,"date":"2024-11-26T19:58:27","date_gmt":"2024-11-27T02:58:27","guid":{"rendered":"https:\/\/handandmachine.org\/classes\/computational_fabrication\/?p=15765"},"modified":"2024-11-27T18:25:10","modified_gmt":"2024-11-28T01:25:10","slug":"final-project-update-15","status":"publish","type":"post","link":"https:\/\/handandmachine.org\/classes\/computational_fabrication\/2024\/11\/26\/final-project-update-15\/","title":{"rendered":"Final Project Update"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Status<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">So far, I have printed, cleaned, and glued magnets into all of the physical parts I need, and the browser-based scanner has some good progress. To be more specific, I&#8217;ve printed 4 baseplates and 144 tiles (for a grand total of 400 magnets!) and the scanner is able to reliably identify all tiles in an image containing a single baseplate.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I have gathered the code and instructions for printing the parts into <a href=\"https:\/\/github.com\/legokidlogan\/fiducial-fez\">this github repo<\/a>, and the in-progress scanner can be found <a href=\"https:\/\/legokidlogan.github.io\/fiducial-fez\/webcode\/index.html\">here<\/a>.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Physical Prints<\/h2>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-128.png\" alt=\"\" class=\"wp-image-15806\" srcset=\"https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-128.png 1024w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-128-300x300.png 300w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-128-150x150.png 150w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-128-768x768.png 768w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-128-920x920.png 920w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-128-575x575.png 575w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-128-380x380.png 380w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">All four baseplates and 144 tiles, connected and organized.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" src=\"https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-129.png\" alt=\"\" class=\"wp-image-15807\" srcset=\"https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-129.png 1024w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-129-300x300.png 300w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-129-150x150.png 150w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-129-768x768.png 768w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-129-920x920.png 920w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-129-575x575.png 575w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-129-380x380.png 380w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">The baseplates, separated from each other, with some of the tiles scattered on the side.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"555\" src=\"https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-130.png\" alt=\"\" class=\"wp-image-15808\" srcset=\"https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-130.png 1024w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-130-300x163.png 300w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-130-768x416.png 768w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-130-920x499.png 920w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-130-575x312.png 575w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-130-380x206.png 380w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Two copies of the physical translation key. Note the two copies of each English letter per Zuish symbol, letting the whole key be rotated to see the as-is vs rotated\/human-readable versions.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"985\" height=\"554\" src=\"https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-131.png\" alt=\"\" class=\"wp-image-15809\" srcset=\"https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-131.png 985w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-131-300x169.png 300w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-131-768x432.png 768w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-131-920x517.png 920w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-131-575x323.png 575w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-131-380x214.png 380w\" sizes=\"auto, (max-width: 985px) 100vw, 985px\" \/><figcaption class=\"wp-element-caption\">The first in-game Zuish phrase. Above is how it appears in the game (plus a translation in the top left), below is the same phrase made out of physical tiles.<\/figcaption><\/figure>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"381\" height=\"1024\" src=\"https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-134-381x1024.png\" alt=\"\" class=\"wp-image-15812\" srcset=\"https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-134-381x1024.png 381w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-134-112x300.png 112w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-134-768x2063.png 768w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-134-572x1536.png 572w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-134-762x2048.png 762w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-134-920x2472.png 920w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-134-575x1545.png 575w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-134-380x1021.png 380w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-134.png 1024w\" sizes=\"auto, (max-width: 381px) 100vw, 381px\" \/><\/figure>\n<\/div>\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"768\" height=\"1024\" src=\"https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-133-768x1024.png\" alt=\"\" class=\"wp-image-15811\" srcset=\"https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-133-768x1024.png 768w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-133-225x300.png 225w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-133-920x1226.png 920w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-133-575x766.png 575w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-133-380x507.png 380w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-133.png 1024w\" sizes=\"auto, (max-width: 768px) 100vw, 768px\" \/><figcaption class=\"wp-element-caption\">An in-progress photo of a baseplate. These things are big! 144g of filament with 10% infill!<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"768\" src=\"https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-132.png\" alt=\"\" class=\"wp-image-15810\" srcset=\"https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-132.png 1024w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-132-300x225.png 300w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-132-768x576.png 768w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-132-920x690.png 920w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-132-575x431.png 575w, https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/image-132-380x285.png 380w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">An in-progress picture of the printer putting down black filament onto the white tiles.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Scanner\/Translator<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">With the prints complete, all that&#8217;s left is the scanner program. Currently, images with a single baseplate work fine, though curiously it fails when I have multiple baseplates in the same image. Curiously enough though, it appears to not be a problem of image detail, but of js-aruco (the base library) only searching for markers of a certain size relative to the image size. I have a few ideas on how to resolve this, and it&#8217;ll be the next immediate goal to tackle.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Another issue I&#8217;m facing is making things work nicely on mobile browsers. If the processing time takes too long, my phone will reload the page, meaning I need to rework the program to allow the workload to be spread out over time. And of course, there&#8217;s the problem of adjusting the html for mobile devices, so that everything fits nicely on-screen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Immediate short-term hurdles aside, there&#8217;s still a fair bit more work to go. The program can identify symbols (even handling the red and blue ones) but now I need to make the translator. Specifically, I need to make it gather the symbols into a structured grid, and translate those symbols into English while accounting for spaces. Then, I also need to have translation in the other direction: give the website some English text and config parameters, and have it generate an image in Zuish.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Deliverables<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">My deliverables and timeline have not changed, so this is a copy from the project proposal.<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A set of small 3D-printed tiles to represent the letters of the Zuish alphabet from FEZ\n<ul class=\"wp-block-list\">\n<li>There should be multiple copies for each letter<\/li>\n\n\n\n<li>The duplicate symbols in the letter pairs K &amp; Q and U &amp; V should be differentiated by different filament colors<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>A set of baseplates which have slots arranged in a grid to put letter tiles into\n<ul class=\"wp-block-list\">\n<li>Baseplates should be able to connect together to create an arbitrarily large grid<\/li>\n\n\n\n<li>Baseplates should be designed such that the translator script can identify them together as one collective grid<\/li>\n\n\n\n<li>The number of slots per baseplate and number of baseplates printed should be enough to write at least 1-2 simple, medium-length sentences in one grid.<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>A javascript program for translating Zuish by interacting with the 3D-printed tiles\n<ul class=\"wp-block-list\">\n<li>Given an input image of the grid-placed tiles, output the English translation as text<\/li>\n\n\n\n<li>Given an input string of English text and other parameters such as max column height, output an image representing the Zuish translation<\/li>\n\n\n\n<li><em>If feasible<\/em>, make the program accessible in-browser through a simplistic webpage, for both desktop and mobile devices<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Timeline<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Week 1:\n<ul class=\"wp-block-list\">\n<li>A small printed sample of the baseplates and tiles, enough to demonstrate the symbols and connectable baseplates<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Week 2:\n<ul class=\"wp-block-list\">\n<li>Prototype translation program which can output Zuish images from English text, and progress on Zuish images to English text<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li>Week 3:\n<ul class=\"wp-block-list\">\n<li>Refined baseplate and tile models printed in full quantities, and a completed translation program<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Post-Tuesday Edit<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This isn&#8217;t going with the rest of the post since the update due date was on Tuesday, but as of Wednesday 6PM, I&#8217;ve fixed the multi-baseplate and too-slow-for-mobile issues, and Zuish to English translation is (more or less) complete!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It was struggling with images where the markers were small compared to the image because js-aruco normally sets a minimum marker size based on the width of the image. Simply tweaking it to a fixed minimum instead was all it took to allow images with more baseplates to work.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Image processing is now split apart into steps that get spread out over time, so mobile browsers don&#8217;t crash the page. I&#8217;ve also tweaked the UI elements to make the page fit nicer on mobile screens, though it&#8217;s not perfect.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I can now translate images of the physical pieces, so most of all that&#8217;s left to do is converting English text into Zuish images.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here&#8217;s a video demonstration:<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"1040\" style=\"aspect-ratio: 1920 \/ 1040;\" width=\"1920\" controls src=\"https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-content\/uploads\/2024\/11\/Fiducial-FEZ-Scanner-Google-Chrome-2024-11-27-17-59-07.mp4\"><\/video><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Note how it&#8217;s quite resilient to rotation and camera tilting, though it can struggle with glare (the missing U in the last image), bad lighting (light from my monitor interfered with the red\/blue detection in the webcam portion), and low-quality images (as seen with my terrible webcam). It&#8217;s not perfect, though clean images taken by my phone work very well as long as glare is minimized.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There is one other little hiccup though&#8230; The webcam (or back-cam, rather) feed doesn&#8217;t work quite right for mobile devices. It loads one frame, then no more. After searching around, it seems to be a common problem, and not one that&#8217;s easily fixable. Unless I can find a good solution later, mobile devices will be limited to taking pictures and uploading them, instead of using a live feed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Status So far, I have printed, cleaned, and glued magnets into all of the physical parts I need, and the browser-based scanner has some good progress. To be more specific, I&#8217;ve printed 4 baseplates and 144 tiles (for a grand total of 400 magnets!) and the scanner is able to reliably identify all tiles in an image containing a single [&hellip;]<\/p>\n","protected":false},"author":38,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[65,46],"tags":[],"class_list":["post-15765","post","type-post","status-publish","format-standard","hentry","category-final-project-update","category-studentwork24"],"_links":{"self":[{"href":"https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-json\/wp\/v2\/posts\/15765","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-json\/wp\/v2\/users\/38"}],"replies":[{"embeddable":true,"href":"https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-json\/wp\/v2\/comments?post=15765"}],"version-history":[{"count":8,"href":"https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-json\/wp\/v2\/posts\/15765\/revisions"}],"predecessor-version":[{"id":15975,"href":"https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-json\/wp\/v2\/posts\/15765\/revisions\/15975"}],"wp:attachment":[{"href":"https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-json\/wp\/v2\/media?parent=15765"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-json\/wp\/v2\/categories?post=15765"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/handandmachine.org\/classes\/computational_fabrication\/wp-json\/wp\/v2\/tags?post=15765"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}