¡Hola, hola Omesitos 😊!. Les dejo el link de la programación realizada en este video: omes-va.com/cambiar-fondo-escena-python-mediapipe-opencv/ :) ¡Lindo día!
hola segui todos tus pasos y no puedo visualizar el video con figura blanca que sale depsues de l carga de los codigos minuto 3:02 me sale 10 errores de incosistencia de tab y espacios como por ej frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) linea 17 al ejectuar no hace nada. instale visual code sin ninguna extension que puede ser? gracias
en tu pagina baje el codigo, y al ejecutarlo me sale 3 errores de los encabezados; de importar cv2, mediapipe y numpy...será que debo agregar extensiones? perdon soy nuevo
Hola Guido debes instalar los paquetes con pip install. En cuanto a los espacios y tabs, suele dar un poquito de dolor de cabeza por la estrucutra que maneja Python, aunque con Visual Studio Code y otros editores e Ides pueden ayudarte a estructurar el programa.
Hola buenos días Homes! Lo primero felicitarte y darte las gracias por el gran trabajo que haces con estos videos, estoy aprendiendo un montón con ellos. Me gustaría hacerte una consulta, estoy teniendo problemas al intentar implementar una imagen de fondo(El video ni lo probé, de momento solo hice funcionar los colores, implemente una ligera modificación a tu código), no se si es debido a que la imagen que aplique tiene que tener una resolución en concreto o algo, me sería de mucha ayuda si me pudieras echar un cable, muchas gracias!
Hola, si usáramos una pantalla verde de fondo podría mejorar más el que haga un mejor y detallada máscara en la persona o que mejoraría todo el detalle? La calidad de la web cam podría influir? Gracias
Hola @FernandoRamirez-to2kk, entre más se diferencie el fondo de la persona, se deberían obtener mejores resultados. Si no me equivoco esto lo usa google en las videollamadas para cambiar el fondo. En cuanto a tu pregunta de la cámara, he experimentado que con una de menor calidad se obtienen peores resultados, entonces sí, la calidad de la cámara influye.
soy nuevo, me marca error en File "imagewhite.py", line 9, in with mp_selfie_segmentation.SelfieSegmentation( File "/Users/artleen/Desktop/oktol/lib/python3.8/site-packages/mediapipe/python/solutions/selfie_segmentation.py", line 54, in __init__ super().__init__( espero me puedas ayudar
Gran video. A mí me daba problema: bg = cv2.bitwise_and(bg_image, bg_image, mask=th_inv)# Aplicar el operador bitwise and ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ cv2.error: OpenCV(4.9.0) D:\a\opencv-python\opencv-python\opencv\modules\core\src\arithm.cpp:230: error: (-215:Assertion failed) (mtype == CV_8U || mtype == CV_8S) && _mask.sameSize(*psrc1) in function 'cv::binary_op' Lo solucioné redimensionando la imagen o el video que se importa para el fondo. Por si a alguien le viene bien, lo hice de la siguiente manera: h,w,_ = frame.shape #| Tomar las medidas h y w del frame, para redimensionar size=(w,h) #| el video de fondo. Tanto el video de fondo, como el bg_image=cv2.resize(bg_image,size) #| el frame han de ser del mismo tamaño
Me encantan los proyectos que muestras. Felicitaciones, están muy bien hechos. ¿Sabes si hay alguna forma de guardar en video directamente lo que devuelve selfie_segmentation.process(frame_rgb)? Lo he intentado, pero parece que no es una simple imagen en escala de grises que se pueda juntar con otras y guardar el video con cv2.imwrite()
Hola @Sercova, lo que pasa es que la imagen resultante no es uint8, por ello en el video se realiza esa conversión. Pruébalo cambiando a uin8 como en el video y cuéntame si te funciona. :)
Me encanta tu trabajo, siempre esta bien explicado y fundamentado. Por el momento me sale un error de tipo "cv2.error: OpenCV(4.5.3) C:\Users unneradmin\AppData\Local\Temp\pip-req-build-1i5nllza\opencv\modules\core\src\arithm.cpp:230: error: (-215:Assertion failed) (mtype == CV_8U\opencv\modules\core\src\arithm.cpp:230: error: (-215:Assertion failed) (mtype == CV_8U || mtyp || mtype == CV_8S) && _mask.sameSize(*psrc1) in function 'cv::binary_op'" cuando intento insertar la imagen de fondo o el video me reitera el mismo error. Agradecería tu ayuda y muchas felicidades por tu trabajo
Hola Luis muchas gracias. Puedes darle un vistazo a ver si está correcto el nombre y path de la imagen de entrada, puede que no se esté encontrando la imagen. O verifica si dentro del path alguna carpeta tiene nombre con símbolos especiales, si es así retiralos.
@OMES Como estas es un gusto conocerte no se si me creerás pero soy un niño de 12 años y sigo tus tutoriales y son geniales a mi tampoco me funciona el método de la imagen gracias por tu respuesta lo voy a intentar. Te comento que mas tarde voy a comenzar una serie de python en un canal que tengo es este es link ua-cam.com/channels/Cvkrvl0b4PyQEVnIIetybw.html si te interesa un seguidor me pidió que hiciera una serie de videojuegos con python entonces eso hago ahí también podrás comprobar que sale mi cara y todo jajja por si no me crees.
Buenas tardes, yo tambien tuve el mismo problema ( error "cv2.error: OpenCV(4.5.3) C:\Users unneradmin\AppData\Local\Temp\pip-req-build-1i5nllza\opencv\modules\core\src\arithm.cpp:230: error: (-215:Assertion failed) (mtype == CV_8U\opencv\modules\core\src\arithm.cpp:230: error: (-215:Assertion failed) (mtype == CV_8U || mtyp || mtype == CV_8S) && _mask.sameSize(*psrc1) in function 'cv::binary_op'"). Básicamente este error puede deberse a lo que dice Gaby, porque no este bien definida la ruta de los archivos, sin embargo, en mi caso fue porque la imagen de fondo no era del mismo tamaño que la imagen origen que estaba leyendo, por lo que la solución que encontré fue que para la imagen leída que deseaba de fondo redimensionarla al tamaño de la mascara, aquí pongo las lineas que agregue al código de Gaby para la solución. while True: ret, frame=cap.read() if ret==False: break frame_rgb=cv2.cvtColor(frame,cv2.COLOR_BGR2RGB) results=selfie_segmentation.process(frame_rgb) _, th=cv2.threshold(results.segmentation_mask,0.75,255,cv2.THRESH_BINARY) th=th.astype(np.uint8) th=cv2.medianBlur(th,13) th_inv=cv2.bitwise_not(th) ancho=th_inv.shape[1] alto=th_inv.shape[0] bg_image1=cv2.imread("fondo.jpg") #Imagen para el fondo #Redimensionar imagen al tamaño de la mascara bg_image = cv2.resize(bg_image1, (ancho, alto), interpolation=cv2.INTER_AREA) #Hacemos un pequeño blur de la imagen del fondo bg_image = cv2.blur(bg_image,(30,30)) #Construir el fondo bg=cv2.bitwise_and(bg_image,bg_image,mask=th_inv) fg=cv2.bitwise_and(frame,frame,mask=th) #Sumar el back con el foregraund resultado=cv2.add(bg,fg)
hola, una pregunta, sabes que cuando realizas ese cambio de fondo, entre la imagen y el fondo existe una pequeña cantidad de pixeles que no son del color del fondo ni de la imagen, son pixeles que tienen cierto tipo de difuminacion de color para atenuar el cambio de color, no se si me explico. queria saber si se podria lograr hacerlo y que estos pixeles no existan en la foto? Muchas gracias por tu contenido, me ha ayudado mucho, primera vez en python y ha sido muy util, felicidades, espero que crezca mucho tu canal te lo mereces!!
Hola Jorge, muchas gracias me alegro mucho que te guste el contenido! :) Tal vez te pueda servir jugar con la imagen binaria resultante con algunas operaciones de transformación morfológica. Puede que ello te ayude a mejorar los resultados.
¡Hola, hola Omesitos 😊!. Les dejo el link de la programación realizada en este video: omes-va.com/cambiar-fondo-escena-python-mediapipe-opencv/ :) ¡Lindo día!
🙌 Excelente explicacion, gracias
Algun dia se valorara todo lo que enseñas lo mereces
Muchas gracias Fernando! :')
hola segui todos tus pasos y no puedo visualizar el video con figura blanca que sale depsues de l carga de los codigos minuto 3:02
me sale 10 errores de incosistencia de tab y espacios como por ej frame_rgb = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) linea 17
al ejectuar no hace nada. instale visual code sin ninguna extension que puede ser? gracias
en tu pagina baje el codigo, y al ejecutarlo me sale 3 errores de los encabezados; de importar cv2, mediapipe y numpy...será que debo agregar extensiones? perdon soy nuevo
Hola Guido debes instalar los paquetes con pip install. En cuanto a los espacios y tabs, suele dar un poquito de dolor de cabeza por la estrucutra que maneja Python, aunque con Visual Studio Code y otros editores e Ides pueden ayudarte a estructurar el programa.
Saludos desde México Oaxaca. Siempre al tanto con tus videos. Gracias sigue así se te apoya y aprecia. Eres increíble y tú explicación clara y genial
Muchas gracias TROYAN por siempre estar al pendiente, un abrazo enorme! :)
Amo éste canal,me ha inspirado a seguir con computer vision
Este canal es una joya, la acabo de descubrir hoy. Excelente video
Muchas gracias @Jhan Carlos! :D
Muchas , Muchas gracias :3 , no sabes cuanto me ayudaste con este video Gabi :3
Justo esta aplicación pensé cuando sacaste el anterior video, ¡Muchas gracias!
Hola Arturo, le diste en el clavo entonces! :D
Gracias a ti comprendo estos temas, excelente contenido
Hola buenos días Homes! Lo primero felicitarte y darte las gracias por el gran trabajo que haces con estos videos, estoy aprendiendo un montón con ellos.
Me gustaría hacerte una consulta, estoy teniendo problemas al intentar implementar una imagen de fondo(El video ni lo probé, de momento solo hice funcionar los colores, implemente una ligera modificación a tu código), no se si es debido a que la imagen que aplique tiene que tener una resolución en concreto o algo, me sería de mucha ayuda si me pudieras echar un cable, muchas gracias!
🙂👍✨✨✨Muy bueno
Hola, si usáramos una pantalla verde de fondo podría mejorar más el que haga un mejor y detallada máscara en la persona o que mejoraría todo el detalle? La calidad de la web cam podría influir? Gracias
Hola @FernandoRamirez-to2kk, entre más se diferencie el fondo de la persona, se deberían obtener mejores resultados. Si no me equivoco esto lo usa google en las videollamadas para cambiar el fondo. En cuanto a tu pregunta de la cámara, he experimentado que con una de menor calidad se obtienen peores resultados, entonces sí, la calidad de la cámara influye.
soy nuevo, me marca error en File "imagewhite.py", line 9, in
with mp_selfie_segmentation.SelfieSegmentation(
File "/Users/artleen/Desktop/oktol/lib/python3.8/site-packages/mediapipe/python/solutions/selfie_segmentation.py", line 54, in __init__
super().__init__( espero me puedas ayudar
está genial buen trabajo! y cuando integraras Arduino con Python, OpenCV y MediaPipe?
Toño muchas gracias, sii pronto subiré un video usando arduino también. :)
Hola, gracias por tus videos muy buenos. ¿como difuminar el fondo en lugar de eliminarlo o sustituirlo por un color o imagen?
Hola Arturo, de eso se trata este video tutorial. :)
y por que cuando ejecuto la primera parte del codigo la camara parece congelada?
y como se guarda el video ya con el fondo cambiado? bueno en el sentido de convertirlo a mp4
Hola Lettyne Draws, puedes usar cv2.VideoWriter, como en este tutotial: ua-cam.com/video/Iga2hPq1HA8/v-deo.html
@@OMES-va gracias
excellente vidéo, félicitations Gaby, continue à développer pour le monde car Python est déjà universel merci beaucoup
Muchas gracias Sr. José! :D
Gran video.
A mí me daba problema:
bg = cv2.bitwise_and(bg_image, bg_image, mask=th_inv)# Aplicar el operador bitwise and
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
cv2.error: OpenCV(4.9.0) D:\a\opencv-python\opencv-python\opencv\modules\core\src\arithm.cpp:230: error: (-215:Assertion failed) (mtype == CV_8U || mtype == CV_8S) && _mask.sameSize(*psrc1) in function 'cv::binary_op'
Lo solucioné redimensionando la imagen o el video que se importa para el fondo. Por si a alguien le viene bien, lo hice de la siguiente manera:
h,w,_ = frame.shape #| Tomar las medidas h y w del frame, para redimensionar
size=(w,h) #| el video de fondo. Tanto el video de fondo, como el
bg_image=cv2.resize(bg_image,size) #| el frame han de ser del mismo tamaño
bg = cv2.bitwise_and(bg_image, bg_image, mask=th_inv)
Me encantan los proyectos que muestras. Felicitaciones, están muy bien hechos.
¿Sabes si hay alguna forma de guardar en video directamente lo que devuelve selfie_segmentation.process(frame_rgb)?
Lo he intentado, pero parece que no es una simple imagen en escala de grises que se pueda juntar con otras y guardar el video con cv2.imwrite()
Hola @Sercova, lo que pasa es que la imagen resultante no es uint8, por ello en el video se realiza esa conversión. Pruébalo cambiando a uin8 como en el video y cuéntame si te funciona. :)
Me encanta tu trabajo, siempre esta bien explicado y fundamentado. Por el momento me sale un error de tipo "cv2.error: OpenCV(4.5.3) C:\Users
unneradmin\AppData\Local\Temp\pip-req-build-1i5nllza\opencv\modules\core\src\arithm.cpp:230: error: (-215:Assertion failed) (mtype == CV_8U\opencv\modules\core\src\arithm.cpp:230: error: (-215:Assertion failed) (mtype == CV_8U || mtyp || mtype == CV_8S) && _mask.sameSize(*psrc1) in function 'cv::binary_op'" cuando intento insertar la imagen de fondo o el video me reitera el mismo error.
Agradecería tu ayuda y muchas felicidades por tu trabajo
A mi también me sale lo mismo alguien nos puede ayudar
Hola Luis muchas gracias. Puedes darle un vistazo a ver si está correcto el nombre y path de la imagen de entrada, puede que no se esté encontrando la imagen. O verifica si dentro del path alguna carpeta tiene nombre con símbolos especiales, si es así retiralos.
@OMES Como estas es un gusto conocerte no se si me creerás pero soy un niño de 12 años y sigo tus tutoriales y son geniales a mi tampoco me funciona el método de la imagen gracias por tu respuesta lo voy a intentar.
Te comento que mas tarde voy a comenzar una serie de python en un canal que tengo es este es link ua-cam.com/channels/Cvkrvl0b4PyQEVnIIetybw.html si te interesa un seguidor me pidió que hiciera una serie de videojuegos con python entonces eso hago ahí también podrás comprobar que sale mi cara y todo jajja por si no me crees.
Pudieron resolverlo?
Buenas tardes, yo tambien tuve el mismo problema ( error "cv2.error: OpenCV(4.5.3) C:\Users
unneradmin\AppData\Local\Temp\pip-req-build-1i5nllza\opencv\modules\core\src\arithm.cpp:230: error: (-215:Assertion failed) (mtype == CV_8U\opencv\modules\core\src\arithm.cpp:230: error: (-215:Assertion failed) (mtype == CV_8U || mtyp || mtype == CV_8S) && _mask.sameSize(*psrc1) in function 'cv::binary_op'"). Básicamente este error puede deberse a lo que dice Gaby, porque no este bien definida la ruta de los archivos, sin embargo, en mi caso fue porque la imagen de fondo no era del mismo tamaño que la imagen origen que estaba leyendo, por lo que la solución que encontré fue que para la imagen leída que deseaba de fondo redimensionarla al tamaño de la mascara, aquí pongo las lineas que agregue al código de Gaby para la solución.
while True:
ret, frame=cap.read()
if ret==False:
break
frame_rgb=cv2.cvtColor(frame,cv2.COLOR_BGR2RGB)
results=selfie_segmentation.process(frame_rgb)
_, th=cv2.threshold(results.segmentation_mask,0.75,255,cv2.THRESH_BINARY)
th=th.astype(np.uint8)
th=cv2.medianBlur(th,13)
th_inv=cv2.bitwise_not(th)
ancho=th_inv.shape[1]
alto=th_inv.shape[0]
bg_image1=cv2.imread("fondo.jpg") #Imagen para el fondo
#Redimensionar imagen al tamaño de la mascara
bg_image = cv2.resize(bg_image1, (ancho, alto), interpolation=cv2.INTER_AREA)
#Hacemos un pequeño blur de la imagen del fondo
bg_image = cv2.blur(bg_image,(30,30))
#Construir el fondo
bg=cv2.bitwise_and(bg_image,bg_image,mask=th_inv)
fg=cv2.bitwise_and(frame,frame,mask=th)
#Sumar el back con el foregraund
resultado=cv2.add(bg,fg)
hola, una pregunta, sabes que cuando realizas ese cambio de fondo, entre la imagen y el fondo existe una pequeña cantidad de pixeles que no son del color del fondo ni de la imagen, son pixeles que tienen cierto tipo de difuminacion de color para atenuar el cambio de color, no se si me explico. queria saber si se podria lograr hacerlo y que estos pixeles no existan en la foto?
Muchas gracias por tu contenido, me ha ayudado mucho, primera vez en python y ha sido muy util, felicidades, espero que crezca mucho tu canal te lo mereces!!
Hola Jorge, muchas gracias me alegro mucho que te guste el contenido! :) Tal vez te pueda servir jugar con la imagen binaria resultante con algunas operaciones de transformación morfológica. Puede que ello te ayude a mejorar los resultados.