{"id":16520120,"url":"https://github.com/pageauc/panopi","last_synced_at":"2025-10-28T07:31:40.531Z","repository":{"id":74954762,"uuid":"297449854","full_name":"pageauc/panopi","owner":"pageauc","description":"Create pano timelapse images from multiple RPI computers using picamera modules.","archived":false,"fork":false,"pushed_at":"2023-10-27T17:30:40.000Z","size":13264,"stargazers_count":12,"open_issues_count":0,"forks_count":3,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-02-01T12:45:31.068Z","etag":null,"topics":["imagezmq","panorama-stitching","python","raspberry-pi","timelapse-videos"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pageauc.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}},"created_at":"2020-09-21T20:11:10.000Z","updated_at":"2024-11-16T17:01:08.000Z","dependencies_parsed_at":"2023-07-25T20:31:04.820Z","dependency_job_id":null,"html_url":"https://github.com/pageauc/panopi","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pageauc%2Fpanopi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pageauc%2Fpanopi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pageauc%2Fpanopi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pageauc%2Fpanopi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pageauc","download_url":"https://codeload.github.com/pageauc/panopi/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238614564,"owners_count":19501481,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["imagezmq","panorama-stitching","python","raspberry-pi","timelapse-videos"],"created_at":"2024-10-11T16:49:42.631Z","updated_at":"2025-10-28T07:31:38.650Z","avatar_url":"https://github.com/pageauc.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# PANOPI\n#### Create panoramic timelapse images from multiple Raspberry Pi computers using picamera modules.\n\nThis project uses [imagezmq](https://github.com/jeffbass/imagezmq) to transfer images from multiple panosend RPI's to a single panohub RPI. \nAll panosend RPI's are sent a timestamp so all sequence images are taken at the same time. The panhub computer\nstores timelapse sequence images in ***media/timelapse*** folder and will then attempt to stitch the images in the sequence.\nThe next sequence number is saved in a ***panohub.dat*** file. Seqence numbering will start where it left off if panohub.py is\ninterrupted. Delete this file to restart numbering. If stitching is successful the pano images will be saved in the ***media/pano-images*** folder. \nImages can be viewed using the included webserver. Using a RPI4 for panub, I was able to get three 720p image stitch times of about six seconds.\nThe stitching program is a modified version of openpano.  For details see my Repo at https://github.com/pageauc/OpenPano\n\nClaude ....\n\n## QUICK INSTALL\n\n### PANOHUB INSTALL\nOn a raspberry pi computer on your local area network (using zeroconf). Install the panohub software per curl\nscript below.  Note This does not need a picamera.  You can also choose to install on one of the\npanosend RPI's. Stitching takes some time to process so I advise a faster RPI for the panohub RPI.  I am going\nto test an adhoc network setup to see how it works.\n\n**IMPORTANT** - It is suggested you do a Raspbian ***sudo apt-get update*** and ***sudo apt-get upgrade***\nbefore curl install.\n\n***Step 1*** With mouse left button highlight curl command in code box below. Right click mouse in **highlighted** area and Copy.    \n***Step 2*** On RPI putty SSH or terminal session right click, select paste then Enter to download and run script.\n\n    curl -L https://raw.githubusercontent.com/pageauc/panopi/master/panohub/install-panohub.sh | bash\n\nThis will create a /home/pi/panohub folder and required files for communicating with panosend RPI's and \nstitching received images.  Default timelapse period is 60 seconds.  The webserver can be used to\nview and align images.     \nSee [INSTRUCTIONS](https://github.com/pageauc/panopi/#instructions) below for more details. \n\n### PANOSEND INSTALL\nOn each RPI computer with a picamera installed and working, the curl script below will install the panosend files\ninto a /home/pi/panosend folder.\n\n***Step 1*** With mouse left button highlight curl command in code box below. Right click mouse in **highlighted** area and Copy.    \n***Step 2*** On RPI putty SSH or terminal session right click, select paste then Enter to download and run script.\n\n    curl -L https://raw.githubusercontent.com/pageauc/panopi/master/panosend/install-panosend.sh | bash\n\nStart panowatch.py as a background task per    \n\n    cd ~/panosend\n    ./panowatch.sh start\n\nNote: You can auto start panowatch on boot by editing the file /etc/rc.local    \n    \n    sudo nano /etc/rc.local\n\nThen Add the command below just before exit 0    \n    \n    sudo -u pi /home/pi/panosend/panowatch.sh start    \n\nTo save changes and exit nano press ctrl-x y\n\n## INSTRUCTIONS \n(Assumes you are comfortable with SSH, Terminal Session commands)\n\n#### Step 1\nEdit panohub.yaml to change ***panohub_settings*** CAM_HOST_NAMES to reflect the panosend zeroconf host names.\nReview other settings like IMAGE_PREFIX, TIMELAPSE_TIMER, Etc as required. \nMove down to ***panosend_settings*** and review CAM_WIDTH, CAM_HEIGHT, Etc\n***IMPORTANT*** You DO NOT need to change the ***ZMQ_PANOHUB_IP*** setting since this will\nbe changed automatically by panohub.py to reflect the actual panohub computer ip address.    \n  \n    cd ~/panohub    \n    nano panohub.yaml\n\nTo save changes and exit nano press ctrl-x y     \n\n#### Step 2\nOn each panosend host start the panowatch.sh script per commands below.       \n\n    cd ~/panosend    \n    ./panowatch.sh start  \n\nThis will run panowatch.py as a background task.\n\n#### Step 3\nOn panohub computer start the webserver to view images per commands below.    \n\n    cd ~/panohub    \n    ./webserver.sh start\n\n#### Step 4\nOn any local area computer, Web browser input webserver url:port on the web browser\nurl bar per examples below.  Note change to suit your actual network details.    \n\n    192.168.1.177:8080    \n    mypanohub.local:8080\n\nWhen panohub.py is started, received images will be saved into the folders ***timelapse*** and ***pano_images***\n    \n#### Step 5\nOn panohub computer start panohub.py per commands below. This RPI can be any RPI on your network.\nYou will get faster stitching using a RPI4. panohub.py will read the panohub.yaml file panosend_settings\nsection, modify the ZMQ_PANOHUB_IP setting and stream to panowatch.py on each panosend computer.\npanowatch.py will create a panosend.yaml from the transmitted panohub yaml stream. panowatch will  \nthen start/restart panosend.sh that will start panosend.py as a background task getting its settings\nfrom the saved panosend.yaml file.       \n\n    cd ~/panohub    \n    ./panohub.py\n\nReview panohub.py log messages and confirm images are being received from each panosend camera.     \nAlign panosend computer camera(s) using the webserver timelapse images as a guide. Pick a\nfew objects in images for reference. You will need to align camera views vertically and horizontally.\nWhen stitching is successful you can view results in the pano_images folder via web browser interface.\n \nIt is best to start initially with two panosend cameras. It will then be easier to get \ncorrect image overlap alignment. Try a lot of overlap initially then narrow overlap.\nImages need to align vertically and horizontally.\n\nYou can then add additional panosend hosts to the configuration by\nadding them to the panohub.yaml panohub_settings, CAM_HOST_NAMES list variable.\nWhen panohub.py is stopped, it will send a zmq stop message to each panosend computer and panowatch will\nstop the panosend background task. When panohub is restarted the panosend_settings will be send to panowatch\non each panosend machine and panosend.py will be restarted as a background task.\nPress ctrl-c to exit panohub.py.\n\nOnce images are aligned properly and stitching is working, you can start panohub.py \nas a background task using command \n\n    ./panohub.sh start  \n\n## RPI CAM STAND \nI found aligning the camera's very tricky.  I designed a simple foamboard stand that allows adjusting the\ncamera views accurately. The camera image overlap and alignment can be set easily.  Also since the stand\nmounts are just dowels, I mounted mine on a board so camera setup can be transported easily.  I am using wifi\nand will use a ANKER powered hub with one ft long usb cables. This will give a clean setup. The cam stand\ndowel can be inserted into any horizontal or vertical serface (as long as you can drill a dowel hole). I suggest\nyou mount to board and then mount the board on a wall or flat surface.\n\nBelow is the foam board design template in pdf format. This can be printed and used as a template. Adjust height to your liking\nif you wish.  I have made several different heights to allow cameras to see over window frames.  My RPI's have cases that mount the\n camera internally. If you have different case your camera mounting details might be different.\n\n[Click to View RPI CAM STAND PDF template](https://github.com/pageauc/panopi/blob/master/rpi-stand.pdf)    \n\nImage with three RPI's with picamera modules mounted in the cases. The panosend RPI's are attached to a board using wooden dowels per design drawing details. \nAlso note the Anker powered USB hub and short one ft long USB cables. This makes for a cleaner setup that is much easier to transport.\nThese are older single core RPI's so I had to use WIFI adapters.    \n![RPI CAM STAND CLOSE](https://github.com/pageauc/panopi/blob/master/rpi-stand-1.jpg)\n\n## SAMPLE IMAGES\nThis is one of the images taken in our computer/sewing room.  Not very exciting and will post better one\nwhen the project is further developed.  I use old RPI's.  Note the displayed image below is really resized.\nSelect link for Actual image size which is much larger depending on the camera resolution.\nOriginal panosend images were 720p before stitching.\n\n#### 1080p PANO\n![1080p Pano Timelapse Image Sample](https://github.com/pageauc/panopi/blob/master/pano-tl-1130_1080.jpg)    \n[Click to View Full Size 1080p Pano Timelapse Image Sample](https://github.com/pageauc/panopi/blob/master/pano-tl-1130_1080.jpg)  \n\n#### 720p PANO  \n![720p Pano Timelapse Image Sample](https://github.com/pageauc/panopi/blob/master/pano-tl-1145-720.jpg)    \n[Click to View Full Size 720p Pano Timelapse Image Sample](https://github.com/pageauc/panopi/blob/master/pano-tl-1145-720.jpg)\n\nRegards    \nClaude ...\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpageauc%2Fpanopi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpageauc%2Fpanopi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpageauc%2Fpanopi/lists"}