Bonjour
je fais actuellement une sonnette avec un bouton qui déclenche une musique aléatoire et qui envoie la vidéo.
J’ai deux problème, j’ai juste un haut-parleur sans amplificateur (donc pas assez fort) et je doit faire un site en html (si possible) où il y a le direct de la picaméra et les fichiers téléchargeables des vidéos.
voici le code (en python).
from gpiozero import Button
from picamera import PiCamera
import time
import vlc
import random
camera = PiCamera()
player = [vlc.MediaPlayer("/home/pi/Music/mdaca.mp3"), vlc.MediaPlayer("/home/pi/Music/cbjw.mp3"), vlc.MediaPlayer("/home/pi/Music/afr.mp3"), vlc.MediaPlayer("/home/pi/Music/tlos.mp3")]
b = Button(4)
p = random.choice(player)
while True :
if b.is_pressed :
p.stop()
p = random.choice(player)
print(« pressed »)
from datetime import datetime
d = datetime.now()
if d.hour >= 6 and d.hour <= 21 :
p.play()
f = d.strftime(’%H-%M-%S_%d-%m-%Y’)#%Y-%d-%m-%H-%M-%S
print("date = ", f)
camera.start_preview()
img = « /home/pi/sonnette/ » + f + « .h264 »
print("img = ", img) #img = « /home/pi/Downloads/maxresdefault.jpg »
camera.start_recording(f + ‹ .h264 ›)
camera.wait_recording(10)
camera.stop_recording()
camera.stop_preview()
time.sleep(0.1)
# Envoyer un email avec l'image enregistrés
# Depuis Gmail
# librairies necessaires
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
fromaddr = 'mail'
toaddr = 'mail'
mdp = 'mail'
msg = MIMEMultipart() # instance of MIMEMultipart
msg['From'] = fromaddr # Addresse expediteur
msg['To'] = toaddr # Addresse destinataire
Mdp_authent = mdp
# Objet du mail
msg['Subject'] = "Sonnette Castelnaudary"
# Le contenu du mail
body = "Une nouvelle personne sonne!!!"
# attach the body with the msg instance
msg.attach(MIMEText(body, 'plain'))
# open the file to be sent
filename = img
attachment = open(filename, "rb")
# instance of MIMEBase and named as p
p = MIMEBase('application', 'octet-stream')
# To change the payload into encoded form
p.set_payload((attachment).read())
# encode into base64
encoders.encode_base64(p)
p.add_header('Content-Disposition', "attachment; filename= %s" % filename)
# attach the instance 'p' to instance 'msg'
msg.attach(p)
# creates SMTP session
s = smtplib.SMTP('smtp.gmail.com', 587)
# start TLS for security
s.starttls()
# Authentication
#if msg3:
print(fromaddr)
s.login(fromaddr, Mdp_authent)
text = msg.as_string()
# sending the mail
#if msg3:
print(toaddr)
s.sendmail(fromaddr, toaddr, text)
# terminating the session
s.quit()
#if msg1:
print("------ Message envoyé à: ", toaddr)
Bon, je renvoie le code
from gpiozero import Button
from picamera import PiCamera
import time
import vlc
import random
camera = PiCamera()
player = [vlc.MediaPlayer("/home/pi/Music/mdaca.mp3"), vlc.MediaPlayer("/home/pi/Music/cbjw.mp3"), vlc.MediaPlayer("/home/pi/Music/afr.mp3"), vlc.MediaPlayer("/home/pi/Music/tlos.mp3")]
b = Button(4)
p = random.choice(player)
while True :
if b.is_pressed :
p.stop()
p = random.choice(player)
print("pressed")
from datetime import datetime
d = datetime.now()
if d.hour >= 6 and d.hour <= 21 :
p.play()
f = d.strftime('%H-%M-%S_%d-%m-%Y')#%Y-%d-%m-%H-%M-%S
print("date = ", f)
camera.start_preview()
img = "/home/pi/sonnette/" + f + ".h264"
print("img = ", img)
#img = "/home/pi/Downloads/maxresdefault.jpg"
camera.start_recording(f + '.h264')
camera.wait_recording(10)
camera.stop_recording()
camera.stop_preview()
time.sleep(0.1)
# Envoyer un email avec l'image enregistrés
# Depuis Gmail
# librairies necessaires
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.base import MIMEBase
from email import encoders
fromaddr = 'mail'
toaddr = 'mail'
mdp = 'mail'
msg = MIMEMultipart() # instance of MIMEMultipart
msg['From'] = fromaddr # Addresse expediteur
msg['To'] = toaddr # Addresse destinataire
Mdp_authent = mdp
# Objet du mail
msg['Subject'] = "Sonnette Castelnaudary"
# Le contenu du mail
body = "Une nouvelle personne sonne!!!"
# attach the body with the msg instance
msg.attach(MIMEText(body, 'plain'))
# open the file to be sent
filename = img
attachment = open(filename, "rb")
# instance of MIMEBase and named as p
p = MIMEBase('application', 'octet-stream')
# To change the payload into encoded form
p.set_payload((attachment).read())
# encode into base64
encoders.encode_base64(p)
p.add_header('Content-Disposition', "attachment; filename= %s" % filename)
# attach the instance 'p' to instance 'msg'
msg.attach(p)
# creates SMTP session
s = smtplib.SMTP('smtp.gmail.com', 587)
# start TLS for security
s.starttls()
# Authentication
#if msg3:
print(fromaddr)
s.login(fromaddr, Mdp_authent)
text = msg.as_string()
# sending the mail
#if msg3:
print(toaddr)
s.sendmail(fromaddr, toaddr, text)
# terminating the session
s.quit()
#if msg1:
print("------ Message envoyé à: ", toaddr)
Juste une remarque en préambule : Il est interdit de détenir des images d’autrui sans son consentement.
Tu dois mettre la caméra dans la zone privée et ne pas filmer le domaine public !
Tu dois afficher que tu vas filmer si les gens sonnent + que la vidéo sera conservée durant X jours (donc, ne pas utiliser les serveurs de Gmail).
Bref, attention avec la législation !
Pour le flux vidéo, voir « streaming webcam linux ».
Sinon, tu peux aussi faire une photo toutes les 5 secondes et l’envoyer vers le site qui effectue un rafraichissement toutes les 5 secondes.
Le site affichera donc une nouvelle image.
Salut @Nabla et merci pour cette réponse très rapide (c’est plutôt moi qui ai été lent)
Pour le code html j’ai fait un code python que prend une image toutes les 2 sec :
from picamera import PiCamera
import time
c = PiCamera()
while True :
time.sleep(2)
print('prise')
c.capture('/home/pi/sonnette/site.jpg')
Et le code html met cette image sur le site (
j’aimerais plutôt essayer pour l’instant de me concentrer sur le code et la confidentialité pour quand ce sera opérationnel (si la page reste en local, il n’y a pas de problème?)) voici le code :
(je l’ai mis en image car il m’affiche la page au lieu du code.)
Quand je double clique sur le fichier que j’ai sauvegardé avec VSCode en html Chromium m’affiche le code mais pas le site, quelqu’un peut m’aider s’il vous plaît.
Merci d’avance et bon confinement
Salut,
J’ai maintenant le live de ma picam sur un site :
@Nabla m’a tout expliqué et ma envoyé son super article que je vais un peu modifier.
Mais il me reste encore un problème ◑﹏◐◑﹏◐ :
On ne peut pas avoir la picam sur un site et sur un programme python.
J’ai pensé à ça mais c’est un peu aléatoire :
oui je sais ce code n’est pas beau
[edit]
J’avais pensé à pire (utiliser pyautogui pour faire en sorte que la souris stoppe rpi cam web depuis le site web )
[/edit]
Quelqu’un connaîtrait une meilleure solution ou comment faire pour directement relier les gpio à la page php (ça serait vraiment le top ).
Bonjour,
Il ne me reste plus qu’une étape et j’ai tout fini : trouver les fichiers &start_vid.sh et end_vid.sh de RPi_Cam_Web_Interface (il me permettront de faire une vidéo quand le bouton est pressé).
Je les ai cherché partout (logiquement j’ai crû comprendre qu’ils étaient dans le fichier macros mais non) mais je ne les ai pas trouvés.
Merci énormément à celui qui m’aidera car c’est la dernière étape de mon projet.
P.S. : @Charles je sais que tu t’y connait beaucoup sur ce sujet
Desolé je suis tres peu disponible en ce moment !
Là pour le coup je ne peux pas trop t’aider ! Mais il me semble que tu peux trouver la structure sur le github de RPi_Cam_Web_Interface.
Je ne peux pas verifier là mais j’aurais dits qu’ils sont soit dans le dossier qui se trouve sur ton serveur soit dans le dossier ou il y’a le install.sh ( a la racine par defaut )
Et le terminal me dit qu’il ne trouve pas le fichier (
find: ‘/home/pi/thinclient_drives’: Permission non accordée
find: ‘/run/user/1000/gvfs’: Permission non accordée
)
(Ca veut dire qu’il ne trouve pas le fichier mais qu’il ne peut pas acceder aux deux fichiers cités)
Donc je ne vois pas comment faire.
Sinon je pourrais l’installer en ligne mais je ne le trouve pas.
Quelqu’un pourrait éclairer ma lanterne s’il-vous-plaît