Beispiel #1
0
def api_VER(request, pk):
    try:
        ver = VER.objects.get(meta_imagem=int(pk))
        data_dict = json.loads(ver.data_ver)
        return JsonResponse(data_dict)
    except:
        list_imagens = seleciona_lista_arquivos(int(pk))
        im = import_file(list_imagens)
        rev = ps.metrics.representative_elementary_volume(im, npoints=1000)
        dados = [[v**(1 / 3), p]
                 for v, p in zip(rev.volume.tolist(), rev.porosity.tolist())]
        dados_json = json.dumps({'dados': dados})
        meta_imagem = MetaImagem.objects.get(id=int(pk))
        VER.objects.create(meta_imagem=meta_imagem, data_ver=dados_json).save()
        return JsonResponse({'dados': dados})
Beispiel #2
0
def api_perfil_porosidade(request, pk):
    try:
        pp = PerfilPorosidade.objects.get(meta_imagem=int(pk))
        data_dict = json.loads(pp.data_perfilporosidade)
        return JsonResponse(data_dict)
    except:
        list_imagens = seleciona_lista_arquivos(int(pk))
        im = import_file(list_imagens)
        meta_imagem = MetaImagem.objects.get(id=int(pk))

        dados = [[i.sum() / np.prod(i.shape), pos]
                 for pos, i in enumerate(im.T)]
        dados_json = json.dumps({'perfil_porosidade': dados})
        PerfilPorosidade.objects.create(
            meta_imagem=meta_imagem, data_perfilporosidade=dados_json).save()
        return JsonResponse({'perfil_porosidade': dados})
Beispiel #3
0
    def post(self, request, *args, **kwargs):
        data = request.POST
        user = request.user
        meta_imagem_id = int(data['meta_imagem'])
        metodo_segmentacao = data['metodo_segmentacao']

        meta_imagem = MetaImagem.objects.get(id=meta_imagem_id)
        list_imagens = seleciona_lista_arquivos(meta_imagem_id)
        im_seg = segmenta_imagem(list_imagens, metodo_segmentacao)
        meta_imagem_seg = cria_meta_imagem_segmentada(user, meta_imagem,
                                                      metodo_segmentacao,
                                                      im_seg)
        salvar_imagens_segmentadas(metodo_segmentacao, im_seg, list_imagens,
                                   meta_imagem_seg)

        return redirect(reverse('list_image'))
Beispiel #4
0
def api_curvaretencao(request, pk):
    try:
        cr = CurvaRetencao.objects.get(meta_imagem=int(pk))
        data_dict = json.loads(cr.data_curvaretencao)
        return JsonResponse(data_dict)
    except:
        list_imagens = seleciona_lista_arquivos(int(pk))
        im = import_file(list_imagens)
        meta_imagem = MetaImagem.objects.get(id=int(pk))
        resolution = float(meta_imagem.resolucao
                           ) * 10**-6  # resolução que a amostra foi escaneada

        mip = ps.filters.porosimetry(im, sizes=25)
        data = ps.metrics.pore_size_distribution(mip,
                                                 bins=10,
                                                 log=True,
                                                 voxel_size=resolution)
        dados = [[r, s] for r, s in zip(data.logR, data.satn)]
        dados_json = json.dumps({'curva_retencao': dados})
        CurvaRetencao.objects.create(meta_imagem=meta_imagem,
                                     data_curvaretencao=dados_json).save()
        return JsonResponse({'curva_retencao': dados})
Beispiel #5
0
def api_permeabilidade(request, pk):
    try:
        permeabilidade = Permeabilidade.objects.get(meta_imagem=int(pk))
        return JsonResponse({'dados': permeabilidade.permeabilidade})
    except:
        list_imagens = seleciona_lista_arquivos(int(pk))
        im = import_file(list_imagens)
        meta_imagem = MetaImagem.objects.get(id=int(pk))

        resolution = float(meta_imagem.resolucao
                           ) * 10**-6  # resolução que a amostra foi escaneada
        net = ps.networks.snow_n(im=im, voxel_size=resolution)
        proj = op.Project()
        file_name = meta_imagem.descricao

        pn = op.network.GenericNetwork(
            name=file_name, project=proj
        )  # Esta classe genérica contém a principal funcionalidade usada por todas as redes
        pn.update(net)  # Preenche 'pn' com dados de 'net'

        h = pn.check_network_health()
        op.topotools.trim(network=pn, pores=h['trim_pores'])

        pn.add_model(propname='throat.endpoints',
                     model=op.models.geometry.throat_endpoints.spherical_pores)
        pn.add_model(propname='throat.conduit_lengths',
                     model=op.models.geometry.throat_length.conduit_lengths)
        pn.add_model(propname='pore.area',
                     model=op.models.geometry.pore_surface_area.sphere)

        mercurio = op.phases.Mercury(
            network=pn
        )  # cria fase de mercurio (geralmente usado em experimentos de porosimetria)
        geo = op.geometry.GenericGeometry(network=pn,
                                          pores=pn.Ps,
                                          throats=pn.Ts)
        phys_mercurio = op.physics.Standard(
            network=pn, phase=mercurio,
            geometry=geo)  # atribui a física do modelo
        phys_mercurio.add_model(
            propname='throat.hydraulic_conductance',
            model=op.models.physics.hydraulic_conductance.hagen_poiseuille)

        # Algoritmo de simulação
        perm = op.algorithms.StokesFlow(network=pn, project=proj)
        perm.setup(phase=mercurio)

        # Condições de contorno
        pTop = 10
        pBottom = 0

        perm.set_value_BC(pores=pn.pores('top'), values=pTop)  # pressão no top
        perm.set_value_BC(pores=pn.pores('bottom'),
                          values=pBottom)  # pressão na base
        perm.run()
        mercurio.update(perm.results())

        Q = perm.rate(pores=pn.pores('bottom'), mode='group')
        A = (im.shape[0] * im.shape[1]) * resolution**2
        L = im.shape[2] * resolution
        mu = mercurio['pore.viscosity'].max()
        delta_P = pBottom - pTop
        K = (Q * L * mu / (A * delta_P)) / 0.98e-12 * 1000
        Permeabilidade.objects.create(meta_imagem=meta_imagem,
                                      permeabilidade=K[0]).save()

        return JsonResponse({'permeability': K[0]})
import dash
import dash_html_components as html
import imageio
from dash_slicer import VolumeSlicer

from apps.imagens.dash_app.utilidades.import_imagem import seleciona_lista_arquivos, import_file

app = dash.Dash(__name__, update_title=None)

list_imagens = seleciona_lista_arquivos(38)
im = import_file(list_imagens)
slicer = VolumeSlicer(app, im)
app.layout = html.Div([slicer.graph, slicer.slider, *slicer.stores])

if __name__ == "__main__":
    app.run_server(debug=True, dev_tools_props_check=False)
Beispiel #7
0
def update_histogram(pos, meta_image_id):
    list_imagens = seleciona_lista_arquivos(meta_image_id)
    im = import_file(list_imagens)
    img = im[pos][0]
    fig_hist = px.histogram(img.ravel())
    return fig_hist
Beispiel #8
0
def update_figure(pos, meta_image_id):
    list_imagens = seleciona_lista_arquivos(meta_image_id)
    im = import_file(list_imagens)
    img = im[pos]
    fig = px.imshow(img, binary_string=True)
    return fig