{"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\/da\/blog\/news\/stroim-sistemu-raspoznavaniya-lits-na-osnove-golang-i-opencv","title":{"rendered":"Vi bygger et ansigtgenkendelsessystem baseret p\u00e5 Golang og OpenCV","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p><img decoding=\"async\" alt=\"Vi bygger et ansigtgenkendelsessystem baseret p\u00e5 Golang og OpenCV\" src=\"\/wp-content\/uploads\/2019\/08\/053427f29ed319ede4498f2239044341.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nOpenCV \u2014 et bibliotek udviklet til projekter inden for computer vision. Det har v\u00e6ret omkring i n\u00e6sten 20 \u00e5r. Jeg brugte det allerede i college og bruger det stadig til mine projekter i C++ og Python, da det har en god st\u00f8tte til disse sprog.<\/p>\n<p>Men da jeg begyndte at studere og bruge Go, blev jeg nysgerrig efter, om det var muligt at anvende OpenCV med dette sprog. Der eksisterede allerede eksempler og vejledninger til integration, men de virkede for komplekse. Lidt senere st\u00f8dte jeg p\u00e5 et wrapper, skabt af The Hybrid Group. I denne artikel viser jeg, hvordan man kommer i gang med GoCV ved at udvikle et simpelt ansigtsgenkendelsessystem ved hj\u00e6lp af Haar Cascades.<br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><\/p>\n<blockquote><p><b>Skillbox anbefaler:<\/b> Praktisk kursus <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\">\u00abPython-udvikler fra bunden\u00bb<\/a><\/noindex>.<\/p>\n<p><b>Vi minder om:<\/b> <i>til alle l\u00e6sere af 'Habr' \u2014 rabat p\u00e5 10.000 rubler ved tilmelding til et hvilket som helst Skillbox-kursus med rabatkoden 'Habr'.<\/i>\n<\/p><\/blockquote>\n<p>\n<b>Hvad der er n\u00f8dvendigt:<\/b><\/p>\n<ul>\n<li>Go;<\/li>\n<li>OpenCV (links til installationsprogrammet nedenfor);<\/li>\n<li>en web- eller almindelig videokamera.<\/li>\n<\/ul>\n<p>\n<b>Installation<\/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>Eksempel 1<\/h3>\n<p>\nI det f\u00f8rste eksempel vil vi pr\u00f8ve at oprette en applikation, der \u00e5bner et vindue med en demonstration af videostr\u00f8mmen fra kameraet.<\/p>\n<p>F\u00f8rst skal de biblioteker importeres, der er n\u00f8dvendige for at arbejde.<\/p>\n<p><i>import (<br \/>\n \u201clog\u201d<br \/>\n \u201cgocv.io\/x\/gocv\u201d<br \/>\n)<\/i><\/p>\n<p>Derefter skal der oprettes et VideoCapture-objekt ved at bruge funktionen VideoCaptureDevice. Denne giver mulighed for at fange videostr\u00f8mmen ved hj\u00e6lp af kameraet. Funktionen bruger et helt tal som parameter (som repr\u00e6senterer enhedens ID).<\/p>\n<pre><code class=\"go\">webcam, err := gocv.VideoCaptureDevice(0)\nif err != nil {    log.Fatalf(\u201cfejl ved \u00e5bning af webkamera: %v\u201d, err)\n}\ndefer webcam.Close()<\/code><\/pre>\n<p>\nNu skal der oprettes en n-dimensionel matrix. Den vil gemme billeder, der er l\u00e6st fra kameraet.<\/p>\n<pre><code class=\"go\">img := gocv.NewMat()\ndefer img.Close()<\/code><\/pre>\n<p>\nFor at vise videostr\u00f8mmen skal der oprettes et vindue \u2014 dette kan g\u00f8res ved hj\u00e6lp af funktionen NewWindow.<\/p>\n<pre><code class=\"go\">window := gocv.NewWindow(\u201cwebcamwindow\u201d)\ndefer window.Close()<\/code><\/pre>\n<p>\nLad os nu g\u00e5 videre til den mest interessante del.<\/p>\n<p>Da video er en kontinuerlig str\u00f8m af frames-billeder, skal der oprettes et uendeligt loop til kontinuerligt at l\u00e6se videostr\u00f8mmen fra kameraet. Til dette er der brug for metoden Read af typen VideoCapture. Den vil forvente en type Mat (den matrix, vi oprettede ovenfor), der returnerer en boolesk v\u00e6rdi, der angiver, om et frame fra VideoCapture blev l\u00e6st korrekt eller ej.<\/p>\n<pre><code class=\"go\">for {     \n        if ok := webcam.Read(&amp;img); !ok || img.Empty() {\n        log.Println(\u201cKunne ikke l\u00e6se fra webkameraet\u201d)    continue\n     }\n.\n.\n.\n}<\/code><\/pre>\n<p>\nNu skal frame vises i det oprettede vindue. Der skal v\u00e6re en pause for at g\u00e5 til det n\u00e6ste frame \u2014 50 ms.<\/p>\n<p><i>window.IMShow(img)<br \/>\nwindow.WaitKey(50)<\/i><\/p>\n<p>N\u00e5r applikationen startes, \u00e5bnes et vindue med videostr\u00f8mmen fra kameraet.<\/p>\n<p><img decoding=\"async\" alt=\"Vi bygger et ansigtgenkendelsessystem baseret p\u00e5 Golang og OpenCV\" src=\"\/wp-content\/uploads\/2019\/08\/02677722c3c3fb867f73917c53031f07.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <\/p>\n<pre><code class=\"go\">pakke main\n\nimport (\n\"log\"\n\n\"gocv.io\/x\/gocv\"\n)\n\nfunc main() {\nwebcam, err := gocv.VideoCaptureDevice(0)\nif err != nil {\n    log.Fatalf(\"fejl ved \u00e5bning af enhed: %v\", err)\n}\ndefer webcam.Close()\n\nimg := gocv.NewMat()\ndefer img.Close()\n\nwindow := gocv.NewWindow(\"webcamwindow\")\ndefer window.Close()\n\nfor {\nif ok := webcam.Read(&amp;img); !ok || img.Empty() {\nlog.Println(\"Kan ikke l\u00e6se fra webcam\")\ncontinue\n}\n\nwindow.IMShow(img)\nwindow.WaitKey(50)\n}\n}<\/code><\/pre>\n<p><\/p>\n<h3>Eksempel 2<\/h3>\n<p>\nI dette eksempel lad os tage det tidligere eksempel og opbygge et ansigtsgenkendelsessystem baseret p\u00e5 Haar Cascades.<\/p>\n<p>Haar Cascades er cascade klasseifikatorer, der tr\u00e6nes ved hj\u00e6lp af Haar wavelets teknik. De analyserer pixel i et billede for at opdage bestemte tr\u00e6k. For at l\u00e6re mere om Haar Cascades kan du f\u00f8lge linkene nedenfor.<\/p>\n<p><noindex><a rel=\"nofollow\" href=\"https:\/\/www.cs.ubc.ca\/~lowe\/425\/slides\/13-ViolaJones.pdf?source=post_page---------------------------\">Viola-Jones objektgenkendelsesramme<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Cascading_classifiers?source=post_page---------------------------\">Kaskadeklassefikatorer<\/a><\/noindex><br \/>\n<noindex><a rel=\"nofollow\" href=\"https:\/\/en.wikipedia.org\/wiki\/Haar-like_feature?source=post_page---------------------------\">Haar-lignende funktion<\/a><\/noindex><\/p>\n<p>Download allerede tr\u00e6nede cascades <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/opencv\/opencv\/tree\/master\/data\/haarcascades?source=post_page---------------------------\">her<\/a><\/noindex>. I det aktuelle eksempel vil cascades blive brugt til at identificere en persons ansigt frontalt.<\/p>\n<p>For at g\u00f8re dette skal du oprette en klassifikator og fodre den med en allerede tr\u00e6net fil (linken er givet ovenfor). Jeg har allerede downloadet filen opencv_haarcascade_frontalface_default.xml til den mappe, hvor vores program ligger.<\/p>\n<pre><code class=\"go\">harrcascade := \u201copencv_haarcascade_frontalface_default.xml\u201dklassifikator := gocv.NewCascadeClassifier()klassifikator.Load(harrcascade)\ndefer klassifikator.Close()<\/code><\/pre>\n<p>\nFor at opdage ansigtet i billedet skal du bruge metoden <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/hybridgroup\/gocv\/blob\/master\/objdetect.go?source=post_page---------------------------#L51\">DetectMultiScale<\/a><\/noindex>. Denne funktion tager en ramme (type Mat), der netop er blevet l\u00e6st fra videostr\u00f8mmen fra kameraet, og returnerer et array af typen Rectangle. St\u00f8rrelsen af arrayet repr\u00e6senterer antallet af ansigt, som klassifikatoren kunne opdage i rammen. Derefter, for at sikre, at vi ser det, den fandt, lad os g\u00e5 gennem listen over rektangler og udskrive objektet Rectangle til konsollen ved at oprette en gr\u00e6nse omkring det opdagede rektangel. Dette kan g\u00f8res ved hj\u00e6lp af funktionen Rectangle. Den vil tage Mat, der er l\u00e6st fra kameraet, et Rectangle-objekt, der blev returneret af metoden DetectMultiScale, farven og tykkelsen til gr\u00e6nsen.<\/p>\n<pre><code class=\"go\">for _, r := range rects {\nfmt.Println(\u201copdaget\u201d, r)\ngocv.Rectangle(&amp;img, r, color, 2)\n}<\/code><\/pre>\n<p>\n<img decoding=\"async\" alt=\"Vi bygger et ansigtgenkendelsessystem baseret p\u00e5 Golang og OpenCV\" src=\"\/wp-content\/uploads\/2019\/08\/5c9128572d0f832325b2d19dd0d03b61.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <br \/>\n<img decoding=\"async\" alt=\"Vi bygger et ansigtgenkendelsessystem baseret p\u00e5 Golang og OpenCV\" src=\"\/wp-content\/uploads\/2019\/08\/57a901331c7f109067c7f254f982a2b0.jpeg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n <\/p>\n<pre><code class=\"go\">pakke main\n \nimport (\n\"fmt\"\n\"image\/color\"\n\"log\"\n \n\"gocv.io\/x\/gocv\"\n)\n \nfunc main() {\nwebcam, err := gocv.VideoCaptureDevice(0)\nif err != nil {\nlog.Fatalf(\"fejl ved \u00e5bning af webcam: %v\", err)\n}\ndefer webcam.Close()\n \nimg := gocv.NewMat()\ndefer img.Close()\n \nwindow := gocv.NewWindow(\"webcamvindue\")\ndefer window.Close()\n \nharrcascade := \"opencv_haarcascade_frontalface_default.xml\"\nclassifier := gocv.NewCascadeClassifier()\nclassifier.Load(harrcascade)\ndefer classifier.Close()\n \ncolor := color.RGBA{0, 255, 0, 0}\nfor {\nif ok := webcam.Read(&amp;img); !ok || img.Empty() {\nlog.Println(\"Kan ikke l\u00e6se fra enheden\")\ncontinue\n}\n \nrects := classifier.DetectMultiScale(img)\nfor _, r := range rects {\nfmt.Println(\"opdaget\", r)\ngocv.Rectangle(&amp;img, r, color, 3)\n}\n \nwindow.IMShow(img)\nwindow.WaitKey(50)\n}\n}<\/code><\/pre>\n<p>\nJa, det lykkedes! Nu har vi et simpelt ansigtsgenkendelsessystem skrevet i Go. Snart planl\u00e6gger jeg at forts\u00e6tte disse eksperimenter og skabe nye sp\u00e6ndende ting ved at kombinere Go og OpenCV.<\/p>\n<p>Hvis du er interesseret, s\u00e5 vurder venligst <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/Niraj-Fonseka\/recognize?source=post_page---------------------------\">gRPC web server<\/a><\/noindex>, som jeg skrev i Python og OpenCV. Den streamer data i det \u00f8jeblik, ansigtet opdages. Dette er grundlaget for at oprette forskellige kunder p\u00e5 forskellige programmeringssprog. De kan tilslutte sig serveren og l\u00e6se data herfra.<\/p>\n<p>Tak for at du l\u00e6ste artiklen!<\/p>\n<blockquote><p><b>Skillbox anbefaler:<\/b><\/p>\n<ul>\n<li>To\u00e5rigt praktisk kursus <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\">\u00abJeg er webudvikler PRO\u00bb<\/a><\/noindex>.<\/li>\n<li>Online uddannelseskursus <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\">\u00abJava-udvikler erhverv\u00bb<\/a><\/noindex>.<\/li>\n<li>Praktisk \u00e5rs kursus <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\">\"PHP-udvikler fra 0 til PRO\"<\/a><\/noindex>.\n<\/li>\n<\/ul>\n<\/blockquote>\n<p>Kilde: <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.3 - 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\/da\/blog\/news\/stroim-sistemu-raspoznavaniya-lits-na-osnove-golang-i-opencv\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"da_DK\" \/>\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\/da\/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\udd47Bygger et ansigtsgenkendelsessystem med Golang og OpenCV | ProHoster","description":"OpenCV \u2014 et bibliotek.","canonical_url":"https:\/\/prohoster.info\/da\/blog\/news\/stroim-sistemu-raspoznavaniya-lits-na-osnove-golang-i-opencv","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"da_DK","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\/da\/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\/da\/wp-json\/wp\/v2\/posts\/36726","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/comments?post=36726"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/posts\/36726\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media\/27509"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/media?parent=36726"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/categories?post=36726"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/da\/wp-json\/wp\/v2\/tags?post=36726"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}