Hallo,
ich lese von der Kamera des Raspberry die Kamerabilder als JPG ein.
Mit einer Funktion von PushOver möchte ich dieses Bild mitsenden, aber die Library erwartet ein File Object.
Kann ich es dennoch mit übergeben oder muss ich es erst speichern?
Danke!
Image als Variable soll als File Objekt übergeben werden
Moin,
`io.BytesIO` ist ein dateiartiges Objekt, dessen Daten im Speicher leben. Wenn die Bibliothek richtig programmiert ist und nicht irgendwas komisches macht, sollte es damit funktionieren.
`io.BytesIO` ist ein dateiartiges Objekt, dessen Daten im Speicher leben. Wenn die Bibliothek richtig programmiert ist und nicht irgendwas komisches macht, sollte es damit funktionieren.
klappt leider noch nicht ... in der Push Nachricht wird ein kaputte Image Icon angezeigt.
Ich lese von der Kamera:
und hab fast alles probiert.
Coop.cam_image und Coop.data_image ... mit io.BytesIO und auch als base64
Wenn ich io.BytesIO nutze, erhalte ich die Push ohne image ... wenn ich das weg lasse, habe ich das "kaputte" Image Icon
Ich lese von der Kamera:
Code: Alles auswählen
if not (self.cam is None or not self.cam.isOpened()):
_, Coop.cam_image = self.cam.read()
_, Coop.data_image = cv2.imencode('.jpg', Coop.cam_image)
Coop.cam_image und Coop.data_image ... mit io.BytesIO und auch als base64
Code: Alles auswählen
def pushOver(message):
try:
po = Pushover(Coop.PUSHOVER_TOKEN)
po.user(Coop.PUSHOVER_USER)
msg = po.msg(message)
msg.set("title", "Test")
try:
# image = base64.b64encode(Coop.data_image.tostring()).decode('utf-8')
msg.set("attachment", io.BytesIO(Coop.cam_image))
except Exception as e:
logger.error(e)
po.send(msg)
except Exception as e:
logger.error(e)
Beschrieben bei PushOver ist es so:
Attachments can be sent with the attachment parameter which takes as argument as file object:
with open('/path/to/my/image.png', 'rb') as image:
client.send_message('Message with image', attachment=image)
Attachments can be sent with the attachment parameter which takes as argument as file object:
with open('/path/to/my/image.png', 'rb') as image:
client.send_message('Message with image', attachment=image)
In dem Beispiel hast du doch jetzt nicht das JPG-encodete Bild sondern die Rohdaten in ein `BytesIO` eingepackt? Funktioniert es mit `Coop.data_image`?
Wo kommt `Coop` her? So wie du es jetzt benutzt, ist es eine globale Variable. `pushOver` sollte die Bilddaten als Argument erhalten, und das Einlesen sollte sie als Rückgabewert zurückgeben.
`pushOver` entspricht nicht den in Python üblichen Namenskonventionen (`snake_case` für Funktionen). Siehe auch PEP 8.
Wo kommt `Coop` her? So wie du es jetzt benutzt, ist es eine globale Variable. `pushOver` sollte die Bilddaten als Argument erhalten, und das Einlesen sollte sie als Rückgabewert zurückgeben.
`pushOver` entspricht nicht den in Python üblichen Namenskonventionen (`snake_case` für Funktionen). Siehe auch PEP 8.
Ja, habs mit beiden probiert!
Coop ist die Hauptklasse. Ich hab das mal so aus dem Netz zusammen gestellt.
Ohne Bilder klappt es.
Hab nun dies gefunden:
Eventuell besser geeignet .. aber klappt das dann mit io.BytesIO als File?
oder dies noch besser?:
https://github.com/Thibauth/python-pushover
Coop ist die Hauptklasse. Ich hab das mal so aus dem Netz zusammen gestellt.
Ohne Bilder klappt es.
Hab nun dies gefunden:
Code: Alles auswählen
import requests
r = requests.post("https://api.pushover.net/1/messages.json", data = {
"token": "APP_TOKEN",
"user": "USER_KEY",
"message": "hello world"
},
files = {
"attachment": ("image.jpg", open("your_image.jpg", "rb"), "image/jpeg")
})
print(r.text)
oder dies noch besser?:
https://github.com/Thibauth/python-pushover
Hauptklasse?
In der als Klassenattribut ein Bild von einer Kamera liegt? Das klingt falsch.
Schreib den Code ohne BytesIO. Speicher das Bild auf die Platte, öffne die Datei und häng es wie in der Dokumentation beschtieben an.
Wenn das funktioniert, dann kann man das einfach auf BytesIO umstellen.
Dieses Konstrukt mit der uninitialisierten "Hauptklasse" lässt mich vermuten, dass da eine Klasse als Finktionscontainer missbraucht wird (riecht nach Java) und da gar kein Bild ist.
In der als Klassenattribut ein Bild von einer Kamera liegt? Das klingt falsch.
Schreib den Code ohne BytesIO. Speicher das Bild auf die Platte, öffne die Datei und häng es wie in der Dokumentation beschtieben an.
Wenn das funktioniert, dann kann man das einfach auf BytesIO umstellen.
Dieses Konstrukt mit der uninitialisierten "Hauptklasse" lässt mich vermuten, dass da eine Klasse als Finktionscontainer missbraucht wird (riecht nach Java) und da gar kein Bild ist.