Closed zvezdochiot closed 12 months ago
@zvezdochiot say:
в конкретно используемом Qt смотреть надо поддержку форматов и библиотек
А как в Qt эта поддержка работает? Саму Qt можно собирать с ключами "использовать системные libjpeg, libpng, libtiff". Без ключей она собирается с теми версиями, которые идут в комплекте - видимо, старыми и неполными. А исходные скрипты ST собирают Qt с ключами. Те плагины Qt, которые в результате в папке imageformats лежат - они зависят от этих библиотек? Прямых ссылок на dll оттуда нет. Если в них статически код из библиотек при сборке Qt забран - получается, надо еще и саму Qt пересобирать потом?
@plzombie say:
кто-то жаловался, что у него в сборке tiff с old-jpeg не работает
А где проблемный файл утянуть можно? Я когда пробовал разницу между libtiff с подключенной и отключенной libdeflate увидеть - не смог. То, что GIMP со сжатием deflate пишет, ST открывает независимо, была libdeflate подключена, или нет.
Qt у меня официальная сборка, не знаю, что там. А насчёт tiff, там отдельный код для загрузки tiff в классе ImageLoader. Через TiffReader
@noobie-iv вот кто-то в одном из форков sta жаловался https://github.com/ScanTailor-Advanced/scantailor-advanced/issues/79 Насчёт libdeflate, я прочитал, это просто быстрая альтернатива zlib. Используется обе (zlib - когда нельзя использовать libdeflate). Можно с ней не собирать
@plzombie
вот кто-то в одном из форков sta жаловался
У меня сборка открывает тот файл. Но поддержка OldJPEG, видимо - заслуга libjpeg-turbo. Если ее удалить, в протоколе cmake отчет о поддержке пропадает, но вместе с самим форматом JPEG. Возможно, оригинальный libjpeg так не умеет. Или не умел до определенной версии. Или там тоже галочка Вкл/Выкл есть.
это просто быстрая альтернатива zlib
Да кто ж их разберет. Например, у GIMP при экспорте это два разных пункта. Впрочем, файлы читаются при обоих вариантах выбора без подключения libdeflate.
@zvezdochiot @noobie-iv Я посмотрел, у меня все Tiff файлы открывает. Включая файл old-jpeg из того тикета. Так что убрал надпись release.preview из файла установщика. Потом может быть добавлю все остальные возможные форматы
Так. Я не смогу собрать версию под ARM64, потому что boost отсутствует под arm64 под винду https://github.com/boostorg/build/issues/305
Всё что у меня получилось - это эти три файлика.
Но зато я допилил инсталлятор и скрипт, и теперь он детектит ARM. Позже протестирую всё детально и добавлю коммитом.
@plzombie say:
потому что boost отсутствует под arm64 под винду
Уход от boost
будет "слегка" проблематичным. Хотя что то с этим делать всё-равно надо. Большая часть варнингов при сборке относится именно к boost
, мол пользуется deprecated-метод и т.д. и т.п.
PS: Опубликовал новость на 32-битный релиз.
Только на xp она не заработает. Максимум под вистой. Под xp надо ещё qt5.6 собирать и отдельно пересобирать все библиотеки. Это больше для тех, у кого древний ноут с 2гб оперативки и кому не имеет смысла ставить 64bit винду
Вот такую плашечку показывает, когда пытаешься версию для x86-64 запустить на arm64. Правда, для Windows 11 это не актуально. Но я не знаю, как в nsis правильно определить версию винды. И Windows 11 on ARM у меня нет
@zvezdochiot я добавил установщик в менеджер пакетов winget (аналог apt в windows 10). Так что бинарники в установщике не трогаем, вообще никак, совсем. Пока только x86 версию, как заапрувят, добавлю и x64
@zvezdochiot Касательно ARM64. Я собрал без буста, он там нужен только для тестов, добавил отключение флагом -D STE_NO_TESTS=ON
. Но вот сама версия Qt под ARM64, которая у меня есть, не хочет компилироваться из коробки. Потому что там какой-то части утилит вообще нет, а другая написана на ARM64. Нужно либо компилировать прямо из-под ARM64, либо искать какой-то способ кросс-компиляции, я не знаю. Также поправил файлы cmake, чтобы собирались с Qt6 (как там код компилируется, я пока не знаю, не проверял).
Можешь скинуть мне исходники последней стабильной сборки Qt6? Я не могу найти на сайте, а Qt Maintenance Tool ожидаемо не работает
@plzombie say:
Можешь скинуть мне исходники последней стабильной сборки Qt6?
Ты нашёл у кого спросить. Я по Qt4 во всю скучаю, считай "с тоски вою", а ты мне про Qt6 рассказы рассказываешь. Даром он мне не дался. Знать его не знаю и знать не хочу. ;)
@zvezdochiot да можно, кстати, и под Qt4 сделать cmake-файлы по аналогии, но кода придётся больше менять. (Под Qt6, я надеюсь, и так скомпилируется). Мне этот Qt6 нужен только для того, что это единственная версия под винду на ARM десктопную, Остальные я буду собирать 5-й
https://download.qt.io/archive/qt/6.6/6.6.0/single/qt-everywhere-src-6.6.0.tar.xz
Я теперь и оттуда не могу ничего скачать. Всё. Qt забанил Россию. Буду выкачивать 700мб через Tor Browser 🤣
Буду выкачивать 700мб через Tor Browser
Да я так и делал. Вполне себе быстро заливается. Иногда и с гитхаба слить через тор быстрее выходит.
@zvezdochiot у тебя под линуксом тест .\generic_tests
проходит? Очень похоже на ошибки округления double. Я могу точность понизить, чтобы тест под виндой проходил. Но если под линуксом всё нормально, то надо разбираться, что там под виндой конкретно
Win10x64:
generic_tests: tests/TestQtPolygonIntersection.cpp(42): error: in "QtPolygonIntersectionTestSuite/test_QTBUG_48003": check !p1.intersected(p2).isEmpty() has failed
opencl_tests: acceleration/opencl/tests/TestAffineTransform.cpp(172): error: in "AffineTransformTestSuite/test_argb": check max_err <= 15 has failed [16 > 15]
@noobie-iv У меня opencl_tests проходит, странно. Только этот generic с intersection
А в STU у меня generic_tests проходит, можно еще с ним сравнить.
Для поддержки Qt6, видимо, надо добавить совместимость с C++17. Читаю вот эту вот статью, и ещё меньше хочется копаться в этом языке. Только Си, только хардкор
@plzombie :
./generic_tests
Running 11 test cases...
/media/buf/zvezdochiot/dists/git/ORGS/ORG.IPEP/GUI/scantailor-all/scantailor-experimental-w/src/tests/TestQtPolygonIntersection.cpp(42): error: in "QtPolygonIntersectionTestSuite/test_QTBUG_48003": check !p1.intersected(p2).isEmpty() has failed
*** 1 failure is detected in the test module "Master Test Suite"
./imageproc_tests
Running 101 test cases...
/media/buf/zvezdochiot/dists/git/ORGS/ORG.IPEP/GUI/scantailor-all/scantailor-experimental-w/src/imageproc/tests/TestSkewFinder.cpp(80): fatal error: in "SkewFinderTestSuite/test_positive_detection": critical check fabs(skew.angle() - 4.5) < 0.15 has failed
*** 1 failure is detected in the test module "Master Test Suite"
PS: Ветка под Qt6 по моему лишняя. Ты же пользуешь условую компиляцию, так что можно смело вносить в основную ветвь.
@zvezdochiot Я в этой ветке буду править код (не файлы cmake). Возможно, придётся какие-то другие классы Qt использовать, более новые. И чтоб точно ничего не поломать, лучше всё в отдельной ветке делать. А потом из ветки support-qt6 смерджу всё в main. В общем, моя цель - максимально ничего не поломать😉
Hi @plzombie .
Говорят на RU-BOARD, что опять алерт вылез, только уже на 32битку.
@zvezdochiot virustotal говорит, что майкрософт говорит, что норм. Скажи лучше, как такие баги править? Есть конструктор класса вида:
DespeckleResult(
QPointer<DespeckleView> const& owner,
IntrusivePtr<TaskCancelHandle> const& cancel_handle,
DespeckleState const& despeckle_state,
DespeckleVisualization const& visualization,
std::unique_ptr<DebugImagesImpl>& debug_images);
Есть код, его использующий Собственно, сам конструктор
DespeckleView::DespeckleResult::DespeckleResult(
QPointer<DespeckleView> const& owner,
IntrusivePtr<TaskCancelHandle> const& cancel_handle,
DespeckleState const& despeckle_state,
DespeckleVisualization const& visualization,
std::unique_ptr<DebugImagesImpl>& debug_images)
: m_ptrOwner(owner),
m_ptrCancelHandle(cancel_handle),
m_ptrDbg(debug_images),
m_despeckleState(despeckle_state),
m_visualization(visualization)
{
}
И вот ещё функция, создающая объект класса
return BackgroundExecutor::TaskResultPtr(
new DespeckleResult(
m_ptrOwner, m_ptrCancelHandle,
m_despeckleState, visualization, m_ptrDbg
)
);
Изначально там было std::auto_ptr<DebugImagesImpl> debug_images
. Я заменил на std::unique_ptr, так как std::auto_ptr отсутствует в C++17, и с Qt6 его не собрать. Было куча ошибок. Тогда я добавил передачу по ссылке std::unique_ptr<DebugImagesImpl>& debug_images
. Ошибка стала одна. Но зато какая...
[ 75%] Building CXX object src/filters/output/CMakeFiles/output.dir/DespeckleView.cpp.obj
DespeckleView.cpp
F:\NonOfMyBusiness\scantailor-experimental\scantailor-experimental-support-qt6\src\filters\output\DespeckleView.cpp(333): error C2280: "std::unique_ptr<DebugImagesImpl,std::default_delete<DebugImagesImpl>>::unique_ptr(const std::unique_ptr<DebugImagesImpl,std::default_delete<DebugImagesImpl>> &)": предпринята попытка ссылки на удаленную функцию
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\memory(3237): note: см. объявление "std::unique_ptr<DebugImagesImpl,std::default_delete<DebugImagesImpl>>::unique_ptr"
C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\MSVC\14.29.30133\include\memory(3237): note: "std::unique_ptr<DebugImagesImpl,std::default_delete<DebugImagesImpl>>::unique_ptr(const std::unique_ptr<DebugImagesImpl,std::default_delete<DebugImagesImpl>> &)": функция явно удалена.
И вот хрен ты разберёшь, что за функция там явно удалена
UPD: Там, оказывается, запрещён конструктор копирования. Но при этом объект std::unique_ptr можно вернуть из функции. Магия какая-то. В любом случае, разобрался и починил. Вроде бы ничего не сломал (потестил немного, кроме cli версии)
Hi @plzombie .
https://github.com/ImageProcessing-ElectronicPublications/scantailor-experimental/commit/b0f88c7d20b02fecb0642ff6ea217624cc2c172a в Debian 11, Qt5 как минимум компилится. Минимальные тесты на специально подобранном материале бзиков не показали. :+1:
О, прекрасно. Попробуй ещё интерфейс потыкать. Что всё открывается как надо. У меня вроде работало
Магия какая-то.
Это еще белая магия. А у меня вот - черная. Пытаюсь собрать STU.
Когда репозиторий клонирую через git clone, собранная программа глючит:
Но когда скачиваю zip - собирается как положено:
Исходники идентичны, отличаются только стилем перевода строки: у архива LF, у клона CRLF. CRаные LF! Целый день убил, пока причину нашел.
Hi @noobie-iv .
А в настройках Git разве нельзя эту core.autocrlf
прописать? Хотя он по-моему только в истории git будет хранить LF, а в текущем состоянии CRLF. Так что хз, как это победить.
@plzombie say:
Попробуй ещё интерфейс потыкать.
Так я вроде потыкал на своих отобранных тестовых страницах.
@zvezdochiot у меня вопрос немного не по теме. Как ты в debian 11/12 ставишь qt5? У меня qt creator его не видит, cmake тоже. Вот такое вот полотно
qtbase5-dev естественно установлен
@plzombie .
apt-file search /usr/share/applications/linguist-qt5.desktop
qttools5-dev-tools: /usr/share/applications/linguist-qt5.desktop
Как вариант:
sudo apt install qttools5-dev qttools5-dev-tools
PS:
apt search qttools5
Сортировка… Готово
Полнотекстовый поиск… Готово
qttools5-dev/oldstable,now 5.15.2-5 amd64 [установлен]
Qt 5 tools development files
qttools5-dev-tools/oldstable,now 5.15.2-5 amd64 [установлен, автоматически]
инструменты разработчика на Qt 5
qttools5-doc/oldstable,now 5.15.2-5 all [установлен, автоматически]
Qt 5 tools documentation
qttools5-doc-html/oldstable 5.15.2-5 all
Qt 5 tools HTML documentation
qttools5-examples/oldstable 5.15.2-5 amd64
Qt 5 tools examples
qttools5-private-dev/oldstable 5.15.2-5 amd64
Qt 5 tools private development files
CRLF. Так что хз, как это победить.
Пофиксил уже. Там в загрузке диалога при разборе ресурса захардкожены LF. Раз уж STEX - ранняя ветка STU, и проще всего фишки тырить из STU, а не писать с нуля, пусть тут будет для сведения, если кому собрать STU понадобится:
SettingsDialog.cpp 264: - QStringList tree_data = QString::fromUtf8((char const)tree_metadata.data(), tree_metadata.size()).split('\n'); 264: +QStringList tree_data = QString::fromUtf8((char const)tree_metadata.data(), tree_metadata.size()).split(QRegExp("\r?\n"));
@zvezdochiot Продублирую сдесь, а то оригинальный коммент удалился после git rebase main
.
support-qt - это ветка для поддержки сборки под Qt6. В итоге будет собираться и под Qt5 (по умолчанию), и под Qt6 (с флагом -D ST_USE_QT6=ON). Я её потом солью с main, эту ветку. Просто чтобы случайно тебе релиз не испортить какими-нибудь багами, которые вылезут во время портирования, создал отдельную ветку. А так да, я всегда тестирую, что под Qt5 тоже компилируется.
А сама поддержка Qt6 нужна, чтобы сделать уже поддержку сборки под arm под винду
@plzombie say:
Просто чтобы случайно тебе релиз не испортить
Ну не знаю. Была бы одна ветка, то "поломку" бы сразу, или почи сразу обнаружили бы. Ну да ладно, считаешь, что надо перестраховаться, знать так и делай. А с мержем потом как-нибудь разберёмся.
Я все изменения из main сразу тяну в support-qt6 через git rebase main
. Так что их перетестировать не придётся, только изменения по qt6
Я вроде как сделал сборку, но у меня теперь тесты не проходит в файле src/imageproc/tests/TestScale.cpp
@zvezdochiot там было 6 тестов. 4 из них были закоменчены, видимо, потому, что они валились. Сейчас под qt5 всё нормально (в смысле, те 2 нормально отрабатывают), под qt6 валится всё
Код я в том файле вообще не трогал, который растягивает изображения
@zvezdochiot Ещё я заметил. Ещё в релизе 10.11, в котором я вообще ничего не правил, игнорируется иногда значение поворота
Я не понимаю, откуда эти поля появились. Надо ещё в "Полезная область" добавить кнопку 100%
@zvezdochiot @noobie-iv Вот последние сборки из ветки под qt6 https://disk.yandex.ru/d/snhL1yq8PuGvzQ Коммит morphology ON/OFF я туда не включал. Можно потестировать. Без понятия, если честно, почему чб изображение проваливает тест на qt6. Либо это из-за другой версии стандарта c++(17 против 11), либо изначально тест кривой был (поэтому там 4/6 тестов и были закомменчены)
Что за пакет qt5-linguist в дебиане? Я не могу собрать в debian 10, в альте всё норм, в дебиане вообще нет сочетания qt5 и linguist
А по поводу компиляции под arm под винду, ради чего это всё и затевалось. Вот такие вот тут вопросы на форуме, без ответов https://forum.qt.io/topic/133602/help-working-on-windows-arm-devices-qt6 Блин, идиоту очевидно, что у майкрософт есть тулзы для кросскомпиляции под арм. Я ими с самого начала пользовался. Где такие же тулзы от создателей Qt?
https://www.qt.io/blog/qt-for-windows-on-arm короче, мне надо ставить вижуалстудию и полноценный qt на ноут. А на ноуте у меня всего 64gb и всё уже забито под завязку всякими утилитами и прочим. А искать здесь или заказывать из-за рубежа новый ноут ради хобби мне как-то не с руки. Да и x86 версия прекрасно работает на Windows 10 for ARM. Печально всё это
@plzombie say:
игнорируется иногда значение поворота
Выложи куда-нибудь и фотки и проект. Посмотрю в чём сыр бор. Возможно ты используешь режим выравнивания между фотками (шаг 5.Margins
).
PS: Перед обработкой фоток в ST рекомендую применять libjpegqs.
@plzombie say:
Что за пакет qt5-linguist в дебиане?
qttools5-dev-tools
(ну и желателен qttools5-dev
).
PS: Для Qt6, соответственно, должно быть qttools6
, но может такого и вообще не быть. Хз.
@zvezdochiot 1) положил в папку к экзешникам архив stetest.zip 2) Какой qt6 в десятом дебиане, ты что? Я скорее в 4 поверю)
@zvezdochiot я там каким-то образом на вкладке "Полезная область" выбрал больше, чем вообще есть на изображении. Так что это не поворот скорее всего
@plzombie say:
каким-то образом на вкладке "Полезная область" выбрал больше, чем вообще есть на изображении.
Скопировал с другой == "Применить ко всем".
Да, какая-то фигня на стадии select-content
<page id="16">
<params mode="manual">
<content-box>
<top x="2013.241609671571" y="-17.33817780457677"/>
<bottom x="1986.758390328428" y="3017.338177804577"/>
<left x="-12.93699998435387" y="1482.43336493001"/>
<right x="4012.936999984353" y="1517.56663506999"/>
</content-box>
<content-size-px height="3034.676355609154" width="4025.873999968707"/>
<dependencies>
<transform-fingerprint>8ecc0176cd54e95f626407394431e97689d689c9</transform-fingerprint>
</dependencies>
</params>
</page>
@plzombie say:
каким-то образом на вкладке "Полезная область" выбрал больше, чем вообще есть на изображении.
Скопировал с другой == "Применить ко всем".
Там они все 4000х3000, и я их руками растягивал. Вообще, всё-таки, нужна кнопка 100% или вроде того
Hi @plzombie , @trufanov-nok .
cmake
, вносите смело. Для повышения шансов на успех прилагаю свои сборочные файлы: scantailor-experimental-0.2023.07.27-build.zip (Linux devuan-zvezdochiot 5.10.0-23-amd64 #1 SMP Debian 5.10.179-1 (2023-05-12) x86_64 GNU/Linux
)