Pues mira, tengo la página de html5 hecha (que gracias al mundo que lo encontré por internet, porque mi conocimiento de html5 ronda lo básico de cuando lo estudié), siendo este el código que tengo (que al menos funciona, me doy con un canto en los dientes):
Código:
<!DOCTYPE html>
<html>
<head>
<title>WebCam</title>
</head>
<body>
<video autoplay controls></video>
<script type="text/javascript" charset="utf-8" defer>
navigator.URL = window.URL || window.webkitURL;
navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || navigator.mozGetUserMedia;
navigator.getUserMedia(
{audio:true, video:true},
function(vid){
document.querySelector('video').src=window.URL.createObjectURL(vid);
},
function(err) {
console.log("Ocurrió el siguiente error: " + err);
}
);
</script>
</body>
</html>
Lo que hace es visualizar en una página web lo que captura la imagen y el micrófono (habiendo aceptado los permisos, claro. Hecho con Notepad++).
Ahora bien, los códigos que yo tengo de la cámara y el micrófono, directamente, no me sirven. O mejor dicho, no sé como hacer para que funcionen, muestro aquí los ejemplos de lo que tengo:
CÁMARA:
Código:
# Importar urllib para pdoer leer las URL
import urllib
# cv2 para poder importar opencv y numpy para la manipulación de la matriz
import cv2
import numpy as np
# Pegamos la url de la captura de imágenes de la webcam y construimos el bucle
url='http://192.168.132.104:8081/shot.jpg'
while True:
imgResp=urllib.urlopen(url)
imgNp=np.array(bytearray(imgResp.read()),dtype=np.uint8)
img=cv2.imdecode(imgNp,-1)
cv2.imshow('test',img)
if ord('q')==cv2.waitKey(10):
exit(0)
# Dentro del ciclo while se abre la URL usando "urllib.urlopen (ulr)"
# y dará una respuesta con la variable "imgResp"
# En la línea 11 se leen los valores de la respuesta url y se convierte
# en una matriz de bytes y finalmente pasa a una matriz numpy, la cual
# se almacenará en la variable numpy "imgNp"
MICRÓFONO:
Código:
import pyaudio
import struct
import math
import wave
import numpy as np
import matplotlib.pyplot as plt
# Se importan todas las librerías necesarias: pyaudio, struct, math, wave, numpy y os
from scipy.io import wavfile
import os
# Definimos la clase Microphone y configuramos dicha clase
class Microphone:
def rms(self,frame):
count = len(frame)/2
format = "%dh"%(count)
shorts = struct.unpack( format, frame )
sum_squares = 0.0
for sample in shorts:
n = sample * (1.0/32768.0)
sum_squares += n*n
rms = math.pow(sum_squares/count,0.5);
return rms * 1000
def passiveListen(self,persona):
CHUNK = 1024; RATE = 8000; THRESHOLD = 200; LISTEN_TIME = 5
didDetect = False
# Preparamos la transmisión de grabación
p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paInt16, channels=1, rate=RATE, input=True, frames_per_buffer=CHUNK)
# Y almacenamos los datod de audio:
all =[]
# Comenzamos el bucle para ahcer la escucha pasiva para posibles disturbios
print RATE / CHUNK * LISTEN_TIME
for i in range(0, RATE / CHUNK * LISTEN_TIME):
input = stream.read(CHUNK)
rms_value = self.rms(input)
print rms_value
if (rms_value => THRESHOLD):
didDetect = True
print "Listening...\n"
break
if not didDetect:
stream.stop_stream()
stream.close()
return False
# Se anexan todos los trozos
all.append(input)
for i in range(0, 7):
data = stream.read(CHUNK)
all.append(data)
# Y se guardan los trozos de audio parando el servicio, cerrándolo y volviendo al bucle
data = ''.join(all)
stream.stop_stream()
stream.close()
wf = wave.open('audio.wav', 'wb')
wf.setnchannels(1)
wf.setsampwidth(p.get_sample_size(pyaudio.paInt16))
wf.setframerate(RATE)
wf.writeframes(data)
wf.close()
return True
if __name__ == '__main__':
mic = Microphone()
while True:
if mic.passiveListen('ok Google'):
fs, data = wavfile.read('audio.wav')
L = len(data)
c = np.fft.fft(data) # Crea una lista con números complejos
freq = np.fft.fftfreq(L)
print freq
freq_in_hertz = abs(freq * fs)
plt.plot(freq_in_hertz, abs(c))
plt.show()
Y el detector de movimiento, el cual NO voy a hacer la implementación física en mi proyecto porque, sinceramente, paso de gastar más dinero para un aprobado, sería este:
Código:
import RPi.GPIO as GPIO
import time
from time import gmtime, strftime
# Se importan las librerías Rpi.GPIO, time, gmtime y strtime
GPIO.setmode(GPIO.BCM)
PIR_PIN = 7
GPIO.setup(PIR_PIN, GPIO.IN)
# Se han configurado los pines GPIO como BCM, usando el pin 7 de entrada
try:
# Se inicia el bucle infinito que, si hay señal en el pin 7, lo pausa 1 segundo
# se crea una cadena de texto con la hora, se saca por pantalla el mensaje, se
# vuelve a pausar 1 segundo y se vuelve a empezar:
while True:
if GPIO.input(PIR_PIN):
time.sleep(1)
timex = strftime("%d-%m-%Y %H:%M:%S", gmtime())
print timex + " MOVIMIENTO DETECTADO"
time.sleep(1)
# Se hace una salida del script pulsando CONTROL+C
except KeyboardInterrupt:
print "quit"
GPIO.cleanup()
El problema viene en que, cuando intento descargar las librerías para el Open CV, la Raspberry me peta. Simple y llanamente, una vez la reinicio no vuelve a cargar Raspbian. Y la verdad, estoy desesperado, sinceramente, no tengo tiempo para ponerme a estudiar Python, egoístamente pido una solución ante mi ignorancia.
Si alguien me puede aconsejar...Lo agradecería de verdad.