• Empleos
  • Sobre nosotros
  • Empleos
    • Inicio
    • Empleos
    • Cursos y retos
  • Empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

975
Vistas
¿Cómo acceder a la cámara web en OpenCV en PythonAnywhere a través de Javascript?

Desarrollé una aplicación web en Django que tiene un método de visualización que contiene el código OpevCV que, cuando se activa, abre la cámara web del usuario para detectar su rostro. Esta aplicación funciona bien en mi servidor local, pero cuando la he alojado en PythonAnywhere, dice que no se encontró la cámara, ya que mi alojamiento PA no sirve para una cámara.
Entonces, alguien me sugirió que abriera la cámara web a través de javascript, ya que se ocupa de la máquina cliente y luego pasar su alimentación a la máquina servidor, que es mi alojamiento.
Pero como soy un novato en Python, no puedo entender cómo realizar la tarea anterior. Encontré este fragmento de código js, pero no sé cómo ni dónde agregarlo en mi aplicación Django.

Código para obtener el feed con Javascript

 var video = document.querySelector("#videoElement"); if (navigator.mediaDevices.getUserMedia) { navigator.mediaDevices.getUserMedia({video: true}).then(function(stream) { video.srcObject = stream; }).catch(function(err0r) { console.log("Something went wrong!"); }); }

El código de My Python para abrir la cámara y detectar rostros es el siguiente (funciona en el servidor local)

 import cv2 cascade = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml') cam = cv2.VideoCapture(0) while True: ret, frame = cam.read() frame = cv2.flip(frame, 1) if ret: gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) faces = cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=3) for (x, y, w, h) in faces: cropped = cv2.resize(frame[y:y+h, x:x+w], (198,198)) cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2) if cv2.waitKey(1) & 0xFF == ord('q'): break cv2.destroyAllWindows() cv2.imshow('Stream', frame)

Cualquier ayuda es apreciada. Gracias de antemano

almost 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Debe obtener la transmisión de video en vivo usando javascript, luego alimentar esa transmisión a opencv2 para que funcione.

Uso: obtener transmisión de video en vivo en nodejs

Obtendrá una URL como "http://localhost:3000" que puede usar en el código python de la siguiente manera:

 import cv2 cascade = cv2.CascadeClassifier('./haarcascade_frontalface_default.xml') cam = cv2.VideoCapture('http://localhost:3000') while True: ret, frame = cam.read() frame = cv2.flip(frame, 1) if ret: gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) faces = cascade.detectMultiScale(gray, scaleFactor=1.3, minNeighbors=3) for (x, y, w, h) in faces: cropped = cv2.resize(frame[y:y+h, x:x+w], (198,198)) cv2.rectangle(frame, (x, y), (x+w, y+h), (255, 0, 0), 2) if cv2.waitKey(1) & 0xFF == ord('q'): break cv2.destroyAllWindows() cv2.imshow('Stream', frame)
almost 4 years ago · Santiago Trujillo Denunciar

0

Solía hacer algo similar, el esquema que usé fue el siguiente:

Flujo de datos

Como ya sabe, necesitamos javascript para obtener la imagen del usuario de la cámara web. Encontré un artículo que nos muestra cómo hacerlo, puede usar solo el lado frontal (el archivo HTML) si desea usar Django. Ese código es para obtener imágenes y codificarlas en base64 (cadena) y enviarlas a través de websocket.

Después de eso, queremos que Django sirva websocket. En el pasado, lo hice con Flask, no con Django, pero puede ver cómo puede crear un servidor websocket usando django-channel .

Para el último paso, necesita una función con su código OpenCV. Necesitas decodificar base64 y convertirlo a opencv

 def modify_picture(img_data): # decode image img = from_b64(img_data) # your OpenCV filter gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # encode image to base64 return to_b64(gray)

Y, por supuesto, no necesita while True y cv2.imshow , pero devuelva la versión base64 de su nueva imagen. Espero eso ayude.


Actualización: escribo un código de muestra en mi github . No en Django, pero sí en Python. Espero que te dé más información.

almost 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda