Forum

Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.


Messages - aldanstar

Pages: 1 2 [3] 4 5 ... 10
31
В новой версии появились проблемы с собственноручно сделанным модулем. Точнее с импортом объектов QTCore.

2017-05-03 18:18:11 Traceback (most recent call last):
2017-05-03 18:18:11   File "C:/Users/astarovo/AppData/Local/Agisoft/PhotoScan Pro/scripts/KernScanTools.py", line 5, in <module>
2017-05-03 18:18:11     from kstools.kerntools import alignKern
2017-05-03 18:18:11   File "C:\Users\astarovo\AppData\Local\Agisoft\PhotoScan Pro\scripts\kstools\kerntools.py", line 10, in <module>
2017-05-03 18:18:11     from PySide.QtCore import QObject, SIGNAL
2017-05-03 18:18:11   File "E:\Program Files\Agisoft\PhotoScan Pro\python\lib\site-packages\qtconsole\qt_loaders.py", line 56, in load_module
2017-05-03 18:18:11     """ % (fullname, loaded_api()))
2017-05-03 18:18:11 ImportError:
2017-05-03 18:18:11     Importing PySide disabled by QtConsole, which has
2017-05-03 18:18:11     already imported an incompatible Qt Binding: pyside2

Что делать? Что изменить?
Смотрю тут PySide2, но там нет нужных мне объектов.
Попробую "E:\Program Files\Agisoft\PhotoScan Pro\python>python -m pip install pyside", надеюсь ничего не сломается. Но все же это танец с бубном

32
Сейчас уже не могу сказать. Я переустановил Windows, установил заново Photoscan 1.3.1. теперь при вводе ключа, он ругается, что тот якобы уже используется. Что за дела? Машина та же, что и была. До переустановки винды обновлялся до 1.3 может даже 1.3.1 все было нормально

33
Other Languages / вырубается видеокарта с CUDA
« on: April 08, 2017, 01:46:17 PM »
С новым режимом CUDA вырубается видеокарта (Quadro 4000) при построении плотного облака точек.

34
Используйте Python. С ним можно все. Я всегда использую для автоматизации процесса.

35
Other Languages / Re: Проблемы с Model.volume() и Model.area()
« on: October 01, 2016, 10:15:37 PM »
Спасибо. Проверил удаленно, добавил в пакетный экспорт, все работает. Создал специальную кнопку в моих инструментах, мало ли.

36
Other Languages / Re: Проблемы с Model.volume() и Model.area()
« on: October 01, 2016, 04:34:25 PM »
Как просили, отправил ссылку на укороченный проект на нашем ftp. Там же папка Agisoft из AppData c моим набором инструментов.

37
Other Languages / Re: Проблемы с Model.volume() и Model.area()
« on: October 01, 2016, 04:13:28 PM »
None - это не проверка 0 объема, а проверка его наличия вообще. Проверка на герметичность идет через vol!=0.
Попробовал вашу функцию (там только не vol,а volume), вот итог из консоли:
>>> PhotoScan.app.document.chunk.model.vol()
2016-10-01 16:05:33 Traceback (most recent call last):
2016-10-01 16:05:33   File "<console>", line 1, in <module>
2016-10-01 16:05:33 AttributeError: 'PhotoScan.Model' object has no attribute 'vol'
>>> PhotoScan.app.document.chunk.model.volume()
2016-10-01 16:05:48 Finished processing in 0.296 sec (exit code 1)
2016-10-01 16:05:48 46992.73390448518 - это через функцию
2016-10-01 16:06:21 Finished processing in 0.41 sec (exit code 1)
2016-10-01 16:06:21 Area: 7739.05  - это через меню
2016-10-01 16:06:21 Volume: 47020 - это через меню
>>> PhotoScan.app.document.chunk.model.volume() - нет результатов
2016-10-01 16:06:40 Finished processing in 0.427 sec (exit code 1)
2016-10-01 16:06:40 Area: 7653.5 - это через меню
2016-10-01 16:06:40 Volume: 47465.4 - это через меню
>>> PhotoScan.app.document.chunk.model.volume() - нет результатов


Как видно для CORE27(это название блока) расчитал и так и так, но для CORE29 расчитал только с помощью меню, а PhotoScan.app.document.chunk.model.volume() - неработает

38
Other Languages / Re: Проблемы с Model.volume() и Model.area()
« on: October 01, 2016, 03:54:12 PM »
Немножко переделал код и сделал пакетный экспорт, но СУТЬ проблемы НЕ ИЗМЕНИЛАСЬ.
Если вычислить не удается то vol и arимеют значение None. В этом случае записи у меня просто не будет. Повторюсь: при этом вычисления через соответствующий пункт меню программы идет без проблем. Ошибок в консоли нет.

Code: [Select]
class lineParam(object):   
    def __init__(self, object):
        self.chunk = object
        print(u"Экспорт размеров")
       
    def export(self):

        try:
            print(u"Для одного блока")
            path = PhotoScan.app.getExistingDirectory(u"Сохранить параметры")
            paramFile = open(path+"\\"+str(self.chunk.label).split('_', 1)[0]+"_PARAMETERS.txt", 'w+')
            mod=self.chunk.model
            T = self.chunk.transform.matrix
            saveVol=False
            xo=self.lenghByAxis(mod,T,0)
            print(u"xo " +str(xo))
            yo=self.lenghByAxis(mod,T,1)
            print(u"yo " +str(yo))
            zo=self.lenghByAxis(mod,T,2)
            print(u"zo " +str(zo))
           
            try:
                vol=mod.volume()
                ar=mod.area()
                if  vol==0:
                    PhotoScan.app.messageBox(u"Внимание! Объем равен нулю. Проверьте герметичность модели.")
                if vol!=None or ar!=None:
                    saveVol=True
            except IOError:
                print(u"Не могу вычичслить объем и площадь")

            if saveVol==True:
                paramFile.write("V= "+str(round(vol, 4)).replace(".", ",")+" mm^3")
                paramFile.write('\n')
                paramFile.write("S= "+str(round(ar, 4)).replace(".", ",")+" mm^2")
                paramFile.write('\n')
            paramFile.write("x= "+str(round(xo, 4)).replace(".", ",")+" mm")
            paramFile.write('\n')
            paramFile.write("y= "+str(round(yo, 4)).replace(".", ",")+" mm")
            paramFile.write('\n')
            paramFile.write("z= "+str(round(zo, 4)).replace(".", ",")+" mm")
            paramFile.write('\n')
           
            paramFile.close()
           
            print(u"Параметры сохранены")
        except IOError:
            print(u"Не удалось сохранить параметры")
           
    def allexport(self):

        try:

            print(u"Для всех блоков")
            doc = PhotoScan.app.document
            app = QApplication.instance()
            parent = app.activeWindow() 
           
            path = PhotoScan.app.getExistingDirectory(u"Сохранить параметры")
            paramFile = open(path+"\\"+"ALL_PARAMETERS.csv", 'w+')

            #dialog = progressDialog(u"Статус экспорта",parent)
            #dialog.resize(300, 100)
           
            print(u"Создан прогрессбар")

            paramFile.write("Номер образца;X (мм);Y (мм);Z (мм);Объем (мм^3);Площадь (мм^2)")
            paramFile.write('\n')

            for c in doc.chunks:
               
                print(u"Блок " + str(c.label) + u" это " + str(doc.chunks.index(c)+1) +u" блок из " + str(len(doc.chunks)))
                mod=c.model
                T = c.transform.matrix
                xo=self.lenghByAxis(mod,T,0)
                print(u"xo " +str(xo))
                yo=self.lenghByAxis(mod,T,1)
                print(u"yo " +str(yo))
                zo=self.lenghByAxis(mod,T,2)
                print(u"zo " +str(zo))
                saveVol=False
                try:
                    vol=mod.volume()
                    ar=mod.area()
                    if  vol==0:
                        PhotoScan.app.messageBox(u"Внимание! Объем равен нулю. Проверьте герметичность модели.")
                    if vol!=None or ar!=None:
                        saveVol=True
                except IOError:
                    print(u"Не могу вычичслить объем и площадь")
                paramFile.write(str(c.label).split('_', 1)[0]+";"+str(round(xo, 4)).replace(".", ",")+";"+str(round(yo, 4)).replace(".", ",")+";"+str(round(zo, 4)).replace(".", ",")+";")
                if saveVol==True:
                    paramFile.write(str(round(vol, 4)).replace(".", ",")+";"+str(round(ar, 4)).replace(".", ","))
                paramFile.write('\n')

            print(u"Параметры сохранены")

            paramFile.close()
        except IOError:
            print(u"Не удалось сохранить параметры")
 


    def lenghByAxis(self, mod,T, axis):

        coordinate=mod.vertices[0].coord

        coordinate=T.mulv(coordinate)

       
        min = max = coordinate[axis]
           
        for v in mod.vertices:
            coordinate=v.coord

            coordinate=T.mulv(coordinate)
            if min>coordinate[axis]:
                min = coordinate[axis]
            if max<coordinate[axis]:
                max = coordinate[axis]

        dif = max - min
        return dif

Вот данные CSV файла после пакетного сохранения параметров (керна):

Номер образца;X (мм);Y (мм);Z (мм);Объем (мм^3);Площадь (мм^2)
CORE002;64,7449;31,539;31,6422;
CORE001;64,2366;31,03;32,2758;
CORE003;63,3981;31,7091;31,6344;
CORE005;63,6054;31,3906;32,1512;
CORE006;64,1096;31,076;31,0631;
CORE009;63,2876;30,8854;31,1099;
CORE0011;63,3418;31,0886;31,0402;
CORE0012;63,2782;31,3693;31,1193;
CORE008;63,257;30,8895;30,9089;46610,167;7546,184
CORE0013;63,9342;31,9923;31,1513;46989,2956;7576,7966
CORE016;65,3816;32,2372;31,5789;
CORE017;64,6497;31,6619;31,6181;
CORE019;64,2848;31,5466;31,4941;
CORE020;63,8163;31,1824;31,2356;
CORE021;64,2268;31,5619;31,391;
CORE022;63,6909;31,2951;31,1655;
CORE023;63,7445;31,1891;31,216;
CORE026;63,3914;31,0154;30,9986;46934,507;7580,8991
CORE027;63,2671;30,9806;30,9302;46992,7339;7547,7587
CORE028;63,3117;31,0575;31,0525;
CORE029;63,5057;31,3401;31,2398;
CORE030;63,5713;31,2345;31,3314;
CORE031;64,2091;31,3774;31,1929;
CORE32;64,4755;31,3146;31,2655;
CORE25;53,1608;31,0337;30,9371;
CORE033;63,9241;31,0472;31,1537;
CORE034;63,4707;31,1532;31,4789;
CORE035;63,7535;31,0671;31,3062;
CORE036;63,8754;31,4902;31,5228;
CORE037;63,0556;31,0322;31,2188;
CORE038;63,3819;31,3655;31,252;
CORE039;58,2436;31,1316;30,9979;
CORE040;63,0122;31,1409;31,2275;
CORE041;63,0396;31,0196;31,1487;
CORE045;63,0355;30,9402;31,03;
CORE046;62,971;31,0153;30,9464;
CORE049;63,7335;31,135;31,2315;
CORE051;63,3826;31,035;31,1308;
CORE053;63,403;31,2063;31,1389;
CORE054;63,2347;30,9507;30,9675;
CORE055;63,2905;31,2616;30,9598;
CORE056;62,9993;30,9386;31,2494;

39
Other Languages / Проблемы с Model.volume() и Model.area()
« on: October 01, 2016, 12:23:06 PM »
Здравствуйте, Алексей
Функция Model.volume() и Model.area() работают от раза к разу, т.е. срабатывает не всегда, хотя встроенным инструментом программы вычисляется. Написал скрипт для сохранения линейных компонент, а вот с площадью и объемом беда из-за данного бага.


vol=mod.volume()
ar=mod.area()


Code: [Select]
class lineParam(object):   
    def __init__(self, object):
        self.chunk = object
        print(u"Экспорт размеров")
       
    def export(self):   
        try:
            mod=self.chunk.model
            T = self.chunk.transform.matrix
            saveVol=False
            print(u"ar " +str(ar))
            xo=self.lenghByAxis(mod,T,0)
            print(u"xo " +str(xo))
            yo=self.lenghByAxis(mod,T,1)
            print(u"yo " +str(yo))
            zo=self.lenghByAxis(mod,T,2)
            print(u"zo " +str(zo))
           
            try:
                vol=mod.volume()
                ar=mod.area()
                if  vol==0:
                    PhotoScan.app.messageBox(u"Внимание! Объем равен нулю. Проверьте герметичность модели.")
                saveVol=True
            except IOError:
                print(u"Не могу вычислить объем и площадь")
            path = PhotoScan.app.getExistingDirectory(u"Сохранить параметры")
            paramFile = open(path+"\\"+str(self.chunk.label).split('_', 1)[0]+"_PARAMETERS.txt", 'w+')
            if saveVol==True:
                paramFile.write("V= "+str(round(vol, 4))+" mm^3")
                paramFile.write('\n')
                paramFile.write("S= "+str(round(ar, 4))+" mm^2")
                paramFile.write('\n')
            paramFile.write("x= "+str(round(xo, 4))+" mm")
            paramFile.write('\n')
            paramFile.write("y= "+str(round(yo, 4))+" mm")
            paramFile.write('\n')
            paramFile.write("z= "+str(round(zo, 4))+" mm")
            paramFile.write('\n')
            paramFile.close()
            print(u"Параметры сохранены")
        except IOError:
            print(u"Не удалось сохранить параметры")


    def lenghByAxis(self, mod,T, axis):

        coordinate=mod.vertices[0].coord

        coordinate=T.mulv(coordinate)

       
        min = max = coordinate[axis]
           
        for v in mod.vertices:
            coordinate=v.coord

            coordinate=T.mulv(coordinate)
            if min>coordinate[axis]:
                min = coordinate[axis]
            if max<coordinate[axis]:
                max = coordinate[axis]

        dif = max - min
        return dif

40
Other Languages / Re: Масштаб ортофотоплана
« on: May 12, 2015, 12:43:59 PM »
Оперируя цифровыми снимками или цифровой моделью рельефа, корректнее говорить о пространственном разрешении. А именно о тех 10 см на пиксель. ПР можно узнать после привязки и загрузки готовых растров и GRID в QGIS или ArcGIS и посмотреть свойства источника.

41
Смотря какие БПЛА. Если говорить о профессиональных  типа Trimble UX5 там стоят двухчастотники с работой в режиме RTK (получение поправок от базовой станции) или PPK (чистые сырые с постобработкой). На мультикоптерах и квадрокоптерах типа Фантомов стоят кодовые (как в обычном смартфоне или вынесенной антеной для ПК), точность у них соответственно в разы ниже, против субсантиметровой или дециметровой на геодезических аппаратах.  Но в локалке (относительно площадки) они вполне держат до 0,5 метра. Такие GPS нужны по большей части лишь для контроля полета и маршрута. Просто даже при съемке они плохо синхронизированны с моментом съемки и часто значения невязки доходят до 3 метров.

42
Спасибо, Алексей.
Но как создать(генерировать) цилиндр (без крышек) с UV(цилиндрическим). Возможно ли это через встроенные библиотеки (PySide OpenGL)? Если нет, то какие библиотеки посоветуете и как их встроить в директорию с Python Photoscan?
Еще один вопрос/предложение: Есть ли возможность импортировать маски с учетом расстояния до модели спереди и сзади для каждого снимка (или карт глубины). Это связанно с диапазоном фокуса и запеканием текстур. Модель строится и в дефокусе, но в дальнейшем, при запекании, дефокусные зоны дают размытость текстуры.
С уважением, Александр.

Здравствуйте, Александр,

При помощи встроенного модуля PySide возможно создание диалоговых окон с чекбоксами, радио-баттонами, выпадающими списками и т.п.
Некоторые примеры в нашей Wiki демонстрируют эту функциональность: http://wiki.agisoft.com/wiki/Python

43
Здравствуйте,
Написал следующее. Вроде получилось.

def alignByVector(V):
    #V=PhotoScan.Vector([1.2,1,2])
    T = chunk.transform.matrix
    T1=PhotoScan.Vector([T[0,0],T[0,1],T[0,2]])
    T2=PhotoScan.Vector([T[1,0],T[1,1],T[1,2]])
    T3=PhotoScan.Vector([T[2,0],T[2,1],T[2,2]])

    length=math.sqrt(V[0]*V[0]+V[1]*V[1]+V[2]*V[2])
    V1 = PhotoScan.Vector([V[0],V[1],V[2]])/length
    V2 = firstOrthoVeactor(V1)
    V3 = secondOrthoVeactor(V1, V2)


    D1=degrBVect(T1, V1)
    D2=degrBVect(T2, V2)
    D3=degrBVect(T3, V3)
    print(V1)
    print(V2)
    print(V3)
    print(scalar(V1,V2))
    print(scalar(V1,V3))
    print(scalar(V2,V3))

    T = chunk.transform.matrix
    C = chunk.region.center
    M = PhotoScan.Matrix([[V1[0],V1[1],V1[2],C[0]],[V2[0],V2[1],V2[2],C[1]],[V3[0],V3[1],V3[2],C[2]],[0,0,0,1]])

    if chunk.transform:
       s = math.sqrt(T[0,0]*T[0,0] + T[0,1]*T[0,1] + T[0,2]*T[0,2])
       S = PhotoScan.Matrix( [[s, 0, 0, 0], [0, s, 0, 0], [0, 0, s, 0], [0, 0, 0, 1]] )
    else:
       S = PhotoScan.Matrix( [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]] )

    R = M * T.inv()

    chunk.transform.matrix = R* T* S

alignByVector(meanP)


С уважением,
Александр.

44
Написал так:

    T = chunk.transform.matrix
    C = chunk.region.center
    M = PhotoScan.Matrix([[V1[0],V1[1],V1[2],C[0]],[V2[0],V2[1],V2[2],C[1]],[V3[0],V3[1],V3[2],C[2]],[0,0,0,1]])

    if chunk.transform:
       s = math.sqrt(T[0,0]*T[0,0] + T[0,1]*T[0,1] + T[0,2]*T[0,2])
       S = PhotoScan.Matrix( [[s, 0, 0, 0], [0, s, 0, 0], [0, 0, s, 0], [0, 0, 0, 1]] )
    else:
       S = PhotoScan.Matrix( [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]] )

    R = M * T.inv()
    T = PhotoScan.Matrix( [[R[0,0],R[0,1],R[0,2], C[0]],[R[1,0],R[1,1],R[1,2],C[1]],[R[2,0],R[2,1],R[2,2],C[2]], [0,0,0,1]])

    chunk.transform.matrix = S * T.inv()

Тоже не правильно. Не выравнивает.

Заранее спасибо

45
Написал так:

    T = chunk.transform.matrix
    C = chunk.region.center
    M = PhotoScan.Matrix([[V1[0],V1[1],V1[2],C[0]],[V2[0],V2[1],V2[2],C[1]],[V3[0],V3[1],V3[2],C[2]],[0,0,0,1]])

    if chunk.transform:
       s = math.sqrt(T[0,0]*T[0,0] + T[0,1]*T[0,1] + T[0,2]*T[0,2])
       S = PhotoScan.Matrix( [[s, 0, 0, 0], [0, s, 0, 0], [0, 0, s, 0], [0, 0, 0, 1]] )
    else:
       S = PhotoScan.Matrix( [[1, 0, 0, 0], [0, 1, 0, 0], [0, 0, 1, 0], [0, 0, 0, 1]] )

    R = M * T.inv()
    T = PhotoScan.Matrix( [[R[0,0],R[0,1],R[0,2], C[0]],[R[1,0],R[1,1],R[1,2],C[1]],[R[2,0],R[2,1],R[2,2],C[2]], [0,0,0,1]])

    chunk.transform.matrix = S * T.inv()

Тоже не правильно. Не выравнивает.

Заранее спасибо

Pages: 1 2 [3] 4 5 ... 10