{"id":36726,"date":"2019-10-31T22:13:23","date_gmt":"2019-10-31T19:13:23","guid":{"rendered":"https:\/\/prohoster.info\/blog\/stroim-sistemu-raspoznavaniya-lits-na-osnove-golang-i-opencv\/"},"modified":"2019-10-31T22:13:23","modified_gmt":"2019-10-31T19:13:23","slug":"stroim-sistemu-raspoznavaniya-lits-na-osnove-golang-i-opencv","status":"publish","type":"post","link":"https:\/\/prohoster.info\/es\/blog\/news\/stroim-sistemu-raspoznavaniya-lits-na-osnove-golang-i-opencv","title":{"rendered":"Construimos un sistema de reconocimiento facial basado en Golang y OpenCV","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Construimos un sistema de reconocimiento facial basado en Golang y OpenCV\" src=\"\/wp-content\/uploads\/2019\/08\/053427f29ed319ede4498f2239044341.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nOpenCV es una biblioteca dise\u00f1ada para proyectos de visi\u00f3n por computadora. Tiene alrededor de 20 a\u00f1os. La he usado desde la universidad y todav\u00eda la aplico en mis proyectos en C++ y Python, ya que tiene un buen soporte para estos lenguajes.<\/p>\n<p>Pero cuando empec\u00e9 a estudiar y usar Go, me pregunt\u00e9 si era posible usar OpenCV con este lenguaje. En ese momento ya exist\u00edan ejemplos y tutoriales sobre la integraci\u00f3n, pero me parecieron demasiado complicados. Poco despu\u00e9s, encontr\u00e9 un wrapper creado por el equipo de The Hybrid Group. En este art\u00edculo, mostrar\u00e9 c\u00f3mo empezar con GoCV desarrollando un simple sistema de reconocimiento facial con cascadas de Haar.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<blockquote><p><b>Skillbox recomienda:<\/b> Curso pr\u00e1ctico <noindex><a rel=\"nofollow\" href=\"https:\/\/skillbox.ru\/python\/?utm_source=skillbox.media&amp;utm_medium=habr.com&amp;utm_campaign=PTNDEV&amp;utm_content=articles&amp;utm_term=govideo\">\u00abDesarrollador de Python desde cero\u00bb<\/a><\/noindex>.<\/p>\n<p><b>Recordamos:<\/b> <i>para todos los lectores de \u00abHabr\u00bb \u2014 un descuento de 10,000 rublos al registrarse en cualquier curso de Skillbox usando el c\u00f3digo promocional \u00abHabr\u00bb.<\/i>\n<\/p><\/blockquote>\n<p>\n<b>Qu\u00e9 necesitar\u00e1s:<\/b><\/p>\n<ul>\n<li>Go;<\/li>\n<li>OpenCV (enlaces al instalador abajo);<\/li>\n<li>c\u00e1mara web o c\u00e1mara normal.<\/li>\n<\/ul>\n<p>\n<b>Instalaci\u00f3n<\/b><\/p>\n<ul>\n<li>Linux: <noindex><a rel=\"nofollow\" href=\"https:\/\/gocv.io\/getting-started\/linux\/\">gocv.io\/getting-started\/linux<\/a><\/noindex><\/li>\n<li>macOS: <noindex><a rel=\"nofollow\" href=\"https:\/\/gocv.io\/getting-started\/macos\/\">gocv.io\/getting-started\/macos<\/a><\/noindex><\/li>\n<li>Windows: <noindex><a rel=\"nofollow\" href=\"https:\/\/gocv.io\/getting-started\/windows\/\">gocv.io\/getting-started\/windows<\/a><\/noindex><\/li>\n<\/ul>\n<p><\/p>\n<h3>Ejemplo 1<\/h3>\n<p>\nEn el primer ejemplo intentaremos crear una aplicaci\u00f3n que abra una ventana con una demostraci\u00f3n del flujo de video de la c\u00e1mara.<\/p>\n<p>Primero, hay que importar las bibliotecas necesarias.<\/p>\n<p><i>import (<br \/>\n \"log\"<br \/>\n \"gocv.io\/x\/gocv\"<br \/>\n)<\/i><\/p>\n<p>Despu\u00e9s de esto, necesitas crear un objeto VideoCapture usando la funci\u00f3n VideoCaptureDevice. Esta \u00faltima permite capturar el flujo de video desde la c\u00e1mara. En la funci\u00f3n se usa un n\u00famero entero como par\u00e1metro (que representa el ID del dispositivo).<\/p>\n<pre><code class=\"go\">webcam, err := gocv.VideoCaptureDevice(0)\nif err != nil {    log.Fatalf(\"error opening web cam: %v\", err)\n}\ndefer webcam.Close()<\/code><\/pre>\n<p>\nAhora necesitas crear una matriz n-dimensional. Esta almacenar\u00e1 las im\u00e1genes le\u00eddas desde la c\u00e1mara.<\/p>\n<pre><code class=\"go\">img := gocv.NewMat()\ndefer img.Close()<\/code><\/pre>\n<p>\nPara mostrar el flujo de video, necesitas crear una ventana; esto se puede hacer con la funci\u00f3n NewWindow.<\/p>\n<pre><code class=\"go\">window := gocv.NewWindow(\"webcamwindow\")\ndefer window.Close()<\/code><\/pre>\n<p>\nAhora pasemos a la parte m\u00e1s interesante.<\/p>\n<p>Dado que el video es un flujo continuo de cuadros-im\u00e1genes, necesitamos crear un bucle infinito para leer continuamente el flujo de video de la c\u00e1mara. Para esto se necesita el m\u00e9todo Read del tipo VideoCapture. Esto esperar\u00e1 un tipo Mat (la matriz que creamos anteriormente), devolviendo un valor booleano que indica si el cuadro se ha le\u00eddo correctamente desde VideoCapture o no.<\/p>\n<pre><code class=\"go\">for {     \n        if ok := webcam.Read(&amp;img); !ok || img.Empty() {\n        log.Println(\"Unable to read from the webcam\")    continue\n     }\n.\n.\n.\n}<\/code><\/pre>\n<p>\nAhora hay que mostrar el marco en la ventana creada. La pausa para pasar al siguiente marco es de 50 ms.<\/p>\n<p><i>window.IMShow(img)<br \/>\nwindow.WaitKey(50)<\/i><\/p>\n<p>Despu\u00e9s de ejecutar la aplicaci\u00f3n, se abrir\u00e1 una ventana con el flujo de video de la c\u00e1mara.<\/p>\n<p><img decoding=\"async\" alt=\"Construimos un sistema de reconocimiento facial basado en Golang y OpenCV\" src=\"\/wp-content\/uploads\/2019\/08\/02677722c3c3fb867f73917c53031f07.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <\/p>\n<pre><code class=\"go\">paquete principal\n \nimportar (\n\"log\"\n \n\"gocv.io\/x\/gocv\"\n)\n \nfunc main() {\nc\u00e1mara, err := gocv.VideoCaptureDevice(0)\nif err != nil {\n    log.Fatalf(\"error opening device: %v\", err)\n}\ndefers c\u00e1mara.Close()\n \nimg := gocv.NewMat()\ndefers img.Close()\n \nventana := gocv.NewWindow(\"ventanac\u00e1mara\")\ndefers ventana.Close()\n \nfor {\nif ok := c\u00e1mara.Read(&amp;img); !ok || img.Empty() {\nlog.Println(\"No se puede leer desde la c\u00e1mara\")\ncontinue\n}\n \nventana.IMShow(img)\nventana.WaitKey(50)\n}\n}<\/code><\/pre>\n<p><\/p>\n<h3>Ejemplo 2<\/h3>\n<p>\nEn este ejemplo, utilizaremos el ejemplo anterior y construiremos un sistema de reconocimiento facial basado en Haar Cascades (cascadas de Haar).<\/p>\n<p>Las cascadas de Haar son clasificadores en cascada entrenados utilizando la t\u00e9cnica de wavelets de Haar. Analizan los p\u00edxeles en la imagen para detectar ciertas caracter\u00edsticas. Para aprender m\u00e1s sobre las Haar Cascades, puedes seguir los enlaces a continuaci\u00f3n.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.cs.ubc.ca\/~lowe\/425\/slides\/13-ViolaJones.pdf?source=post_page---------------------------\">Marco de detecci\u00f3n de objetos Viola-Jones<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Cascading_classifiers?source=post_page---------------------------\">Clasificadores en cascada<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Haar-like_feature?source=post_page---------------------------\">Caracter\u00edsticas similares a Haar<\/a><\/noindex><\/p>\n<p>Descargar cascadas ya entrenadas <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/opencv\/opencv\/tree\/master\/data\/haarcascades?source=post_page---------------------------\">puedes hacerlo aqu\u00ed<\/a><\/noindex>. En el ejemplo actual, las cascadas se utilizar\u00e1n para identificar el rostro de una persona de frente.<\/p>\n<p>Para hacer esto, debes crear un clasificador y alimentarle un archivo ya entrenado (el enlace se proporciona arriba). Ya he descargado el archivo opencv_haarcascade_frontalface_default.xml en el directorio donde se encuentra nuestro programa.<\/p>\n<pre><code class=\"go\">harrcascade := \u201copencv_haarcascade_frontalface_default.xml\u201dclasificador := gocv.NewCascadeClassifier()clasificador.Load(harrcascade)\ndefers clasificador.Close()<\/code><\/pre>\n<p>\nPara detectar rostros en la imagen, debes utilizar el m\u00e9todo <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/hybridgroup\/gocv\/blob\/master\/objdetect.go?source=post_page---------------------------#L51\">DetectMultiScale<\/a><\/noindex>. Esta funci\u00f3n toma un fotograma (tipo Mat) que acaba de ser le\u00eddo del flujo de video de la c\u00e1mara y devuelve un arreglo de tipo Rectangle. El tama\u00f1o del arreglo representa la cantidad de rostros que el clasificador pudo detectar en el fotograma. Luego, para asegurarnos de que vemos lo que encontr\u00f3, pasemos por la lista de rect\u00e1ngulos y mostremos el objeto Rectangle en la consola, creando un borde alrededor del rect\u00e1ngulo detectado. Esto se puede hacer utilizando la funci\u00f3n Rectangle. Tomar\u00e1 Mat, le\u00eddo por la c\u00e1mara, el objeto Rectangle devuelto por el m\u00e9todo DetectMultiScale, el color y el grosor para el borde.<\/p>\n<pre><code class=\"go\">for _, r := range rects {\nfmt.Println(\u201cdetected\u201d, r)\ngocv.Rectangle(&amp;img, r, color, 2)\n}<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Construimos un sistema de reconocimiento facial basado en Golang y OpenCV\" src=\"\/wp-content\/uploads\/2019\/08\/5c9128572d0f832325b2d19dd0d03b61.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n<img decoding=\"async\" alt=\"Construimos un sistema de reconocimiento facial basado en Golang y OpenCV\" src=\"\/wp-content\/uploads\/2019\/08\/57a901331c7f109067c7f254f982a2b0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <\/p>\n<pre><code class=\"go\">paquete main\n \nimportar (\n\"fmt\"\n\"image\/color\"\n\"log\"\n \n\"gocv.io\/x\/gocv\"\n)\n \nfunc main() {\nc\u00e1mara, err := gocv.VideoCaptureDevice(0)\nif err != nil {\nlog.Fatalf(\"error abriendo la c\u00e1mara web: %v\", err)\n}\ndefer c\u00e1mara.Close()\n \nimg := gocv.NewMat()\ndefer img.Close()\n \nventana := gocv.NewWindow(\"ventanac\u00e1mara\")\ndefer ventana.Close()\n \nharrcascade := \"opencv_haarcascade_frontalface_default.xml\"\nclasificador := gocv.NewCascadeClassifier()\nclasificador.Load(harrcascade)\ndefer clasificador.Close()\n \ncolor := color.RGBA{0, 255, 0, 0}\nfor {\nif ok := c\u00e1mara.Read(&amp;img); !ok || img.Empty() {\nlog.Println(\"No se pudo leer del dispositivo\")\ncontinue\n}\n \nrects := clasificador.DetectMultiScale(img)\nfor _, r := range rects {\nfmt.Println(\"detectado\", r)\ngocv.Rectangle(&amp;img, r, color, 3)\n}\n \nvientana.IMShow(img)\nvientana.WaitKey(50)\n}\n}<\/code><\/pre>\n<p>\n\u00a1Y\u2026 s\u00ed, todo ha funcionado! Ahora tenemos un sistema simple de reconocimiento facial, escrito en Go. Pronto planeo continuar estos experimentos y crear cosas nuevas e interesantes, combinando Go y OpenCV.<\/p>\n<p>Si te interesa, eval\u00faa <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Niraj-Fonseka\/recognize?source=post_page---------------------------\">servidor web gRPC<\/a><\/noindex>, que escrib\u00ed en Python y OpenCV. Transmite datos en el momento en que se detecta un rostro. Esta es la base para crear diferentes clientes en diferentes lenguajes de programaci\u00f3n. Podr\u00e1n conectarse al servidor y leer datos de \u00e9l.<\/p>\n<p>\u00a1Gracias por leer el art\u00edculo!<\/p>\n<blockquote><p><b>Skillbox recomienda:<\/b><\/p>\n<ul>\n<li>Curso pr\u00e1ctico de dos a\u00f1os <noindex><a rel=\"nofollow\" href=\"https:\/\/iamwebdev.skillbox.ru\/?utm_source=skillbox.media&amp;utm_medium=habr.com&amp;utm_campaign=WEBDEVPRO&amp;utm_content=articles&amp;utm_term=govideo\">\u00abSoy Desarrollador Web PRO\u00bb<\/a><\/noindex>.<\/li>\n<li>Curso en l\u00ednea educativo <noindex><a rel=\"nofollow\" href=\"https:\/\/skillbox.ru\/java\/?utm_source=skillbox.media&amp;utm_medium=habr.com&amp;utm_campaign=JAVDEV&amp;utm_content=articles&amp;utm_term=govideo\">\u00abProfesi\u00f3n Desarrollador Java\u00bb<\/a><\/noindex>.<\/li>\n<li>Curso pr\u00e1ctico de un a\u00f1o <noindex><a rel=\"nofollow\" href=\"https:\/\/skillbox.ru\/php\/?utm_source=skillbox.media&amp;utm_medium=habr.com&amp;utm_campaign=PHPDEV&amp;utm_content=articles&amp;utm_term=govideo\">\u00abDesarrollador PHP desde 0 hasta PRO\u00bb<\/a><\/noindex>.\n<\/li>\n<\/ul>\n<\/blockquote>\n<p>Fuente: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/skillbox\/blog\/462159\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>OpenCV \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430, \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d\u043d\u0430\u044f \u0434\u043b\u044f \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043f\u043e \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043d\u043e\u043c\u0443 \u0437\u0440\u0435\u043d\u0438\u044e. \u0415\u0439 \u0443\u0436\u0435 \u043e\u043a\u043e\u043b\u043e 20 \u043b\u0435\u0442. \u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043b \u0435\u0435 \u0435\u0449\u0435 \u0432 \u043a\u043e\u043b\u043b\u0435\u0434\u0436\u0435 \u0438 \u0434\u043e \u0441\u0438\u0445 \u043f\u043e\u0440 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u044e \u0434\u043b\u044f \u0441\u0432\u043e\u0438\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u043e\u0432 \u043d\u0430 C++ \u0438 Python, \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043e\u043d\u0430 \u0438\u043c\u0435\u0435\u0442 \u043d\u0435\u043f\u043b\u043e\u0445\u0443\u044e \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0443 \u044d\u0442\u0438\u0445 \u044f\u0437\u044b\u043a\u043e\u0432. \u041d\u043e \u043a\u043e\u0433\u0434\u0430 \u044f \u043d\u0430\u0447\u0430\u043b \u0438\u0437\u0443\u0447\u0430\u0442\u044c \u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c Go, \u043c\u043d\u0435 \u0441\u0442\u0430\u043b\u043e \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e, \u043c\u043e\u0436\u043d\u043e \u043b\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c OpenCV \u0434\u043b\u044f [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":27509,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[702],"tags":[],"class_list":["post-36726","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-news"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"OpenCV \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/es\/blog\/news\/stroim-sistemu-raspoznavaniya-lits-na-osnove-golang-i-opencv\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"es_ES\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47\u0421\u0442\u0440\u043e\u0438\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u043b\u0438\u0446 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 Golang \u0438 OpenCV | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"OpenCV \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/es\/blog\/news\/stroim-sistemu-raspoznavaniya-lits-na-osnove-golang-i-opencv\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:13:23+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:13:23+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Construyendo un sistema de reconocimiento facial basado en Golang y OpenCV | ProHoster","description":"OpenCV es una biblioteca.","canonical_url":"https:\/\/prohoster.info\/es\/blog\/news\/stroim-sistemu-raspoznavaniya-lits-na-osnove-golang-i-opencv","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"es_ES","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47\u0421\u0442\u0440\u043e\u0438\u043c \u0441\u0438\u0441\u0442\u0435\u043c\u0443 \u0440\u0430\u0441\u043f\u043e\u0437\u043d\u0430\u0432\u0430\u043d\u0438\u044f \u043b\u0438\u0446 \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 Golang \u0438 OpenCV | ProHoster","og:description":"OpenCV \u2014 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0430.","og:url":"https:\/\/prohoster.info\/es\/blog\/news\/stroim-sistemu-raspoznavaniya-lits-na-osnove-golang-i-opencv","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:13:23+00:00","article:modified_time":"2019-10-31T19:13:23+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"36726","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-22 04:36:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:40:22","updated":"2026-01-22 04:36:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/36726","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/comments?post=36726"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/posts\/36726\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media\/27509"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/media?parent=36726"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/categories?post=36726"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/es\/wp-json\/wp\/v2\/tags?post=36726"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}