Mayavi: kesalahan seg saat tangkapan layar plot 3D

Dibuat pada 5 Sep 2018  ·  7Komentar  ·  Sumber: enthought/mayavi

File ini: minimal_example_fail.py:

import faulthandler
faulthandler.enable()

from mayavi import mlab
mlab.test_plot3d()
mlab.screenshot()

gagal dengan tumpukan berikut:

$ python minimal_example_fail.py 
Fatal Python error: Segmentation fault

Current thread 0x00007f2c3107e740 (most recent call first):
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/tvtk/tvtk_base.py", line 568 in _wrap_call
  File "tvtk_classes/open_gl_render_window.py", line 79 in get_pixel_data
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/mayavi/tools/figure.py", line 348 in screenshot
  File "minimal_example_fail.py", line 15 in <module>
Segmentation fault (core dumped)

Untuk mereproduksi:

$ conda deactivate
$ conda create -n test python=3.6 numpy "pyqt>=5" matplotlib traits pyface traitsui
$ conda activate test
$ pip install vtk
$ pip install mayavi
$ python minimal_example_fail.py

@larsoner @agramfort

Komentar yang paling membantu

Bisakah Anda mengonfirmasi bahwa modifikasi ini memperbaiki banyak hal?

from pyface.api import GUI
from mayavi import mlab
mlab.test_plot3d()
GUI().process_events()
mlab.screenshot()

Atau shell one-liner:

python -c "from pyface.api import GUI; from mayavi import mlab; mlab.test_plot3d(); GUI().process_events(); mlab.screenshot()"

Pada dasarnya saya menduga masalahnya adalah bahwa loop acara tidak dimulai, sehingga sistem dalam keadaan tidak sepenuhnya dirender ketika tangkapan layar dicoba.

Kami mengatasi ini di PySurfer dengan memaksa rendering dengan trik GUI .

@prabhuramachandran dengan asumsi ini memperbaiki beberapa hal, mungkin ada beberapa cara untuk memeriksa apakah konteks OpenGL (atau hal lain) benar-benar valid sebelum mencoba tangkapan layar, dan jika tidak, gunakan trik/retas ini untuk memproses acara sehingga menjadi sah. Tampaknya agak rapuh/terlalu retas, jadi mungkin tidak sepadan.

Semua 7 komentar

Saya tidak dapat mereproduksi ini tetapi ada masalah lain yang saya hadapi. Masalahnya adalah bahwa jendela memiliki ukuran nol. Ini benar-benar masalah Qt karena mainloop tidak berjalan. Bisakah Anda mencoba ini pada sesi IPython dengan %gui qt dan lihat?

Apakah ini yang Anda maksud?

$ ipython 
Python 3.6.6 |Anaconda, Inc.| (default, Jun 28 2018, 17:14:51) 
Type 'copyright', 'credits' or 'license' for more information
IPython 6.4.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]: %gui qt

In [2]: %run ./minimal_example_fail.py
Qt WebEngine seems to be initialized from a plugin. Please set Qt::AA_ShareOpenGLContexts using QCoreApplication::setAttribute before constructing QGuiApplication.
Fatal Python error: Segmentation fault

Thread 0x00007fb7eef88700 (most recent call first):
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/threading.py", line 295 in wait
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/threading.py", line 551 in wait
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/IPython/core/history.py", line 829 in run
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/IPython/core/history.py", line 58 in needs_sqlite
  File "<decorator-gen-24>", line 2 in run
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/threading.py", line 916 in _bootstrap_inner
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/threading.py", line 884 in _bootstrap

Current thread 0x00007fb7f5710740 (most recent call first):
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/tvtk/tvtk_base.py", line 568 in _wrap_call
  File "tvtk_classes/open_gl_render_window.py", line 79 in get_pixel_data
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/mayavi/tools/figure.py", line 348 in screenshot
  File "/home/maximilien.chaumon/owncloud/Lab/Projects/CTPS/code/minimal_example_fail.py", line 15 in <module>
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/IPython/utils/py3compat.py", line 188 in execfile
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 2527 in safe_execfile
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/IPython/core/magics/execution.py", line 761 in run
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/IPython/core/magics/execution.py", line 775 in run
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/IPython/core/magic.py", line 187 in <lambda>
  File "<decorator-gen-60>", line 2 in run
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 2131 in run_line_magic
  File "<ipython-input-2-f514c016d8ee>", line 1 in <module>
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 2963 in run_code
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 2909 in run_ast_nodes
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 2785 in _run_cell
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/IPython/core/interactiveshell.py", line 2662 in run_cell
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/IPython/terminal/interactiveshell.py", line 476 in interact
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/IPython/terminal/interactiveshell.py", line 485 in mainloop
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/IPython/terminal/ipapp.py", line 356 in start
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/traitlets/config/application.py", line 658 in launch_instance
  File "/home/maximilien.chaumon/anaconda3/envs/mne/lib/python3.6/site-packages/IPython/__init__.py", line 125 in start_ipython
  File "/home/maximilien.chaumon/anaconda3/envs/mne/bin/ipython", line 11 in <module>
Segmentation fault (core dumped)

Saya mencoba ini di mesin ubuntu saya dengan VTK-8.1.1 (dari pip), Python 3.6.0, mayavi master, pyqt5 5.10.1 dan saya mendapatkan kesalahan tetapi tidak ada segfault. Kesalahan yang saya lihat adalah karena masalah yang lebih dalam bahwa tanpa toolkit UI berjalan, tidak ada jendela yang terbuka sehingga ukuran layar masih nol tetapi ini tidak segfault. Saya akan berupaya menyelesaikan masalah lain dengan ukurannya menjadi nol, tetapi sayangnya, saya tidak dapat mereproduksi segfault Anda.

Saya mengalami kesalahan segfault yang serupa jika tidak sama pada mesin OSX dan Linux. Saya dapat mempersempitnya menjadi komit mayavi potensial yang menyebabkan kesalahan.

fd9a515a9563d81a42b84514c1fb4ce5f81ac9a0 adalah komit buruk pertama
komit fd9a515a9563d81a42b84514c1fb4ce5f81ac9a0
Penulis: Prabhu Ramachandran [email protected]
Tanggal: Jum 3 Agustus 21:38:13 2018 -0400

Modify module manager to work with composite data.

This uses the dataset_adapter code from VTK and requires VTK >= 6.3.

:04000004000088baad8a26a7fc9d06fc95979441b4cd436e26962eca99efb8a7de37c75d3113fe194c16403b269d M mayavi

Akan melihat apakah saya dapat mereproduksi dengan minimal dari @dnacombo
Saya dapat mereproduksi menggunakan contoh minimal, tetapi hanya di kotak Linux saya.

Platform: Linux-4.15.0-34-generic-x86_64-with-debian-buster-sid
Python: 3.6.6 |Anaconda, Inc.| (default, 28 Jun 2018, 17:14:51) [GCC 7.2.0]
Dapat dieksekusi: /home/ktavabi/miniconda3/envs/mne/bin/python
CPU: x86_64: 24 core
Memori: 94.4 GB

mne: 0.17.dev0
numpy: 1.15.1 {blas=mkl_rt, lapack=mkl_rt}
sip: 1.1.0
matplotlib: 2.2.2 {backend=Qt5Agg}

sklearn: 0.19.2
nibabel: 2.4.0dev
mayavi: 4.7.0.dev0 4.6.0 {qt_api=pyqt5}
cupy: Tidak ditemukan
panda: 0.23.4
dipy: 0.15.0dev
vtk: 8.1.1

Di mesin OSX saya, saya mendapatkan kesalahan yang berbeda, tetapi tidak ada segfault.

Saya menemukan kesalahan segfault yang serupa/sama pada mesin yang berbeda tetapi 18.04 build yang sangat mirip dengan spesifikasi berikut:

Platform: Linux-4.15.0-36-generic-x86_64-with-debian-buster-sid
Python: 3.6.6 |Anaconda, Inc.| (default, 28 Jun 2018, 17:14:51) [GCC 7.2.0]
Dapat dieksekusi: /home/nordme/miniconda3/envs/mne/bin/python
CPU: x86_64: 12 core
Memori: 15,5 GB

mne: 0.17.dev0
numpy: 1.15.2 {blas=mkl_rt, lapack=mkl_rt}
sip: 1.1.0
matplotlib: 2.2.2 {backend=Qt5Agg}

sklearn: 0.20.0
nibabel: 2.3.0
mayavi: 4.7.0.dev0 {qt_api=pyqt5}
cupy: Tidak ditemukan
panda: 0.23.4
dipy: 0.14.0

Beralih ke rilis a19c710c3f61389d79ed05271584e44f9744f6bc 4.6.0 menyelesaikan kesalahan. LMK jika ingin melihat jejaknya.

Bisakah Anda mengonfirmasi bahwa modifikasi ini memperbaiki banyak hal?

from pyface.api import GUI
from mayavi import mlab
mlab.test_plot3d()
GUI().process_events()
mlab.screenshot()

Atau shell one-liner:

python -c "from pyface.api import GUI; from mayavi import mlab; mlab.test_plot3d(); GUI().process_events(); mlab.screenshot()"

Pada dasarnya saya menduga masalahnya adalah bahwa loop acara tidak dimulai, sehingga sistem dalam keadaan tidak sepenuhnya dirender ketika tangkapan layar dicoba.

Kami mengatasi ini di PySurfer dengan memaksa rendering dengan trik GUI .

@prabhuramachandran dengan asumsi ini memperbaiki beberapa hal, mungkin ada beberapa cara untuk memeriksa apakah konteks OpenGL (atau hal lain) benar-benar valid sebelum mencoba tangkapan layar, dan jika tidak, gunakan trik/retas ini untuk memproses acara sehingga menjadi sah. Tampaknya agak rapuh/terlalu retas, jadi mungkin tidak sepadan.

@larsoner - ya saya menemukan hal yang sama (lihat komentar saya sebelumnya) dan ingin memperbaikinya dengan bersih di mlab di beberapa titik. Saya berharap untuk mencapainya di beberapa titik. Juga, pada v 4.6.1, mlab memiliki fungsi process_ui_events yang memanggil peristiwa proses tanpa pengguna harus mengimpor GUI dll. (http://docs.enthought.com/mayavi/mayavi/auto/changes .html#id10).

Apakah halaman ini membantu?
0 / 5 - 0 peringkat

Masalah terkait

anntzer picture anntzer  ·  7Komentar

rambalachandran picture rambalachandran  ·  9Komentar

Kekushke picture Kekushke  ·  9Komentar

ktavabi picture ktavabi  ·  15Komentar

rahulporuri picture rahulporuri  ·  3Komentar