{"id":20696857,"url":"https://github.com/araobp/tower","last_synced_at":"2026-04-23T10:35:27.121Z","repository":{"id":145719443,"uuid":"248685525","full_name":"araobp/tower","owner":"araobp","description":"Sensor tower","archived":false,"fork":false,"pushed_at":"2020-09-13T00:37:18.000Z","size":26240,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-03-11T02:48:26.436Z","etag":null,"topics":["ai-camera","opencv","tensorflow-lite"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/araobp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2020-03-20T06:37:34.000Z","updated_at":"2023-03-05T02:42:43.000Z","dependencies_parsed_at":"2023-04-25T01:32:39.483Z","dependency_job_id":null,"html_url":"https://github.com/araobp/tower","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/araobp/tower","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/araobp%2Ftower","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/araobp%2Ftower/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/araobp%2Ftower/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/araobp%2Ftower/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/araobp","download_url":"https://codeload.github.com/araobp/tower/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/araobp%2Ftower/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32177025,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-23T02:19:40.750Z","status":"ssl_error","status_checked_at":"2026-04-23T02:17:55.737Z","response_time":53,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-camera","opencv","tensorflow-lite"],"created_at":"2024-11-17T00:15:39.661Z","updated_at":"2026-04-23T10:35:22.113Z","avatar_url":"https://github.com/araobp.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Sensor tower\n\nThis is a sensor tower for IoT:\n\n- Wireless IoT\n- AI camera\n- GPS\n- Sensors\n\n## Goal\n\n- AI webcam: integration with OpenCV and TensorFlow Lite =\u003e Completed\n- Intrusion detection =\u003e Completed\n- Auto discovery of web cam's IP address in a LAN segment =\u003e Completed\n- MotionJPEG broadcasting server =\u003e Completed\n- Optional features: low-power wireless, temperature/humidity sensor etc..\n- ALPR???\n\n## Tower\n\nThe tower consists of a PVC water pipe sitting vertically and platforms on which sensors are mounted:\n\n```\n\n   [AI Webcam]\n      | |\n      | | [Zigbee (TWELITE) antenna] \u003c - - - - - IEEE802.14.3 (~100m) - - - - - \u003e [Other IoT devices]\n    -------\n      | |\n      | | [GPS]\n    -------\n      | |\n      | | [Sensors]\n    -------\n      | |\n      | | [Raspberry Pi 3]\n      | |\n     /   \\\n    /     \\\n~~~~~~~~~~~~~~~~\n\n```\n\n- [panhead](./blender/panhead.stl)\n- [hook](./blender/hook.stl)\n- [Raspberry Pi case support](./blender/raspi.stl)\n\n## AI Webcam\n \n \u003cimg src=\"./doc/uvc_camera.png\" width=200px\u003e\n \n### USB video cameras\n\nThis project supports any UVC video cameras.\n\nI have got the following cheap cameras supporting UVC:\n- https://www.buffalo.jp/product/detail/bsw200mbk.html (FOV 120 degrees horizontal)\n- http://www.sac-corp.jp/product/contents/actioncam/ac200.html (FOV 78 degrees horizontal/ 46 degrees vertical)\n\n### Configuration\n\n```\n                                OpenCV\n                                TensorFlow lite\n                                Node.js\n[UVC video camera ] --- USB --\u003e [RasPi] --- WiFi --\u003e [HTML5 browser (Chrome on Android or on PC)]\n                                        ---      --\u003e [HTML5 browser (Chrome on Android or on PC)]\n                                        ---      --\u003e [HTML5 browser (Chrome on Android or on PC)]\n```\n\n### Development environments\n\nvi for Node.js, OpenCV and TensorFlow Lite (HTML5, javascript and C/C++ with gcc)\n\n### IP address auto discovery\n\nThe web cam advertise IP address and a service ID of its own on UDP port 18084 periodically to the LAN by using [\"very simple service discovery protocol\"](https://github.com/araobp/service-discovery). An Android app receives the IP packet and launch Chrome browser with the following URL format: \n\n```\nhttp://\u003cAdvertised IP address\u003e:18082/broadcast/\u003cserviceId\u003e\n```\n\nMessage sequence diagram:\n```\n\n  Web cam          Launcher app on Android\n     |                      |\n     |----- UDP 18084 -----\u003e|\n     |                      |\n     |----- UDP 18084 -----\u003e|\n     |                      |\n     |----- UDP 18084 -----\u003e| http://\u003cAdvertised IP address\u003e:18082/broadcast/\u003cserviceId\u003e\n     |                      |\n                            |\n                            |\n Motion JPEG broadcaster    |\n     |                      |\n     |\u003c---- HTTP GET -------|\n     |---- Motion JPEG ----\u003e|\n     |---- Motion JPEG ----\u003e|\n     |---- Motion JPEG ----\u003e|\n     |         :            |\n     \n```\n\n### Code\n\n=\u003e [aicam (C/C++)](./raspi/cpp)\n\n=\u003e [broadcaster.js (javascript/node.js)](./raspi/node/broadcaster.js)\n\n=\u003e [gps.js (javascript/node.js)](./raspi/node/gps.js)\n\n=\u003e [map.html](./raspi/node/webapp/map.html)\n\n=\u003e [Chrome launcher (Kotlin/Android)](./android)\n\nSequence diagram\n```\nLinux host                   broadcaster.js                        Chrome launcher app\n    |                             |                                         |\n    |--- Advertisment UDP packet ------------------------------------------\u003e| -\u003e URL of AI Webcam\n    |              :              |                                         |          |\n                                                                                       |\n  aicam                      broadcaster.js                              Chrome \u003c------+\n    |                             |                                         |\n    |                             |\u003c--- HTTP GET /broadcast/:serviceId -----|\n    |--- HTTP POST image/jpeg ---\u003e|                                         |\n    |                             |--- 200 OK multipart/x-mixed-replace ---\u003e|\n    |--- HTTP POST image/jpeg ---\u003e|                                         |\n    |                             |--- multipart/x-mixed-replace ----------\u003e|\n    |--- HTTP POST image/jpeg ---\u003e|                                         |\n    |                             |--- multipart/x-mixed-replace ----------\u003e|\n\n                    :                                  :\n```\n\n### References\n\n#### Tokyo tower\n\n[Tokyo tower](https://www.tokyotower.co.jp/en/)\n\n#### OSC API\n\nI tested OSC API supported by RICOH Theta, but this project just requires a simple UVC camera with a wider FOV.\n\n- [OSC API test program on Android](./etc)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faraobp%2Ftower","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Faraobp%2Ftower","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Faraobp%2Ftower/lists"}