From 0bc1af6c3a333c84a357045bca9808e8e1a77999 Mon Sep 17 00:00:00 2001 From: KenwoodFox Date: Wed, 1 Dec 2021 16:38:53 -0500 Subject: [PATCH] Implement messy version of ali's code --- companion_software/BasicBot.py | 23 ---------- companion_software/Pipfile | 12 +++++ companion_software/Pipfile.lock | 68 ++++++++++++++++++++++++++++ companion_software/requirements.txt | 1 + companion_software/superpipe.py | 31 +++++++++++++ companion_software/video.webm | Bin 0 -> 12117 bytes 6 files changed, 112 insertions(+), 23 deletions(-) delete mode 100644 companion_software/BasicBot.py create mode 100644 companion_software/Pipfile create mode 100644 companion_software/Pipfile.lock create mode 100644 companion_software/requirements.txt create mode 100644 companion_software/superpipe.py create mode 100644 companion_software/video.webm diff --git a/companion_software/BasicBot.py b/companion_software/BasicBot.py deleted file mode 100644 index d06675a..0000000 --- a/companion_software/BasicBot.py +++ /dev/null @@ -1,23 +0,0 @@ -from discord_webhook import DiscordWebhook -from picamera import PiCamera -from time import sleep - - -def get_uptime(): - with open('/proc/uptime', 'r') as f: - uptime_seconds = float(f.readline().split()[0]) - - return uptime_seconds - -webhookURL = "https://discord.com/api/webhooks/856609966404534272/TR9tnLq2sIGZoOeADNswmGRNlzBcqM5aKihfU6snVTP9WhSSoVVvi7nT6i-ZfZS7Hcqm" - -webhook = DiscordWebhook(url=webhookURL, content="Uptime: " + str( round( ((get_uptime() / 60) / 60 ), 2 )) + " hours") - -camera = PiCamera() -sleep(3) # let iso settle out -camera.capture('still.jpg') - -with open("still.jpg", "rb") as f: - webhook.add_file(file=f.read(), filename='still.jpg') -response = webhook.execute() # Hit send - diff --git a/companion_software/Pipfile b/companion_software/Pipfile new file mode 100644 index 0000000..a42c051 --- /dev/null +++ b/companion_software/Pipfile @@ -0,0 +1,12 @@ +[[source]] +url = "https://pypi.org/simple" +verify_ssl = true +name = "pypi" + +[packages] +Pillow = "*" + +[dev-packages] + +[requires] +python_version = "3.9" diff --git a/companion_software/Pipfile.lock b/companion_software/Pipfile.lock new file mode 100644 index 0000000..a89411b --- /dev/null +++ b/companion_software/Pipfile.lock @@ -0,0 +1,68 @@ +{ + "_meta": { + "hash": { + "sha256": "a2ebd6d3c633cc5dec90d7752d4757fc614d58ce4dc35d0d5796ce6b9148c5f4" + }, + "pipfile-spec": 6, + "requires": { + "python_version": "3.9" + }, + "sources": [ + { + "name": "pypi", + "url": "https://pypi.org/simple", + "verify_ssl": true + } + ] + }, + "default": { + "pillow": { + "hashes": [ + "sha256:066f3999cb3b070a95c3652712cffa1a748cd02d60ad7b4e485c3748a04d9d76", + "sha256:0a0956fdc5defc34462bb1c765ee88d933239f9a94bc37d132004775241a7585", + "sha256:0b052a619a8bfcf26bd8b3f48f45283f9e977890263e4571f2393ed8898d331b", + "sha256:1394a6ad5abc838c5cd8a92c5a07535648cdf6d09e8e2d6df916dfa9ea86ead8", + "sha256:1bc723b434fbc4ab50bb68e11e93ce5fb69866ad621e3c2c9bdb0cd70e345f55", + "sha256:244cf3b97802c34c41905d22810846802a3329ddcb93ccc432870243211c79fc", + "sha256:25a49dc2e2f74e65efaa32b153527fc5ac98508d502fa46e74fa4fd678ed6645", + "sha256:2e4440b8f00f504ee4b53fe30f4e381aae30b0568193be305256b1462216feff", + "sha256:3862b7256046fcd950618ed22d1d60b842e3a40a48236a5498746f21189afbbc", + "sha256:3eb1ce5f65908556c2d8685a8f0a6e989d887ec4057326f6c22b24e8a172c66b", + "sha256:3f97cfb1e5a392d75dd8b9fd274d205404729923840ca94ca45a0af57e13dbe6", + "sha256:493cb4e415f44cd601fcec11c99836f707bb714ab03f5ed46ac25713baf0ff20", + "sha256:4acc0985ddf39d1bc969a9220b51d94ed51695d455c228d8ac29fcdb25810e6e", + "sha256:5503c86916d27c2e101b7f71c2ae2cddba01a2cf55b8395b0255fd33fa4d1f1a", + "sha256:5b7bb9de00197fb4261825c15551adf7605cf14a80badf1761d61e59da347779", + "sha256:5e9ac5f66616b87d4da618a20ab0a38324dbe88d8a39b55be8964eb520021e02", + "sha256:620582db2a85b2df5f8a82ddeb52116560d7e5e6b055095f04ad828d1b0baa39", + "sha256:62cc1afda735a8d109007164714e73771b499768b9bb5afcbbee9d0ff374b43f", + "sha256:70ad9e5c6cb9b8487280a02c0ad8a51581dcbbe8484ce058477692a27c151c0a", + "sha256:72b9e656e340447f827885b8d7a15fc8c4e68d410dc2297ef6787eec0f0ea409", + "sha256:72cbcfd54df6caf85cc35264c77ede902452d6df41166010262374155947460c", + "sha256:792e5c12376594bfcb986ebf3855aa4b7c225754e9a9521298e460e92fb4a488", + "sha256:7b7017b61bbcdd7f6363aeceb881e23c46583739cb69a3ab39cb384f6ec82e5b", + "sha256:81f8d5c81e483a9442d72d182e1fb6dcb9723f289a57e8030811bac9ea3fef8d", + "sha256:82aafa8d5eb68c8463b6e9baeb4f19043bb31fefc03eb7b216b51e6a9981ae09", + "sha256:84c471a734240653a0ec91dec0996696eea227eafe72a33bd06c92697728046b", + "sha256:8c803ac3c28bbc53763e6825746f05cc407b20e4a69d0122e526a582e3b5e153", + "sha256:93ce9e955cc95959df98505e4608ad98281fff037350d8c2671c9aa86bcf10a9", + "sha256:9a3e5ddc44c14042f0844b8cf7d2cd455f6cc80fd7f5eefbe657292cf601d9ad", + "sha256:a4901622493f88b1a29bd30ec1a2f683782e57c3c16a2dbc7f2595ba01f639df", + "sha256:a5a4532a12314149d8b4e4ad8ff09dde7427731fcfa5917ff16d0291f13609df", + "sha256:b8831cb7332eda5dc89b21a7bce7ef6ad305548820595033a4b03cf3091235ed", + "sha256:b8e2f83c56e141920c39464b852de3719dfbfb6e3c99a2d8da0edf4fb33176ed", + "sha256:c70e94281588ef053ae8998039610dbd71bc509e4acbc77ab59d7d2937b10698", + "sha256:c8a17b5d948f4ceeceb66384727dde11b240736fddeda54ca740b9b8b1556b29", + "sha256:d82cdb63100ef5eedb8391732375e6d05993b765f72cb34311fab92103314649", + "sha256:d89363f02658e253dbd171f7c3716a5d340a24ee82d38aab9183f7fdf0cdca49", + "sha256:d99ec152570e4196772e7a8e4ba5320d2d27bf22fdf11743dd882936ed64305b", + "sha256:ddc4d832a0f0b4c52fff973a0d44b6c99839a9d016fe4e6a1cb8f3eea96479c2", + "sha256:e3dacecfbeec9a33e932f00c6cd7996e62f53ad46fbe677577394aaa90ee419a", + "sha256:eb9fc393f3c61f9054e1ed26e6fe912c7321af2f41ff49d3f83d05bacf22cc78" + ], + "index": "pypi", + "version": "==8.4.0" + } + }, + "develop": {} +} diff --git a/companion_software/requirements.txt b/companion_software/requirements.txt new file mode 100644 index 0000000..7e2fba5 --- /dev/null +++ b/companion_software/requirements.txt @@ -0,0 +1 @@ +Pillow diff --git a/companion_software/superpipe.py b/companion_software/superpipe.py new file mode 100644 index 0000000..a9da1ed --- /dev/null +++ b/companion_software/superpipe.py @@ -0,0 +1,31 @@ +import time +import subprocess + +from PIL import Image, ImageDraw, ImageFont + + +fnt = ImageFont.truetype('/usr/share/fonts/noto/NotoSans-Regular.ttf', 15) + +my_ffmpeg_process = subprocess.Popen("ffmpeg -y -i pipe: -r 30 -pix_fmt yuv420p video.webm".split(), stdin=subprocess.PIPE) + +for i in range(100): + img = Image.new('RGB', (130, 30), color=(73, 109, 137)) + + d = ImageDraw.Draw(img) + d.text((10, 10), str(i), font=fnt, fill=(255, 255, 0)) + + img.save(my_ffmpeg_process.stdin, format='png') + + print(i) + +for i in range(100): + img = Image.new('RGB', (130, 30), color=(73, 109, 137)) + + d = ImageDraw.Draw(img) + d.text((10, 10), str("Thx u ali1234"), font=fnt, fill=(255, 255, 0)) + + img.save(my_ffmpeg_process.stdin, format='png') + + print(i) + + #time.sleep(1) diff --git a/companion_software/video.webm b/companion_software/video.webm new file mode 100644 index 0000000000000000000000000000000000000000..6e826ee1d5ceae9e2ca1a5f1d18bce54f1578b3f GIT binary patch literal 12117 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 z