{"id":1778,"date":"2026-06-11T15:51:37","date_gmt":"2026-06-11T12:51:37","guid":{"rendered":"https:\/\/digitalegiz.kz\/?page_id=1778"},"modified":"2026-06-12T08:32:43","modified_gmt":"2026-06-12T05:32:43","slug":"elementor-1778","status":"publish","type":"page","link":"https:\/\/digitalegiz.kz\/?page_id=1778","title":{"rendered":"Elementor #1778"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"1778\" class=\"elementor elementor-1778\">\n\t\t\t\t<div class=\"elementor-element elementor-element-f0797a3 e-flex e-con-boxed e-con e-parent\" data-id=\"f0797a3\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-3b77c35 elementor-widget elementor-widget-heading\" data-id=\"3b77c35\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t<h1 class=\"elementor-heading-title elementor-size-default\">\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 AR-\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440<\/h1>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-6df9b99 e-flex e-con-boxed e-con e-parent\" data-id=\"6df9b99\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-80ee9d8 elementor-widget elementor-widget-text-editor\" data-id=\"80ee9d8\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<h2>AR Factory<\/h2>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-069d39a elementor-widget elementor-widget-text-editor\" data-id=\"069d39a\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t<style>\n    \/* \u0421\u0442\u0438\u043b\u0438 \u0430\u0434\u0430\u043f\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u0434 \u0432\u0430\u0448 Elementor *\/\n    .ar-generator-app {\n        font-family: 'Segoe UI', sans-serif;\n        color: #ffffff;\n        text-align: center;\n        max-width: 500px;\n        margin: 0 auto;\n        padding: 20px;\n    }\n    .ar-generator-app .hidden { display: none !important; }\n    \n    .ar-generator-app button, \n    .ar-generator-app .file-upload-btn {\n        background-color: #d89f45; \/* \u0417\u043e\u043b\u043e\u0442\u043e\u0439 \u0446\u0432\u0435\u0442 \u043f\u043e\u0434 \u0432\u0430\u0448 \u0441\u0442\u0438\u043b\u044c *\/\n        color: #020617; \/* \u0422\u0435\u043c\u043d\u044b\u0439 \u0442\u0435\u043a\u0441\u0442 \u0434\u043b\u044f \u043a\u043e\u043d\u0442\u0440\u0430\u0441\u0442\u0430 *\/\n        border: none;\n        padding: 14px 24px;\n        margin: 10px 5px;\n        border-radius: 8px;\n        cursor: pointer;\n        font-size: 16px;\n        font-weight: bold;\n        transition: transform 0.2s, background 0.3s;\n        display: inline-block;\n        width: 100%;\n        box-sizing: border-box;\n    }\n    .ar-generator-app button:hover, \n    .ar-generator-app .file-upload-btn:hover { \n        background-color: #f1b354; \n        transform: translateY(-2px);\n    }\n    .ar-generator-app button.secondary { \n        background-color: transparent; \n        color: #d89f45;\n        border: 2px solid #d89f45;\n    }\n    .ar-generator-app button.secondary:hover {\n        background-color: rgba(216, 159, 69, 0.1);\n    }\n    .ar-generator-app input[type=\"file\"] { display: none; }\n    \n    .ar-generator-app .loader {\n        border: 4px solid rgba(255,255,255,0.1); \n        border-top: 4px solid #d89f45;\n        border-radius: 50%; width: 50px; height: 50px;\n        animation: spin 1s linear infinite; margin: 30px auto;\n    }\n    @keyframes spin { 0% { transform: rotate(0deg); } 100% { transform: rotate(360deg); } }\n    .ar-generator-app img.result-qr { max-width: 250px; margin: 20px 0; border-radius: 12px; }\n<\/style>\n\n<div class=\"ar-generator-app\">\n    <div id=\"screen-home\">\n        <p style=\"font-size: 18px; margin-bottom: 25px;\">\u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435:<\/p>\n        <button onclick=\"window.location.href='\/ar-generator\/menu.html'\">\u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0421\u043a\u0430\u043d\u0435\u0440<\/button>\n        <button class=\"secondary\" onclick=\"switchScreen('screen-upload')\">\u0421\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u043c\u043e\u0434\u0435\u043b\u044c<\/button>\n    <\/div>\n\n    <div id=\"screen-upload\" class=\"hidden\">\n        <h3 style=\"color: #d89f45;\">\u041d\u043e\u0432\u0430\u044f AR-\u043c\u043e\u0434\u0435\u043b\u044c<\/h3>\n        <p>\u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044e \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0441 \u0445\u043e\u0440\u043e\u0448\u0438\u043c \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435\u043c.<\/p>\n        \n        <label class=\"file-upload-btn\">\n            <input type=\"file\" id=\"imageInput\" accept=\"image\/png, image\/jpeg\">\n            \ud83d\udcce \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0444\u043e\u0442\u043e\n        <\/label>\n        <p id=\"fileName\" style=\"font-size: 14px; color: #a1a1a1; margin-top: 10px;\"><\/p>\n        \n        <button onclick=\"startGeneration()\" id=\"generateBtn\" disabled style=\"opacity: 0.5;\">\u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c (15 \u043c\u0438\u043d)<\/button>\n        <button class=\"secondary\" onclick=\"switchScreen('screen-home')\">\u041d\u0430\u0437\u0430\u0434<\/button>\n    <\/div>\n\n    <div id=\"screen-loading\" class=\"hidden\">\n        <h3 style=\"color: #d89f45;\">\u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438&#8230;<\/h3>\n        <div class=\"loader\"><\/div>\n        <p>\u041d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435. \u042d\u0442\u043e \u0437\u0430\u0439\u043c\u0435\u0442 \u043e\u043a\u043e\u043b\u043e 15 \u043c\u0438\u043d\u0443\u0442.<\/p>\n        <p style=\"font-size: 14px; color: #a1a1a1;\">\u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043d\u0435 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0439\u0442\u0435 \u044d\u0442\u0443 \u0432\u043a\u043b\u0430\u0434\u043a\u0443.<\/p>\n    <\/div>\n\n    <div id=\"screen-result\" class=\"hidden\">\n        <h3 style=\"color: #d89f45;\">\u041c\u043e\u0434\u0435\u043b\u044c \u0433\u043e\u0442\u043e\u0432\u0430!<\/h3>\n        <p>\u0420\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u0430\u0439\u0442\u0435 \u044d\u0442\u043e\u0442 QR-\u043a\u043e\u0434 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430.<\/p>\n        <img decoding=\"async\" id=\"qrImage\" class=\"result-qr\" src=\"\" alt=\"QR Code\">\n        \n        <button id=\"downloadBtn\">\ud83d\udce5 \u0421\u043a\u0430\u0447\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u0435\u0447\u0430\u0442\u0438<\/button>\n        <button class=\"secondary\" onclick=\"switchScreen('screen-home')\">\u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0435\u0449\u0435<\/button>\n    <\/div>\n<\/div>\n\n<script>\n    \/\/ --- \u041b\u043e\u0433\u0438\u043a\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 ---\n    function switchScreen(screenId) {\n        document.getElementById('screen-home').classList.add('hidden');\n        document.getElementById('screen-upload').classList.add('hidden');\n        document.getElementById('screen-loading').classList.add('hidden');\n        document.getElementById('screen-result').classList.add('hidden');\n        document.getElementById(screenId).classList.remove('hidden');\n    }\n\n    const imageInput = document.getElementById('imageInput');\n    const generateBtn = document.getElementById('generateBtn');\n    \n    imageInput.addEventListener('change', function() {\n        if (this.files && this.files[0]) {\n            document.getElementById('fileName').innerText = \"\u0412\u044b\u0431\u0440\u0430\u043d \u0444\u0430\u0439\u043b: \" + this.files[0].name;\n            generateBtn.disabled = false;\n            generateBtn.style.opacity = \"1\";\n        }\n    });\n\n    \/\/ --- \u041b\u043e\u0433\u0438\u043a\u0430 \u043e\u0431\u0449\u0435\u043d\u0438\u044f \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c ---\n    const API_BASE = \"http:\/\/192.168.0.211:8000\"; \n    let pollingInterval;\n\n    async function startGeneration() {\n        const file = imageInput.files[0];\n        if (!file) return;\n\n        switchScreen('screen-loading');\n        const formData = new FormData();\n        formData.append('image', file);\n\n        try {\n            const response = await fetch(`${API_BASE}\/api\/generate_model`, { method: 'POST', body: formData });\n            if (!response.ok) throw new Error(\"\u0421\u0435\u0440\u0432\u0435\u0440 \u043d\u0435 \u043f\u0440\u0438\u043d\u044f\u043b \u0444\u0430\u0439\u043b\");\n            \n            const data = await response.json();\n            startPolling(data.task_id);\n        } catch (error) {\n            console.error(error);\n            alert(\"\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0441\u0432\u044f\u0437\u0438 \u0441 \u0441\u0435\u0440\u0432\u0435\u0440\u043e\u043c!\");\n            switchScreen('screen-upload');\n        }\n    }\n\n    function startPolling(taskId) {\n        pollingInterval = setInterval(async () => {\n            try {\n                const response = await fetch(`${API_BASE}\/api\/check_status?task_id=${taskId}`);\n                const data = await response.json();\n\n                if (data.status === \"completed\") {\n                    clearInterval(pollingInterval);\n                    showResult(data);\n                } else if (data.status === \"error\") {\n                    clearInterval(pollingInterval);\n                    alert(\"\u041f\u0440\u043e\u0438\u0437\u043e\u0448\u043b\u0430 \u043e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u0433\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435.\");\n                    switchScreen('screen-home');\n                }\n            } catch (error) {\n                console.error(\"\u041e\u0448\u0438\u0431\u043a\u0430 \u043e\u043f\u0440\u043e\u0441\u0430:\", error);\n            }\n        }, 30000); \n    }\n\n    function showResult(data) {\n        const qrImage = document.getElementById('qrImage');\n        qrImage.src = data.qr_url.startsWith('http') ? data.qr_url : `${API_BASE}${data.qr_url}`;\n        \n        const downloadBtn = document.getElementById('downloadBtn');\n        downloadBtn.onclick = () => window.open(qrImage.src, '_blank');\n\n        \/\/ \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043a\u043d\u043e\u043f\u043a\u0443 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0430 \u0432 \u0441\u043a\u0430\u043d\u0435\u0440\n        const resultScreen = document.getElementById('screen-result');\n        if (!document.getElementById('goToScannerBtn')) {\n            const goBtn = document.createElement('button');\n            goBtn.id = 'goToScannerBtn';\n            goBtn.innerText = '\ud83d\udc40 \u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432 AR \u0421\u043a\u0430\u043d\u0435\u0440\u0435';\n            goBtn.onclick = () => {\n                window.location.href = `\/ar-generator\/menu.html?model=${data.model_filename}&name=\u041d\u043e\u0432\u0430\u044f \u041c\u043e\u0434\u0435\u043b\u044c`;\n            };\n            resultScreen.insertBefore(goBtn, downloadBtn);\n        }\n\n        switchScreen('screen-result');\n        imageInput.value = \"\";\n        generateBtn.disabled = true;\n        generateBtn.style.opacity = \"0.5\";\n        document.getElementById('fileName').innerText = \"\";\n    }\n<\/script>\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>\u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 AR-\u0433\u0435\u043d\u0435\u0440\u0430\u0442\u043e\u0440 AR Factory \u0412\u044b\u0431\u0435\u0440\u0438\u0442\u0435 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435: \u0417\u0430\u043f\u0443\u0441\u0442\u0438\u0442\u044c \u0421\u043a\u0430\u043d\u0435\u0440 \u0421\u0434\u0435\u043b\u0430\u0442\u044c \u0441\u0432\u043e\u044e \u043c\u043e\u0434\u0435\u043b\u044c \u041d\u043e\u0432\u0430\u044f AR-\u043c\u043e\u0434\u0435\u043b\u044c \u0417\u0430\u0433\u0440\u0443\u0437\u0438\u0442\u0435 \u0444\u043e\u0442\u043e\u0433\u0440\u0430\u0444\u0438\u044e \u043e\u0431\u043e\u0440\u0443\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0441 \u0445\u043e\u0440\u043e\u0448\u0438\u043c \u043e\u0441\u0432\u0435\u0449\u0435\u043d\u0438\u0435\u043c. \ud83d\udcce \u0412\u044b\u0431\u0440\u0430\u0442\u044c \u0444\u043e\u0442\u043e \u0421\u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c (15 \u043c\u0438\u043d) \u041d\u0430\u0437\u0430\u0434 \u0413\u0435\u043d\u0435\u0440\u0430\u0446\u0438\u044f \u043c\u043e\u0434\u0435\u043b\u0438&#8230; \u041d\u0435\u0439\u0440\u043e\u0441\u0435\u0442\u044c \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0435\u0442 \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435. \u042d\u0442\u043e \u0437\u0430\u0439\u043c\u0435\u0442 \u043e\u043a\u043e\u043b\u043e 15 \u043c\u0438\u043d\u0443\u0442. \u041f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430, \u043d\u0435 \u0437\u0430\u043a\u0440\u044b\u0432\u0430\u0439\u0442\u0435 \u044d\u0442\u0443 \u0432\u043a\u043b\u0430\u0434\u043a\u0443. \u041c\u043e\u0434\u0435\u043b\u044c \u0433\u043e\u0442\u043e\u0432\u0430! \u0420\u0430\u0441\u043f\u0435\u0447\u0430\u0442\u0430\u0439\u0442\u0435 \u044d\u0442\u043e\u0442 QR-\u043a\u043e\u0434 \u0434\u043b\u044f \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0430. \ud83d\udce5 \u0421\u043a\u0430\u0447\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u0435\u0447\u0430\u0442\u0438 \u0421\u043e\u0437\u0434\u0430\u0442\u044c \u0435\u0449\u0435<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_kad_post_transparent":"","_kad_post_title":"hide","_kad_post_layout":"fullwidth","_kad_post_sidebar_id":"","_kad_post_content_style":"unboxed","_kad_post_vertical_padding":"hide","_kad_post_feature":"hide","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"footnotes":""},"class_list":["post-1778","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/digitalegiz.kz\/index.php?rest_route=\/wp\/v2\/pages\/1778","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/digitalegiz.kz\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/digitalegiz.kz\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/digitalegiz.kz\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/digitalegiz.kz\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1778"}],"version-history":[{"count":4,"href":"https:\/\/digitalegiz.kz\/index.php?rest_route=\/wp\/v2\/pages\/1778\/revisions"}],"predecessor-version":[{"id":1782,"href":"https:\/\/digitalegiz.kz\/index.php?rest_route=\/wp\/v2\/pages\/1778\/revisions\/1782"}],"wp:attachment":[{"href":"https:\/\/digitalegiz.kz\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1778"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}