<jupyter_start><jupyter_text>**Необходимые библиотеки**<jupyter_code>import cv2
import numpy as np<jupyter_output><empty_output><jupyter_text>**Подготовка изображения к созданию модели**<jupyter_code>fileStl='example.stl'
fileIm=r'12.jpg'
stl=open(fileStl, 'w')

im=cv2.imread(fileIm)
''' 
    *
    * Чтобы не было резких границ сгаживаем, а также нормируем чтобы несильно вытянутой была модель 
    *
'''
im = cv2.normalize(im, im, 0, 20, norm_type=cv2.NORM_MINMAX)
im = cv2.GaussianBlur(im,(0,0),2)

im = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)

im=cv2.resize(im,(300,100))
#gray = 255-gray
#blur = cv2.resize(blur,(400,400))
#gray = cv2.normalize(gray, None, alpha=0, beta=1, norm_type=cv2.NORM_MINMAX, dtype=cv2.CV_32F)<jupyter_output><empty_output><jupyter_text>**Устройство STL-формата**<jupyter_code>solid name # название
facet normal 0 0 0
outer loop
vertex cd_1[0] cd_1[1] cd_1[2] # первая вершина треугольника
vertex cd_2[0] cd_2[1] cd_2[2] # вторая вершина треугольника
vertex cd_3[0] cd_3[1] cd_3[2] # третья вершина треугольника
endloop
endfacet
endsolid<jupyter_output><empty_output><jupyter_text>**Начинаем накладывать треугольную сетку**

По сути выдавливаем нашу модель из изображения ![gignces3tiqs1wmvxzzitehiaya.png](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAgEAAAEVCAYAAAB5STZxAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsIAAA7CARUoSoAAAEyGSURBVHhe7d0HeFNl+wbwp4O2QMveyhaVIeAA/cTNlu36UL6/CIKoCIILcaC4F4oDB7hwIOICFUVEREHcIC72liF7lNH9z/3mfdvTNEmze5Lcv+vKlXNO0jRNC8/9jvOehAIHISIioriTqO+JiIgozjAEEBERxSmGACIiojjFEEBERBSnGAKIiIjiFEMAERFRnGIIICIiilMMAURERHGKIYCIiILyxx9/yDnnnCPVq1fXR0IjKytL7r77bqlbt67MnTtXHy3y2muvSaNGjeSuu+7SRwKD1/nmm2/kwIEDMmbMGPVz/PXXX/pR+9i9e7cMGDBAtm7dqo8EjyGAiCgO7du3T9atW6f3PMvOzpaNGzeqQr9q1So5cuSIfqTISSedJG3atJE9e/boI/7bvn273iqSmpoqAwcOVO/VnT59+kjlypWlSZMm+oj/5s+fL/PmzZMzzjhDKlWqJP3791c/R15enn6Gf44ePSo7d+7Ue8Xt379fli9fLvn5+fqIezk5ObJp0yb1ma9YsaLwM0c4GTVqlEycOFHthwJDABFRHPrwww+lR48ees+zRx99VKZMmSI//vijXH755XLNNde4DQKBWrNmjdx8881y2WWX<KEY>PRL<KEY>)<jupyter_code># Функция по созданию треугольника
def makeTriangle(cd_1, cd_2, cd_3):
    stl.write(o_1+"facet normal 0 0 0")
    stl.write(o_2 + "outer loop")
    stl.write(o_3 + "vertex " + " ".join(cd_1))
    stl.write(o_3 + "vertex " + " ".join(cd_2))
    stl.write(o_3 + "vertex " + " ".join(cd_3))
    stl.write(o_2 + "endloop \n\tendfacet")
 

x=0
y=0
cd_1=['0', '0', '0'] #первая вершина треульника в формате (x, y, intensity)
cd_2=['0', '0', '0'] #вторая вершина треульника в формате (x, y, intensity)
cd_3=['0', '0', '0'] #третья вершина треульника в формате (x, y, intensity)

file='STL_project-1.stl'

o_1="\n\t" 
o_2="\n\t\t"
o_3="\n\t\t\t"

stl.write("solid")

# Делаем основу модели
for i in range(im.shape[1]-1):
      cd_1=[str(i),"0","0"]
      cd_3=[str(i+1),str(im.shape[0]-1),"0"]
      cd_2=[str(i),str(im.shape[0]-1),"0"]
      makeTriangle(cd_1, cd_2, cd_3)     
for i in range(im.shape[1]-1):
      cd_1=[str(i+1),str(im.shape[0]-1),"0"]
      cd_3=[str(i),"0","0"]
      cd_2=[str(i+1),"0","0"]
      makeTriangle(cd_1, cd_2, cd_3)

# Делаем рельеф
for i in range(im.shape[1]):
        for k in range(im.shape[0]-1):
            if i!=im.shape[1]-1:
                    try:
                        
                        cd_1=[str(i),     str(k),   str(im[k, i])   ]
                        cd_2=[str(i + 1), str(k),   str(im[k, i+1]) ]
                        cd_3=[str(i+1),   str(k+1), str(im[k+1,i+1])] 
                     
                    except:
                        print('er')
                    makeTriangle(cd_1, cd_2, cd_3)
                    try:
                        cd_1=[str(i),  str(k),   str(im[k, i])    ]
                        cd_2=[str(i+1),str(k+1), str(im[k+1, i+1])]
                        cd_3=[str(i),  str(k+1), str(im[k+1,i])   ]   
                    except:
                        print('er')
                    makeTriangle(cd_1, cd_2, cd_3)

print('Done!')<jupyter_output>Done!
{'fraction_non_alphanumeric': 0.14772158237356034, 'fraction_numerical': 0.06484727090635954, 'mean_word_length': 3.503945885005637, 'pattern_counts': {'":': 0, '<': 18, '<?xml version=': 0, '>': 18, 'https://': 0, 'lorem ipsum': 0, 'www.': 1, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '4', 'dir': 'jupyter-structured-clean-dedup', 'id': '328005', 'license': 'MIT', 'n_tokens_mistral': 2056, 'n_tokens_neox': 2022, 'n_words': 235, 'path': '3d.ipynb', 'repo_name': 'AlekceyDan/Magic', 'size': '29513'}