Sonnette caméra

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)

Yo,

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 :+1: :+1: :+1:et bon confinement :mask: :mask: :mask:

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 :grimacing: :grimacing:◑﹏◐◑﹏◐ :
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 :sweat_smile:
[edit]
J’avais pensé à pire (utiliser pyautogui pour faire en sorte que la souris stoppe rpi cam web depuis le site web :shushing_face:)
[/edit]
Quelqu’un connaîtrait une meilleure solution ou comment faire pour directement relier les gpio à la page php (ça serait vraiment le top :ok_hand:).

Merci encore

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é).
image
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 :pray:

Salut !

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 )

Ok merci, :+1:
désolé du dérangement je regarderai ça

Rebonjour @Charles,
J’ai exécuté la commande :

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

A+